- Home
- Deutsch
- Skripten / Logik
- Skipte einfügen und benutzen.
Skipte einfügen und benutzen.
-
@dslraser
Hatte es mit dem Skript von "Glasfaser" gemacht .... und dort einfach den Ordner Testordner umbenannt. -
@paul53 sagte in Skipte einfügen und benutzen.:
@padi0-000 sagte: nicht Möglich das Skript 1 in TK Fertig um zu benennen
Das geht in der neuen Version des Javascript-Adapters mit dem Bleistift oben, wenn das Skript selektiert ist.
habe ich soweit erst mal fertig was ich hatte .
Kann mir jemand sagen wie ich den wert eines Datenpunktes mit einen Komma versehen kann ?
3222WH in 3,222KWHDen Datenpunkt erzeuge ich aus dem Analogwert einer Siemens logo 8
-
@padi0-000 sagte in Skipte einfügen und benutzen.:
@paul53 sagte in Skipte einfügen und benutzen.:
@padi0-000 sagte: nicht Möglich das Skript 1 in TK Fertig um zu benennen
Das geht in der neuen Version des Javascript-Adapters mit dem Bleistift oben, wenn das Skript selektiert ist.
habe ich soweit erst mal fertig was ich hatte .
Kann mir jemand sagen wie ich den wert eines Datenpunktes mit einen Komma versehen kann ?
3222WH in 3,222KWHDen Datenpunkt erzeuge ich aus dem Analogwert einer Siemens logo 8
Sorry ws ist keine datenpunkt sondern der Direkte wert aus der logo 8 in "Word"
-
@padi0-000 sagte: wert aus der logo 8 in "Word"
Gibt es dafür einen Datenpunkt unter "s7.0" und welchen Wert enthält er?
Zur Umwandlung von Wh in kWh verwende einen Alias, den Du mit dem Alias-Manager erstellen kannst.
Beispiel:
-
@paul53 sagte in Skipte einfügen und benutzen.:
@dslraser sagte: man kann/sollte die Eigenschaften noch um weitere, wie z.B. read/write usw. ergänzen. (in dem grünen Textbaustein)
Dann sollte man sich auskennen und z.B. keine falschen Rollen vergeben ("number", "string").
Im Tab "Objekte" werden beim Erstellen von Datenpunkt je nach Datenpunkt-Typ schon sinnvolle Eigenschaften vorgegeben.So besser ?
Die ersten Beiden "Kategorien" habe ich als Beispiel drinn.
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="comment" id="dQzp-onKog66L~byzH[l" x="-2188" y="-1287"> <field name="COMMENT">https://www.iobroker.net/#de/documentation/dev/stateroles.md</field> <next> <block type="comment" id="EI-uCmW`R}jN#)YJ_:r6"> <field name="COMMENT">Rollen von Datenpunkten</field> <next> <block type="comment" id="xD3cr?N+-f`fqc_BIu8`"> <field name="COMMENT">Allgemein</field> <next> <block type="create" id="c92#N__+3@_i,+@%jupm"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.state</field> <value name="VALUE"> <block type="text" id="Z-/BFV]=8dlO5f!k=R%W"> <field name="TEXT">leer</field> </block> </value> <value name="COMMON"> <block type="text" id="7TM}v,C*Rq*@4}emmW5a"> <field name="TEXT">{"role":"state","type":"mixed","name":"state"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="#1~l*!TM7r9U{)k7cs0p"> <field name="COMMENT">state</field> <next> <block type="comment" id="LG0pFM/6MUyB$y{ilTO2"> <field name="COMMENT">sehr allgemeiner Zweck. Zu verwenden, wenn unbekannt ist, welche Rolle der Datenpukt hat</field> </block> </next> </block> </statement> <next> <block type="create" id="+|o.X^XuZxSLC3jSJevE"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.text</field> <value name="VALUE"> <block type="text" id="vnwPz*IC^qWDt6+|;jM["> <field name="TEXT">leer</field> </block> </value> <value name="COMMON"> <block type="text" id="~Zja)ekO(?G8OZ]F](`|"> <field name="TEXT">{"role":"text","type":"string","name":"text"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="};g^n8vf~Ft0}Suiik{F"> <field name="COMMENT">text</field> <next> <block type="comment" id=";R%;:.*l#WHpX9aNfWj6"> <field name="COMMENT">(common.type = string)</field> </block> </next> </block> </statement> <next> <block type="create" id="q^n(E4XU2?L/+v/rhyx+"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.url</field> <value name="VALUE"> <block type="text" id="Ye7!RD/;);([)3DDl+9t"> <field name="TEXT">leer</field> </block> </value> <value name="COMMON"> <block type="text" id="+BtGMQWw!`K3%G(Gp#9c"> <field name="TEXT">{"role":"text.url","type":"string","name":"url"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="pP!NHf5w}}^k^r(T`8R7"> <field name="COMMENT">text.url</field> <next> <block type="comment" id="?R)WbVB$M1u=v~P5xDV~"> <field name="COMMENT">(common.type = string) state val enthält eine URL zur Verwendung in einem Anker, Iframe oder img</field> </block> </next> </block> </statement> <next> <block type="create" id="qPwzf!p(SYPjhG[zJtR0"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.html</field> <value name="VALUE"> <block type="text" id="dmRV[:WHaQPFSEY4kt8B"> <field name="TEXT">leer</field> </block> </value> <value name="COMMON"> <block type="text" id="0OMs-Qi;]m$;.H{1cOaq"> <field name="TEXT">{"role":"html","type":"string","name":"html"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="~y9tO:pKnlGe%C:t?t4|"> <field name="COMMENT">html</field> <next> <block type="comment" id="TpK]GC//)AiVJ_?I.71G"> <field name="COMMENT">(common.type = string)</field> </block> </next> </block> </statement> <next> <block type="create" id="yLxUcA5NHVeE_1TWl!BY"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.json</field> <value name="VALUE"> <block type="text" id="`wI9$A(MA|u|:_1?vLn="> <field name="TEXT">leer</field> </block> </value> <value name="COMMON"> <block type="text" id="s$XAUM-3MozknXLQ-3T["> <field name="TEXT">{"role":"json","type":"string","name": "json"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="pS?-Vhv;Hwhx?2/U)o9n"> <field name="COMMENT">json</field> <next> <block type="comment" id="].|(!pRv|*JpwJ@oi`6H"> <field name="COMMENT">(common.type = string)</field> </block> </next> </block> </statement> <next> <block type="create" id="v$y=S_~Z;R,M;n-aoHw9"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.list</field> <value name="VALUE"> <block type="text" id="BiyjsSwVP/F=_rI|wcih"> <field name="TEXT">leer</field> </block> </value> <value name="COMMON"> <block type="text" id="ZTJ@3R{QSaQ-cY-ev-;-"> <field name="TEXT">{"role": "list","type":"array","name":"list"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="hmN;3e}f/PPtly6TWi,c"> <field name="COMMENT">list</field> <next> <block type="comment" id="s`S!P,!qahsUbN1!6{4G"> <field name="COMMENT">(common.type = array)</field> </block> </next> </block> </statement> <next> <block type="create" id="SUi3wBCZ=^u)Uqq?c]b1"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.01_date</field> <value name="VALUE"> <block type="text" id="(yT!w=JwVW_CMbc_vC@E"> <field name="TEXT">01.01.2021</field> </block> </value> <value name="COMMON"> <block type="text" id="oT0tYRvHs%C.(4Af+jP7"> <field name="TEXT">{"role":"date","type":"string","name":"01 date"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="(X%+k[b9$19m/D08~O28"> <field name="COMMENT">date</field> <next> <block type="comment" id="KaabFCfLl8MF753wo#;!"> <field name="COMMENT">(common.type = string - kann mit der Zeichenfolge "new Date (ddd)" analysiert werden)</field> </block> </next> </block> </statement> <next> <block type="create" id="|IdA74#+H9F5C8j58FSP"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.01Allgemein.02_date</field> <value name="VALUE"> <block type="math_number" id="5.`~UU+iTb%tp`anaUYa"> <field name="NUM">1</field> </block> </value> <value name="COMMON"> <block type="text" id=")$C24x@KEKOfPB=JZFv["> <field name="TEXT">{"role":"date","type":"number","name":"02 date"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="PG#KAK-N9ZYgPqOU^ByK"> <field name="COMMENT">date</field> <next> <block type="comment" id="/(nV-k2c}lsxze#JqSa|"> <field name="COMMENT">(common.type = number - Sekunden * 1000)</field> </block> </next> </block> </statement> <next> <block type="comment" id="x`0Zd}y~c_v!;vD3H7Bl"> <field name="COMMENT">Sensor (Boolescher Wert, schreibgeschützt)</field> <next> <block type="comment" id=";Xi#NDCI^4pzMB~hg9Xu"> <field name="COMMENT">common.type = boolean, common.write = false</field> <next> <block type="create" id="H#dh27`T;r[Jc%cFggUC"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.window</field> <value name="VALUE"> <block type="logic_boolean" id="L^+Iu)]$[5k;!*|8(bI{"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="iJ$!rtzfYzp{O28U%^Mn"> <field name="TEXT">{"role":"sensor.window","type":"boolean","read":true,"write":false,"name":"window"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="09VSzue3~1K[Q?k=*/mn"> <field name="COMMENT">sensor.window</field> <next> <block type="comment" id="C)R]QzLYQ~m!V$ww0%0g"> <field name="COMMENT">Fenster geöffnet (true) oder geschlossen (false)</field> </block> </next> </block> </statement> <next> <block type="create" id="T).4enx~.i|HCYKZo:0v"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.door</field> <value name="VALUE"> <block type="logic_boolean" id="/+^*A=Gt`IRpjEh{@_xG"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="#xAtBkvnL4=)C~k$Ww)?"> <field name="TEXT">{"role":"sensor.door","type":"boolean","read":true,"write":false,"name":"door"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="?*L1lOsLe8%uV6aBXb0C"> <field name="COMMENT">sensor.door</field> <next> <block type="comment" id="vY4:T?_Y@_1,U5lcdCP_"> <field name="COMMENT">Tür geöffnet (true) oder geschlossen (false)</field> </block> </next> </block> </statement> <next> <block type="create" id="o~dYu:n_9Y$-9]=1;+(K"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.alarm</field> <value name="VALUE"> <block type="logic_boolean" id="glz?6_gel-~O#rx:Ycp["> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="H!hPp9I!ClUS6`|dN0m/"> <field name="TEXT">{"role":"sensor.alarm","type":"boolean","read":true,"write":false,"name":"alarm"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="OauWuH{+P[r(-f7t]UTn"> <field name="COMMENT">sensor.alarm</field> <next> <block type="comment" id="$5hP5aP_xWX;MX6/Y2W."> <field name="COMMENT">ein häufiger Alarm</field> </block> </next> </block> </statement> <next> <block type="create" id="GdI2mMTpC6C,9o%uci#N"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.alarm_flood</field> <value name="VALUE"> <block type="logic_boolean" id="/N(:6r!;xG,W75kKvxVy"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="OxzYiYF13bjOq0Eq}@q-"> <field name="TEXT">{"role":"sensor.alarm.flood","type":"boolean","read":true,"write":false,"name":"alarm flood"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="+q{BH`p/}Q0{`g`,[.cD"> <field name="COMMENT">sensor.alarm.flood</field> <next> <block type="comment" id="{+P@@OoPf4T4dsSDffQj"> <field name="COMMENT">Wasserleckage</field> </block> </next> </block> </statement> <next> <block type="create" id="XyPOi4:{^cc{QG9):GJE"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.alarm_fire</field> <value name="VALUE"> <block type="logic_boolean" id="0ghAc~J@cD#5R,`srdy_"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="xr.[t9#10Tpi_,|1(z[D"> <field name="TEXT">{"role":"sensor.alarm.fire","type":"boolean","read":true,"write":false,"name":"alarm fire"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="tbj6h20d]mF66$GV=nG6"> <field name="COMMENT">sensor.alarm.fire</field> <next> <block type="comment" id="lnEM{LQ6HSMk33|5TH=]"> <field name="COMMENT">Feuersensor</field> </block> </next> </block> </statement> <next> <block type="create" id="Y{$n]:|PaUbg8Tu=.p_H"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.alarm_secure</field> <value name="VALUE"> <block type="logic_boolean" id="4~hqmFH2`A%/-.rc1o1l"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="4irEOLnO7Q/gj%,G9,+|"> <field name="TEXT">{"role":"sensor.alarm.secure","type":"boolean","read":true,"write":false,"name":"alarm secure"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="2x3k`$H=j;{TUX+0fWs~"> <field name="COMMENT">sensor.alarm.secure</field> <next> <block type="comment" id="$c7(#ZibK@76:FMKvo|a"> <field name="COMMENT">Tür geöffnet, Fenster geöffnet oder Bewegung erkannt, während der Alarm eingeschaltet ist.</field> </block> </next> </block> </statement> <next> <block type="create" id="I1qUgGy;jEbJ013B(|L|"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.alarm_power</field> <value name="VALUE"> <block type="logic_boolean" id=":]EhVGjze(NPghh-XLU="> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="R/tc$V0c+?{VCq(,w;;J"> <field name="TEXT">{"role":"sensor.alarm. power","type":"boolean","read":true,"write":false,"name":"alarm power"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="jExJjIhzoivAhr$REYyK"> <field name="COMMENT">sensor.alarm.power</field> <next> <block type="comment" id="tBJe]Ki`=4e=0@Bf.hb|"> <field name="COMMENT">Kein Strom (Spannung = 0)</field> </block> </next> </block> </statement> <next> <block type="create" id="k8/ed(mJ6F?![g!N68[i"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.light</field> <value name="VALUE"> <block type="logic_boolean" id="u.y9{fhu;,.q%00|b]Ub"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="m`EIvw];McBz@A{v=yn3"> <field name="TEXT">{"role":"sensor.light","type":"boolean","read":true,"write":false,"name":"light"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="eWCsa,d8V?Q6zn:KYxq}"> <field name="COMMENT">sensor.light</field> <next> <block type="comment" id="3BuWyvl(szbdkyQ+J?G5"> <field name="COMMENT">Rückmeldung der Lampe, dass sie eingeschaltet ist</field> <next> <block type="create" id="bD+rsdu(PkAcT4$K.Y[Q"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.lock</field> <value name="VALUE"> <block type="logic_boolean" id="PiD4%iJ{X_/.]ub:y9^m"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="2%tLacx:Ne?Rr)jdX`--"> <field name="TEXT">{"role":"sensor.lock","type":"boolean","read":true,"write":false,"name":"lock"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="J9=T-N-(#6%u*Y_bJXe]"> <field name="COMMENT">sensor.lock</field> <next> <block type="comment" id="T%9_]pNpT3l0D-=DM3bo"> <field name="COMMENT">aktuelle Position des Schlosses</field> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> <next> <block type="create" id="wug$JyHzLP-fSDTc;@eL"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.motion</field> <value name="VALUE"> <block type="logic_boolean" id="+89ou+G@pz.*jj@w]x(I"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="j%t9B8ap2ky!XLb{k2Pj"> <field name="TEXT">{"role":"sensor.motion","type":"boolean","read":true,"write":false,"name":"motion"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="#g,Z[p/h^`U3Gu.lS@W^"> <field name="COMMENT">sensor.motion</field> <next> <block type="comment" id="`nE#*{U9hL/nt(sY9j[8"> <field name="COMMENT">Bewegungssensor</field> </block> </next> </block> </statement> <next> <block type="create" id="m}z.2Nx`8~/cT%8aZi_M"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.rain</field> <value name="VALUE"> <block type="logic_boolean" id="Q#F`O`6[o[K{Frcc.D(_"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id=".U//jno/Y-QHWiiZXtHx"> <field name="TEXT">{"role":"sensor.rain","type":"boolean","read":true,"write":false,"name":"rain"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="63%^YG-uQlsC}I,]?Y1r"> <field name="COMMENT">sensor.rain</field> <next> <block type="comment" id="U.AV~ya?kyZ?-n{I8/zJ"> <field name="COMMENT">Regen erkannt</field> </block> </next> </block> </statement> <next> <block type="create" id="Q|Fza.c0d1)_e(FZ4[|M"> <field name="NAME">0_userdata.0.Datenpunkte_erstellen.02Sensor_schreibgeschuetzt.noise</field> <value name="VALUE"> <block type="logic_boolean" id="d]H#j2R011eh}?FF.%j+"> <field name="BOOL">FALSE</field> </block> </value> <value name="COMMON"> <block type="text" id="FgHBM|=P~IrR*0gq@#N7"> <field name="TEXT">{"role":"sensor.noise","type":"boolean","read":true,"write":false,"name":"noise"}</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="q)|m55L3`VQB+UnH%V(a"> <field name="COMMENT">sensor.noise</field> <next> <block type="comment" id="hj`RdGzooY`:$P~g*R~9"> <field name="COMMENT">Geräusch erkannt</field> </block> </next> </block> </statement> <next> <block type="comment" id="qa?~BsR4oTlmTtwy_PB/"> <field name="COMMENT">Tasten (Boolscher Wert, nur Schreiben)</field> <next> <block type="comment" id="L]aptP.6it7*Qq!D^8I}"> <field name="COMMENT">common.type = boolean, common.write = true, common.read = false</field> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@dslraser sagte: So besser ?
Beim ersten Block fehlt "type":"string" oder "type":"mixed".
-
@paul53 sagte in Skipte einfügen und benutzen.:
@dslraser sagte: So besser ?
Beim ersten Block fehlt "type":"string" oder "type":"mixed".
Das steht nicht in der Anleitung.
Da steht nur:state - sehr allgemeiner Zweck. Zu verwenden, wenn unbekannt ist, welche Rolle der Datenpukt hat.
Aber ich mache dann mixed daraus.
-
@dslraser sagte: Das steht nicht in der Anleitung.
Javascript macht wohl automatisch "type":"mixed", wenn nichts angegeben ist.
-
@paul53 sagte in Skipte einfügen und benutzen.:
Javascript macht wohl automatisch "type":"mixed", wenn nichts angegeben ist.
ja, ohne die "type":"mixed" Angabe erstellt
{ "common": { "role": "state", "name": "state", "type": "mixed" }, "native": { "role": "state", "name": "state", "type": "mixed" }, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1624381391345, "_id": "0_userdata.0.Datenpunkte_erstellen.01Allgemein.state", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Ich werde mal bei Gelegenheit alle meine DP überprüfen und konform abändern.
Ich habe den Wink verstanden.Dann sollte man sich auskennen und z.B. keine falschen Rollen vergeben ("number", "string").
-
@paul53 sagte in Skipte einfügen und benutzen.:
@padi0-000 sagte: wert aus der logo 8 in "Word"
Gibt es dafür einen Datenpunkt unter "s7.0" und welchen Wert enthält er?
Zur Umwandlung von Wh in kWh verwende einen Alias, den Du mit dem Alias-Manager erstellen kannst.
Beispiel:
Hallo ja es gibt einen Datenpunkt unter s7
nur sieht es bei mir unter alias anders aus als auf deinem Screenshot
-
@padi0-000 sagte: sieht es bei mir unter alias anders aus als auf deinem Screenshot
Der Screenshot zeigt einen neu erstellten Alias-Datenpunkt im Alias-Manager, der den originalen S7-Datenpunkt spiegelt und dabei von 868 Wh in 0.868 kWh umrechnet.
Unter alias.0:
Im Alias-Manager:
-
@paul53
Super hat nun auch bei mir geklappt,
mit dem 2ten anlauf ging es dann..
Danke Schön -
@glasfaser sagte in Skipte einfügen und benutzen.:
Ich meine eher .... die Node Version 10 / NPM
Wie wichtig ist den ein Update von Node und NPM
da es im moment ja alles soweit läuft. -
... da viele aktuelle Adapter ,nicht richtig mit Node 10 funktionieren.
bzw. hier auch sehr gut erklärt :
https://forum.iobroker.net/topic/22867/how-to-node-js-für-iobroker-richtig-updaten
oder
https://www.iobroker.net/#de/documentation/install/updatenode.md