Bei mir nun auch,
und in Kombi mit den Befehlen
..../rpc/Ui.Tab?x=400&y=650
und
..../rpc/Ui.Tab?x=55&y=55
via Motion als Auslöser, springt es auch dahin wo ich es haben will ohne zu tippen. Schick.
Bei mir nun auch,
und in Kombi mit den Befehlen
..../rpc/Ui.Tab?x=400&y=650
und
..../rpc/Ui.Tab?x=55&y=55
via Motion als Auslöser, springt es auch dahin wo ich es haben will ohne zu tippen. Schick.
ab und zu hängt es, etwas träge..
also Finger weg.... 🤣 oder verbrennen!
Hat jemand die
2.3.0-beta2 - 20240921-152107/2.3.0-9a23c2da-beta2
probiert?
iobroker Nutzer auf jeden Fall, nun stehen fast alle Türen offen.😬
Hi,
geht auch wenn man nur iobroker und den Lovelace Adapter installiert hat. 👍
Update: Szenen lassen sich nun erstellen.
Status:
"Vielen Dank, dass Sie uns kontaktiert haben!
Das von Ihnen genannte Problem wurde durch unsere Entwickler bereits Lokalisiert und behoben und sollte mit dem nächsten Cloud Update innerhalb der nächsten Tage zur Verfügung stehen. "
kannst du eine Szene erstellen? Ich komme bis zur "Aktion", ab da geht es nicht weiter, keine Auswahlmöglichkeit.
Nach ein paar Anläufen hat es dann geklappt. Aber ohne dem Video (Beschreibung) wäre ich da nie drauf gekommen.
Da muss noch einiges gerade gebogen werden. Aber die Idee ist gut.
Ok, ich schaue mir das mal an. Danke für die Info.
Wäre es mein Rollo, würde ich es ohne Safety testen, sollte es immer noch mucken einen anderen Shelly einbauen und dann noch mal testen.
und Obstacle?
6:59 Uhr kurz geklappert hat, der Rollo hat kurz gezuckt
Grüße,
was hast du unter Safety eingetragen?
Hi, ich habe das ein wenig anders gelöst, da das script bei mir nicht funktioniert hat.
2x Blu Door im Einsatz , bis jetzt ohne Probleme. Jeder so wie er mag,
Datenpunkte erstellt...
Bildschirmfoto vom 2023-07-14 21-39-04.png
Bildschirmfoto vom 2023-07-14 21-39-25.png
den string dann via Blockly weiter verarbeiten.
Bildschirmfoto vom 2023-07-14 21-45-06.png
Script im Shelly:
// Start der config
// Aktion url1 & url2 eintragen in "" setzen
let url1 = "http://192.168.178.111:8087/set/0_userdata.0.Datenpunkte.BLU.BLU2?value=false"
let url2 = "http://192.168.178.111:8087/set/0_userdata.0.Datenpunkte.BLU.BLU2?value=true"
// Aktion url3 als String in "" setzen , Info hinter dem =" leer lassen!
let url3 = "http://192.168.178.111:8087/set/0_userdata.0.Datenpunkte.BLU.BLU2-String?value="
// Mac Adresse vom BLU hier in "" setzen
let mac1 = "d8:7e:1b:a5:a9:a6"
// Ende config
// //
function triggerClose() { // print("Briefkasten Geschlossen"); // Info Text intern // HTTP Befehl absetzen Shelly.call( "HTTP.GET", { "url": url1 , }, function(result) { // print("Feedback ", result.body); }
);
} // Kontakt offen
function triggerOpen() { // print("Briefkasten Offen"); Shelly.call( "HTTP.GET", { "url": url2, }, function(result) { // print("Feedback ", result.body); }
);
}
let CONFIG = { shelly_blu_address: mac1, actions: [ { cond: { Window: 0, }, action: triggerClose, }, { cond: { Window: 1, }, action: triggerOpen, }, ],
};
let ALLTERCO_MFD_ID_STR = "0ba9";
let BTHOME_SVC_ID_STR = "fcd2";
let ALLTERCO_MFD_ID = JSON.parse("0x" + ALLTERCO_MFD_ID_STR);
let BTHOME_SVC_ID = JSON.parse("0x" + BTHOME_SVC_ID_STR);
let SCAN_DURATION = BLE.Scanner.INFINITE_SCAN;
let ACTIVE_SCAN = typeof CONFIG.shelly_blu_name_prefix !== "undefined" && CONFIG.shelly_blu_name_prefix !== null;
let uint8 = 0;
let int8 = 1;
let uint16 = 2;
let int16 = 3;
let uint24 = 4;
let int24 = 5;
function getByteSize(type) { if (type === uint8 || type === int8) return 1; if (type === uint16 || type === int16) return 2; if (type === uint24 || type === int24) return 3; //impossible as advertisements are much smaller; return 255;
}
let BTH = [];
BTH[0x00] = { n: "pid", t: uint8 };
BTH[0x01] = { n: "Battery", t: uint8, u: "%" };
BTH[0x05] = { n: "Illuminance", t: uint24, f: 0.01 };
BTH[0x1a] = { n: "Door", t: uint8 };
BTH[0x20] = { n: "Moisture", t: uint8 };
BTH[0x2d] = { n: "Window", t: uint8 };
BTH[0x3a] = { n: "Button", t: uint8 };
BTH[0x3f] = { n: "Rotation", t: int16, f: 0.1 };
let BTHomeDecoder = { utoi: function (num, bitsz) { let mask = 1 << (bitsz - 1); return num & mask ? num - (1 << bitsz) : num; }, getUInt8: function (buffer) { return buffer.at(0); }, getInt8: function (buffer) { return this.utoi(this.getUInt8(buffer), 8); }, getUInt16LE: function (buffer) { return 0xffff & ((buffer.at(1) << 8) | buffer.at(0)); }, getInt16LE: function (buffer) { return this.utoi(this.getUInt16LE(buffer), 16); }, getUInt24LE: function (buffer) { return ( 0x00ffffff & ((buffer.at(2) << 16) | (buffer.at(1) << 8) | buffer.at(0)) ); }, getInt24LE: function (buffer) { return this.utoi(this.getUInt24LE(buffer), 24); }, getBufValue: function (type, buffer) { if (buffer.length < getByteSize(type)) return null; let res = null; if (type === uint8) res = this.getUInt8(buffer); if (type === int8) res = this.getInt8(buffer); if (type === uint16) res = this.getUInt16LE(buffer); if (type === int16) res = this.getInt16LE(buffer); if (type === uint24) res = this.getUInt24LE(buffer); if (type === int24) res = this.getInt24LE(buffer); return res; }, unpack: function (buffer) { // beacons might not provide BTH service data if (typeof buffer !== "string" || buffer.length === 0) return null; let result = {}; let _dib = buffer.at(0); result["encryption"] = _dib & 0x1 ? true : false; result["BTHome_version"] = _dib >> 5; if (result["BTHome_version"] !== 2) return null; //Can not handle encrypted data if (result["encryption"]) return result; buffer = buffer.slice(1);
let _bth; let _value; while (buffer.length > 0) { _bth = BTH[buffer.at(0)]; if (_bth === "undefined") { console.log("BTH: unknown type"); break; } buffer = buffer.slice(1); _value = this.getBufValue(_bth.t, buffer); if (_value === null) break; if (typeof _bth.f !== "undefined") _value = _value * _bth.f; result[_bth.n] = _value; buffer = buffer.slice(getByteSize(_bth.t)); } return result; },
};
let ShellyBLUParser = { getData: function (res) { let result = BTHomeDecoder.unpack(res.service_data[BTHOME_SVC_ID_STR]); result.addr = res.addr; result.rssi = res.rssi; return result; },
};
let last_packet_id = 0x100;
function scanCB(ev, res) { if (ev !== BLE.Scanner.SCAN_RESULT) return; // skip if there is no service_data member if ( typeof res.service_data === "undefined" || typeof res.service_data[BTHOME_SVC_ID_STR] === "undefined" ) return; // skip if we are looking for name match but don't have active scan as we don't have name if ( typeof CONFIG.shelly_blu_name_prefix !== "undefined" && (typeof res.local_name === "undefined" || res.local_name.indexOf(CONFIG.shelly_blu_name_prefix) !== 0) ) return; // skip if we don't have address match if ( typeof CONFIG.shelly_blu_address !== "undefined" && CONFIG.shelly_blu_address !== res.addr ) return; let BTHparsed = ShellyBLUParser.getData(res); // skip if parsing failed if (BTHparsed === null) { console.log("Failed to parse BTH data"); return; } // skip, we are deduping results if (last_packet_id === BTHparsed.pid) return; last_packet_id = BTHparsed.pid; // console.log("Shelly BTH packet: ", JSON.stringify(BTHparsed)); // Aktion URL3 zusammen setzen und senden Shelly.call( "HTTP.GET", { "url": url3 + JSON.stringify(BTHparsed) , }, function(result) { // print("Feedback ", result.body); } ); // execute actions from CONFIG let aIdx = null; for (aIdx in CONFIG.actions) { // skip if no condition defined if (typeof CONFIG.actions[aIdx]["cond"] === "undefined") continue; let cond = CONFIG.actions[aIdx]["cond"]; let cIdx = null; let run = true; for (cIdx in cond) { if (typeof BTHparsed[cIdx] === "undefined") run = false; if (BTHparsed[cIdx] !== cond[cIdx]) run = false; } // if all conditions evaluated to true then execute if (run) CONFIG.actions[aIdx]["action"](BTHparsed); }
}
BLE.Scanner.Start({ duration_ms: SCAN_DURATION, active: ACTIVE_SCAN }, scanCB);
Alles anzeigen
Hallo christianfeu ,
Idee:
Hast du zufällig im iobroker Shelly-Adapter die Option:
"wenn Update verfügbar bei allen Shellys installieren" aktiv?
Nicht das über den Adapter das angeschoben wird, aber das nicht richtig funktioniert.
(sollte aber nicht aktiviert werden, Updates am besten selbst von Hand anstoßen)
VG
Sehr schön, .
Nachtrag:
wer eine andere Shelly Adapter Version benutzt, muss das Blockly etwas geändert werden.
Da der/die "mode" in den neuen SYS Ordner gewandert ist. (mit div. anderen Datenpunkten)
die werden dann auch bei einer Änderung alle gleich gezogen, wer das nicht mag, muss sich da einen Filter bauen
Bildschirmfoto vom 2023-01-03 21-43-20.png
Hier wird nun auch der Sys* Ordner getriggert und später wird der Pfad dann den Triggerauslöser angepasst, sys oder lights
Die "effect" werden in meinem Shelly Adapter Version 6.3.1 nur bei Neustart des Shellys geändert, warum auch immer, da wird also vermutlich nichts passieren.
Bildschirmfoto vom 2023-01-03 21-43-50.png
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="sCJ$u|c0CztjMD,NY1dH">Bulb-Master</variable>
<variable id="Ma(C!`Af=GR.G2d;??P9">Bulb-2</variable>
<variable id="AXkj4VSO)r)E7`e):NvG">Bulb-3</variable>
<variable id="RqP6naNU7!IpvxlL:{|D">Kanal-ID</variable>
<variable id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</variable>
</variables>
<block type="variables_set" id="V~=xb`!89yOg}WIBC`Y(" x="313" y="88">
<field name="VAR" id="sCJ$u|c0CztjMD,NY1dH">Bulb-Master</field>
<value name="VALUE">
<block type="text" id="r3!78ftUv2^^2V.F3$]C">
<field name="TEXT">shelly.0.SHCB-1#483FDA9285A6#1</field>
</block>
</value>
<next>
<block type="variables_set" id="O]O#-|;,4TFHzh=mu!B9">
<field name="VAR" id="Ma(C!`Af=GR.G2d;??P9">Bulb-2</field>
<value name="VALUE">
<block type="text" id="f2jL2~f7WvTa6;D;l}ME">
<field name="TEXT">shelly.0.SHCB-1#483FDA928657#1</field>
</block>
</value>
<next>
<block type="variables_set" id="D:D*Y7u+?{/CpYHXDarW">
<field name="VAR" id="AXkj4VSO)r)E7`e):NvG">Bulb-3</field>
<value name="VALUE">
<block type="text" id="V3^Nf~oNW.EQl:8@S[4F">
<field name="TEXT">shelly.0.SHCB-1#8CAAB555DFF7#1</field>
</block>
</value>
<next>
<block type="on_ext" id=":W$E,VqIx/:{gZt#LT2.">
<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="6q7}+8YpZCU4RKmeDX,u">
<field name="oid">default</field>
</shadow>
<block type="selector" id="=]6:]+x{+NEpe!(kyu}v">
<field name="TEXT">shelly.0.SHCB-1#483FDA9285A6#1.lights*</field>
</block>
</value>
<value name="OID1">
<shadow type="field_oid" id="Hut#g?K/^@CXZHuVe@N;">
<field name="oid">default</field>
</shadow>
<block type="selector" id="EuZ2zGy*rrB_8=g[u7S,">
<field name="TEXT">shelly.0.SHCB-1#483FDA9285A6#1.Sys*</field>
</block>
</value>
<statement name="STATEMENT">
<block type="variables_set" id="R`Bw?tpEHu93FOQ+b[=9">
<field name="VAR" id="RqP6naNU7!IpvxlL:{|D">Kanal-ID</field>
<value name="VALUE">
<block type="text_getSubstring" id="3LcMZ!lWqJ2lzGIb^S|(">
<mutation at1="true" at2="false"></mutation>
<field name="WHERE1">FROM_START</field>
<field name="WHERE2">LAST</field>
<value name="STRING">
<block type="on_source" id="!=/4{.V}U#,m[xNutP~h">
<field name="ATTR">channelId</field>
</block>
</value>
<value name="AT1">
<block type="text_indexOf" id="j,(mqO!;JpqYG.uM2Rd~">
<field name="END">LAST</field>
<value name="VALUE">
<block type="on_source" id="PFpZSZ`#:VY,GUy4}]8.">
<field name="ATTR">channelId</field>
</block>
</value>
<value name="FIND">
<shadow type="text" id="R+8hnOuC}q5-F5|Yq$V5">
<field name="TEXT">.</field>
</shadow>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="%)Tt;/QyC$]IS5@+F`-f">
<field name="VAR" id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</field>
<value name="VALUE">
<block type="text_getSubstring" id="{raPA?Db|rR,Fb*kE(yl">
<mutation at1="true" at2="false"></mutation>
<field name="WHERE1">FROM_START</field>
<field name="WHERE2">LAST</field>
<value name="STRING">
<block type="on_source" id="Pb32{*V+X##/uf,_TUk;">
<field name="ATTR">id</field>
</block>
</value>
<value name="AT1">
<block type="math_arithmetic" id="plFtBQ~1aDt@H]3_Z@5:">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
<block type="text_length" id="EOk3}.vrKBtK3t}zZ?EI">
<value name="VALUE">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
<block type="on_source" id="jPE[B%|9G3+Mx~rj`F%i">
<field name="ATTR">channelId</field>
</block>
</value>
</block>
</value>
<value name="B">
<shadow type="math_number" id="is9~)6b^T_`Tv(Gn?wV/">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="control_ex" id="lohW#9cs`9qG*OkqwD]u" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id="hiVqJFlClrN`h%)pTw!|">
<field name="oid">Object ID</field>
</shadow>
<block type="text_join" id="gS,-GA-~Hx$SW?a#dL)U">
<mutation items="3"></mutation>
<value name="ADD0">
<block type="variables_get" id=",|H:eexVc+EBiO+[t@aY">
<field name="VAR" id="Ma(C!`Af=GR.G2d;??P9">Bulb-2</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="te4qgcQ]2^B@^FGTbEQ9">
<field name="VAR" id="RqP6naNU7!IpvxlL:{|D">Kanal-ID</field>
</block>
</value>
<value name="ADD2">
<block type="variables_get" id="F9*H#7#U|8vo)P$IUGQB">
<field name="VAR" id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</field>
</block>
</value>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="K@(Kh;(h~|I3KZ:Q^BWm">
<field name="BOOL">TRUE</field>
</shadow>
<block type="on_source" id="68os(~!d)QnvZLaPRAxo">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="ND=:acp},`;srEbEsbT+">
<field name="NUM">0</field>
</shadow>
</value>
<next>
<block type="control_ex" id="=Kx$PMeG,r7scYeb.?A{" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid">
<field name="oid">Object ID</field>
</shadow>
<block type="text_join" id="7k#Fx1DkpQ9gcg9Z$6%|">
<mutation items="3"></mutation>
<value name="ADD0">
<block type="variables_get" id="d{l(^l9NnCLn]W)yG_D,">
<field name="VAR" id="AXkj4VSO)r)E7`e):NvG">Bulb-3</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="YZT1b9;0cw@:Wk}31Vr9">
<field name="VAR" id="RqP6naNU7!IpvxlL:{|D">Kanal-ID</field>
</block>
</value>
<value name="ADD2">
<block type="variables_get" id="YJaaO$qF|OU)4mvZs}*)">
<field name="VAR" id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</field>
</block>
</value>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean">
<field name="BOOL">TRUE</field>
</shadow>
<block type="on_source" id="y6;S-45euwu;DP3po8tF">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="K,h*j{gX%bxg6FFZ29R)">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</xml>
Hallo,
hier ein Blockly was das umsetzen kann.
Master eintragen mit .lights
Blub2 ..
Blub3.
ggf. erweitern....
Triggerblock den Master mit .lights.* eintragen, damit alles was danach kommt getriggert wird.
Die interne Variable Auslöser wird mit dem Text was nach "lights." (Kanal ID) gefüttert
bei schreibe Objekt ID "steuern", werden die Texte zusammengeführt und ergeben die ID die geändert werden soll. also Bulb-2+Auslöser"text"
sollte so klappen, ggf. erweiter wenn es mehr als 3 Bulbs sein, oder kürzen.
Bildschirmfoto vom 2023-01-03 20-53-49.png
es werden alle Änderungen weiter gegeben die nach lights. folgen
Bildschirmfoto vom 2023-01-03 21-02-27.png
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="sCJ$u|c0CztjMD,NY1dH">Bulb-Master</variable>
<variable id="Ma(C!`Af=GR.G2d;??P9">Bulb-2</variable>
<variable id="AXkj4VSO)r)E7`e):NvG">Bulb-3</variable>
<variable id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</variable>
</variables>
<block type="variables_set" id="V~=xb`!89yOg}WIBC`Y(" x="313" y="88">
<field name="VAR" id="sCJ$u|c0CztjMD,NY1dH">Bulb-Master</field>
<value name="VALUE">
<block type="text" id="r3!78ftUv2^^2V.F3$]C">
<field name="TEXT">shelly.0.SHCB-1#483FDA9285A6#1.lights</field>
</block>
</value>
<next>
<block type="variables_set" id="O]O#-|;,4TFHzh=mu!B9">
<field name="VAR" id="Ma(C!`Af=GR.G2d;??P9">Bulb-2</field>
<value name="VALUE">
<block type="text" id="f2jL2~f7WvTa6;D;l}ME">
<field name="TEXT">shelly.0.SHCB-1#483FDA928657#1.lights</field>
</block>
</value>
<next>
<block type="variables_set" id="D:D*Y7u+?{/CpYHXDarW">
<field name="VAR" id="AXkj4VSO)r)E7`e):NvG">Bulb-3</field>
<value name="VALUE">
<block type="text" id="V3^Nf~oNW.EQl:8@S[4F">
<field name="TEXT">shelly.0.SHCB-1#8CAAB555DFF7#1.lights</field>
</block>
</value>
<next>
<block type="on_ext" id=":W$E,VqIx/:{gZt#LT2.">
<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="6q7}+8YpZCU4RKmeDX,u">
<field name="oid">default</field>
</shadow>
<block type="selector" id="=]6:]+x{+NEpe!(kyu}v">
<field name="TEXT">shelly.0.SHCB-1#483FDA9285A6#1.lights*</field>
</block>
</value>
<statement name="STATEMENT">
<block type="variables_set" id="%)Tt;/QyC$]IS5@+F`-f">
<field name="VAR" id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</field>
<value name="VALUE">
<block type="text_getSubstring" id="{raPA?Db|rR,Fb*kE(yl">
<mutation at1="true" at2="false"></mutation>
<field name="WHERE1">FROM_START</field>
<field name="WHERE2">LAST</field>
<value name="STRING">
<block type="on_source" id="Pb32{*V+X##/uf,_TUk;">
<field name="ATTR">id</field>
</block>
</value>
<value name="AT1">
<block type="math_arithmetic" id="plFtBQ~1aDt@H]3_Z@5:">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
<block type="text_length" id="EOk3}.vrKBtK3t}zZ?EI">
<value name="VALUE">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
<block type="on_source" id="jPE[B%|9G3+Mx~rj`F%i">
<field name="ATTR">channelId</field>
</block>
</value>
</block>
</value>
<value name="B">
<shadow type="math_number" id="is9~)6b^T_`Tv(Gn?wV/">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="control_ex" id="lohW#9cs`9qG*OkqwD]u" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id="hiVqJFlClrN`h%)pTw!|">
<field name="oid">Object ID</field>
</shadow>
<block type="text_join" id="gS,-GA-~Hx$SW?a#dL)U">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="variables_get" id=",|H:eexVc+EBiO+[t@aY">
<field name="VAR" id="Ma(C!`Af=GR.G2d;??P9">Bulb-2</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="F9*H#7#U|8vo)P$IUGQB">
<field name="VAR" id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</field>
</block>
</value>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="K@(Kh;(h~|I3KZ:Q^BWm">
<field name="BOOL">TRUE</field>
</shadow>
<block type="on_source" id="68os(~!d)QnvZLaPRAxo">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="ND=:acp},`;srEbEsbT+">
<field name="NUM">0</field>
</shadow>
</value>
<next>
<block type="control_ex" id="=Kx$PMeG,r7scYeb.?A{" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid">
<field name="oid">Object ID</field>
</shadow>
<block type="text_join" id="7k#Fx1DkpQ9gcg9Z$6%|">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="variables_get" id="d{l(^l9NnCLn]W)yG_D,">
<field name="VAR" id="AXkj4VSO)r)E7`e):NvG">Bulb-3</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="YJaaO$qF|OU)4mvZs}*)">
<field name="VAR" id="odQS(K(Xp.E)E7+n@uPD">Ausloeser</field>
</block>
</value>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean">
<field name="BOOL">TRUE</field>
</shadow>
<block type="on_source" id="y6;S-45euwu;DP3po8tF">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="K,h*j{gX%bxg6FFZ29R)">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</xml>