smarthomeng / plugins Goto Github PK
View Code? Open in Web Editor NEWPlugins for SmartHomeNG - The device integration platform for your smart home
Home Page: https://www.smarthomeNG.de
Plugins for SmartHomeNG - The device integration platform for your smart home
Home Page: https://www.smarthomeNG.de
Hello,
I am just switching from fhem to svNG and today I had analysed my problem that current_activity_id and current_activity_name are only updated with a time delay after approx. 3 minutes after switching off. With all other activities this happened immediately.
I found the problem in init.py and fixed it.
def _message(self, message):
self._logger.debug("Harmony: message: {msg}".format(msg=message))
# we have to check two response due to some version changes in harmony device
# ORIGINAL # match = re.match(r".*?startActivityFinished\">activityId=(\d+):errorCode=200.*",
# NEU #
match = re.match(r".*?startActivityFinished\">activityId=(-?\d+):errorCode=200.*", html.unescape(str(message)))
if not match:
# ORIGINAL # match = re.match(r".*?startActivityFinished\">errorCode=200:errorString=OK:activityId=(-?\d+)",
# NEU #
match = re.match(r".*?startActivityFinished\">errorCode=200:errorString=OK:activityId=(-?\d+)", html.unescape(str(message)))
if match:
self._set_current_activity(int(match.group(1)))
The RE wasn't correct. The "Minus sign" was missing before (PowerOff = activity -1). So, PowerOff was only recognized with following polling cycle (assumption).
Please check in to the repo. Thank you in advance.
Best regards,
Jörk
Plugin specific smartVISU widgets are often delivered only with white svg icons. The docu says that icons will be copied from the plugins „sv_widgets“ directory to smartVISU „dropins/icons/ws“.
These icons can not be used with smartVISU designs requiring black icons (e.g „ice“).
In addition to the current behavior, the smartvisu Plugin should check whether an „icons“ folder exists inside „sv_widgets“ and then copy the contents from the subdirectories „ws“ and „sw“ into smartVISU „dropins/icons/ws“ and „ dropins/icons/sw“.
The following database plugin configuration (as documented in https://www.smarthomeng.de/user/plugins/database/README.html)
database:
class_name: Database
class_path: plugins.database
driver: sqlite3
connect:
- database: /home/smarthome/log.db
- check_same_thread: 0
yields the following error at startup:
ERROR lib.plugin Plugin 'database' from section 'database' exception: could not convert string to float: 'database: /home/smarthome/log.db'
Traceback (most recent call last):
File "/usr/local/smarthome/lib/plugin.py", line 144, in __init__
plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta)
File "/usr/local/smarthome/lib/plugin.py", line 594, in __init__
(plugin_params, params_ok, hide_params) = self.meta.check_parameters(args)
File "/usr/local/smarthome/lib/metadata.py", line 929, in check_parameters
value = self._expand_listvalues(param, value)
File "/usr/local/smarthome/lib/metadata.py", line 516, in _expand_listvalues
result = Utils.string_to_list(value)
File "/usr/local/smarthome/lib/utils.py", line 465, in string_to_list
er=float(er)
ValueError: could not convert string to float: 'database: /home/smarthome/log.db'
Affected version
Most recent develop branch at the time of writing this issue:
Main: Branch develop, last commit 537948d12cfa340796a8048042d5743a6daa5834
Plugins: Branch develop, last commit a1f4bbe
Python: v3.7.3 final
Got this error today, KNX Plugin Version 1.8.0:
Mär 29 11:37:11 ERROR KNX poll jalousien.eg.osten_buero.hoehe Method KNX poll jalousien.eg.osten_buero.hoehe exception: threads can only be started once
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 659, in _task
obj(**value)
File "/usr/local/smarthome/plugins/knx/__init__.py", line 252, in _poll
self.groupread(kwargs['ga'])
File "/usr/local/smarthome/plugins/knx/__init__.py", line 243, in groupread
self._send(pkt)
File "/usr/local/smarthome/plugins/knx/__init__.py", line 191, in _send
self._client.send(send)
File "/usr/local/smarthome/lib/network.py", line 648, in send
self.connect()
File "/usr/local/smarthome/lib/network.py", line 618, in connect
self.__connect_thread.start()
File "/usr/lib/python3.9/threading.py", line 869, in start
raise RuntimeError("threads can only be started once")
RuntimeError: threads can only be started once
Mär 29 11:37:11 ERROR KNX poll jalousien.og.osten_stiegenhaus.hoehe Method KNX poll jalousien.og.osten_stiegenhaus.hoehe exception: threads can only be started once
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 659, in _task
obj(**value)
File "/usr/local/smarthome/plugins/knx/__init__.py", line 252, in _poll
self.groupread(kwargs['ga'])
File "/usr/local/smarthome/plugins/knx/__init__.py", line 243, in groupread
self._send(pkt)
File "/usr/local/smarthome/plugins/knx/__init__.py", line 191, in _send
self._client.send(send)
File "/usr/local/smarthome/lib/network.py", line 648, in send
self.connect()
File "/usr/local/smarthome/lib/network.py", line 618, in connect
self.__connect_thread.start()
File "/usr/lib/python3.9/threading.py", line 869, in start
raise RuntimeError("threads can only be started once")
RuntimeError: threads can only be started once
Any ideas where this problem originates from?
Respective item has knx_poll: 2/1/18
KNX Busmonitor log:
Mär 29 11:34:53 -------------------- Init SmartHomeNG v1.9.1.1-ce26bff4.develop --------------------;
Mär 29 11:34:53 Running in Python interpreter 'v3.9.2 final', from directory /usr/local/smarthome;
Mär 29 11:34:53 - on Linux-5.10.103-v7l+-armv7l-with-glibc2.31 (pid=1129);
Mär 29 11:35:03 - Nutze Feiertage für Land 'AT', Provinz 'V', benutzerdefinierte(r) Feiertag(e) nicht definiert;
Mär 29 11:37:13 ;1.1.34;3/3/97;180.96;
Mär 29 11:37:13 ;1.1.34;3/3/97;180.96;
Mär 29 11:37:13 ;1.1.44;4/5/24;False;
...
Mär 29 11:37:28 ;1.1.4;2/1/18;0.0;
KNX Log:
Mär 29 11:36:10 CEST INFO plugins.knx Main Item jalousien.eg.osten_buero.hoehe is polled on GA 2/1/18 every 60.0 seconds -- (init.py:parse_item:618)
and some more polling info, then nothing.
Hi,
due to missing registration of "harmony_" Prefix, there are several warnings in var/log/smarthome-details.log when restarting svNG:
WARNING lib.metadata Item 'harmony.hub.current_activity', attribute 'harmony_item': Attribute is undefined and has value 'current_activity_id' (defined in harmony.yaml)
WARNING lib.metadata Item 'harmony.hub.current_activity_name', attribute 'harmony_item': Attribute is undefined and has value 'current_activity_name' (defined in harmony.yaml)
WARNING lib.metadata Item 'harmony.activity.PowerOff', attribute 'harmony_command_1': Attribute is undefined and has value '['activity:-1']' (defined in harmony.yaml)
WARNING lib.metadata Item 'harmony.activity.TV_SAT', attribute 'harmony_command_1': Attribute is undefined and has value '['activity:27083101']' (defined in harmony.yaml)
To fix this, "harmony_" prefix has to be declared in plugins/harmony/plugin.yaml:
classname: Harmony # class containing the plugin
attribute_prefix: harmony
and
item_attribute_prefixes:
harmony_:
type: foo
description:
de: 'Definiert das Item, das in einem konkreten Zustand evaluiert oder geändert werden soll'
en: 'Definition of an item that should be evaluated or changed in a specific state'
Please add to repo. Thank you in advance !
Best regards,
Jörk
Hi,
since change to smart plugin, the path override with parameter 'rrd_dir' is broken. This seems to be a typo in rrd/plugin.yaml:
Please rename parameter 'rrddir' to 'rrd_dir' to fix.
Thanks!
Hi, i am using aliases in my owfs.conf on my temperature devices in smarthomeNG:
So
ow_addr: kitchen
is used instead of
ow_addr: 28.XXXXXXXXXXXX
Its clear why I get this warning:
1-Wire: Wrong address size 'kitchen' for item temp.kitchen
the following change in the plugin code could fix this:
if addr[2] == '.' and len(addr) != 15:
self.logger.warning("1-Wire: Wrong address size '{}' for item {}".format(addr, item))
Mai 09 04:12:08 ERROR modules.websocket update_item - Error in 'await websocket.send(data)': code = 1001 (going away), no reason
Traceback (most recent call last):
File "/usr/local/smarthome/modules/websocket/__init__.py", line 920, in update_item
await websocket.send(msg)
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 471, in send
await self.ensure_open()
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 726, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedOK: code = 1001 (going away), no reason
Mai 09 04:12:08 ERROR modules.websocket update_item - Error in 'await websocket.send(data)': code = 1001 (going away), no reason
Traceback (most recent call last):
File "/usr/local/smarthome/modules/websocket/__init__.py", line 920, in update_item
await websocket.send(msg)
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 471, in send
await self.ensure_open()
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 726, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedOK: code = 1001 (going away), no reason
Mai 09 04:12:08 ERROR modules.websocket update_item - Error in 'await websocket.send(data)': code = 1001 (going away), no reason
Traceback (most recent call last):
File "/usr/local/smarthome/modules/websocket/__init__.py", line 920, in update_item
await websocket.send(msg)
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 471, in send
await self.ensure_open()
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 726, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedOK: code = 1001 (going away), no reason
Mai 09 04:12:08 ERROR modules.websocket update_item - Error in 'await websocket.send(data)': code = 1001 (going away), no reason
Traceback (most recent call last):
File "/usr/local/smarthome/modules/websocket/__init__.py", line 920, in update_item
await websocket.send(msg)
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 471, in send
await self.ensure_open()
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 726, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedOK: code = 1001 (going away), no reason
Mai 09 04:12:08 ERROR modules.websocket update_item - Error in 'await websocket.send(data)': code = 1001 (going away), no reason
Traceback (most recent call last):
File "/usr/local/smarthome/modules/websocket/__init__.py", line 920, in update_item
await websocket.send(msg)
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 471, in send
await self.ensure_open()
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 726, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedOK: code = 1001 (going away), no reason
Mai 09 04:12:08 ERROR modules.websocket update_item - Error in 'await websocket.send(data)': code = 1001 (going away), no reason
Traceback (most recent call last):
File "/usr/local/smarthome/modules/websocket/__init__.py", line 920, in update_item
await websocket.send(msg)
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 471, in send
await self.ensure_open()
File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/legacy/protocol.py", line 726, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedOK: code = 1001 (going away), no reason
Mai 09 04:12:12 WARNING modules.websocket Series cancelation: No series for path bewegung.aussen.terrasse_og.fuenf found in list
Mai 09 04:12:12 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series_cancel", "error": "No series for path bewegung.aussen.terrasse_og.fuenf found in list"}
Mai 09 04:12:12 WARNING modules.websocket Series cancelation: No series for path bewegung.og.fuenf found in list
Mai 09 04:12:12 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series_cancel", "error": "No series for path bewegung.og.fuenf found in list"}
Mai 09 04:12:12 WARNING modules.websocket Series cancelation: No series for path bewegung.og.kueche.fuenf found in list
Mai 09 04:12:12 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series_cancel", "error": "No series for path bewegung.og.kueche.fuenf found in list"}
Mai 09 04:12:12 WARNING modules.websocket Series cancelation: No series for path bewegung.og.abgang.fuenf found in list
Mai 09 04:12:12 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series_cancel", "error": "No series for path bewegung.og.abgang.fuenf found in list"}
Mai 09 04:12:12 WARNING modules.websocket Series cancelation: No series for path bewegung.og.wc.fuenf found in list
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series_cancel", "error": "No series for path bewegung.og.wc.fuenf found in list"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "item", "items": [["bewegung.eg.zeitstatus", 30], ["bewegung.eg.gang.zeitstatus", 30], ["bewegung.eg.bad.zeitstatus", 0], ["bett.belegung", 2], ["bett.andy", false], ["bett.andy.sperren", false], ["bett.riki", true], ["bett.riki.sperren", false], ["bwm.eg.bad.nachlaufzeit_aktiv", false], ["bwm.eg.bad.nachlaufzeit_aktiv.start.unix_timestamp", 0], ["bwm.eg.bad.nachlaufzeit.duration_format", "0h 5i 0s"], ["wetterstation.helligkeit.osten", 1.0], ["bwm.eg.bad.helligkeitstrigger", true], ["bwm.eg.bad.helligkeitsschwelle", 8000], ["bwm.eg.bad.nachlaufzeit", 5], ["bwm.eg.bad.sperren", false], ["bwm.eg.bad.visu_mastertrigger", false], ["bwm.eg.bad.visu_trigger", false], ["bwm.eg.bad.austrigger", false], ["bwm.eg.gang.nachlaufzeit_aktiv", false], ["bwm.eg.gang.nachlaufzeit_aktiv.start.unix_timestamp", 0], ["bwm.eg.gang.nachlaufzeit.duration_format", "0h 0i 0s"], ["bwm.eg.gang.helligkeitswert", 0.0], ["bwm.eg.gang.helligkeitstrigger", true], ["bwm.eg.gang.helligkeitsschwelle", 0.0], ["bwm.eg.gang.nachlaufzeit", 0], ["bwm.eg.gang.reichweite", 0], ["bwm.eg.gang.sperren", false], ["bwm.eg.gang.visu_mastertrigger", false], ["bwm.eg.gang.visu_trigger", false], ["bwm.eg.gang.immerdunkel", false], ["bwm.eg.bad.automatik.settings.nacht.helligkeitsschwelle", 8000], ["bwm.eg.bad.automatik.settings.standard.helligkeitsschwelle", 8900], ["bwm.eg.bad.automatik.settings.nacht.nachlaufzeit", 5], ["bwm.eg.bad.automatik.settings.standard.nachlaufzeit", 14]]}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620439933058, 0.0], [1620449671282, 1.0], [1620450116880, 0.0], [1620454444378, 1.0], [1620456015003, 0.0], [1620456130745, 1.0], [1620456853330, 0.0], [1620456983935, 1.0], [1620457420163, 0.0], [1620458409284, 1.0], [1620458718198, 0.0], [1620458879584, 1.0], [1620459755501, 0.0], [1620459769008, 1.0], [1620460376303, 0.0], [1620466487010, 1.0], [1620466859127, 0.0], [1620467550240, 1.0], [1620467978769, 0.0], [1620471740312, 1.0], [1620472109984, 0.0], [1620477198716, 1.0], [1620477670798, 0.0], [1620479275388, 1.0], [1620479596804, 0.0], [1620483100100, 1.0], [1620484003455, 0.0], [1620491116347, 1.0], [1620491583346, 0.0], [1620491921600, 1.0], [1620492230796, 0.0], [1620501201890, 1.0], [1620501529600, 0.0], [1620501579021, 1.0], [1620501906024, 0.0], [1620502552805, 1.0], [1620503000972, 0.0], [1620520522084, 1.0], [1620520939021, 0.0], [1620520939021, 0.0], [1620526333058, 0.0]], "sid": "bewegung.eg.bad.fuenf|raw|24h|now|500"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620439933190, 0.0], [1620446416919, 1.0], [1620446720612, 0.0], [1620448476570, 1.0], [1620448942183, 0.0], [1620449479227, 1.0], [1620450131410, 0.0], [1620450530216, 1.0], [1620450846399, 0.0], [1620452913628, 1.0], [1620453274260, 0.0], [1620454321146, 1.0], [1620454997087, 0.0], [1620455395505, 1.0], [1620457442185, 0.0], [1620457467085, 1.0], [1620457878361, 0.0], [1620458328348, 1.0], [1620460569763, 0.0], [1620464555459, 1.0], [1620464894145, 0.0], [1620466152520, 1.0], [1620466870048, 0.0], [1620467285642, 1.0], [1620467976715, 0.0], [1620471380059, 1.0], [1620472167614, 0.0], [1620472321784, 1.0], [1620472629868, 0.0], [1620476252277, 1.0], [1620476609856, 0.0], [1620477193369, 1.0], [1620477669298, 0.0], [1620477690675, 1.0], [1620478217298, 0.0], [1620478439018, 1.0], [1620478747380, 0.0], [1620479274982, 1.0], [1620479593779, 0.0], [1620483099348, 1.0], [1620483440913, 0.0], [1620483596799, 1.0], [1620483998918, 0.0], [1620484573454, 1.0], [1620484905238, 0.0], [1620485337551, 1.0], [1620485869076, 0.0], [1620487664216, 1.0], [1620487967625, 0.0], [1620488321128, 1.0], [1620488639830, 0.0], [1620491066316, 1.0], [1620491581318, 0.0], [1620491915046, 1.0], [1620492254338, 0.0], [1620492351104, 1.0], [1620492688020, 0.0], [1620499030601, 1.0], [1620499374663, 0.0], [1620501012284, 1.0], [1620501523059, 0.0], [1620501579224, 1.0], [1620501901502, 0.0], [1620502550825, 1.0], [1620502996433, 0.0], [1620520519873, 1.0], [1620520938494, 0.0], [1620525249642, 1.0], [1620525557644, 0.0], [1620525557644, 0.0], [1620526333190, 0.0]], "sid": "bewegung.eg.gang.fuenf|raw|24h|now|500"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620439933284, 1.0], [1620450866466, 0.0], [1620450938213, 1.0], [1620451769914, 0.0], [1620455426829, 1.0], [1620455531597, 0.0], [1620455845531, 1.0], [1620455870135, 0.0], [1620455881585, 1.0], [1620455962338, 0.0], [1620501656392, 1.0], [1620501704507, 0.0], [1620501722001, 1.0], [1620502545773, 0.0], [1620502709684, 1.0], [1620520511288, 0.0], [1620520654737, 1.0], [1620520673813, 0.0], [1620520682774, 1.0], [1620520694819, 0.0], [1620520702345, 1.0], [1620525241818, 0.0], [1620525241818, 0.0], [1620526333284, 0.0]], "sid": "bett.andy|raw|24h|now|500"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620439933379, 1.0], [1620446391842, 0.0], [1620446400375, 1.0], [1620446404638, 0.0], [1620446423208, 1.0], [1620448861380, 0.0], [1620448888003, 1.0], [1620448999306, 0.0], [1620449633475, 1.0], [1620449656495, 0.0], [1620455451923, 1.0], [1620455531096, 0.0], [1620455560221, 1.0], [1620455761764, 0.0], [1620455854072, 1.0], [1620455868624, 0.0], [1620455882083, 1.0], [1620455960833, 0.0], [1620459313273, 1.0], [1620459336365, 0.0], [1620472349602, 1.0], [1620481683619, 0.0], [1620481692652, 1.0], [1620482581636, 0.0], [1620482589659, 1.0], [1620497860621, 0.0], [1620498337063, 1.0], [1620499619353, 0.0], [1620501608708, 1.0], [1620501608708, 1.0], [1620526333380, 1.0]], "sid": "bett.riki|raw|24h|now|500"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620483133468, 1.0], [1620484219007, 0.0], [1620484316119, 1.0], [1620484910762, 0.0], [1620485322755, 1.0], [1620485869072, 0.0], [1620487663185, 1.0], [1620487995167, 0.0], [1620488303945, 1.0], [1620488642292, 0.0], [1620491059724, 1.0], [1620491583341, 0.0], [1620491915138, 1.0], [1620492254338, 0.0], [1620492351159, 1.0], [1620492688524, 0.0], [1620499023721, 1.0], [1620499382125, 0.0], [1620501009812, 1.0], [1620501529595, 0.0], [1620501579168, 1.0], [1620501906037, 0.0], [1620502550929, 1.0], [1620503000967, 0.0], [1620520519992, 1.0], [1620520939010, 0.0], [1620525249761, 1.0], [1620525557648, 0.0], [1620525557648, 0.0], [1620526333468, 0.0]], "sid": "bewegung.eg.fuenf|max|12h|now|5000"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620483133562, 1.0], [1620483440913, 0.0], [1620483596799, 1.0], [1620483998918, 0.0], [1620484573454, 1.0], [1620484905238, 0.0], [1620485337551, 1.0], [1620485869076, 0.0], [1620487664216, 1.0], [1620487967625, 0.0], [1620488321128, 1.0], [1620488639830, 0.0], [1620491066316, 1.0], [1620491581318, 0.0], [1620491915046, 1.0], [1620492254338, 0.0], [1620492351104, 1.0], [1620492688020, 0.0], [1620499030601, 1.0], [1620499374663, 0.0], [1620501012284, 1.0], [1620501523059, 0.0], [1620501579224, 1.0], [1620501901502, 0.0], [1620502550825, 1.0], [1620502996433, 0.0], [1620520519873, 1.0], [1620520938494, 0.0], [1620525249642, 1.0], [1620525557644, 0.0], [1620525557644, 0.0], [1620526333562, 0.0]], "sid": "bewegung.eg.gang.fuenf|max|12h|now|5000"}
Mai 09 04:12:13 WARNING modules.websocket smartVISU_protocol_v4: Exception in 'await websocket.send(reply)': code = 1001 (going away), no reason - reply = {"cmd": "series", "series": [[1620483133648, 1.0], [1620484003455, 0.0], [1620491116347, 1.0], [1620491583346, 0.0], [1620491921600, 1.0], [1620492230796, 0.0], [1620501201890, 1.0], [1620501529600, 0.0], [1620501579021, 1.0], [1620501906024, 0.0], [1620502552805, 1.0], [1620503000972, 0.0], [1620520522084, 1.0], [1620520939021, 0.0], [1620520939021, 0.0], [1620526333648, 0.0]], "sid": "bewegung.eg.bad.fuenf|max|12h|now|5000"}
Came "out of the blue". The exceptions happened just once so far but I guess could be catched easily. The "no series for path.." happens quite often, still not sure why
I'm getting the warning "Attribute is undefined" from "lib.metadata" because the item attributes alexa_alias, alexa_range_delta and alexa_color_temp_delta are not defined in plugin.yaml.
Since a few days the connection to the husqvarna automover via the plugin seems not working anymore. The andriod app still works as always. Before this I had the plugin running for several weeks without any problems.
When I am looking into the log there is always the same 404 error and the plugin pauses.
Can anybody confirm this? Is it possible that husqvarna changed the url to connect to the api from the one used in the plugin now definitive to the new one (https://api.amc.husqvarna.dev/v1)?
Here is my shortened log from a startup of SmarthomeNG:
2022-03-31 12:13:50 NOTICE lib.smarthome -------------------- Init SmartHomeNG v1.9.1-master (8133e714) --------------------
2022-03-31 12:13:50 NOTICE lib.smarthome Running in Python interpreter 'v3.8.10 final', from directory /usr/local/smarthome
2022-03-31 12:13:50 NOTICE lib.smarthome - on Linux-5.4.0-105-generic-x86_64-with-glibc2.29 (pid=7986)
2022-03-31 12:13:58 DEBUG plugins.husky parse STATE item: mower connection state
2022-03-31 12:13:58 DEBUG plugins.husky adding valid state item mower connection state to wachlist husky_state=connection
2022-03-31 12:13:58 DEBUG plugins.husky parse STATE item: activity name (CUTTING, MOVING, ...)
2022-03-31 12:13:58 DEBUG plugins.husky adding valid state item activity name (CUTTING, MOVING, ...) to wachlist husky_state=activity
2022-03-31 12:13:58 DEBUG plugins.husky parse STATE item: System.Maehroboter.state.errormessage
2022-03-31 12:13:58 DEBUG plugins.husky adding valid state item System.Maehroboter.state.errormessage to wachlist husky_state=errormessage
2022-03-31 12:13:58 DEBUG plugins.husky parse STATE item: System.Maehroboter.state.message
2022-03-31 12:13:58 DEBUG plugins.husky adding valid state item System.Maehroboter.state.message to wachlist husky_state=message
2022-03-31 12:13:58 DEBUG plugins.husky parse STATE item: System.Maehroboter.state.color
2022-03-31 12:13:58 DEBUG plugins.husky adding valid state item System.Maehroboter.state.color to wachlist husky_state=color
2022-03-31 12:13:58 DEBUG plugins.husky parse STATE item: System.Maehroboter.state.batterypercent
2022-03-31 12:13:58 DEBUG plugins.husky adding valid state item System.Maehroboter.state.batterypercent to wachlist husky_state=batterypercent
2022-03-31 12:13:58 DEBUG plugins.husky parse CONTROL item: Start
2022-03-31 12:13:58 DEBUG plugins.husky adding valid command item Start to wachlist husky_control=START_3H
2022-03-31 12:13:58 DEBUG plugins.husky parse CONTROL item: Start normal
2022-03-31 12:13:58 DEBUG plugins.husky adding valid command item Start normal to wachlist husky_control=START
2022-03-31 12:13:58 DEBUG plugins.husky parse CONTROL item: Stop
2022-03-31 12:13:58 DEBUG plugins.husky adding valid command item Stop to wachlist husky_control=STOP
2022-03-31 12:13:58 DEBUG plugins.husky parse CONTROL item: Park
2022-03-31 12:13:58 DEBUG plugins.husky adding valid command item Park to wachlist husky_control=PARK
2022-03-31 12:13:58 DEBUG plugins.husky parse CONTROL item: Park until next Timer
2022-03-31 12:13:58 DEBUG plugins.husky adding valid command item Park until next Timer to wachlist husky_control=PARK_TIMER
2022-03-31 12:13:58 DEBUG plugins.husky parse OPDATA item: Mähzeit in Millisekunden
2022-03-31 12:13:58 DEBUG plugins.husky adding valid operation data item Mähzeit in Millisekunden to wachlist husky_operating=CUTTING
2022-03-31 12:13:58 DEBUG plugins.husky parse OPDATA item: Parkzeit in Millisekunden
2022-03-31 12:13:58 DEBUG plugins.husky adding valid operation data item Parkzeit in Millisekunden to wachlist husky_operating=PARKED
2022-03-31 12:13:58 DEBUG plugins.husky parse OPDATA item: Ladezeit in Millisekunden
2022-03-31 12:13:58 DEBUG plugins.husky adding valid operation data item Ladezeit in Millisekunden to wachlist husky_operating=CHARGING
2022-03-31 12:13:58 DEBUG plugins.husky parse OPDATA item: Bewegungszeit in Millisekunden
2022-03-31 12:13:58 DEBUG plugins.husky adding valid operation data item Bewegungszeit in Millisekunden to wachlist husky_operating=MOVING
2022-03-31 12:13:58 DEBUG plugins.husky parse OPDATA item: Fehlerzeit in Millisekunden
2022-03-31 12:13:58 DEBUG plugins.husky adding valid operation data item Fehlerzeit in Millisekunden to wachlist husky_operating=ERROR
2022-03-31 12:13:59 DEBUG plugins.husky Run method called
2022-03-31 12:13:59 INFO plugins.husky login with userid: ****.****@****.****
2022-03-31 12:13:59 NOTICE lib.smarthome -------------------- SmartHomeNG initialization finished --------------------
2022-03-31 12:14:00 INFO plugins.husky Logged in successfully
2022-03-31 12:14:00 INFO plugins.husky login lifetime 863999
2022-03-31 12:14:00 INFO plugins.husky token updated
2022-03-31 12:14:00 ERROR lib.plugin Plugin 'husky' exception in run() method: 404 Client Error: Not Found for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers
Traceback (most recent call last):
File "/usr/local/smarthome/lib/plugin.py", line 676, in run
self.plugin.run()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 175, in run
self._select_mower()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 423, in _select_mower
self.mowers = self.mowapi.list_robots()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 709, in list_robots
response.raise_for_status()
File "/usr/lib/python3/dist-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers
...
The first occourence of a failure was this 500 error but after this it worked again:
2022-03-27 10:48:04 DEBUG plugins.husky status received - but same timestamp - no update needed (True)
2022-03-27 10:49:04 DEBUG plugins.husky status received - but same timestamp - no update needed (True)
2022-03-27 10:50:08 ERROR plugins.husky.husky_poll_service Method plugins.husky.husky_poll_service exception: 500 Server Error: Internal Server Error for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers/*******-*******/status
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 657, in _task
obj()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 340, in poll_device
mower_status_v0 = self.mowapi.status()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 731, in status
response.raise_for_status()
File "/usr/lib/python3/dist-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers/*******-*******/status
2022-03-27 10:51:05 DEBUG plugins.husky --- new status received:
2022-03-27 10:51:05 DEBUG plugins.husky **** [PARKED] - 100% (2022-03-27 10:50:15)
2022-03-27 10:51:05 DEBUG plugins.husky found 6 state items to update
...
and then the next day it startet to throw the 404 error countinuously:
2022-03-28 09:26:18 DEBUG plugins.husky status received - but same timestamp - no update needed (True)
2022-03-28 09:27:18 ERROR plugins.husky.husky_poll_service Method plugins.husky.husky_poll_service exception: 404 Client Error: Not Found for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers/*******-*******/status
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 657, in _task
obj()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 340, in poll_device
mower_status_v0 = self.mowapi.status()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 731, in status
response.raise_for_status()
File "/usr/lib/python3/dist-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers/*******-*******/status
2022-03-28 09:28:18 ERROR plugins.husky.husky_poll_service Method plugins.husky.husky_poll_service exception: 404 Client Error: Not Found for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers/*******-*******/status
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 657, in _task
obj()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 340, in poll_device
mower_status_v0 = self.mowapi.status()
File "/usr/local/smarthome/plugins/husky/__init__.py", line 731, in status
response.raise_for_status()
File "/usr/lib/python3/dist-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://amc-api.dss.husqvarnagroup.net/v1/mowers/*******-*******/status
....
database plugin creates a new thread to remove old entries in items marked with database_maxage
attribute. This happens every 91 seconds currently. Unfortunately several threads are startet one after the other even the first thread did not finish.
This results in a huge number of threads if some more items are marked with the database_maxage attribute before a restart of SHNG
2021-05-15 13:31:59 ERROR plugins.vacations.plugins.vacations Method plugins.vacations.plugins.vacations exception: HTTPSConnectionPool(host='ferien-api.de', port=443): Max retries exceeded with url: /api/v1/holidays (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f51954fec18>: Failed to establish a new connection: [Errno -3] Temporärer Fehler bei der Namensauflösung'))
> Traceback (most recent call last):
> File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
> (self._dns_host, self.port), self.timeout, **extra_kw)
> File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 57, in create_connection
> for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
> File "/usr/lib/python3.7/socket.py", line 748, in getaddrinfo
> for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
> socket.gaierror: [Errno -3] Temporärer Fehler bei der Namensauflösung
maybe we can catch this error in a more beautiful way ...
Hi,
I get an error 500 when I open the Homematic module website. Possibly because I have partially named my items, "str(item)" does not work here:
Line 238 in e32b0ef
self.hm_items.append( [str(item.property.path), item, hm_address, hm_channel, hm_function, hm_node, dev_type] )
It would be nice if you could change this in later updates.
Thank you in advance
If the database is under stress the remove old entries method can't be executed successfully. That's what to expect but maybe the error could be catched somehow in a nicer way?
Feb 05 14:54:51 ERROR lib.db Can not execute query: DELETE FROM log WHERE (item_id = %(id)s ) AND (time = %(time)s OR 1 = %(time_flag)s ) AND (time > %(time_start)s OR 1 = %(time_start_flag)s ) AND (time < %(time_end)s OR 1 = %(time_end_flag)s ) AND (changed = %(changed)s OR 1 = %(changed_flag)s ) AND (changed > %(changed_start)s OR 1 = %(changed_start_flag)s) AND (changed < %(changed_end)s OR 1 = %(changed_end_flag)s ); (args OrderedDict([('id', 451), ('time', None), ('time_flag', 1), ('time_start', None), ('time_start_flag', 1), ('time_end', 1604584284758), ('time_end_flag', 0), ('changed', None), ('changed_flag', 1), ('changed_start', None), ('changed_start_flag', 1), ('changed_end', None), ('changed_end_flag', 1)])): (1205, 'Lock wait timeout exceeded; try restarting transaction')
Feb 05 14:54:51 ERROR plugins.database Database: Error for query DELETE FROM log WHERE (item_id = 451 ) AND (time = None OR 1 = 1 ) AND (time > None OR 1 = 1 ) AND (time < 1604584284758 OR 1 = 0 ) AND (changed = None OR 1 = 1 ) AND (changed > None OR 1 = 1) AND (changed < None OR 1 = 1 ); : (1205, 'Lock wait timeout exceeded; try restarting transaction')
Feb 05 14:54:51 ERROR plugins.database.Remove old Method plugins.database.Remove old exception: (1205, 'Lock wait timeout exceeded; try restarting transaction')
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 664, in _task
obj()
File "/usr/local/smarthome/plugins/database/__init__.py", line 1162, in remove_older_than_maxage
self.deleteLog(item_id, time_end=timestamp_end, with_commit=False)
File "/usr/local/smarthome/plugins/database/__init__.py", line 624, in deleteLog
self._execute(self._prepare("DELETE FROM {log} WHERE " + condition), params, cur=cur)
File "/usr/local/smarthome/plugins/database/__init__.py", line 1229, in _execute
self._query(self._db.execute, query, params, cur)
File "/usr/local/smarthome/plugins/database/__init__.py", line 1259, in _query
raise e
File "/usr/local/smarthome/plugins/database/__init__.py", line 1256, in _query
tuples = func(self._prepare(query), params, cur=cur)
File "/usr/local/smarthome/lib/db.py", line 324, in execute
result = c.execute(stmt, args)
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')
visu_websocket extend protocol to enable cancellation of time series abonnement
Hello,
am just switching from fhem to svNG and have been using join's say function to do voice output from svNG to my android panels via tts. When I went live, I found that the join plugin didn't support "say" and specifying the local language "language".
It would be nice if someone with access to the repo could add the parameters "say" and "language" to the plugin in init.py in the method "send()" as follows:
def send(self, title=None, text=None, icon=None, find=None, smallicon=None, device_id=None, device_ids=None,
device_names=None, url=None, image=None, sound=None, group=None, clipboard=None, file=None,
callnumber=None, smsnumber=None, smstext=None, mmsfile=None, wallpaper=None, lockWallpaper=None,
interruptionFilter=None, mediaVolume=None, ringVolume=None, alarmVolume=None, say=None, language=None):
and
if say:
req_url += "&say=" + say
if language:
req_url += "&language=" + language
Thank you in advance,
Jörk
Hi,
these days, after updating shNG incl. updating python3.8 to python3.9 I saw the following error in the log.
2022-11-12 10:51:43 ERROR logics.viess_fixTime In der Logik ist ein Fehler aufgetreten:
Logik 'viess_fixTime', Datei '/usr/lib/python3.9/_strptime.py', Zeile 349
function _strptime(), Exception: time data '00' does not match format '%Y%m%d%W%H%M%S'
At first I thought it was my logic. @Morg42 pointed me to relevant code part: https://github.com/smarthomeNG/plugins/blob/develop/viessmann/__init__.py#L1228
#!/usr/bin/env python3
# viess_fixtime.py
from datetime import datetime
plug = sh.plugins.return_plugin('viessmann')
if plug is not None:
sys_cur_time_dt = shtime.now()
#sys_cur_time = sys_cur_time_dt.strftime('%Y%m%d%W%H%M%S')
sys_cur_time = sys_cur_time_dt.strftime('%Y-%m-%d %H:%M:%S')
logger.debug(f'sys_cur_time={sys_cur_time}')
logger.debug(f'sys_cur_time_dt={sys_cur_time_dt}')
viess_cur_time = plug.read_addr('088e')
logger.debug(f"viess_cur_time={viess_cur_time}")
viess_cur_time_dt = datetime.strptime(viess_cur_time, '%Y-%m-%dT%H:%M:%S')
logger.debug(f"viess_cur_time_dt={viess_cur_time_dt}")
timediff = shtime.time_diff(sys_cur_time_dt, viess_cur_time_dt, 'm')
# if timediff <= -2 or timediff >= 2 or True:
if timediff <= -2 or timediff >= 2:
logger.warning(f'Update Viessmann Systemtime, Timediff: {timediff:.0f} Min.')
logger.debug(f"sys_cur_time={sys_cur_time}")
plug.write_addr('088e', sys_cur_time)
else:
logger.warning(f'Update Viessmann Systemtime not need, time in sync')
else:
logger.error("can't get viessmann plugin")
But after I manually ran the values at the Python shell, I saw that the values were actually correct and also the call in _build_valuebytes_from_value
for valuetype == 'datetime'
to do the strftime
is good.
(smarthome) smarthome@heizung:/opt/smarthome$ python3
Python 3.9.15 (main, Oct 12 2022, 19:14:24)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> from datetime import datetime
>>> import dateutil.parser
>>> sys_cur_time_dt = datetime.now()
>>> sys_cur_time = sys_cur_time_dt.strftime('%Y-%m-%d %H:%M:%S')
>>> print(sys_cur_time)
2022-11-12 10:33:24
>>> value=sys_cur_time
>>> print (dateutil.parser.isoparse(value))
2022-11-12 10:33:24
>>> print (dateutil.parser.isoparse(value).strftime('%Y%m%d%w%H%M%S'))
202211126103324
So I was wondering, where the heck this happends... After missing a good old Stacktrace I was digging around to find how to add it. Which led to the following simple solution.
thomas@heizung:/opt/smarthome$ git diff /opt/smarthome/lib/scheduler.py
diff --git a/lib/scheduler.py b/lib/scheduler.py
index 6055779b..0eba9860 100644
--- a/lib/scheduler.py
+++ b/lib/scheduler.py
@@ -743,7 +743,7 @@ class Scheduler(threading.Thread):
logic_method = 'Hauptroutine der Logik'
else:
logic_method = 'function ' + tb[2] + '()'
- logger.error(f"In der Logik ist ein Fehler aufgetreten:\n Logik '{logic.name}', Datei '{tb[0]}', Zeile {tb[1]}\n {logic_method}, Exception: {e}")
+ logger.error(f"In der Logik ist ein Fehler aufgetreten:\n Logik '{logic.name}', Datei '{tb[0]}', Zeile {tb[1]}\n {logic_method}, Exception: {e}", exc_info=True)
#logger.exception(f"In der Logik ist ein Fehler aufgetreten:\n Logik '{logic.name}', Datei '{tb[0]}', Zeile {tb[1]}\n {logic_method}, Exception: '{e}'\n ")
return
Now my log entry looked like this:
2022-11-12 11:08:11 ERROR logics.viess_fixTime In der Logik ist ein Fehler aufgetreten:
Logik 'viess_fixTime', Datei '/usr/lib/python3.9/_strptime.py', Zeile 349
function _strptime(), Exception: time data '00' does not match format '%Y%m%d%W%H%M%S'
Traceback (most recent call last):
File "/opt/smarthome/lib/scheduler.py", line 724, in _execute_logic_task
exec(logic._bytecode, logic_globals)
File "/opt/smarthome/logics/viess_fixtime.py", line 26, in <module>
plug.write_addr('088e', sys_cur_time)
File "/opt/smarthome/plugins/viessmann/__init__.py", line 488, in write_addr
return self._parse_response(response_packet, commandname)
File "/opt/smarthome/plugins/viessmann/__init__.py", line 1446, in _parse_response
value = datetime.strptime(rawdatabytes.hex(), '%Y%m%d%W%H%M%S').isoformat()
File "/usr/lib/python3.9/_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/lib/python3.9/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '00' does not match format '%Y%m%d%W%H%M%S'
So the error is at the processing of the reply. Maybe we need first to replace the leading 0 from the weekday?
Oh, and my unit is a V200KW2 which uses KW protocol.
holidays: additionally to week days an option for holidays (based on the core implementation) would be nice.
alarm feature: Sometimes it might be nice to trigger items at a specific time just once, like non-repeating alarm clock.
Get rid of numpy and scipy and implement all interpolation types "from scratch".
Hi guys,
i stumpled upon a Warning which is triggered by lib/metadata.py:check_itemattribute:1142
Item 'og.licht.bad', attribute 'alexa_device': Attribute is undefined and has value 'og_light_bad' (defined in lampen_og.yaml) -- metadata.py:check_itemattribute:1142
Im on 85aabc80..321316e5 (smarthomeNG) and bb134dd..ed476dc (plugin)
Is there a definition missing in the alex plugin? What is happening here?
Hi,
I cant pass the item settings for rtr2_settings
and rtr2_controller_settings
to the plugin.
And for me this looks really untested:
Line 165 in c16df49
Line 166 in c16df49
rtr2_controller_settings
is not even evaluatedLine 417 in c16df49
3. the value from temp_settings
is never used - only the defaults get assigned
Maybe I am to stupid to understand the code, but there is also no example documentation.
Thats my test yaml:
rtr:
name: Badezimmer Oben
sv_widget: "{{ rtr2.rtr('item') }}"
sv_item_type: heater
struct: rtr2.rtr
rtr2_id: bz_og
rtr2_settings:
- 24
rtr2_controller_settings:
- 4.0
- 60.0
visu_acl: rw
soll_temp:
visu_acl: ro
ist_temp:
type: num
eval: sh.og.bz.temperature()
eval_trigger: og.bz.temperature
database: true
stellwert:
type: num
knx_dpt: '5.001'
knx_send: 4/1/220
knx_init: 4/1/220
knx_listen: 4/1/220
enforce_updates: true
database: true
nacht:
eval: True if sh.zentral.heizung.nachtabsenkung() else False
eval_trigger: zentral.heizung.nachtabsenkung
frost:
eval: True if sh.og.bz.fenster.status_rtr() else False
eval_trigger: og.bz.fenster.status_rtr
Trying to subscribe to a MQTT topic out of an own logic code I realized that callback never gets called. Test was done with 1.9.0 but seems to happen also with 1.8.2
Enabling some debug logging you can see that caller-type not being recognized as "Logic" but "Unknown"
Logging output at subscription
DEBUG modules.mqtt _get_caller_type: inspect.stack()[2][1] = '/usr/local/smarthome_1.9.0/logics/kiosk.py', split = ['', 'usr', 'local', 'smarthome_1.9.0', 'logics', 'kiosk.py']
INFO modules.mqtt _get_caller_type: inspect.stack()[2][1] = '/usr/local/smarthome_1.9.0/logics/kiosk.py', split = ['', 'usr', 'local', 'smarthome_1.9.0', 'logics', 'kiosk.py']
DEBUG modules.mqtt 'subscribe_topic()' - called from Unknown by '()'
INFO modules.mqtt subscribe_topic: Adding topic 'fully/event/screenOn'
INFO modules.mqtt _add_subscription_definition: Unknown 'kiosk_browser' is subscribing to topic 'fully/event/screenOn'
INFO modules.mqtt subscribe_topic: mqtt module is subscribing to topic 'fully/event/screenOn' with qos=1 at broker (result=0, mid=29)
Logging output when topic received
DEBUG modules.mqtt _on_mqtt_message: RECEIVED topic 'fully/event/screenOn', payload 'b'{"deviceId":"xxxxxxx","event":"screenOn"}', QoS '1', retain '0'
DEBUG modules.mqtt _on_mqtt_message: subscription 'kiosk_browser': {'subscriber_type': 'unknown', 'callback': 'kiosk_browser', 'payload_type': 'str', 'bool_values': None}
ERROR modules.mqtt _on_mqtt_message: received topic for unknown subscriber_type 'unknown'
ERROR modules.mqtt _on_mqtt_message: Received topic 'fully/event/screenOn', payload 'b'{"deviceId":"xxxxxxx","event":"screenOn"}'', QoS '1', retain '0' WITHOUT matching item/logic
I was able to fix the issue for my szenario by updating an array-index within modules/mqtt/init.py:728 function _get_caller_type
instead of elif split[-3] == 'logics' use elif split[-2] == 'logics'
In plugin version mqtt v2.0.2 (smarthomeNG release V 1.9.2) headlines are missing in all datatables of the plugin's webinterface.
Hi,
with smartVISU v3.3 the last deprecated widget was moved from the section "deprecated" to "removed" in the "deprecated.yaml" file, leaving the "deprecated" section empty. This causes the following error in the smartvisu autogeneration plugin of SmarthomeNG:
2022-12-19 21:40:46 ERROR plugins.smartvisu SmartVisuInstallWidgets v3.3.0: Exception: 'NoneType' object is not iterable
> Traceback (most recent call last):
> File "/usr/local/smarthome/plugins/smartvisu/__init__.py", line 123, in run
> sv_iwdg = SmartVisuInstallWidgets(self)
> File "/usr/local/smarthome/plugins/smartvisu/svinstallwidgets.py", line 55, in __init__
> self.install_widgets(self._sh)
> File "/usr/local/smarthome/plugins/smartvisu/svinstallwidgets.py", line 99, in install_widgets
> self.copy_widgets( plgdir.replace('.', '/') )
> File "/usr/local/smarthome/plugins/smartvisu/svinstallwidgets.py", line 149, in copy_widgets
> self.plugin_instance.test_widget_for_deprecated_widgets(os.path.join(srcdir, fn))
> File "/usr/local/smarthome/plugins/smartvisu/__init__.py", line 284, in test_widget_for_deprecated_widgets
> for widget_name in self.deprecated_widgets:
> TypeError: 'NoneType' object is not iterable
2022-12-19 21:40:46 ERROR plugins.smartvisu SmartVisuGenerator: Exception: 'NoneType' object is not iterable
> Traceback (most recent call last):
> File "/usr/local/smarthome/plugins/smartvisu/__init__.py", line 135, in run
> svgen = SmartVisuGenerator(self, self.visu_definition)
> File "/usr/local/smarthome/plugins/smartvisu/svgenerator.py", line 70, in __init__
> self.pages()
> File "/usr/local/smarthome/plugins/smartvisu/svgenerator.py", line 228, in pages
> self.plugin_instance.test_item_for_deprecated_widgets(item)
> File "/usr/local/smarthome/plugins/smartvisu/__init__.py", line 313, in test_item_for_deprecated_widgets
> for widget in self.deprecated_widgets:
> TypeError: 'NoneType' object is not iterable
A dummy entry as workaround is now in place but this should be fixed in the plugin.
Thanks to @gruberth for raising the issue!
Regards
Wolfram
Hello,
for this item
type: list
alexa_device: Lina_Lichterschlauch
alexa_description: Lichterschlauch Lina Fenster
alexa_color_value_type: RGB
alexa_actions: SetColor
alexa_retrievable: True
alexa_color_value_type: RGB
on_change:
- og.Lina.FensterFarb.R.Dimmwert = list[0]
- og.Lina.FensterFarb.G.Dimmwert = list[1]
- og.Lina.FensterFarb.B.Dimmwert = list[2]
- og.Lina.FensterFarb.sequencer = 0
I get this Error.
--
2019-11-25 20:15:08 ERROR Alexa4P3 Plugin 'alexa4p3' exception in run() method: Alexa: invalid device Lina_Lichterschlauch
Traceback (most recent call last):
File "/usr/local/smarthome/lib/plugin.py", line 674, in run
self.plugin.run()
--
raise ValueError("Alexa: invalid device {}".format(device.id))
ValueError: Alexa: invalid device Lina_Lichterschlauch
And the plugin stops responding.
This is a configuration Error, but the Plugin should be resilient against it.
Regards,
Hendrik
After heaving a lot of trouble with turning on and off the wifi correctly on both frequencies, I figured out its because of a wrong wlan_index in the plugin code. Unlike the _update_wlan_config method the wlan_index on the set_wlanconfig call gets decremented by one. This unnecessary decrement causes the trouble between setting and updating the value and writing it to the avm device and item.
Therefore the following block
Lines 1155 to 1166 in e32b0ef
should be replaced with
if self.get_iattr_value(item.conf, 'avm_data_type') == 'wlanconfig':
wlan_index = None
parent_item = item.return_parent()
if self.has_iattr(item.conf, 'avm_wlan_index'):
wlan_index = int(self.get_iattr_value(item.conf, 'avm_wlan_index'))
elif self.has_iattr(parent_item.conf, 'avm_wlan_index'):
wlan_index = int(self.get_iattr_value(parent_item.conf, 'avm_wlan_index'))
if wlan_index > 0:
self.set_wlanconfig(wlan_index, bool(item()))
else:
self.logger.error('Parameter <avm_wlan_index> for item not defined in item.conf')
This issue is moved over from the core repo. The complete issue can be read over there: smarthomeNG/smarthome#291
To easily change DPT 2 knx entries via VISU it would be more comfortable to set priorities not only as lists but also as a number. The ETS converts simple numbers to lists as follows:
0 = [0,0]
1 = [0,1]
2 = [1,0]
3 = [1,1]Such an internal conversion for DPT2 items would be very nice or are there any reasons this is a bad idea?
New attributes:
database_write: on_update
to enable writing of a recurrent value without a change -> behaviour has been implemented in v1.7.2 through the standard attribute enforce_changedatabase_maxage: <days>
maximum age of entries within a database for an item -> has alreedy been implementedNew feature wishes:
Webinterface:
2021:11:07 12:15:12.180
instead of 1636243430180
SMA changed the multicast. It is now 608 byte instead of 600 bytes long, see: http://www.eb-systeme.de/?page_id=3005.
Both the before linked author and https://github.com/datenschuft/SMA-EM/ changed the parser to find measurements based on the obis-ids wich would make the parser future proof.
The package python-openzwave from https://pypi.org/project/python-openzwave/ is needed for ZWave Plugin to work.
Unfortunately this package won't install with Python 3.9 e.g. on Debian bullseye.
The Package is currently unmaintaned and does not get any fixes. It is unlikely that existing problems will be fixed in nearer future.
There are other projects like Eventghost or Homeassistant that seem to face the same problems. They seem to have a solution, see at blacklight/platypush#128 @kdschlosser seems to have developed a solution.
I don't know if https://pypi.org/project/homeassistant-pyozw/ can provide a solution. However I do not have hardware an can not test or develop another integration. So if we do not find a solution I vote for removing the plugin from the plugin repo so that Travis CI tests won't fail any more.
database plugin does not work when using a password (database password) that starts with numbers. error occurs with mysql and mariadb
Error: Database: Initialization failed: object supporting the buffer API required
For the AHA stuff, the plugin also seems to request the AHA webpage on my repeaters. Unfortunately, Repeaters done have AHA web page.
Thats why a 404 is returned.
We need a possibility to somehow exclude these devices or to not log the 404.
2022-02-16 19:27:38 ERROR plugins.avm wlan_repeater_2400_garage@: AHA command error code: 404
2022-02-16 19:27:38 ERROR plugins.avm wlan_repeater_1750_galerie@: AHA command error code: 404
2022-02-16 19:27:39 ERROR plugins.avm wlan_repeater_1750_front@: AHA command error code: 404
Currently the following plugins still use lib.connection
but are deprecated and will be removed:
The following plugins already have an implementation:
These plugins were converted by @Morg42 but are not pushed into develop:
The lib.connection
should then be removed prior to SmartHomeNG 2.0
Hi,
Thanks a lot for this plugin, very helpful!
I am trying to integrate my Fritz!Dect 301 Thermostat, and am using the hkr_device-functionality. Reading state and temperature works fine, however, I would like to be able to set the set_temperature. It seems this is currently not supported?
Could this be added?
Best regards,
//giase
Just started to migrate from old hue plugin to new one. At first I tried using the webif to activate Hue2 plugin. The plugin is added to etc/plugin.yaml but does not have any config. It seems it is missing initial values which I suppose should be added once configured in webif.
During startup I got this error:
2022-08-21 14:08:55 ERROR plugins.hue2 discover_bridges: Exception in discover_bridges(): [Errno -2] Name or service not known
2022-08-21 14:08:55 ERROR lib.plugin Plugin 'hue2' from section 'huebridge' exception: 'ip'
> Traceback (most recent call last):
> File "/usr/local/smarthome/lib/plugin.py", line 162, in __init__
> plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._configfile)
> File "/usr/local/smarthome/lib/plugin.py", line 629, in __init__
> exec("self.plugin.__init__(smarthome{0}{1})".format("," if len(arglist) else "", argstring))
> File "<string>", line 1, in <module>
> File "/usr/local/smarthome/plugins/hue2/__init__.py", line 135, in __init__
> if self.bridge['ip'] != self.bridge_ip:
> KeyError: 'ip'
I manually looked up values for bridge_serial, user and ip and got things working. Wonder how discover bridges could be brought to life. I double-checked and requirements.txt are ok both for SHNG and plugin.
SmarthomeNG v1.9.2-master (cc57a0ad)
Plugins v1.9.2-master (e9f4b86)
Python 3.9.2
Debian Bullseye 11.4
The database plugin provides the possibility to manually delete single entries in the DB via the plugin's web interface (dustbin button).
The value itself is delete correctly. However, the duration of the previous value should be increased by the same duration of the item that is deleted.
At the moment, using the manual delete button leads to a currpted database in which the durations are no longer consistent. This leads to wrong values when evaluating integral values from the db entries.
It would be great to inspect the plugin documentation if there are old readme.md present.
In this case they should be converted from English readme.md which is deprecated to a German user_doc.rst.
The following plugins need to be worked on as they have an existing README but no user_doc.rst:
After update from 1.9.0 to 1.9.1 i became a 500 error every 5 Minutes.
2022-02-16 20:12:29 ERROR plugins.avm fritzbox_1@: POST request error: 500 Server Error: Internal Server Error for url: https://192.168.112.1:49443/upnp/control/hosts 2022-02-16 20:12:29 ERROR plugins.avm fritzbox_1@: POST request error: 500 Server Error: Internal Server Error for url: https://192.168.112.1:49443/upnp/control/hosts 2022-02-16 20:12:29 INFO plugins.avm fritzbox_1@: Debug apriori SID: 0000000000000000, Challenge: fc316580 2022-02-16 20:12:30 INFO plugins.avm fritzbox_1@: Debug posterior SID: 52440274dc644e7e, Challenge: 8dc37097
Verwaiste Datenreihen entstehen schnell durch das Umbenennen von Items oder die Änderung in der Hierarchie der Items. Es wäre gut, wenn man über das Webinterface eine verwaiste Datenreihe einem neuen Item zuweisen könnte.
This issue is moved over from the core repo. The complete issue can be read over there: smarthomeNG/smarthome#285
To reduce superfluous data it would be nice if logging of values to the database could be prevented if not a minimal difference to the last logged value is reached.
Use cases:
Values sent by physical sensors (like temperature, brightness, distance or flow sensor) often wobble in short intervals between two values (e.g. 24.1°C and 24.2°C and back again).
Unfortunately not every sending device allows to prevent this.
Sometimes an exact value is needed for live operations but for logging less precission would be sufficient.
I have two OW interfaces connected to my Odroid-M, but only sensors on one bus are scanned.
Using the command line owdir /bus.1
will need about 1 second, owdir /bus.0
takes 4.5s or so.
Doing this in plugins/onewire with python3 interactively:
import owbase
ow=owbase.OwBase('127.0.0.1', 4304')
ow.dir('/bus.1')
bus1 works fine, but bus0 will usually throw owbase.owex: no payload for /bus.0/
(sometimes succeeding). Interestingly, owdir('/')
never fails, but will happily return all items.
Since the /bus.1 request fails after about 2 seconds, I increased the _sock.settimeout to 10 seconds, but that didn't help
Any suggestions?
The project cant't be loaded because the P-<ABCD>
Folder is a password protected ZIP file, instead of a folder.
So "_parse_knxproject" failes with "No project file found to examine"
This issue is moved over from the core repo. The complete issue can be read over there: smarthomeNG/smarthome#216
The sqlite plugin have a pack mechanism which keeps the database small (like RRD files does). The database plugin does not have this mechanism and keeps all the values in the database.
To be able to have small databases (e.g. for embedded systems and maybe completely replace sqlite plugin) the database plugin should also have such a mechanism.
Different ideas exist
Reduce by aggregation: aggregate and pack values for different timespans to different details
Reduce by dumping/exporting: automatic export/dump function which exports data (e.g. into CSV files) and removes them > from database after export completed
Reduce by moving to history tables: make use of history tables (e.g. move everything older than one year into a log_YYYY table)
Reduce by removing "duplicates": duplicated values, eg same value in multiple records can be aggregated to one record
Reduce by remvoing: Simply delete data older the given amount of time
Reduce by max. amount of records: Only given amountof records will be kept in database, other ones will be removed
Reduce by kepping database size: calculate usage of each item and remove given percentage frkm all of them
Reduce by replacing details with inaccurates: replace details by calculating an inaccurate value for a set of values (e.g. only store changes for temperature without changes in floating point)
... other ideas?
Can be configured:Globally in plugin configuration
On a per item basis
... other ideas(leftover from #165)
Consider the following item:
Solltemperatur:
type: num
cache: True
The database plugin should drop in here to remove cache: True
attribute thus the item is changed to:
Solltemperatur:
type: num
database: init
database_maxage: 7
In case there is not much of change - let's assume no change for the last 14 days, then the attribute database_maxage: 7
will ensure that all data for this item is removed after 7 days.
But when restarting SmartHomeNG after 7 days, this will lead to a missing init value for the item since all database entries are already deleted.
A fix should be provided that ensures that at least the last data entry to the database is kept to provide an init value for a later restart of SmartHomeNG
Version only gets written in some cases in the run method. Should be integrated in the parse_item method to make sure it's in there in all UZSU dicts.
I install smarthomeng new and enabled the plugin husky2. I found these 2 lines in the log:
2022-05-28 07:40:00 ERROR lib.plugin Plugin 'automower' error importing Python package: No module named 'homeassistant'
2022-05-28 07:40:00 ERROR lib.plugin Plugin 'automower' initialization failed, plugin not loaded
It seems, that the module 'homeassistant' is not in the file requirements.txt included.
The telegram plugin uses threads currently. As the underlying telegram lib will only be improved at async being version > 20.x we should consider a move to async and use newer lib then.
Dear plugin developers, maintainers and testers. I have reviewed the plugins available as of April 11th, 2020 and found a bunch of them to not use the latest developments and findings in plugin technology ;-)
It is not needed anymore to pass the plugin parameters to a smart plugins via parameter of init function. It is however good practice to use the self.get_parameter_value()
function instead of passing arguments. This enables the admin interface to configure the plugins during runtime and provide error checking.
Furthermore it is advised to update all meta data. Please revise the section of tester, maintainer and especially the state of development. Is the plugin doing fine the it should be communicated in the plugin.yaml.
Check to see if there is a support thread in knx user forum and please fill in the keywords as well.
Did you also check for a logo to use in gui and webinterface?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.