Sonoff NSPanel - ioBroker-Integration
Vor einiger Zeit hatte ich das NSPanel von Sonoff schon auf YouTube und hier im Blog vorgestellt. Das Gerät schien sehr vielversprechend zu sein - zumindest aus Hardware-Sicht. Also habe ich mich dazu entschieden, das Thema weiter zu verfolgen. In diesem Video schauen wir uns gemeinsam an, wie man Tasmota auf das Sonoff NSPanel flasht, wie man Tasmota richtig konfiguriert, damit die Software mit dem Display kommunizieren kann und ich zeige einige Beispiele, wie man aus ioBroker mit Widgets arbeitet. Leider ist das Thema nicht mit wenigen Sätzen erklärt, wodurch das Video etwas länger geworden ist. Ich bin mir aber sicher, dass Du so den besten Überblick bekommst, was mit dem Geräte in Kombination mit einem Smart Home System so möglich ist.
Video
Links
Sonoff NSPanel kaufen
- AliExpress **
- Amazon **
oder in weiß
- AliExpress **
- Amazon **
Befehle
In diesem Beispiel legen wir ein Schalter-Widget auf Index 1 an. Dieses Widget kann dann z.B. im ioBroker genutzt werden, um eigene Aktionen anzustoßen.
Weiter unten findest du ein Blockly-Script, welches Dir auch Widgets erstellen kann.
Sende einfach diese Befehle über die Konsole auf der Tasmota-Oberfläche.
NSPSend {"HMI_resources":[{"index":1,"ctype":"device","id":"1","uiid":1}]}
NSPSend {"index":2, "type":"delete"}
NSPSend {"index":3, "type":"delete"}
NSPSend {"index":4, "type":"delete"}
NSPSend {"index":5, "type":"delete"}
NSPSend {"index":6, "type":"delete"}
NSPSend {"index":7, "type":"delete"}
NSPSend {"index":8, "type":"delete"}
Welche Befehle unterstützt werden, ist hier dokumentiert.
Angepasstes Script
Das originale nspanel.be Script macht leider mehr als wir brauchen:
- Es erstellt “Standard-Widgets” (siehe Video)
- Es werden Wetter-Infos von einer API abgeholt und dargestellt
- Auf dem Display werden die Werte des internen Temperatur-Sensors dargestellt
All das können wir nicht gebrauchen, da unser Smart-Home-System die Daten übergeben soll. Daher habe ich das Script angepasst und die überflüssige Logik entfernt.
Das schlankere Script findest du auf GitHub.
Blockly-Beispiel Widgets
Dieses Script reagiert auf das Result-Objekt von Tasmota über MQTT. Das Full Topic unter Tasmota wurde dafür wie folgt konfiguriert: SmartHome/%topic%/%prefix%/
. Bitte kontrolliere die IDs und passe diese an dein System an.
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="[pN*7+pI7`mS^v48AI2C">temp</variable>
<variable id="cgN3b1dG]l9vJae#x%.|">index</variable>
<variable id="H`0NS77?9z5:L[t(ay.@">ctype</variable>
<variable id="/a:u~VISw+Afcj|JR|8O">type</variable>
<variable id="}1#OtR*3yZ8ZdPNuPzT9">params</variable>
<variable id="~[^+suo|DPeoXQ|a#U$O">mqttCmndId</variable>
<variable id="aevDUp]R;DeT@4L/rdho">mqttLwtId</variable>
<variable id="ZpE5jt??D}:s}opX$elU">mqttResultId</variable>
<variable id="Hgc9h6j{(_HrOD+W-rN2">widgetIndex</variable>
<variable id="tIM,K-nHxcf0DRJN(Y)C">resultObj</variable>
<variable type="timeout" id="waitForBoot">waitForBoot</variable>
</variables>
<block type="procedures_defcustomnoreturn" id="tBm:we7xW3,X53RAG]ER" x="63" y="13">
<mutation statements="false">
<arg name="temp" varid="[pN*7+pI7`mS^v48AI2C"></arg>
</mutation>
<field name="NAME">setTemperature</field>
<field name="SCRIPT">Y29uc3QgdGVtcE9iamVjdCA9IHsKICAgIHRlbXBlcmF0dXJlOiB0ZW1wCn07CmNvbnNvbGUubG9nKCdOU1BTZW5kOiAnICsgSlNPTi5zdHJpbmdpZnkodGVtcE9iamVjdCkpOwpzZXRTdGF0ZShtcXR0Q21uZElkLCBKU09OLnN0cmluZ2lmeSh0ZW1wT2JqZWN0KSk7</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id="QZ(E*R:#^tJDH@B?4EHF" x="63" y="38">
<mutation statements="false">
<arg name="index" varid="cgN3b1dG]l9vJae#x%.|"></arg>
</mutation>
<field name="NAME">deleteWidget</field>
<field name="SCRIPT">Y29uc3Qgd2lkZ2V0T2JqZWN0ID0gewogICAgaW5kZXg6IGluZGV4LAogICAgdHlwZTogJ2RlbGV0ZScKfTsKY29uc29sZS5sb2coJ05TUFNlbmQ6ICcgKyBKU09OLnN0cmluZ2lmeSh3aWRnZXRPYmplY3QpKTsKc2V0U3RhdGUobXF0dENtbmRJZCwgSlNPTi5zdHJpbmdpZnkod2lkZ2V0T2JqZWN0KSk7</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id="Z1gw8,0k6N~]9.0I{c`!" x="63" y="63">
<mutation statements="false">
<arg name="index" varid="cgN3b1dG]l9vJae#x%.|"></arg>
<arg name="ctype" varid="H`0NS77?9z5:L[t(ay.@"></arg>
<arg name="type" varid="/a:u~VISw+Afcj|JR|8O"></arg>
</mutation>
<field name="NAME">createWidget</field>
<field name="SCRIPT">Y29uc3Qgd2lkZ2V0T2JqZWN0ID0gewogICAgIkhNSV9yZXNvdXJjZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAiaW5kZXgiOiBpbmRleCwKICAgICAgICAgICAgImN0eXBlIjogY3R5cGUsCiAgICAgICAgICAgICJpZCI6IGluZGV4LnRvU3RyaW5nKCksCiAgICAgICAgICAgICJ1aWlkIjogdHlwZQogICAgICAgIH0KICAgIF0KfTsKY29uc29sZS5sb2coJ05TUFNlbmQ6ICcgKyBKU09OLnN0cmluZ2lmeSh3aWRnZXRPYmplY3QpKTsKc2V0U3RhdGUobXF0dENtbmRJZCwgSlNPTi5zdHJpbmdpZnkod2lkZ2V0T2JqZWN0KSk7</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id="JjKn(WNnRSx123AsRjB1" x="63" y="88">
<mutation statements="false">
<arg name="index" varid="cgN3b1dG]l9vJae#x%.|"></arg>
<arg name="params" varid="}1#OtR*3yZ8ZdPNuPzT9"></arg>
</mutation>
<field name="NAME">setWidgetParams</field>
<field name="SCRIPT">Y29uc3QgcmVsYXRpb25PYmplY3QgPSB7CiAgICAicmVsYXRpb24iOiBbCiAgICAgICAgewogICAgICAgICAgICAiaWQiOiBpbmRleC50b1N0cmluZygpLAogICAgICAgICAgICAib25saW5lIjogdHJ1ZSwKICAgICAgICAgICAgInBhcmFtcyI6IHBhcmFtcwogICAgICAgIH0KICAgIF0KfTsKY29uc29sZS5sb2coJ05TUFNlbmQ6ICcgKyBKU09OLnN0cmluZ2lmeShyZWxhdGlvbk9iamVjdCkpOwpzZXRTdGF0ZShtcXR0Q21uZElkLCBKU09OLnN0cmluZ2lmeShyZWxhdGlvbk9iamVjdCkpOw==</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defnoreturn" id="9zfL=sT{0k2)6;~l)o|}" x="63" y="138">
<field name="NAME">initWidgets</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
<statement name="STACK">
<block type="comment" id="nb34T~)P67[(*u=je42f">
<field name="COMMENT">Beispiel: Toggle-Switch an Position 1</field>
<next>
<block type="procedures_callcustomnoreturn" id="_Na?8dXXNdmc^z/;c}u^">
<mutation name="createWidget">
<arg name="index"></arg>
<arg name="ctype"></arg>
<arg name="type"></arg>
</mutation>
<value name="ARG0">
<block type="math_number" id="qhM`lPMISbd_t30tPg)u">
<field name="NUM">1</field>
</block>
</value>
<value name="ARG1">
<block type="text" id="fB@CZ9L7Tx)5Ae[S-/Kr">
<field name="TEXT">group</field>
</block>
</value>
<value name="ARG2">
<block type="math_number" id="+]TF(%E*q^^u%CHD5z.{">
<field name="NUM">1</field>
</block>
</value>
<next>
<block type="comment" id="qbu}K3}n:v$@1qPK=IX7">
<field name="COMMENT">Restliche Widgets löschen</field>
<next>
<block type="controls_for" id="Zj`7J8U}-2jtZ`_@X*S(">
<field name="VAR" id="Hgc9h6j{(_HrOD+W-rN2">widgetIndex</field>
<value name="FROM">
<shadow type="math_number" id="*?tw.{_R[c0jlY6V[[%(">
<field name="NUM">2</field>
</shadow>
</value>
<value name="TO">
<shadow type="math_number" id="zy3_@3T]3S-l^%-,r%4n">
<field name="NUM">8</field>
</shadow>
</value>
<value name="BY">
<shadow type="math_number" id=":KMFw#)jV[xkn6C%-7}~">
<field name="NUM">1</field>
</shadow>
</value>
<statement name="DO">
<block type="procedures_callcustomnoreturn" id="EmNj8nlDc1$gu({hJA9,">
<mutation name="deleteWidget">
<arg name="index"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="t(|9o:Gv,o,[eX!/lkro">
<field name="VAR" id="Hgc9h6j{(_HrOD+W-rN2">widgetIndex</field>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="comment" id="yJ9?Mh}-G^y1Lg}W!ror" x="63" y="488">
<field name="COMMENT">Full topic in Tasmota: SmartHome/%topic%/%prefix%/</field>
<next>
<block type="variables_set" id="!ZL27~%4XS^GIsp$,TjP">
<field name="VAR" id="~[^+suo|DPeoXQ|a#U$O">mqttCmndId</field>
<value name="VALUE">
<block type="text" id="o[[y05]t{qk$F^]AJG]u">
<field name="TEXT">mqtt.0.SmartHome.nspanel_C79304.cmnd.NSPSend</field>
</block>
</value>
<next>
<block type="variables_set" id="bun(psdk1Bh4bV(-d^Fw">
<field name="VAR" id="aevDUp]R;DeT@4L/rdho">mqttLwtId</field>
<value name="VALUE">
<block type="text" id="QWxlNCp=-p_%hi!htLQ~">
<field name="TEXT">mqtt.0.SmartHome.nspanel_C79304.tele.LWT</field>
</block>
</value>
<next>
<block type="variables_set" id="rITtEbJ*XnsZ%(|)AxGY">
<field name="VAR" id="ZpE5jt??D}:s}opX$elU">mqttResultId</field>
<value name="VALUE">
<block type="text" id="3yhJLnCi].cjPy0QZX%)">
<field name="TEXT">mqtt.0.SmartHome.nspanel_C79304.tele.RESULT</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="5B,M{6073Jx7.7S{}4]G">
<mutation name="initWidgets"></mutation>
<next>
<block type="on_ext" id="IHkIGB_aJ=={[#xJH3Cl">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">true</field>
<value name="OID0">
<shadow type="field_oid" id=":%Z+6DxleqY]*,*NLY3Y">
<field name="oid">default</field>
</shadow>
<block type="variables_get" id="7RP1(a[;d4fV2Du[vo+[">
<field name="VAR" id="ZpE5jt??D}:s}opX$elU">mqttResultId</field>
</block>
</value>
<statement name="STATEMENT">
<block type="variables_set" id="GQp/+B[#cS7*;jJ)bKdg">
<field name="VAR" id="tIM,K-nHxcf0DRJN(Y)C">resultObj</field>
<value name="VALUE">
<block type="convert_json2object" id="6OUSmanN;zWzb;C0f3m{">
<value name="VALUE">
<block type="on_source" id="h-A5c/u;9ucgT|K/ntg%">
<field name="ATTR">state.val</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_if" id="=1^,PC#~*rRZtbF{VZjR">
<value name="IF0">
<block type="get_attr" id="K1s;#/e2g8YZT/Lu}c_?">
<value name="PATH">
<shadow type="text" id="Hkv+uAyP3^#W~h]99@*t">
<field name="TEXT">NSPanel</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="K31i70L$$?X50OY?$nY{">
<field name="VAR" id="tIM,K-nHxcf0DRJN(Y)C">resultObj</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="variables_set" id="64^z.-QNoJQ_+6LM5mU9">
<field name="VAR" id="Hgc9h6j{(_HrOD+W-rN2">widgetIndex</field>
<value name="VALUE">
<block type="get_attr" id="BHJGBbK,iqHZO^-F@k-q">
<value name="PATH">
<shadow type="text" id="U$LR3~OE*i9S]:NRb.pY">
<field name="TEXT">NSPanel.id</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="r^]pHhk+Xo5t1AKb-O,j">
<field name="VAR" id="tIM,K-nHxcf0DRJN(Y)C">resultObj</field>
</block>
</value>
</block>
</value>
<next>
<block type="comment" id="BWRRa8Il{h-N;zD@jUf=">
<field name="COMMENT">Für welches Widget ist der Befehl?</field>
<next>
<block type="controls_if" id="X}Xt@.~;{y]=C/(R@vo,">
<mutation elseif="1"></mutation>
<value name="IF0">
<block type="logic_compare" id="PzVs*;ol!*KBL*j^t)q|">
<field name="OP">EQ</field>
<value name="A">
<block type="variables_get" id="n~Bg9~[gqs[,X-E8M}o`">
<field name="VAR" id="Hgc9h6j{(_HrOD+W-rN2">widgetIndex</field>
</block>
</value>
<value name="B">
<block type="math_number" id="Oy8gy}|^Q+y-Tg+a.3cx">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="comment" id="Awlzupeq7qdMK5AGOi]$">
<field name="COMMENT">Ist es ein Switch-Befehl?</field>
<next>
<block type="controls_if" id="y=G2tAb|R1EZP-vzy0|%">
<value name="IF0">
<block type="get_attr" id="TTx_Jvq)XqxKQ/xbl1Ub">
<value name="PATH">
<shadow type="text" id="Szg@1uiFGYgs*N3_Q!2k">
<field name="TEXT">NSPanel.params.switch</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="jy4?,JKnm#6S.:3iI[S5">
<field name="VAR" id="tIM,K-nHxcf0DRJN(Y)C">resultObj</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="control" id="EeIf8hXqw_zP/[c3iWh~">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">hue.0.Schreibtisch.on</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="logic_compare" id="|8Bl3@O7mOZ%*g*n1QYT">
<field name="OP">EQ</field>
<value name="A">
<block type="get_attr" id="X{!@:/Ael+hT^7v10DWK">
<value name="PATH">
<shadow type="text" id="K-MPcd~az/E.B1,4hG3u">
<field name="TEXT">NSPanel.params.switch</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="r[3fNz]UId/UyCmdav6]">
<field name="VAR" id="tIM,K-nHxcf0DRJN(Y)C">resultObj</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="text" id="2IHj$68WOMw=Ts}c+r0H">
<field name="TEXT">on</field>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</statement>
<value name="IF1">
<block type="logic_compare" id="Cg6gGRghF.uMe,Bz0(lH">
<field name="OP">EQ</field>
<value name="A">
<block type="variables_get" id="O3ish0VOZxQxQ{$n..8H">
<field name="VAR" id="Hgc9h6j{(_HrOD+W-rN2">widgetIndex</field>
</block>
</value>
<value name="B">
<block type="math_number" id="eRbWjErChVYi8A_$)ATO">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</statement>
<next>
<block type="comment" id="LG9pn}J^;=p3%/.[/ZQH">
<field name="COMMENT">LWT überwachen, wenn Gerät wieder online</field>
<next>
<block type="on_ext" id="7`hBsLcs|]|+gKB9{k:*">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION">true</field>
<value name="OID0">
<shadow type="field_oid" id="OS$aDgD5RMCV0D*w:dOB">
<field name="oid">default</field>
</shadow>
<block type="variables_get" id="S1onAM.%F86D0Y0T:/n,">
<field name="VAR" id="aevDUp]R;DeT@4L/rdho">mqttLwtId</field>
</block>
</value>
<statement name="STATEMENT">
<block type="controls_if" id="1Zl(bF]sLz$:B:(g2Wvy">
<value name="IF0">
<block type="logic_compare" id="wOI#M-`K)ebeVKAPQJDs">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="09hBZ8={I/z11+RQ0[k)">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="text" id="2;S`K_QQLlb0L!915(*^">
<field name="TEXT">Online</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="debug" id="cbdJqZauF,H18x{(8Lt8">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text" id="as^JY._XYLiLpq_J[Y|M">
<field name="TEXT">Gerät wieder online - übertrage Widgets in 5 Sekunden</field>
</shadow>
</value>
<next>
<block type="timeouts_settimeout" id="U4S^h#fW?VrNElhm!/9R">
<field name="NAME">waitForBoot</field>
<field name="DELAY">5</field>
<field name="UNIT">sec</field>
<statement name="STATEMENT">
<block type="procedures_callnoreturn" id="#~G1[gfyht#w+ybY9hMt">
<mutation name="initWidgets"></mutation>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="comment" id=")-n:BsiU4!-O$,NIY#M=">
<field name="COMMENT">Wenn Änderung bestätigt: Feedback an Widget 1</field>
<next>
<block type="on_ext" id="gi)(I1mFU6#J#Q7ED`D$">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">true</field>
<value name="OID0">
<shadow type="field_oid" id="dVKBso]cCaN;9Na@3Efh">
<field name="oid">hue.0.Schreibtisch.on</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="procedures_callcustomnoreturn" id="GK@I-l{LOT1f3#6Z1tLr">
<mutation name="setWidgetParams">
<arg name="index"></arg>
<arg name="params"></arg>
</mutation>
<value name="ARG0">
<block type="math_number" id="ql^P-/mY]ALrMTB,]oth">
<field name="NUM">1</field>
</block>
</value>
<value name="ARG1">
<block type="convert_json2object" id="CaBI06^Vk={UOVWiy]Dh">
<value name="VALUE">
<block type="text_join" id="/gQwArXf4nPPNqJG{fDe">
<mutation items="3"></mutation>
<value name="ADD0">
<block type="text" id="hB*x2{kHp8p(w9Da8dP0">
<field name="TEXT">{"switch":"</field>
</block>
</value>
<value name="ADD1">
<block type="logic_ternary" id="^:%04E8=-(Qtga4+wnY.">
<value name="IF">
<block type="on_source" id="Waa2QArV=XkB~r`:BK2t">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="THEN">
<block type="text" id="{C0x/oMSSFhsp2gl]9qt">
<field name="TEXT">on</field>
</block>
</value>
<value name="ELSE">
<block type="text" id="ZgwcG{)XCUZBoGo`xN39">
<field name="TEXT">off</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="text" id="(/k^gB{DV7E{Fq)Uedr8">
<field name="TEXT">"}</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</xml>
Blockly-Beispiel Wetter
Dieses Script reagiert auf das Result-Objekt von Tasmota über MQTT. Das Full Topic unter Tasmota wurde dafür wie folgt konfiguriert: SmartHome/%topic%/%prefix%/
. Bitte kontrolliere die IDs und passe diese an dein System an.
Das Script nutzt den AccuWeather Adapter vom ioBroker um die Wetterdaten regelmäßig auf dem Display zu aktualisieren. Theoretisch ist jeder Wetterdienst nutzbar, welcher folgende Daten bereitstellt:
- aktuelle Temperatur
- minimale Tages-Temperatur
- maximale Tages-Temperatur
- Icon für Wetter (Mapping erforderlich)
Im Beispiel von AccuWeather habe ich das
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="O{|4Q}KJVRSqG4eTWLm}">mqttCmndId</variable>
<variable id="y{;7*d2wSl+HC)[!v]6k">accuWeatherIcon</variable>
<variable id="4QQ$u;|`3:@K7hdmZZMK">weatherIcon</variable>
<variable id="S|g!Uiy)(N:AKU3[l}k5">temp</variable>
<variable id="S[P_?[h-MR-d$6%,aF}S">minTemp</variable>
<variable id="kGu!Ey,Av+$d,hcBJP|j">maxTemp</variable>
</variables>
<block type="variables_set" id="4}uPYo@*PCz7m5.s7x}s" x="138" y="-187">
<field name="VAR" id="O{|4Q}KJVRSqG4eTWLm}">mqttCmndId</field>
<value name="VALUE">
<block type="text" id="prK,0qg5{1~$3%mi:`NU">
<field name="TEXT">mqtt.0.SmartHome.nspanel_C79304.cmnd.NSPSend</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="U0[:QR+{|t_9QT$sQN$:">
<mutation name="sendWeather"></mutation>
<next>
<block type="on" id=":0#76?-EdaHN-1vo?-Jq">
<field name="OID">accuweather.0.Current.Temperature</field>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<statement name="STATEMENT">
<block type="procedures_callnoreturn" id="2ELiICBH,keOYo}F@`ye">
<mutation name="sendWeather"></mutation>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
<block type="procedures_defcustomreturn" id="rj9Gwww2XG1=?OR,Zuh{" x="138" y="38">
<mutation statements="false">
<arg name="accuWeatherIcon" varid="y{;7*d2wSl+HC)[!v]6k"></arg>
</mutation>
<field name="NAME">convertIconId</field>
<field name="SCRIPT">LyoKICAgIDEgPSBzdW5ueQogICAgMiA9IHN1bitjbG91ZAogICAgNyA9IGNsb3VkK2JsdWUgY2xvdWQKICAgIDExID0gY2xvdWQrZm9nCiAgICAxNSA9IGNsb3VkIHJhaW4gbGlnaHRuaW5nCiAgICAyMCA9IGNsb3VkK3Nub3dmbGFrZQogICAgMjIgPSBjbG91ZCArIDMgc25vd2ZsYWtlcwogICAgMjIgPSBjbG91ZCArIDUgaWNlIGNyeXN0YWxzCiAgICAyMiA9IGNsb3VkICsgcmFpbiArIHNub3cKICAgIDMwID0gcmVkIHRoZXJtb3N0YXQKICAgIDMxID0gYmx1ZSB0aGVybW9zdGF0CiAgICAzMiA9IHdpbmQKICAgIDQwID0gcmFpbnkgY2xvdWQKKi8KCmxldCBuc3BXZWF0aGVySWNvbiA9IDE7IC8vIERlZmF1bHQgInN1bm55IgoKc3dpdGNoIChhY2N1V2VhdGhlckljb24pIHsKICAgIGNhc2UgMTogLy8gU3VubnkKICAgIGNhc2UgMjogLy8gTW9zdGx5IFN1bm55CiAgICBjYXNlIDMzOiAvLyBDbGVhcgogICAgICAgIG5zcFdlYXRoZXJJY29uID0gMTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIDM6IC8vIFBhcnRseSBTdW5ueQogICAgY2FzZSA0OiAvLyBJbnRlcm1pdHRlbnQgQ2xvdWRzCiAgICBjYXNlIDU6IC8vIEhhenkgU3Vuc2hpbmUKICAgIGNhc2UgMjE6IC8vIFBhcnRseSBTdW5ueSB3LyBGbHVycmllcwogICAgICAgIG5zcFdlYXRoZXJJY29uID0gMjsKICAgICAgICBicmVhazsKCiAgICBjYXNlIDY6IC8vIE1vc3RseSBDbG91ZHkKICAgIGNhc2UgNzogLy8gQ2xvdWR5CiAgICBjYXNlIDg6IC8vIERyZWFyeSAoT3ZlcmNhc3QpCiAgICBjYXNlIDE5OiAvLyBGbHVycmllcwogICAgY2FzZSAyMDogLy8gTW9zdGx5IENsb3VkeSB3LyBGbHVycmllcwogICAgY2FzZSAzNDogLy8gTW9zdGx5IENsZWFyCiAgICBjYXNlIDM1OiAvLyBQYXJ0bHkgQ2xvdWR5CiAgICBjYXNlIDM2OiAvLyBJbnRlcm1pdHRlbnQgQ2xvdWRzCiAgICBjYXNlIDM4OiAvLyBNb3N0bHkgQ2xvdWR5CiAgICBjYXNlIDQzOiAvLyBNb3N0bHkgQ2xvdWR5IHcvIEZsdXJyaWVzCiAgICAgICAgbnNwV2VhdGhlckljb24gPSA3OwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgMTE6IC8vIEZvZwogICAgY2FzZSAzNzogLy8gSGF6eSBNb29ubGlnaHQKICAgICAgICBuc3BXZWF0aGVySWNvbiA9IDExOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgMTI6IC8vIFNob3dlcnMKICAgIGNhc2UgMTM6IC8vIE1vc3RseSBDbG91ZHkgdy8gU2hvd2VycwogICAgY2FzZSAxNDogLy8gUGFydGx5IFN1bm55IHcvIFNob3dlcnMKICAgIGNhc2UgMTU6IC8vIFQtU3Rvcm1zCiAgICBjYXNlIDE2OiAvLyBNb3N0bHkgQ2xvdWR5IHcvIFQtU3Rvcm1zCiAgICBjYXNlIDE3OiAvLyBQYXJ0bHkgU3Vubnkgdy8gVC1TdG9ybXMKICAgIGNhc2UgMTg6IC8vIFJhaW4KICAgIGNhc2UgMzk6IC8vIFBhcnRseSBDbG91ZHkgdy8gU2hvd2VycwogICAgY2FzZSA0MDogLy8gTW9zdGx5IENsb3VkeSB3LyBTaG93ZXJzCiAgICBjYXNlIDQxOiAvLyBQYXJ0bHkgQ2xvdWR5IHcvIFQtU3Rvcm1zCiAgICBjYXNlIDQyOiAvLyBNb3N0bHkgQ2xvdWR5IHcvIFQtU3Rvcm1zCiAgICAgICAgbnNwV2VhdGhlckljb24gPSAxNTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIDIyOiAvLyBTbm93CiAgICBjYXNlIDIzOiAvLyBNb3N0bHkgQ2xvdWR5IHcvIFNub3cKICAgIGNhc2UgMjQ6IC8vIEljZQogICAgY2FzZSAyNTogLy8gU2xlZXQKICAgIGNhc2UgMjY6IC8vIEZyZWV6aW5nIFJhaW4KICAgIGNhc2UgMjk6IC8vIFJhaW4gYW5kIFNub3cKICAgIGNhc2UgNDQ6IC8vIE1vc3RseSBDbG91ZHkgdy8gU25vdwogICAgICAgIG5zcFdlYXRoZXJJY29uID0gMjI7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSAzMDogLy8gSG90CiAgICAgICAgbnNwV2VhdGhlckljb24gPSAzMDsKICAgICAgICBicmVhazsKCiAgICBjYXNlIDMxOiAvLyBDb2xkCiAgICAgICAgbnNwV2VhdGhlckljb24gPSAzMTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIDMyOiAvLyBXaW5keQogICAgICAgIG5zcFdlYXRoZXJJY29uID0gMzI7CiAgICAgICAgYnJlYWs7Cgp9CgpyZXR1cm4gbnNwV2VhdGhlckljb247</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id="D]R.mkLB-$LuV4#fSTH-" x="138" y="63">
<mutation statements="false">
<arg name="weatherIcon" varid="4QQ$u;|`3:@K7hdmZZMK"></arg>
<arg name="temp" varid="S|g!Uiy)(N:AKU3[l}k5"></arg>
<arg name="minTemp" varid="S[P_?[h-MR-d$6%,aF}S"></arg>
<arg name="maxTemp" varid="kGu!Ey,Av+$d,hcBJP|j"></arg>
</mutation>
<field name="NAME">setWeather</field>
<field name="SCRIPT">LyoKICAgIDEgPSBzdW5ueSAKICAgIDIgPSBzdW4rY2xvdWQgCiAgICA3ID0gY2xvdWQrYmx1ZSBjbG91ZCAKICAgIDExID0gY2xvdWQrZm9nIAogICAgMTUgPSBjbG91ZCByYWluIGxpZ2h0bmluZyAKICAgIDIwID0gY2xvdWQrc25vd2ZsYWtlIAogICAgMjIgPSBjbG91ZCArIDMgc25vd2ZsYWtlcyAKICAgIDIyID0gY2xvdWQgKyA1IGljZSBjcnlzdGFscyAKICAgIDIyID0gY2xvdWQgKyByYWluICsgc25vdyAKICAgIDMwID0gcmVkIHRoZXJtb3N0YXQgCiAgICAzMSA9IGJsdWUgdGhlcm1vc3RhdCAKICAgIDMyID0gd2luZCAKICAgIDQwID0gcmFpbnkgY2xvdWQgCiovCmNvbnN0IHdlYXRoZXJPYmplY3QgPSB7CiAgICAiSE1JX3dlYXRoZXIiOiB3ZWF0aGVySWNvbiwKICAgICJITUlfb3V0ZG9vclRlbXAiOiB7CiAgICAgICAgImN1cnJlbnQiOiBNYXRoLnJvdW5kKHRlbXApLAogICAgICAgICJyYW5nZSI6IE1hdGgucm91bmQobWluVGVtcCkudG9TdHJpbmcoKSArICcsJyArIE1hdGgucm91bmQobWF4VGVtcCkudG9TdHJpbmcoKQogICAgfQp9Owpjb25zb2xlLmxvZygnTlNQU2VuZDogJyArIEpTT04uc3RyaW5naWZ5KHdlYXRoZXJPYmplY3QpKTsKc2V0U3RhdGUobXF0dENtbmRJZCwgSlNPTi5zdHJpbmdpZnkod2VhdGhlck9iamVjdCkpOw==</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defnoreturn" id="#`x/P9FlbrZhO+sQg*gP" x="138" y="88">
<field name="NAME">sendWeather</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
<statement name="STACK">
<block type="comment" id="LUYrgwgupVz$uU~?(kaS">
<field name="COMMENT">https://developer.accuweather.com/weather-icons</field>
<next>
<block type="procedures_callcustomnoreturn" id="pWl-uy05HXR2+p]?NRl7">
<mutation name="setWeather">
<arg name="weatherIcon"></arg>
<arg name="temp"></arg>
<arg name="minTemp"></arg>
<arg name="maxTemp"></arg>
</mutation>
<value name="ARG0">
<block type="procedures_callcustomreturn" id="3u8N^00^X@=6p6[m5TXH">
<mutation name="convertIconId">
<arg name="accuWeatherIcon"></arg>
</mutation>
<value name="ARG0">
<block type="get_value" id="ZhObrG(m;*ab,FW88Eg|">
<field name="ATTR">val</field>
<field name="OID">accuweather.0.Current.WeatherIcon</field>
</block>
</value>
</block>
</value>
<value name="ARG1">
<block type="get_value" id="}v0}vIbJ/o4pAeKy9t7r">
<field name="ATTR">val</field>
<field name="OID">accuweather.0.Current.Temperature</field>
</block>
</value>
<value name="ARG2">
<block type="get_value" id="d0f_P*y}8`n?qV-jqFv%">
<field name="ATTR">val</field>
<field name="OID">accuweather.0.Daily.Day1.Temperature.Minimum</field>
</block>
</value>
<value name="ARG3">
<block type="get_value" id="!A%;@.SoQK2ZSVS.!lLs">
<field name="ATTR">val</field>
<field name="OID">accuweather.0.Daily.Day1.Temperature.Maximum</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</xml>
Transparenz-Hinweis (Level 2)
Für diesen Beitrag wurden mir Produkte kostenfrei zur Verfügung gestellt! Es wurden keinerlei Bedingungen, Richtlinien oder Vorgaben bezüglich der Inhalte, welche ich in meiner Bewertung äußern darf, auferlegt.
Darüber hinaus habe ich keine zusätzliche Vergütung erhalten.