NEWS
Hinweis / Nachricht wenn Geräte nicht mehr verfügbar
-
@kmxak sagte in Hinweis / Nachricht wenn Geräte nicht mehr verfügbar:
Schau doch mal in den Datenpunkten die meisten Geräte haben einen DP Alive wenn der false ist ist das Gerät halt nicht erreichbar. Daraus dann ein Script bauen.
Hi @kmxak, danke, dass könnte man so machen.
iobroker.zwave DP: alive
iobroker.zigbee DP: available
iobroker.zwave2 DP: status@AlCalzone Ist der DP status bei iobroker.zwave2 dafür geeignet? Aktuell ist er bei mir unknown weil der Adapter gestoppt ist. Deshalb kann ich es aktuell nicht nachvollziehen.
Gruß Nico
-
@_nico Jein. Netzbetriebene Geräte gehen beim Ausfall relativ schnell auf status Dead, aber nur wenn Kommunikation versucht wird. Das müsste bei iobroker.zwave genau so sein.
Bei batteriebetriebenen kann man nicht 100% wissen, ob diese schlafen oder tot sind. Hier müsste man darüber gehen, ob ein State, der sich regelmäßig aktualisiert, länger nicht mehr aktualisiert wurde oder ob sich der Zustand schlafend deutlich länger als das Aufwachintervall nicht geändert hat. -
Also meine ZWave Geräte zeigen mir in ioBroker aber an ob sie gerade schlafen. Oder steht das auch für nicht erreichbar? Glaube aber nicht
-
@kmxak schlafende Geräte antworten nicht. Wenn ein Gerät diese Funktionalität hat, ist es für den Adapter daher nicht ersichtlich, ob das Gerät nicht antwortet, weil es schläft oder weil die Batterie leer ist.
Die einzige Möglichkeit wäre eine Heuristik, die ist meines Wissens aber nirgends implementiert.Daher werden schlafende Geräte derzeit in beiden ZWave-Adaptern auch dann als schlafend markiert, wenn ihre Batterie leer ist.
-
Hmm, da muss ich mir nochmal ausgiebig Gedanken machen, wie ich das Umsetzen möchte. Habe nicht damit gerechnet, dass bisher so etwas noch keiner hat...
-
@AlCalzone sagte in Hinweis / Nachricht wenn Geräte nicht mehr verfügbar:
ob ein State, der sich regelmäßig aktualisiert, länger nicht mehr aktualisiert wurde
vllt sowas in der Art
-
Ich überwache meine Geräte genau so. Wenn sich also ein Gerät eine bestimmte Zeitspanne nicht gemeldet hat, schicke ich einen Alarm. Bei meinen Zigbees sind das 2 Stunden auch wenn sie zwischendurch schlafen
-
-
@_nico ich nutze node red und nicht blockly. Da geht das mit dem trigger node out of the box. Im Prinzip überwachst du innerhalb einer schleife für den gewünschten Zeitraum den datenpunkt. Sendet er in dem Zeitraum, setzt Du den Timer für die Schleife zurück. Wird nichts gesendet wird die schleife verlassen und ein Alarm gesendet.
In NodeRED mal hier ein Flow der XIAOMI Sensoren mit Temperatur und Feuchtigkeit. Wird keins von beiden innerhalb von 2 Std. gesetzt gibts ein "false". Man braucht am Anfang auch gar nichts schicken.
-
@_nico das war mal für Xiaomi Sensoren gedacht
Letztendlich, brauchst du nen DP, der sich regelmäßig in einer bestimmten Zeit aktualisiert, dann kannst du diesen dazu verwenden und prüfen ob innerhalb der definierten Zeit sich der Zeitstempel geändert hat, wenn nicht, telegram Meldung<block xmlns="https://developers.google.com/blockly/xml" type="controls_if" id="/!y{w)WoayG]QOShc[9G" x="-391.00000000000006" y="195"> <value name="IF0"> <block type="logic_compare" id="Lk9!_:NxA2Pl{4$m:0+L"> <field name="OP">GTE</field> <value name="A"> <block type="math_arithmetic" id="dag2Qjy-ue5Pl/PiWqG%"> <field name="OP">MINUS</field> <value name="A"> <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number"> <field name="NUM">1</field> </shadow> <block type="time_get" id="dv)!U_I*ix]t:]AWb}x0"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">object</field> </block> </value> <value name="B"> <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="r8/M^2XoBgpi=G@KyPy)"> <field name="ATTR">ts</field> <field name="OID">mihome.0.devices.smoke_158d0001bbb0dd.percent</field> </block> </value> </block> </value> <value name="B"> <block type="math_arithmetic" id="p7OnDM$U(G?+M]dH]Q4c"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="dHC`qxGdMK};1J]ds5NK"> <field name="NUM">4</field> </shadow> </value> <value name="B"> <shadow type="math_number" id=":j5=P+^0Z=[k3RMia{+R"> <field name="NUM">3600000</field> </shadow> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="xgM8|{bvW0F8_bnFF,wg"> <field name="VAR" id="|5zh1NF_Z:d(jIZ=Q~@Z">sensor offline new</field> <value name="VALUE"> <block type="text_join" id="nMBy%,sZ/`fT%gC|3bKp"> <mutation items="4"></mutation> <value name="ADD0"> <block type="variables_get" id="*r`*1~P{TNX4(vS*ZeG1"> <field name="VAR" id="|5zh1NF_Z:d(jIZ=Q~@Z">sensor offline new</field> </block> </value> <value name="ADD1"> <block type="text" id="7Bn!L:Pp(?tKxz)^A{G,"> <field name="TEXT">Smoke Alarm keine Antwort seit, </field> </block> </value> <value name="ADD2"> <block type="convert_from_date" id="s*b|2aJs5~m{)Y_fz4*{"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation> <field name="OPTION">custom</field> <field name="FORMAT">JJJJ.MM.TT SS:mm:ss</field> <value name="VALUE"> <block type="get_value" id="ygUB[JxGuOy6qU^OlwVk"> <field name="ATTR">ts</field> <field name="OID">mihome.0.devices.smoke_158d0001bbb0dd.percent</field> </block> </value> </block> </value> <value name="ADD3"> <block type="text_newline" id="!~|V~#m--+N9F9oqq^3G"> <field name="Type">\n</field> </block> </value> </block> </value> </block> </statement> </block>
-
@crunchip Danke! Bin per Google in diesem Thread gelandet und hab erst mal Dein Skript ausprobiert und mich damit generell erst mit diesem Thema beschäftigt.
Für alle, denen es ähnlich geht: Ich hab aber dann doch ein Video von "EddyD's SmartHome" mit einer sehr genauen Schritt für Schritt-Erklärung gefunden, das ähnlich an die Sache rangeht aber gleich alle Sensoren auf einmal überprüft und im Fehlerfall detaillierte Meldungen an Telegram schickt: https://www.youtube.com/watch?v=ADOvYf9phdw
Hab dies nun so umgesetzt und es funktioniert für mich!Daher lasse ich zum Rumspielen gleich den fertigen Code hier, vielleicht hilft das ja mal jemandem:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="e1Z5ztMVm#sK#iROReL?">ObjektIDFrom</variable> <variable id="6M)z|Bp]A-cP.Z:y^S#2">SensorOnlineXY</variable> </variables> <block type="schedule" id="~~O7$kqhbfxqA.)9TBD`" x="-537" y="38"> <field name="SCHEDULE">0 9,12,15,18 * * *</field> <statement name="STATEMENT"> <block type="controls_forEach" id="O0xF=f_Ne?-v5NB^Jx.M"> <field name="VAR" id="6M)z|Bp]A-cP.Z:y^S#2">SensorOnlineXY</field> <value name="LIST"> <block type="selector" id="%v|hFTz@j7{?M/-~w8A."> <field name="TEXT">state[id=zigbee.0.*.temperature]</field> </block> </value> <statement name="DO"> <block type="controls_if" id="IkMujq-zSGk(.Hb}?TgE"> <value name="IF0"> <block type="logic_compare" id="#Wj1uJRI{)`/j|hKl|~2"> <field name="OP">LT</field> <value name="A"> <block type="get_value_var" id="A)TB(=!~-!ERIXqK6!c4"> <field name="ATTR">ts</field> <value name="OID"> <shadow type="text" id="?6,V2B]s7YzK!q12Ib+e"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="Na$=.b.89i!X2P^+m5H)"> <field name="VAR" id="6M)z|Bp]A-cP.Z:y^S#2">SensorOnlineXY</field> </block> </value> </block> </value> <value name="B"> <block type="math_arithmetic" id="Jk^Q%q/Iy#XqH3Ab6i?3"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="YaMxijnxMJ^_^P?=S3mW"> <field name="NUM">1</field> </shadow> <block type="time_get" id=":?ykiQPw~U20!AIK_]2c"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">object</field> </block> </value> <value name="B"> <shadow type="math_number" id="af7U[HI!36=LM0RIj2{l"> <field name="NUM">3600000</field> </shadow> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="4dtE!?uw[DEYudqEKmR}"> <field name="INSTANCE">.0</field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="U^hc20!4GO2~wm=8Y6[d"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="^LD7@0jQ|F=F3%sHFIy4" inline="false"> <mutation items="9"></mutation> <value name="ADD0"> <block type="text" id="IRXxnbf+q7a5TVc=X7-,"> <field name="TEXT">Der Sensor</field> </block> </value> <value name="ADD1"> <block type="text_newline" id="g_(Zv.iUF^Ih%%j=omSV"> <field name="Type">\n</field> </block> </value> <value name="ADD2"> <block type="text_getSubstring" id="4?X@;ym[DccNqWwRPG+|"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_END</field> <value name="STRING"> <block type="procedures_callcustomreturn" id="gA91XM3PmM`^O0q?|/+/"> <mutation name="ObjektNameXY"> <arg name="ObjektIDFrom"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="L,ghlcxVz}t4XqTR~~]F"> <field name="VAR" id="6M)z|Bp]A-cP.Z:y^S#2">SensorOnlineXY</field> </block> </value> </block> </value> <value name="AT1"> <block type="math_number" id="}YbvCu%mxn#^4P)PEM)d"> <field name="NUM">1</field> </block> </value> <value name="AT2"> <block type="math_number" id="!yAg_uo36!1%.]49Z^[%"> <field name="NUM">-1</field> </block> </value> </block> </value> <value name="ADD3"> <block type="text_newline" id="cY1$jppvp~fvaS_Kdi~Y"> <field name="Type">\n</field> </block> </value> <value name="ADD4"> <block type="text" id="|90BK%I{[dwAM+DO4nGO"> <field name="TEXT">war zuletzt online am</field> </block> </value> <value name="ADD5"> <block type="text_newline" id="LO|txr,YNpbq+E^HQ3sb"> <field name="Type">\n</field> </block> </value> <value name="ADD6"> <block type="text_join" id="RDsh*s1xoxtVfo6k(XZP" inline="false"> <mutation items="4"></mutation> <value name="ADD0"> <block type="convert_from_date" id="m(VsrR{t4Ct}ZR49:{tS"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation> <field name="OPTION">custom</field> <field name="FORMAT">TT.MM.</field> <value name="VALUE"> <block type="get_value_var" id="S**#R}ejnzfNt%,bdvS/"> <field name="ATTR">ts</field> <value name="OID"> <shadow type="text" id="SKUdExNrOg*a:*Z~2nz7"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="XzHhsi)ltwi)8M/0Xw!E"> <field name="VAR" id="6M)z|Bp]A-cP.Z:y^S#2">SensorOnlineXY</field> </block> </value> </block> </value> </block> </value> <value name="ADD1"> <block type="text" id="9Q8jE_xj.xEBS(oSCjIY"> <field name="TEXT">um</field> </block> </value> <value name="ADD2"> <block type="convert_from_date" id="X:L?*r;N#.mh(0S~bOqb"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">hh:mm</field> <value name="VALUE"> <block type="get_value_var" id="OX@icEA4,^I]@$dC5$4b"> <field name="ATTR">ts</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="*lF64/n=AB=3Z*7N6fjB"> <field name="VAR" id="6M)z|Bp]A-cP.Z:y^S#2">SensorOnlineXY</field> </block> </value> </block> </value> </block> </value> <value name="ADD3"> <block type="text" id="j^cIUO1Ubc2kBmx@2Z:r"> <field name="TEXT">Uhr</field> </block> </value> </block> </value> <value name="ADD7"> <block type="text_newline" id="E9Ajf*C{VN`[`7ic5)+`"> <field name="Type">\n</field> </block> </value> <value name="ADD8"> <block type="text" id="XlHc43D__?Zzv:Zfp#te"> <field name="TEXT">Bitte Status prüfen</field> </block> </value> </block> </value> </block> </statement> </block> </statement> </block> </statement> </block> <block type="procedures_defcustomreturn" id="`WVfnqUVQJgSu#?)-i?=" x="-387" y="38"> <mutation statements="false"> <arg name="ObjektIDFrom" varid="e1Z5ztMVm#sK#iROReL?"></arg> </mutation> <field name="NAME">ObjektNameXY</field> <field name="SCRIPT">cmV0dXJuIGdldE9iamVjdChPYmpla3RJREZyb20pLmNvbW1vbi5uYW1lOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
Im Besten Fall braucht man nur noch den Wert von "state[id=zigbee.0.*.temperature]" gegen einen eigenen Wert austauschen. Wie man diesen Wert findet, ist ebenfalls im verlinkten Video beschrieben!
Ich habe dann noch bei allen Sensoren den Namen "Temperature" auf "Temperatur Zimmer <xy>" ausgetauscht - das ist nötig, damit es in der Telegram-Meldung eindeutige Namen gibt.
Den im Video beschriebenen Baustein "Nimm Teil ab 1 bis von hinten X Buchstabe" brauche ich dadurch gar nicht, ich hab ihn hier aber zur Vollständigkeit drin gelassen...
-
@fritzthecat der Thread ist ja mittlerweile 3 Jahre alt, mittlerweile gibt es einen Adapter.