NEWS
Zigbee Kommando via Javascript senden
-
Ich habe folgendes Script um ein zigbee device anzusprechen damit dieser einen Datenpunkt füllt. In der Zigbee Adapter Konfiguration unter "Entwickler" funktioniert die Abfrage (message in {devID......}
sendTo("zigbee.0", "send", { devId: "zigbee.0.842e14fffe359c8f", ep: "", cid: "haElectricalMeasurement", cmd: "read", cmdType: "foundation", zclData: { activePower: {} }, cfg: null });
Der entsprechende Datenpunkt (power) wird nicht aufgefrischt. Was mache ich falsch? Was fehlt?
Ich bin Anfänger in Javascript. Danke!
-
@hukio sagte:
Der entsprechende Datenpunkt (power) wird nicht aufgefrischt. Was mache ich falsch?
In Javascript wird ein Datenpunkt mit getState(id) abgefragt. Wert:
let power = geState(id).val;
-
@paul53 said in Zigbee Kommando via Javascript senden:
let power = geState(id).val;
Der Datenpunkt muß aufgefrischt werden mit einer Abfrage beim device, da er sich nicht von alleine ändert. Daher das Kommando an den device. Habe dies leider nicht richtig ausgedrückt. Es geht um die Anregung des devices, damit er den Datenpunkt füllt.
-
@hukio Das Skript führt nicht dazu das der Adapter eine Nachricht ins Zigbee-Netz schickt. Die Funktion die du aufrufen willst und die Parameterliste passen nicht zusammen.
A.
-
@Asgothian
wie kann ich denn diese, ich glaube message, an den Blitzwolf plug senden? @dimaiv hat vorgeschlagen dies an den plug zu senden (link text). Wenn ich dies über die Expertenfunktion in der Adapterkonfiguration mache, funktioiniert es auch. Wie kann ich dies aus Javascript heraus machen?
Danke HUK -
@hukio
Das ist bisher nicht vorgesehen. Ich muss mir das anschauen. Habe gestern Abend ein paar kurze Versuche gemacht und damit den Zigbee Adapter zum Absturz gebracht. ggf. kann ich da am Wochenende noch einmal genauer schauen.Prinzipiell stehe ich dieser Arbeitsweise aber negativ gegenüber - das ist so nur ganz bedingt nutzbar. Ein Konzept wie das darunter liegende Problem angegangen werden kann gibt es schon - Alleine die Zeit zur Umsetzung fehlt. Ziel bei der Umsetzung ist ein Datenpunkt über den ein Versuch der Datenabfrage für einen angegebenen Datenpunkt möglich wird.
A.
-
@Asgothian
Es funktioniert ganz gut, schon gefühlt 1 Jahr lang bei mir, ohne fehler. Mann muss nur die Befehle richtig schreiben. Ich steuere so die Geräte, die noch nicht im Adapter unterstützt sind. Hier ein Beispiel von mir, für die Dose (ich mache über Blockly).<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="interval" id="Intervall">Intervall</variable> </variables> <block type="timeouts_setinterval" id="?8hK!-J!G%AAa9N}!}i7" x="13" y="-387"> <field name="NAME">Intervall</field> <field name="INTERVAL">5000</field> <field name="UNIT">ms</field> <statement name="STATEMENT"> <block type="procedures_callnoreturn" id="/51|+5{?}.bAVEct2vp}"> <mutation name="Abfrage Power"></mutation> </block> </statement> </block> <block type="procedures_defnoreturn" id="QdkGqIq%b^1*8|50X@UB" x="13" y="-287"> <field name="NAME">Abfrage Power</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="sendto_custom" id="+ek,04|z_X4`6,*N*vkG"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="" with_statement="false"></mutation> <field name="INSTANCE">zigbee.0</field> <field name="COMMAND">sendToZigbee</field> <field name="LOG"></field> <field name="WITH_STATEMENT">FALSE</field> <value name="ARG0"> <shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id="a:uy]/~1ij)VF`.xf}M{"> <field name="TEXT"></field> </shadow> <block type="text" id="/O)mWoBJivIMZ3e9Hqvt"> <field name="TEXT">{ "id": "zigbee.0.842e14fffedb8ae5", "ep": "1", "cid": "haElectricalMeasurement", "cmd": "read", "cmdType": "foundation", "zclData": { "activePower": {} } }</field> </block> </value> </block> </statement> </block> </xml>
Kann man so importieren? Also hier wird Power alle 5 sek abgefragt.
-
@dimaiv Kannst Du das dann bitte mit @hukio gängig machen. Ich hatte es versucht und es hat recht heftig geknallt.
Insgesamt bin ich aber der Meinung das wir für diese Art Aufgabe eine Methode brauchen die möglichst ohne Zigbee-Detailwissen funktioniert.
Mir schwebt eine Option vor mit der der Zigbee Adapter wenn das denn vom Herdsman unterstützt wird versucht den Wert eines DP direkt von der Hardware abfragt.
A.
-
@dimaiv und @Asgothian vielen Dank. Ich war schon dicht dran. Benutze auch Blockly. Der Trick ist nicht die send Funktion (senden an den Zigbee Adapter) sondern die sendToZigbee Funktion des Zigbee Adapters im Blockly als Befehl zu nehmen. Funktioniert einwandfreil. Danke an Euch beide!