summaryrefslogtreecommitdiff
path: root/include/py
diff options
context:
space:
mode:
Diffstat (limited to 'include/py')
-rw-r--r--include/py/homekit/config/config.py3
-rw-r--r--include/py/homekit/database/_base.py2
-rw-r--r--include/py/homekit/database/sqlite.py2
-rw-r--r--include/py/homekit/mqtt/_config.py2
-rw-r--r--include/py/homekit/mqtt/_wrapper.py21
-rw-r--r--include/py/homekit/mqtt/module/relay.py3
-rw-r--r--include/py/homekit/pio/products.py3
-rw-r--r--include/py/homekit/telegram/bot.py2
-rw-r--r--include/py/homekit/telegram/config.py11
9 files changed, 38 insertions, 11 deletions
diff --git a/include/py/homekit/config/config.py b/include/py/homekit/config/config.py
index 7d30a77..d424888 100644
--- a/include/py/homekit/config/config.py
+++ b/include/py/homekit/config/config.py
@@ -10,6 +10,7 @@ from argparse import ArgumentParser
from enum import Enum, auto
from os.path import join, isdir, isfile
from ..util import Addr
+from pprint import pprint
class MyValidator(cerberus.Validator):
@@ -140,7 +141,7 @@ class ConfigUnit(BaseConfigUnit):
schema['logging'] = {
'type': 'dict',
'schema': {
- 'logging': {'type': 'boolean'}
+ 'verbose': {'type': 'boolean'}
}
}
diff --git a/include/py/homekit/database/_base.py b/include/py/homekit/database/_base.py
index c01e62b..dcec9da 100644
--- a/include/py/homekit/database/_base.py
+++ b/include/py/homekit/database/_base.py
@@ -1,7 +1,7 @@
import os
-def get_data_root_directory(name: str) -> str:
+def get_data_root_directory() -> str:
return os.path.join(
os.environ['HOME'],
'.config',
diff --git a/include/py/homekit/database/sqlite.py b/include/py/homekit/database/sqlite.py
index 8b0c44c..1651a93 100644
--- a/include/py/homekit/database/sqlite.py
+++ b/include/py/homekit/database/sqlite.py
@@ -18,7 +18,7 @@ class SQLiteBase:
def __init__(self, name=None, path=None, check_same_thread=False):
if not path:
if not name:
- name = config.app_config['database_name']
+ name = config.app_name
database_path = _get_database_path(name)
else:
database_path = path
diff --git a/include/py/homekit/mqtt/_config.py b/include/py/homekit/mqtt/_config.py
index 9ba9443..e5f2c56 100644
--- a/include/py/homekit/mqtt/_config.py
+++ b/include/py/homekit/mqtt/_config.py
@@ -105,7 +105,7 @@ class MqttNodesConfig(ConfigUnit):
'relay': {
'type': 'dict',
'schema': {
- 'device_type': {'type': 'string', 'allowed': ['lamp', 'pump', 'solenoid'], 'required': True},
+ 'device_type': {'type': 'string', 'allowed': ['lamp', 'pump', 'solenoid', 'cooler'], 'required': True},
'legacy_topics': {'type': 'boolean'}
}
},
diff --git a/include/py/homekit/mqtt/_wrapper.py b/include/py/homekit/mqtt/_wrapper.py
index 3c2774c..5fc33fe 100644
--- a/include/py/homekit/mqtt/_wrapper.py
+++ b/include/py/homekit/mqtt/_wrapper.py
@@ -7,6 +7,8 @@ from ..util import strgen
class MqttWrapper(Mqtt):
_nodes: list[MqttNode]
+ _connect_callbacks: list[callable]
+ _disconnect_callbacks: list[callable]
def __init__(self,
client_id: str,
@@ -18,17 +20,30 @@ class MqttWrapper(Mqtt):
super().__init__(clean_session=clean_session,
client_id=client_id)
self._nodes = []
+ self._connect_callbacks = []
+ self._disconnect_callbacks = []
self._topic_prefix = topic_prefix
def on_connect(self, client: mqtt.Client, userdata, flags, rc):
super().on_connect(client, userdata, flags, rc)
for node in self._nodes:
node.on_connect(self)
+ for f in self._connect_callbacks:
+ try:
+ f()
+ except Exception as e:
+ self._logger.exception(e)
def on_disconnect(self, client: mqtt.Client, userdata, rc):
super().on_disconnect(client, userdata, rc)
for node in self._nodes:
node.on_disconnect()
+ for f in self._disconnect_callbacks:
+ try:
+ f()
+ except Exception as e:
+ self._logger.exception(e)
+
def on_message(self, client: mqtt.Client, userdata, msg):
try:
@@ -40,6 +55,12 @@ class MqttWrapper(Mqtt):
except Exception as e:
self._logger.exception(str(e))
+ def add_connect_callback(self, f: callable):
+ self._connect_callbacks.append(f)
+
+ def add_disconnect_callback(self, f: callable):
+ self._disconnect_callbacks.append(f)
+
def add_node(self, node: MqttNode):
self._nodes.append(node)
if self._connected:
diff --git a/include/py/homekit/mqtt/module/relay.py b/include/py/homekit/mqtt/module/relay.py
index e968031..5cbe09b 100644
--- a/include/py/homekit/mqtt/module/relay.py
+++ b/include/py/homekit/mqtt/module/relay.py
@@ -69,8 +69,7 @@ class MqttRelayModule(MqttModule):
mqtt.subscribe_module(self._get_switch_topic(), self)
mqtt.subscribe_module('relay/status', self)
- def switchpower(self,
- enable: bool):
+ def switchpower(self, enable: bool):
payload = MqttPowerSwitchPayload(secret=self._mqtt_node_ref.secret,
state=enable)
self._mqtt_node_ref.publish(self._get_switch_topic(),
diff --git a/include/py/homekit/pio/products.py b/include/py/homekit/pio/products.py
index a0e7a1f..5b40aae 100644
--- a/include/py/homekit/pio/products.py
+++ b/include/py/homekit/pio/products.py
@@ -3,6 +3,7 @@ import logging
from io import StringIO
from collections import OrderedDict
+from ..mqtt import MqttNodesConfig
_logger = logging.getLogger(__name__)
@@ -37,6 +38,8 @@ def platformio_ini(product_config: dict,
debug=False,
debug_network=False) -> str:
node_id = build_specific_defines['CONFIG_NODE_ID']
+ if node_id not in MqttNodesConfig().get_nodes().keys():
+ raise ValueError(f'node id "{node_id}" is not specified in the config!')
# defines
defines = {
diff --git a/include/py/homekit/telegram/bot.py b/include/py/homekit/telegram/bot.py
index 2efd9e4..f5f620a 100644
--- a/include/py/homekit/telegram/bot.py
+++ b/include/py/homekit/telegram/bot.py
@@ -266,7 +266,7 @@ class conversation:
return self.invoke(state, ctx)
return _invoke
- def invoke(self, state, ctx: Context):
+ async def invoke(self, state, ctx: Context):
self._logger.debug(f'invoke, state={state}')
for item in dir(self):
f = getattr(self, item)
diff --git a/include/py/homekit/telegram/config.py b/include/py/homekit/telegram/config.py
index 4c7d74b..5f41008 100644
--- a/include/py/homekit/telegram/config.py
+++ b/include/py/homekit/telegram/config.py
@@ -51,15 +51,15 @@ class TelegramBotConfig(ConfigUnit, ABC):
'type': 'dict',
'schema': {
'token': {'type': 'string', 'required': True},
- TelegramUserListType.USERS: {**TelegramBotConfig._userlist_schema(), 'required': True},
- TelegramUserListType.NOTIFY: TelegramBotConfig._userlist_schema(),
+ TelegramUserListType.USERS.value: {**TelegramBotConfig._userlist_schema(), 'required': True},
+ TelegramUserListType.NOTIFY.value: TelegramBotConfig._userlist_schema(),
}
}
}
@staticmethod
def _userlist_schema() -> dict:
- return {'type': 'list', 'schema': {'type': ['string', 'int']}}
+ return {'type': 'list', 'schema': {'type': ['string', 'integer']}}
@staticmethod
def custom_validator(data):
@@ -72,4 +72,7 @@ class TelegramBotConfig(ConfigUnit, ABC):
def get_user_ids(self,
ult: TelegramUserListType = TelegramUserListType.USERS) -> list[int]:
- return list(map(_user_id_mapper, self['bot'][ult.value])) \ No newline at end of file
+ try:
+ return list(map(_user_id_mapper, self['bot'][ult.value]))
+ except KeyError:
+ return [] \ No newline at end of file