NEWS
Blockly reagiert nicht
-
Hallo zusammen,
ich wollte die freien Tage nutzen und endlich mit meiner Alarmanlage von der CCU zum ioBroker umziehen.
Zuerst wollte ich mir eine Liste mit den Zuständen der Fenster erstellen und habe mir hierzu dieses Programm als Vorlage genommen.https://www.machs-smart.de/offene-und-geschlossene-fenster-mit-blockly-als-liste-ausgeben/
Das Programm regiert aber nicht auf Änderungen der Fensterzustände.
Ich vermute, dass ich irgendwo bei dem "IDs vom Selektor" nen Fehler drin habe, da ich den natürlich an meine Datenpunkte angepasst habe.
Ich nutze optische HmIP-Fensterkontakte von denen ich je ein Alias angelegt habe.Hier mein Blockly:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="sg:VQr7[sF[c+NR+mPfp">ObjectID</variable> <variable id="SLHhZ]o2[nkZ6x*8eRfj">Liste</variable> <variable id="1:kQ)2_xj0ELukd*(w!k">Wert</variable> <variable id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</variable> <variable id="[UG=(pvWmZmFgE-HPCCD">Liste Fenster/Türen geöffnet</variable> <variable id="{TsTs+Y3v~YJRGCRqZfq">Liste Fenster/Türen geschlossen</variable> <variable id="2D^=L-$dbewM%nGkw,Nq">i</variable> <variable id="izo=QJgqy;59L,[2*GzC">j</variable> </variables> <block type="procedures_defcustomreturn" id="xCZ0az-CC8sASheLIhA?" x="13" y="13"> <mutation statements="false"> <arg name="ObjectID" varid="sg:VQr7[sF[c+NR+mPfp"></arg> </mutation> <field name="NAME">Name</field> <field name="SCRIPT">bGV0IG5hbWUgPSBnZXRPYmplY3QoT2JqZWN0SUQpLmNvbW1vbi5uYW1lOw0KcmV0dXJuIG5hbWU7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomreturn" id="]=T[l:Qa0itbRJ8F5JQW" x="13" y="63"> <mutation statements="false"> <arg name="Liste" varid="SLHhZ]o2[nkZ6x*8eRfj"></arg> <arg name="Wert" varid="1:kQ)2_xj0ELukd*(w!k"></arg> </mutation> <field name="NAME">Multisort</field> <field name="SCRIPT">cmV0dXJuIDA7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="on_ext" id="1i+D5}O}MN_U%YvpGsK/" x="13" y="113"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="+$aUF!#M|_4D65-06JvI"> <field name="oid">ID auswählen</field> </shadow> <block type="selector" id="5ZggO?]|0Myn@`#_a,JT"> <field name="TEXT">state[id=*ACTUAL](functions=fenster)</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id=")fNPiG^g9NkonCg`LkVX"> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> <value name="VALUE"> <block type="text" id="*l1l=Gx~@#4n!Yp9LYgt"> <field name="TEXT"></field> </block> </value> <next> <block type="variables_set" id="UI#URY^$.(3-Gd]mQ@gJ"> <field name="VAR" id="[UG=(pvWmZmFgE-HPCCD">Liste Fenster/Türen geöffnet</field> <value name="VALUE"> <block type="lists_create_with" id=",u2Z#s^H%`E2gPIYOvr9"> <mutation items="0"></mutation> </block> </value> <next> <block type="variables_set" id="g(?%_t#h~M(|c@`,LQsr"> <field name="VAR" id="{TsTs+Y3v~YJRGCRqZfq">Liste Fenster/Türen geschlossen</field> <value name="VALUE"> <block type="lists_create_with" id="fY-Q$wlt2WPA;]py{`^k"> <mutation items="0"></mutation> </block> </value> <next> <block type="controls_forEach" id="Av3}L/U$V@AW{gaR#Pdi"> <field name="VAR" id="2D^=L-$dbewM%nGkw,Nq">i</field> <value name="LIST"> <block type="selector" id="P(1N3AiS=CxtT68-=f}o"> <field name="TEXT">state[id=*ACTUAL](functions=fenster)</field> </block> </value> <statement name="DO"> <block type="controls_if" id="sb=P{|#jJbPZx8P,+Eqa"> <mutation else="1"></mutation> <value name="IF0"> <block type="get_value_var" id="L#w1K.4g%4d7+ewpljh["> <field name="ATTR">val</field> <value name="OID"> <shadow type="field_oid" id="u_QzJ.OT}t88X;|Fhe=m"> <field name="oid">ID auswählen</field> </shadow> <block type="variables_get" id="_~|#BZ:}*sl:QZyYwI?|"> <field name="VAR" id="2D^=L-$dbewM%nGkw,Nq">i</field> </block> </value> </block> </value> <statement name="DO0"> <block type="lists_setIndex" id="kgfEw-YUvQ3.!w][j@v5" inline="false"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">FIRST</field> <value name="LIST"> <block type="variables_get" id="QvjIztl{3C(|HP8Nf.G("> <field name="VAR" id="[UG=(pvWmZmFgE-HPCCD">Liste Fenster/Türen geöffnet</field> </block> </value> <value name="TO"> <block type="procedures_callcustomreturn" id="G6pL9SIGnu@gx}3YP_(q"> <mutation name="Name"> <arg name="ObjectID"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="JSI03Ix^9Cvudp:h+m5x"> <field name="VAR" id="2D^=L-$dbewM%nGkw,Nq">i</field> </block> </value> </block> </value> </block> </statement> <statement name="ELSE"> <block type="lists_setIndex" id="p=1P^`U4X{g:u}hVcj!l" inline="false"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">FIRST</field> <value name="LIST"> <block type="variables_get" id="(asGC6.iwC@$[YJ%^P)p"> <field name="VAR" id="{TsTs+Y3v~YJRGCRqZfq">Liste Fenster/Türen geschlossen</field> </block> </value> <value name="TO"> <block type="procedures_callcustomreturn" id="Mqj*|C.MFfQ]DOQ9wfCW"> <mutation name="Name"> <arg name="ObjectID"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="*LDAW{5Wh1`y155Tm^gg"> <field name="VAR" id="2D^=L-$dbewM%nGkw,Nq">i</field> </block> </value> </block> </value> </block> </statement> </block> </statement> <next> <block type="controls_if" id="fxSN4{r]B?Zwk~Hi/DS("> <value name="IF0"> <block type="logic_negate" id="#@?gCi672)7Xl]@n~;Uy"> <value name="BOOL"> <block type="variables_get" id="~[3C`d]l,W7:F;hm4u.X"> <field name="VAR" id="[UG=(pvWmZmFgE-HPCCD">Liste Fenster/Türen geöffnet</field> </block> </value> </block> </value> <statement name="DO0"> <block type="text_append" id="86@|*}$/b;G*pmq?R0J="> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> <value name="TEXT"> <shadow type="text" id="O/CPRLBbA-g^P5h`3S#z"> <field name="TEXT"></field> </shadow> <block type="text" id="Ml!IJn|Ad`U6o:@]IyUF"> <field name="TEXT">geöffnet</field> </block> </value> <next> <block type="controls_forEach" id="WZ1j{Q`YbUc!vinT6HNR"> <field name="VAR" id="izo=QJgqy;59L,[2*GzC">j</field> <value name="LIST"> <block type="procedures_callcustomreturn" id="BI/C7^{(B$h{y|f?4j5h"> <mutation name="Multisort"> <arg name="Liste"></arg> <arg name="Wert"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="q#_B~@wrsrcvj5`O(MZ6"> <field name="VAR" id="[UG=(pvWmZmFgE-HPCCD">Liste Fenster/Türen geöffnet</field> </block> </value> <value name="ARG1"> <block type="math_number" id="RftG/U*VIHBu!nv[ZpHt"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO"> <block type="text_append" id="8q(bRzzBw3)Z@qMIo8bY"> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> <value name="TEXT"> <shadow type="text" id="O/CPRLBbA-g^P5h`3S#z"> <field name="TEXT"></field> </shadow> <block type="lists_getIndex" id="E`DJU18hZ(k`%[#%)|uf"> <mutation statement="false" at="true"></mutation> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="D~cl,_]:vw,e^-LAEMyk"> <field name="VAR" id="izo=QJgqy;59L,[2*GzC">j</field> </block> </value> <value name="AT"> <block type="math_number" id="YqVJ|{Gg}@E:jNyR$uMg"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </statement> </block> </next> </block> </statement> <next> <block type="controls_if" id="!bygQf,~yYMPOcH@hWaG"> <value name="IF0"> <block type="logic_negate" id="zn#[)*?]Q2j}ucy.sU^6"> <value name="BOOL"> <block type="variables_get" id="FJahL8}81SLnI6c6^9=e"> <field name="VAR" id="{TsTs+Y3v~YJRGCRqZfq">Liste Fenster/Türen geschlossen</field> </block> </value> </block> </value> <statement name="DO0"> <block type="text_append" id=",XDO7isJ^)wW%Z%y*eJf"> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> <value name="TEXT"> <shadow type="text" id="4j11$u);3C}:kFPf}DUU"> <field name="TEXT"></field> </shadow> <block type="text" id="Of#Ze8?7;iV?_FzuX=lv"> <field name="TEXT">geschlossen</field> </block> </value> <next> <block type="controls_forEach" id="n],-O2:?ItyAc0CD;P;C"> <field name="VAR" id="izo=QJgqy;59L,[2*GzC">j</field> <value name="LIST"> <block type="procedures_callcustomreturn" id="q7=}yl/;`^,=uOU)0bd3"> <mutation name="Multisort"> <arg name="Liste"></arg> <arg name="Wert"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="T-^KE[1d1IuK(({Z@W;T"> <field name="VAR" id="{TsTs+Y3v~YJRGCRqZfq">Liste Fenster/Türen geschlossen</field> </block> </value> <value name="ARG1"> <block type="math_number" id="RD%v!+jJg)xO6SByI2{*"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO"> <block type="text_append" id="/p%5!kra%2A$s)4aT%j]"> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> <value name="TEXT"> <shadow type="text" id="O/CPRLBbA-g^P5h`3S#z"> <field name="TEXT"></field> </shadow> <block type="lists_getIndex" id="2b|w*G(*`(?AgEoSX*bW"> <mutation statement="false" at="true"></mutation> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="W[r;oG{!A9rDLi)+m4FP"> <field name="VAR" id="izo=QJgqy;59L,[2*GzC">j</field> </block> </value> <value name="AT"> <block type="math_number" id="F]5qoB{?%)9|np%(J6=G"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </statement> </block> </next> </block> </statement> <next> <block type="debug" id="^)uyP}2(YxP-)9nwVJOH"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="2Ephok)!~5CwF]FTing0"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="Z^3O~(=^AukmtgSmgQoL"> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> </block> </value> <next> <block type="pushover" id="~O9:W)VnePI@cCIIoxVJ"> <field name="INSTANCE"></field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <field name="FORMAT">none</field> <value name="MESSAGE"> <shadow type="text" id="I%i#HC@..nSt|eOojZQB"> <field name="TEXT">text</field> </shadow> <block type="variables_get" id="KVIR2S+7+nkSmFr/$]6~"> <field name="VAR" id="gQ^MWH@U]r?C~C(,j:=g">Liste Fenster/Türen</field> </block> </value> <value name="SOUND_CUSTOM"> <shadow type="text" id="w,?Kim9=yNlI+C|r8mux"> <field name="TEXT"></field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </xml>
-
@triplex Bitte stell einen lesbaren Screenshot zur Verfügung. Nicht jeder kann dein Skript importieren - man muss den Pushover adapter installiert haben - den hab ich nicht.
Ansonsten solltest Du einfach mal eine Log-Ausgabe des Selektor Ergebnisses machen - dann kannst du prüfen ob der das liefert was du brauchst.
A.
-
Wie muss ich den "IDs vom Selektor" befüllen?
-
@triplex sagte: "IDs vom Selektor" nen Fehler drin habe
Die ID lautet "enum.functions.fenster" (genau so geschrieben)?
Die Funktion Multisort enthält nur "return 0".
Man kann ein Array nicht mit "falls nicht array" prüfen.Versuche es mal so, wenn die Aufzählungs-ID passt:
-
@triplex sagte in Blockly reagiert nicht:
Wie muss ich den "IDs vom Selektor" befüllen?
Das löst dein Problem nur bedingt.
ein paar Fragen dazu:
- warum gehst du jedes mal wenn sich ein Objekt aus der Liste ändert immer alle Objekte durch ? Du hältst doch sowieso 2 interne Listen mit allen Elementen.
- was macht die Funktion 'multisort' (eine Beschreibung reicht, ich muss nicht den Code sehen)
- was macht die Funktion 'Name' ? (auch hier reicht eine Beschreibung, der Code muss nicht sein)
- der folgende Block funktioniert so nicht. Da die Variable
Liste Fenster/Türen geschlossen
eine Liste ist, ist die Falls abfrage immer falsch.
Statt dessen sollte diese Abfrage auf die Länge der Liste gehen.
Ich würde das ganze aber generell umstellen. Anbei 3 Screenshots für 3 Bereiche. Wichtig: die Funktionen Multisort und Name kannst / musst du an den entsprechenden Stellen einfügen.
-
Teil: Initialisierung - da werden einmal alle States eingelesen und in den beiden Listen gespeichert, sowie eine Meldung abgegeben wie der Status aktuell ist
-
Teil: Trigger - da wird nur das Element aus geöffnet in geschlossen (oder umgekehrt) umsortiert welches den Trigger auslöst, und dann wird eine Nachricht erzeugt.
-
Teil: Pushover / Text Erzeugung
In diesem 3. Teil kannst du die Sortierung der Namen vornehmen und dann die Pushover Meldung erzeugen. Ich hab nur einen Debug Baustein eingebaut, da ich kein Pushover habe. Auch wenn du verhindern willst das du zu viele Nachrichten bekommst wäre das dann in dieser Funktion.
Viel spass beim Nachbauen.
A.
-
@asgothian Danke für die Rückmeldung.
Hatte das Programm von "Machs-Smart.de" übernommen...Link siehe 1. Post.
Hab auch gerade festgestellt, dass ich bei dem "Nicht" einen Block vergessen habe.
Aber auch wenn ich das ändere, dann läuft das Programm immer noch nicht.Werde jetzt dein Variante mal nachbauen und berichten.
-
@asgothian In dem Block "in der Liste...." kann ich kein "entferne" auswählen.
Bzw. finde ich den Block so bei mir garnicht.
-
@triplex
Meinen Beitrag hast du übersehen? -
@paul53 Ist mir durchgegangen...sorry.
Hab es gerade mal nachgebaut.
Läuft bei mir auch nicht.
Es wird anscheinend nicht erkannt, dass sich der Status eines Fensters geändert hat. -
@triplex sagte: nicht erkannt, dass sich der Status eines Fensters geändert hat.
Stimmt der Selektor mit (functions=fenster)? Wie lautet die ID der Aufzählung?
-
@paul53 Ich weiß jetzt nicht genau ob ich dich richtig verstanden habe.
So sieht das unter "Objekte" aus. -
@triplex sagte: ob ich dich richtig verstanden habe.
Nein, so sieht man nur den Namen des Gewerkes. Ich meinte unter Kategorien/Gewerke die ID:
-
@paul53 Ah...da lag der 1. Fehler...bei mir heißt es "window" und nicht "Fenster"
Jetzt bekomme ich zumindest schonmal ne Nachricht.
Da steht dann aber nur ACTUAL,ACTUAL,ACTUAL,.....,ACTUAL drin und nicht die Namen der jeweiligen Fenster.
Werde mir das morgen nochmal genauer angucken...für heute reicht es.
Danke für die Hilfe. -
@triplex sagte: nicht die Namen der jeweiligen Fenster.
Dann suche im Forum nach "parentName".
Inhalt von parentName(id):
id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id)) return getObject(id).common.name;
-
@paul53 said in Blockly reagiert nicht:
id = id.substring(0, id.lastIndexOf('.'));
if(existsObject(id)) return getObject(id).common.name;Da bekomme ich jetzt Erros im Log.
-
@triplex sagte: Da bekomme ich jetzt Erros im Log.
Ach ja,id
wird später nochmal verwendet. Dann ändere den FunktionsinhaltEDIT: Eigentlich sollten lokale Variablen mit dem gleichen Bezeichner nicht auf globale Variablen rückwirken.
Wenn ich es unter Javascript teste, passiert es auch nicht. Der Fehler muss wohl woanders liegen? -
@triplex sagte in Blockly reagiert nicht:
@asgothian In dem Block "in der Liste...." kann ich kein "entferne" auswählen.
Bzw. finde ich den Block so bei mir garnicht.
Du musst diesen nehmen, und dann das "nimm" in "entferne" ändern!
Sorry für die späte Antwort - war nicht am Rechner.
A.