NEWS
Blockly - Sub-Objekt Wert ändern
-
Ich habe gestern meinen ersten Shelly Pro 3 erhalten und - ähnlich wie @Walter-O - baue ich mir gerade ein Skript für die Auswertung und das Schalten (über MQTT / RPC).
Zum Schalten muss ich einen JSON wie diesen senden:
{"id":0,"src":"shellies/ShellyPro3-Buero-59/rpc-response","method":"Switch.Set","params":{"id":0,"on":false}}
unter
params
muss ich dieid
0,1 oder 2 wählen, dazu dannon
auftrue
oderfalse
src
gibt an, an welchem Topic das Ergebnis aka Result vom Shelly gesendet wird.Nun dacht ich, ich mache es mir einfach und wandle das JSON in ein Objekt, ändere die Werte und sende es wiederum in ein JSON konvertiert an den entsprechenden MQTT-Datenpunkt.
Nun istparam
ja ein - ich nennen das jetzt mal so - Subobjekt / Unterobjekt.
Wie mache ich das mit den vorgegebenen Bausteinen?
und der Export:<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="1SE|mW%0mMn7R3:V^R1}">MyJSON</variable> <variable id="zZO9u;/n=^Ub?PoYZDJf">MyObjekt</variable> </variables> <block type="variables_set" id="/!PewV:=To515X^%8,YG" x="62" y="62"> <field name="VAR" id="1SE|mW%0mMn7R3:V^R1}">MyJSON</field> <value name="VALUE"> <block type="text" id="9!l2fKzf=aH521#|S+)1"> <field name="TEXT">{"id":0,"src":"shellies/ShellyPro3-Buero-59/rpc-response","method":"Switch.Set","params":{"id":0,"on":false}}</field> </block> </value> <next> <block type="variables_set" id="9ms?NL|0B21P}(C/Jib7"> <field name="VAR" id="zZO9u;/n=^Ub?PoYZDJf">MyObjekt</field> <value name="VALUE"> <block type="convert_json2object" id="@qulm)U2$ZJ8Y(G}8]Tq"> <value name="VALUE"> <block type="text" id="X.#/3yNBs+lkp3AOW$}4"> <field name="TEXT">{"id":0,"src":"shellies/ShellyPro3-Buero-59/rpc-response","method":"Switch.Set","params":{"id":0,"on":false}}</field> </block> </value> </block> </value> <next> <block type="object_set_attr" id="UZrMs;N{pyDzb[WeRlSO"> <field name="ATTR">src</field> <value name="OBJECT"> <block type="variables_get" id="CW-dvJi#_{BTr=yiGmBk"> <field name="VAR" id="zZO9u;/n=^Ub?PoYZDJf">MyObjekt</field> </block> </value> <value name="VALUE"> <shadow type="text" id="L]|A]:gAiw/rf1wnHu8p"> <field name="TEXT">NurEinTest</field> </shadow> </value> <next> <block type="debug" id="1V?[]u6!bb*2`S#?Hc,m"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="g*4-QP/wF}}.GC:FBPi%"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="$nl[s0Oa!wrbvS-^#o!`"> <field name="VAR" id="zZO9u;/n=^Ub?PoYZDJf">MyObjekt</field> </block> </value> <next> <block type="object_set_attr" id="[GTA1boehshefRT}e1S+"> <field name="ATTR">params.on</field> <value name="OBJECT"> <block type="variables_get" id="f3KMRHJtyE47+*]!P=i!"> <field name="VAR" id="zZO9u;/n=^Ub?PoYZDJf">MyObjekt</field> </block> </value> <value name="VALUE"> <shadow type="text" id="7[VE~al7}LB8bT%Q2svp"> <field name="TEXT">NurEinTest</field> </shadow> <block type="logic_boolean" id="T,~~IRUwio_%:/,p4hx^"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="debug" id="0T3zfR%q3[~VL/)U:E*}"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="g*4-QP/wF}}.GC:FBPi%"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="7l;x({FJuM?_Nw)!]k5b"> <field name="VAR" id="zZO9u;/n=^Ub?PoYZDJf">MyObjekt</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
Wie wäre die richtige Schreibweise in dem "Setze Attribut" Block um auf das Sub-Item zuzugreifen? er hängt das nur an:
2024-03-15 10:21:00.756 - info: javascript.0 (2441614) script.js.Tests.Forum_Test_JSON: { id: 0, src: 'NurEinTest', method: 'Switch.Set', params: { id: 0, on: false }, 'params.on': true }
-
Der Block ist aktuell nicht so konzipiert, dass man damit beliebige Pfade angeben kann. Alternativ müsstest Du das Objekt erst holen (Attribut params von Objekt), dann ändern und dann wieder setzen.
-
@haus-automatisierung Danke, hat sofort geklappt!
-
@bananajoe Warum nutzt Du nicht einfach den Shelly-Adapter? Dort habe ich mir die Gedanken zu den JSON-Payloads ja bereits für Dich gemacht.