mirror of
https://github.com/esphome/esphome.git
synced 2026-06-01 17:57:37 +08:00
API Noise logging (#2298)
This commit is contained in:
+1
-1
@@ -256,7 +256,7 @@ def show_logs(config, args, port):
|
|||||||
run_miniterm(config, port)
|
run_miniterm(config, port)
|
||||||
return 0
|
return 0
|
||||||
if get_port_type(port) == "NETWORK" and "api" in config:
|
if get_port_type(port) == "NETWORK" and "api" in config:
|
||||||
from esphome.api.client import run_logs
|
from esphome.components.api.client import run_logs
|
||||||
|
|
||||||
return run_logs(config, port)
|
return run_logs(config, port)
|
||||||
if get_port_type(port) == "MQTT" and "mqtt" in config:
|
if get_port_type(port) == "MQTT" and "mqtt" in config:
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,73 @@
|
|||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from aioesphomeapi import APIClient, ReconnectLogic, APIConnectionError, LogLevel
|
||||||
|
import zeroconf
|
||||||
|
|
||||||
|
from esphome.const import CONF_KEY, CONF_PORT, CONF_PASSWORD, __version__
|
||||||
|
from esphome.util import safe_print
|
||||||
|
from . import CONF_ENCRYPTION
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_run_logs(config, address):
|
||||||
|
conf = config["api"]
|
||||||
|
port: int = conf[CONF_PORT]
|
||||||
|
password: str = conf[CONF_PASSWORD]
|
||||||
|
noise_psk: Optional[str] = None
|
||||||
|
if CONF_ENCRYPTION in conf:
|
||||||
|
noise_psk = conf[CONF_ENCRYPTION][CONF_KEY]
|
||||||
|
_LOGGER.info("Starting log output from %s using esphome API", address)
|
||||||
|
zc = zeroconf.Zeroconf()
|
||||||
|
cli = APIClient(
|
||||||
|
asyncio.get_event_loop(),
|
||||||
|
address,
|
||||||
|
port,
|
||||||
|
password,
|
||||||
|
client_info=f"ESPHome Logs {__version__}",
|
||||||
|
noise_psk=noise_psk,
|
||||||
|
)
|
||||||
|
first_connect = True
|
||||||
|
|
||||||
|
def on_log(msg):
|
||||||
|
time_ = datetime.now().time().strftime("[%H:%M:%S]")
|
||||||
|
text = msg.message.decode("utf8", "backslashreplace")
|
||||||
|
safe_print(time_ + text)
|
||||||
|
|
||||||
|
async def on_connect():
|
||||||
|
nonlocal first_connect
|
||||||
|
try:
|
||||||
|
await cli.subscribe_logs(
|
||||||
|
on_log,
|
||||||
|
log_level=LogLevel.LOG_LEVEL_VERY_VERBOSE,
|
||||||
|
dump_config=first_connect,
|
||||||
|
)
|
||||||
|
first_connect = False
|
||||||
|
except APIConnectionError:
|
||||||
|
cli.disconnect()
|
||||||
|
|
||||||
|
async def on_disconnect():
|
||||||
|
_LOGGER.warning("Disconnected from API")
|
||||||
|
|
||||||
|
zc = zeroconf.Zeroconf()
|
||||||
|
reconnect = ReconnectLogic(
|
||||||
|
client=cli,
|
||||||
|
on_connect=on_connect,
|
||||||
|
on_disconnect=on_disconnect,
|
||||||
|
zeroconf_instance=zc,
|
||||||
|
)
|
||||||
|
await reconnect.start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
await asyncio.sleep(60)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
await reconnect.stop()
|
||||||
|
zc.close()
|
||||||
|
|
||||||
|
|
||||||
|
def run_logs(config, address):
|
||||||
|
asyncio.run(async_run_logs(config, address))
|
||||||
+1
-2
@@ -3,12 +3,11 @@ PyYAML==5.4.1
|
|||||||
paho-mqtt==1.5.1
|
paho-mqtt==1.5.1
|
||||||
colorama==0.4.4
|
colorama==0.4.4
|
||||||
tornado==6.1
|
tornado==6.1
|
||||||
protobuf==3.17.3
|
|
||||||
tzlocal==2.1
|
tzlocal==2.1
|
||||||
pytz==2021.1
|
pytz==2021.1
|
||||||
pyserial==3.5
|
pyserial==3.5
|
||||||
ifaddr==0.1.7
|
|
||||||
platformio==5.2.0
|
platformio==5.2.0
|
||||||
esptool==3.1
|
esptool==3.1
|
||||||
click==7.1.2
|
click==7.1.2
|
||||||
esphome-dashboard==20210908.0
|
esphome-dashboard==20210908.0
|
||||||
|
aioesphomeapi==9.0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user