NEWS
Script zur Abfrage und Variable schreiben
-
Guten Morgen Community
ich bin neu hier und ackere mich gerade durch ioBroker. Eine ganze Menge habe ich schon hin bekommen und beiße mir gerade mangels Programmierkenntnisse an einer sicherlich ganz einfachen Anfrage die Zähne aus :lol: Ich dachte mit Blocky ist das kein problem … pustekuchen
Zum Problem:
Ich habe mit dem Parser zwei sensoren abgefragt die den Zustand meiner Balkontüre abfragen. True ist geschlossen. Ich habe einen oben und einen unten. Also habe ich folgende mögliche Zustände:
geklappt - oben false // unten true
offen - oben false // unten false
geschlossen - oben true // unten true
Ich möchte gerne in VIS eine Variable abfragen auf: geklappt, geschlossen oder offen und entsprechend den Zusatnd abbilden.
Ich bekomme aber leider das script nicht hin ... kann mir jemand aufs Pferd helfen, bitte ?
Viele Grüße,
Marc
-
Moin,
ich würde es so versuchen:
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="comment" id="PV@wi;P(7Or}IFr]G;w#" x="-462" y="-413"><field name="COMMENT">Variable erzeugen</field> <next><block type="create" id="hugGY.kjQ/6JbAbp0Coq"><field name="NAME">Fenster.Beispiel</field> <next><block type="comment" id="RpMUzedZCNLNs1nvcTPp"><field name="COMMENT">Trigger auf beide Sensoren</field> <next><block type="on_ext" id="fvW|9PA`%/Ku(:D{Ja*]"><mutation items="2"></mutation> <field name="CONDITION">any</field> <value name="OID0"><shadow type="field_oid" id="9MI^=*PdUsRSBiUgrdTM"><field name="oid">default</field></shadow></value> <value name="OID1"><shadow type="field_oid" id="c|b?yGNJrfUJHum.{_vw"><field name="oid">default</field></shadow></value> <statement name="STATEMENT"><block type="comment" id="4{-X-xbR}W-oA.g80Rj)"><field name="COMMENT">geklappt, offen, geschlossen</field> <next><block type="controls_if" id="8.Y]Z%8a[u@``jU=KJn0"><mutation elseif="2"></mutation> <value name="IF0"><block type="logic_operation" id="6#2g!iIGE*p(|-pLgwc;"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="Xr07{sCUI~9=X.S-YKGM"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="0}BQ|J#W|Vw/tT(bNjt%"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="logic_boolean" id="s]6]r!8A:yN,*bvr6f+{"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="e98Sejq:A3AQ:A#GS@.C"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="QfR[~u%#|Ls}hkSe{w8h"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="logic_boolean" id="^H![P|cPcmdge|+.*yo%"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO0"><block type="update" id="a6_rcw(oeo?0R{!KboQ]"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Fenster.Beispiel</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="Z5rAFVN;NX`P8HwBhMQZ"><field name="TEXT">geklappt</field></block></value></block></statement> <value name="IF1"><block type="logic_operation" id="k@q5C{Lpaee|s*mt8+^a"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="]7Lkad!(T0p={_+_HwXF"><field name="OP">EQ</field> <value name="A"><block type="get_value" id=".K^*@R+;*QibAU[0.9+_"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="logic_boolean" id=",tO!n!:nl,[Ip/aL!wX)"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="Ro%]a)~T2f1ssk7p-H~3"><field name="OP">EQ</field> <value name="A"><block type="get_value" id=".0M-VQgDL)ad3(R^d(VN"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="logic_boolean" id="yD/JCW`;myUubZxKZ@(L"><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO1"><block type="update" id="W5tQbsYs9^`ZWjx]`OBn"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Fenster.Beispiel</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="IT`QVa.4WL1^LFH;@9%9"><field name="TEXT">offen</field></block></value></block></statement> <value name="IF2"><block type="logic_operation" id="m:]a)s.C{D;7o~JJ27L@"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="^PqvNp!a_YLTXW=eMf{P"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="N}L}/|]wJ@7K7v*wMq-F"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="logic_boolean" id="dL!C)uUUW+/FN+-z,0.6"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="j0xXDheR61i8vDfT8vn4"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="u22,f18P,,#F~P;FRVK?"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="logic_boolean" id="=1dQnj(#f]Auc.^}hE+2"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO2"><block type="update" id="0z~WEv|~p-dn4hXzA_!s"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Fenster.Beispiel</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="QhMt4p4iTcaD!{AxyiH5"><field name="TEXT">geschlossen</field></block></value></block></statement></block></next></block></statement></block></next></block></next></block></next></block></xml>
Geht bestimmt auch noch eleganter…
-
Habe kein Blockly zum basteln, Skript sollte ich aber so hinbekommen (ungetestet):
// hier die IDs der Sensor-Datenpunkte eintragen const idOben = "ID-Sensor-oben"; const idUnten = "ID-Sensor-unten"; const idZustand = `javascript.${instance}.Tuer_Zustand`; // <= sollte immer unter javascript.x angelegt werden, daher keine anderen Prefixe vergeben. Vorsicht bei den Anführungszeichen, das sind Backticks, keine doppelten! createState(idZustand, {type: "string"}); on([idOben, idUnten], (obj) => { const obenGeschlossen = getState(idOben).val; const untenGeschlossen = getState(idUnten).val; let zustand; if (obenGeschlossen && untenGeschlossen) { zustand = "geschlossen"; } else if (!obenGeschlossen && untenGeschlossen) { zustand = "geklappt"; } else { zustand = "offen"; } setState(idZustand, zustand); });
Edit: Ist im wesentlichen gleich mit dem Blockly meines Vorredners, nur wird der Wert der Zustände in Variablen zwischengespeichert.
-
Vielen Dank euch beiden !!! ich werde gleich mal testen !
-
DANKESCHÖN - Hat einwandfrei funktioniert und ich habe dazu gelernt !
-
Markierst du das Thema bitte noch als gelöst?
-
ja, mache ich später Ich hab gerade nämlich noch etwas geändert und dabei ist mir was aufgefallen:
Problem ist: Wenn iibroker frisch gestartet wurde hat die Balkontüre keinen Status. Erst wenn sie das erste mal verändert wurde ändert sich der Status zu einem gültigen Status.
Jetzt dachte ich mir ich nehme einfach mal noch die Aktualisierungszeit vom Homepilot dazu als Trigger. Das funktioniert auch, bei der ersten Änderung bekomme ich für die Balkontüre den korrekten Status angezeigt, ABER es erscheint auch eine Warnung im Log mit der ich nichts anfangen kann.
13:33:27.798 [warn] javascript.0 at Object. (script.js.Homepilot.Balkontuere:12:5) ````//aus dem Script Editor
javascript.0 2018-08-13 13:33:27.796 warn at Object. <anonymous>(script.js.Homepilot.Balkontuere:12:5)
javascript.0 2018-08-13 13:33:27.791 warn Wrong type of javascript.0.scriptEnabled.Homepilot.Balkontuere: "string". Please fix, while deprecated and will not work in next versions.</anonymous>Jetzt ist das genau die Stelle an der das Script 'geschlossen' schreibt und der Status bereits 'geschlossen' ist. Hängt das damit zusammen ? Aber die Fehlermeldung hat ja etwas mit 'String' zun tun … :?: Eines jedenfalls ist sicher, es kommt durch die hinzugefügte object.ID homepilot.uws.aktualisiert Hier noch das script
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="comment" id="PV@wi;P(7Or}IFr]G;w#" x="-462" y="-413"><field name="COMMENT">Variable erzeugen</field>
<next><block type="create" id="hugGY.kjQ/6JbAbp0Coq"><field name="NAME">scriptEnabled.Homepilot.Balkontuere</field>
<next><block type="comment" id="RpMUzedZCNLNs1nvcTPp"><field name="COMMENT">Trigger auf beide Sensoren</field>
<next><block type="on_ext" id="fvW|9PA`%/Ku(:D{Ja*]"><mutation items="3"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow type="field_oid" id="9MI^=*PdUsRSBiUgrdTM"><field name="oid">parser.0.homepilot.fenstersensor.balkontüre-oben</field></shadow></value> <value name="OID1"><shadow type="field_oid" id="c|b?yGNJrfUJHum.{_vw"><field name="oid">parser.0.homepilot.fenstersensor.balkontüre-unten</field></shadow></value> <value name="OID2"><shadow type="field_oid" id="K%VOr7K8/vt-1ZLkZ{5m"><field name="oid">parser.0.homepilot.uws.aktualisiert</field></shadow></value> <statement name="STATEMENT"><block type="comment" id="4{-X-xbR}W-oA.g80Rj)"><field name="COMMENT">geklappt, offen, geschlossen</field> <next><block type="controls_if" id="8.Y]Z%8a[u@``jU=KJn0"><mutation elseif="2"></mutation> <value name="IF0"><block type="logic_operation" id="6#2g!iIGE*p(|-pLgwc;"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="Xr07{sCUI~9=X.S-YKGM"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="0}BQ|J#W|Vw/tT(bNjt%"><field name="ATTR">val</field> <field name="OID">parser.0.homepilot.fenstersensor.balkontüre-oben</field></block></value> <value name="B"><block type="logic_boolean" id="s]6]r!8A:yN,*bvr6f+{"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="e98Sejq:A3AQ:A#GS@.C"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="QfR[~u%#|Ls}hkSe{w8h"><field name="ATTR">val</field> <field name="OID">parser.0.homepilot.fenstersensor.balkontüre-unten</field></block></value> <value name="B"><block type="logic_boolean" id="^H![P|cPcmdge|+.*yo%"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO0"><block type="update" id="a6_rcw(oeo?0R{!KboQ]"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.scriptEnabled.Homepilot.Balkontuere</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="Z5rAFVN;NX`P8HwBhMQZ"><field name="TEXT">geklappt</field></block></value></block></statement> <value name="IF1"><block type="logic_operation" id="k@q5C{Lpaee|s*mt8+^a"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="]7Lkad!(T0p={_+_HwXF"><field name="OP">EQ</field> <value name="A"><block type="get_value" id=".K^*@R+;*QibAU[0.9+_"><field name="ATTR">val</field> <field name="OID">parser.0.homepilot.fenstersensor.balkontüre-oben</field></block></value> <value name="B"><block type="logic_boolean" id=",tO!n!:nl,[Ip/aL!wX)"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="Ro%]a)~T2f1ssk7p-H~3"><field name="OP">EQ</field> <value name="A"><block type="get_value" id=".0M-VQgDL)ad3(R^d(VN"><field name="ATTR">val</field> <field name="OID">parser.0.homepilot.fenstersensor.balkontüre-unten</field></block></value> <value name="B"><block type="logic_boolean" id="yD/JCW`;myUubZxKZ@(L"><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO1"><block type="update" id="W5tQbsYs9^`ZWjx]`OBn"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.scriptEnabled.Homepilot.Balkontuere</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="IT`QVa.4WL1^LFH;@9%9"><field name="TEXT">offen</field></block></value></block></statement> <value name="IF2"><block type="logic_operation" id="m:]a)s.C{D;7o~JJ27L@"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="^PqvNp!a_YLTXW=eMf{P"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="N}L}/|]wJ@7K7v*wMq-F"><field name="ATTR">val</field> <field name="OID">parser.0.homepilot.fenstersensor.balkontüre-oben</field></block></value> <value name="B"><block type="logic_boolean" id="dL!C)uUUW+/FN+-z,0.6"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="j0xXDheR61i8vDfT8vn4"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="u22,f18P,,#F~P;FRVK?"><field name="ATTR">val</field> <field name="OID">parser.0.homepilot.fenstersensor.balkontüre-unten</field></block></value> <value name="B"><block type="logic_boolean" id="=1dQnj(#f]Auc.^}hE+2"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO2"><block type="update" id="0z~WEv|~p-dn4hXzA_!s"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.scriptEnabled.Homepilot.Balkontuere</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="QhMt4p4iTcaD!{AxyiH5"><field name="TEXT">geschlossen</field></block></value></block></statement></block></next></block></statement></block></next></block></next></block></next></block></xml>
Hat jemand eine Idee ? vg, Marc