NEWS
(solved) Skript funktionslos, aber warum?
-
Ich habe folgendes Skript um aus einem Bewegungs- und einem Presencemelder einen Anwesenheitsdatenpunkt für ein Zimmer zu erstellen. Ich verstehe nur nicht warum es nicht funktioniert. Wenn einer der beiden true wird geht der Punkt auf true, wenn aber beide auf false sind wechselt die Anwesenheit nicht auf false. Was mache ich falsch?
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="Xg]w0]YLgHvU++$$J/er" x="63" y="63"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="7x2%hoC/rYfsB.uAP;Ke"> <field name="oid">zigbee.0.a4c138be6ae0e8dd.presence</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="v^hV~wV@WkPT,u0Uw,io"> <field name="oid">zigbee.0.00158d00030b342b.occupancy</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="/IXb;E$k=ka.+mi+g[[v"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="y~*M^!D5a0%ky6dLLpjl" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="H)A_rs_R!f$$LLMVuqD("> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="]r:rz.1Pb-XNF!3J~z87"> <field name="ATTR">val</field> <field name="OID">zigbee.0.a4c138be6ae0e8dd.presence</field> </block> </value> <value name="B"> <block type="logic_boolean" id="~T1*!~reS1=.lc+:O@Nd"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="1[uAy;k`tA73t[R3KO~p"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="Y+0.7hOcg~;e:F^|+$y("> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00030b342b.occupancy</field> </block> </value> <value name="B"> <block type="logic_boolean" id="`v$i5Rs^gAkUo,s,TB2T"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="ccHNe?u?jmJjPC*o+r?D"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Anwesenheit.Anwesenheit_Whiskeyzimmer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="l2lVo(X4HPA^v83zg0Bi"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="control" id="O7[q?!J%kGd@AXZC/q7g"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Anwesenheit.Anwesenheit_Whiskeyzimmer</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="s=~d!)M]KAEvKxv7N2bv"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </statement> </block> </xml>
======================= SUMMARY ======================= v.2023-10-10 Static hostname: ioBroker Icon name: computer-vm Chassis: vm 🖴 Virtualization: kvm Operating System: Debian GNU/Linux 12 (bookworm) Kernel: Linux 6.1.0-17-amd64 Architecture: x86-64 Hardware Vendor: QEMU Hardware Model: Standard PC _i440FX + PIIX, 1996_ Firmware Version: rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org Installation: kvm Kernel: x86_64 Userland: amd64 Timezone: Europe/Berlin (CET, +0100) User-ID: 1000 X-Server: false Boot Target: graphical.target Pending OS-Updates: 0 Pending iob updates: 0 Nodejs-Installation: /usr/bin/nodejs v18.19.0 /usr/bin/node v18.19.0 /usr/bin/npm 10.2.3 /usr/bin/npx 10.2.3 /usr/bin/corepack 0.22.0 Recommended versions are nodejs 18.19.0 and npm 10.2.3 Your nodejs installation is correct MEMORY: total used free shared buff/cache available Mem: 8.3G 5.7G 1.3G 516K 1.7G 2.7G Swap: 1.0G 0B 1.0G Total: 9.3G 5.7G 2.3G Active iob-Instances: 63 Active repo(s): stable ioBroker Core: js-controller 5.0.17 admin 6.12.0 ioBroker Status: iobroker is running on this host. Objects type: jsonl States type: jsonl Status admin and web instance: + system.adapter.admin.0 : admin : ioBroker - enabled, port: 8081, bind: 0.0.0.0, run as: admin + system.adapter.web.0 : web : ioBroker - enabled, port: 8082, bind: 0.0.0.0, run as: admin Objects: 24816 States: 21232 Size of iob-Database: 27M /opt/iobroker/iobroker-data/objects.jsonl 18M /opt/iobroker/iobroker-data/objects.json.migrated 18M /opt/iobroker/iobroker-data/objects.json.bak.migrated 54M /opt/iobroker/iobroker-data/states.jsonl 13M /opt/iobroker/iobroker-data/states.json.migrated 13M /opt/iobroker/iobroker-data/states.json.bak.migrated =================== END OF SUMMARY ====================
-
-
@dragon sagte in Funktionslos, aber warum?:
Was mache ich falsch?
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
-
Infos hinzugefügt, obwohl ich mir nicht vorstellen kann was das weiter hilft, weil viele andere Skripte funktionieren.
-
@arteck Ich denke du weist, dass die Frage auf das Skript bezogen war...
-
@dragon sagte in Funktionslos, aber warum?:
Was mache ich falsch?
-
Eigene DP solltest Du mit "Aktualisiere" schreiben, damit die im Baum nicht in rot dargestellt werden.
Hat aber nur optische Gründe.
https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps/6 -
Bau im Trigger mal eine Debug-Ausgabe ein und lass Dir die Werte der beiden betroffenen DP ins Log schreiben.
-
Ich würde es anders lösen:
Ich denke du weist, dass die Frage auf das Skript bezogen war...
Nur die Allerwenigsten hier werden sich zunächst das XML importieren, um zu sehen was Du überhaupt meinst.
Und wer nur am Handy liest, hat ganz schlechte Karten.
Blockly immer als Screenshot. Das XML kannst Du optional (in einen Spoiler verpackt) zeigen.Und die Ausgabe von
iob diag
ist in diesem Fall etwas zu viel des Guten -
-
Wenn das selbst angelegte Datenpunkte sind musst du den Baustein "aktualisieren" verwenden, nicht "steuern"
-
@dragon wer soll mit dem Titel klar kommen
Funktionslos, aber warum?
da kannst auch schreiben "geht nicht"
was ist funktionslos ?? iobroker ?? dein Auto ?? deine Uhr ?? Internetz ??
-
@arteck Es befindet sich doch im Unterforum Blockly. Was ist dann wohl gemeint... Die Zeit welche du aufbringst um mich hier zu schikanieren, könntest du einfach für eine Antwort verwenden. Ihr macht es Forenmitgliedern echt schwer.
-
Der entscheidende Punkt wurde weiter oben von @Codierknecht genannt:
Bau Dir log-Ausgaben in das Skript ein um zu schauen wie die beiden Datenpunkte stehen wenn das Skript triggert. So scheint erst einmal alles stimmig - es muss also irgendwo etwas schief gehen.
Keiner von uns hat eine Glaskugel die gut genug ist das einfach mal so heraus zu bekommen.
A.
-
@codierknecht ein interessanter Vorschlag. Nun ist die Frage warum ich das so machen sollte. Was ist der unterschied zwischen deinem Vorschlag und meiner Umsetzung. Also was ist an deinem besser und nicht einfach nur eine andere Lösung?
-
@dragon
Funktionieren sollte Deine Lösung auch.Wie gesagt: Bau Dir Debug-Ausgaben ein.
Also was ist an deinem besser und nicht einfach nur eine andere Lösung?
Ich behaupte einfach mal ganz dreist: Die ist etwas eleganter
Ein "Wert = falsch" ist ineffektiv. Das kann man genau so gut als "nicht Wert" formulieren.
Und statt auf "falsch" kann man mit dem "oder" ja auch auf "wahr" prüfen und spart sich eine weitere Operation.
Ich weiß: Ist Erbsenzählerei. Wir reden hier vermutlich über einige wenige Taktzyklen und Mikrosekunden. -
So, hat etwas gedauert, aber es gibt eine Lösung. Ein geprüfter Datenpunkt wurde nicht geändert. (Schlafenszeit) War der Übeltäter...