Skip to content

Skripten / Logik

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

16.4k Topics 211.6k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Topics
    48k Posts
    MartinPM
    Ich habe das Script etwas angepasst - ich habe nur einen Micro-Inverter von FoxEss (Balkonkraftwerk, keine Batterie (deshalb SOC unnötig, und auch keine Lastmessung deshalb Load unnötig) Da der kleine Wechselrichter auch die Erzeugung in kW ausgibt, habe ich das Round angepasst - es kommen dadurch "glatte" Wattwerte (nicht kW) ohne Komma in den Datenpunkt [image: 1763375763629-14b37deb-eed3-4e1f-abd2-b94db89a25c7-grafik.png] /* Dieses Script ruft alle 2 Minuten die FoxESS Cloud über eine RestAPI auf und speichert die aufgerufenen Informationen an die entsprechenden Objekte im IO-Broker. */ const https = require("https") const crypto = require('crypto') const token = "...."; /* Hier muss der API-Key aus der FoxESS Cloud eingefügt werden */ const sn = "...."; /* Hier muss die Seriennummer vom Inverter aus der FoxESS Cloud eingefügt werden */ schedule("*/2 * * * * ", async function () { try { const data = JSON.stringify({ "sn": sn, "variables": [ "pvPower" /*, "generationPower", "SoC", "loadsPower" */ ] }); const path = "/op/v0/device/real/query"; const milliseconds = new Date().getTime(); const signature = crypto.createHash('md5').update(path + "\\r\\n" + token + "\\r\\n" + milliseconds).digest("hex"); const options = { headers: { "Content-Type": "application/json", "token": token, "timestamp": milliseconds, "signature": signature, "lang": "en" }, hostname: "www.foxesscloud.com", method: "POST", path: path, port: 443 } const request = https.request(options, response => { console.log('STATUS: ' + response.statusCode); //response.setEncoding('utf8'); response.on("data", function (res) { // console.log(res); const datas = JSON.parse(res).result[0].datas; console.log(datas[0]); setState("0_userdata.0.FoxEss.PVPower", Math.round(datas[0].value * 1000), true); //setState("0_userdata.0.FoxEss.SOC", datas[2].value, true); //setState("0_userdata.0.FoxEss.Load", Math.round(datas[3].value * 1000) / 1000, true); }); }); request.write(data); request.end(); } catch (e) { console.error(e); } }); Meine Planungen für weitere Ergänzungen am Script: Tagesbudget an Queries sparsamer einsetzen a) zwischen Dämmerungsende und Dämmerungsbeginn keine Werte über die API abfragen (da kann es keine Erträge geben). b) bei niedrigen Erträgen ggfs. auch den Leserhythmus abschwächen. Ertrag Vortag einmalig am Folgetag abfragen Ertrag Vormonat einmalig am ersten Tag des Folgemonats abfragen.
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Topics
    78k Posts
    HomoranH
    Das wird schon klappen! erstens weil's von @paul53 ist, und zweitens weil es richtig ist (wenn dein JSON korrekt ist)
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Topics
    13k Posts
    HomoranH
    @fiddle said in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: vergesse ich womöglich die Box abzuschalten... wofür? [image: 1763381190297-screenshot_20251117-130522_firefox.jpg] bei mir zieht sie 0W. bzw. im Rahmen der Messungenauigkeit
  • [gelöst]Script mit script stoppen

    Moved
    19
    0 Votes
    19 Posts
    2k Views
    paul53P
    @Motsche1: es klappt perfekt. ` Dann markiere bitte das Thema im Betreff des ersten Beitrags als [gelöst].
  • Erstes Skript

    Moved
    1
    1
    0 Votes
    1 Posts
    167 Views
    No one has replied
  • Falls wer länger als x sekunden unter Wert ist

    Moved
    3
    0 Votes
    3 Posts
    320 Views
    L
    danke den hab ich ganz übersehen, dann dort weiter.
  • Becker Rolladensteuerung - Umbau Fernbedienung

    Moved
    18
    0 Votes
    18 Posts
    8k Views
    F
    @Nabla: Soweit ich das sehe, bräuchte man doch hier mindestens das Pro-Paket für 499,- Euro mit dem NEO Plugin AIO GATEWAYS ` Du brauchst zur Ansteurung von Becker mindestens eine AIO Gateway V5, kosten 140 Euro, und dann entweder das NEO Plugin AIO Gateway für 99 Euro oder alternativ die Ansteurung des AIO Gateways V5 und Becker über IP-Symcon kostet auch 99 Euro. In beiden Fällen liegst Du also bei 239 Euro gesamt. Oder Du machst Dir die Mühe direkt aus ioBroker das AIO Gateway zu schalten dann sparst Du noch mal 99 Euro, must aber Wireshark bemühen, die API ist nicht öffentlich.
  • SetState() mit Acknowledge?

    Moved
    12
    0 Votes
    12 Posts
    17k Views
    modmaxM
    Die if-Abfrage im on-Trigger kann man auch noch vermeiden, wenn man denn nur die eine if-Abfrage auf ack=false drin hat: on({id: 'Hier.der.Datenpunkt', change: 'any', ack:false}, function (obj) { // Hier der Code, der aber nur ausgeführt wird, falls aktiv im VIS etc. ausgeführt. ACK ist da standardmäßig immer false. }); MfG Markus
  • Frage zu Blockly: Rollosteuerung

    Moved
    4
    1
    0 Votes
    4 Posts
    786 Views
    B
    Moin, ist zwar schon bischen her aber könntest du deine funktionierenden Rolladen Blocklys hier mal posten? Danke
  • Blockly Abluftsteuerung

    Moved
    3
    1
    0 Votes
    3 Posts
    570 Views
    O
    danke Paul…teste ich gleich
  • Skripte in IDE entwickeln und debuggen

    Moved
    3
    0 Votes
    3 Posts
    587 Views
    M
    Sieht vielversprechend aus, das probier ich mal. Besten Dank!
  • Frage zum $ - Selector

    Moved
    4
    2
    0 Votes
    4 Posts
    409 Views
    paul53P
    @Lenny.CB: Gibts da auch ne Erklärung für? ` Nur eine Vermutung: Durch die Angabe von channel wird die Selektion auf Datenpunkte eingeschränkt, die einem Kanal zugeordnet sind. Das sind Datenpunkte unter javascript. nicht.
  • Socket.io - Alle Objekte unterhalb von Datenpunkt

    Moved
    3
    0 Votes
    3 Posts
    397 Views
    T
    Hey Fitti, ein Script welches den Batteriestatus prüft erstellt einen Datenpunkt mit dem Namen des Geräts (hm-meq…) und löscht diesen wieder sobald die Batterie gewechselt wird. Per socket.io habe ich mir ein eigenes Webinterface gebastelt, hier soll nun im Benachrichtigungsfenster die Meldung erscheinen, das eben die Batterie leer ist. Er prüft also bei Veränderung und erstellt dann die Meldung, daher unbekannte Datenpunkte und daher eben alle Unterpunkte von X.
  • Zugriff auf Mediola per http…

    Moved
    9
    0 Votes
    9 Posts
    3k Views
    Z
    @0018: OK, danke dir. Mit PC konfigurieren meinst du sicherlich mit dem Browser auf die Weboberfläche des Gateways zugreifen und dort konfigurieren oder gibt es ein PC-Tool zum installieren? Reicht es Wireshark auf meinem PC laufen zu lassen und zu sniffen oder brauch ich einen Switch mit Port-Mirroring um alles zu sehen? ` Zum konfigurieren nimmt man mediola Neo was kostenlos ist, um die becker dinger an das gateway anzulernen, braucht man normalerweise as plugin aio gateways. Aber man kann in den testmodus wechseln und dann die becker dinger anlernen, dann eine fernbedienung erstellen mit den buttons hoch,runter, stop. Diese fernbedienung kann man dann am pc testen….wireshark starten und aufnehmen, die buttons anklicken und im wireshark die http befehle suchen. Also braucht man für alles den pc, neo, wireshark und das gateway.
  • [gelöst] Wert mit Einheit

    Moved
    4
    0 Votes
    4 Posts
    787 Views
    modmaxM
    Könnest Du dann den Beitrag noch als "gelöst" im Titel markieren? … MfG Markus
  • Gelöst: Fehler im Script

    Moved
    9
    0 Votes
    9 Posts
    493 Views
    M
    @paul53: Es fehlt der Abschluss von Schedule. } }); // on }); // schedule ```` ` Dankeschön
  • [gelöst] JS sicherstellen, dass Telegram Nachricht gesendet hat

    Moved
    11
    0 Votes
    11 Posts
    587 Views
    Jeeper.atJ
    Dann bitte dem Threadtitel ein [gelöst] voranstellen. Vielen Dank.
  • Blockly Skript wirft seltsame Fehler

    Moved
    3
    1
    0 Votes
    3 Posts
    403 Views
    A
    Wo liegt deine Variable? Meine lag in einem Unterordner von javascript.0/scriptsEnabled/… Ich habe auf Verdacht die Variable dort gelöscht, direkt unter javascript.0 wieder angelegt und in meinem Script geändert. Seitdem geht‘s wieder. Mir nicht klar, ob der Ablageort tatsächlich das Problem war, oder einfach die Tatsache, dass ich die Variable gelöscht und wieder neu angelegt habe, geholfen hat. VG Alex
  • Alexa2 - Object von getriggerte channel ansprechen

    Moved
    12
    0 Votes
    12 Posts
    1k Views
    G
    Super qoka. Vielen Dank. Zwar viele WARN im log aber er macht was er soll. Ich weiß auch nicht besser Nochmal Vielen Dank.
  • Anwesenheitsscript mit 3 Aktoren?

    Moved
    4
    1
    0 Votes
    4 Posts
    448 Views
    BigWumpusB
    OK, du ersetzt in meinem Blockly das "Bernd-S8" durch Dein "Maggis_S8.btHere". "Anwesenheit Bernd" durch "Patrick". Dein Blockly-Script hat aber nicht zuviel mit Deinem Text darüber zu tun… Ich würde die drei Arten der Prüfung so anlegen und jeweils Patrick_da1, Patrick_da2 und ...3 ansteuern, jeweils mit einem Aktor. Und dann: Bei jeder Änderung eines der Zustände läuft ein Script, das alle Zustände zusammenführt und EINEN Zustand schaltet bei mir "Anwesenheit jemand". Und daraus ergeben sich dann weitere Schaltungen... Kann man "schöner" mit verschachtelten If-And-Or-Ketten machen, aber manchmal liebe ich Bitbanging, weil es so einfach ist. Das mit dem Zeitplan bitte nicht ansehen, das versteht hier sowieso niemand ohne bebilderte Anleitung und Youtube-Video. 8-) Ist aber auch schwer hier... <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on" id="kfhthl4A_O7c}!^iGR`I" x="-412" y="-337"><field name="OID">tr-064.0.devices.Bernd-S8.active</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION">true</field> <statement name="STATEMENT"><block type="controls_if" id="h,hR16M;yVA1T7@}{FDq"><mutation else="1"></mutation> <value name="IF0"><block type="variables_get" id="ROHg,c51][lDw5Elq9WQ"><field name="VAR">value</field></block></value> <statement name="DO0"><block type="update" id="?@YMzuJn`ZO[DfO2!HiI"><mutation delay_input="true"></mutation> <field name="OID">admin.0.Anwesenheit.Bernd</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">0</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="VALUE"><block type="logic_boolean" id=",),eUcCn.}Q(RejIR6XX"><field name="BOOL">TRUE</field></block></value></block></statement> <statement name="ELSE"><block type="update" id="k)b?lWig(po!O1=%K3`0"><mutation delay_input="true"></mutation> <field name="OID">admin.0.Anwesenheit.Bernd</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="VALUE"><block type="logic_boolean" id="=f7~uNZjuwBm}Yi6AU-~"><field name="BOOL">FALSE</field></block></value></block></statement></block></statement> <next><block type="on" id="|V:kU=)Z8](#y4o.Sn[k"><field name="OID">tr-064.0.devices.iPhone.active</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION">true</field> <statement name="STATEMENT"><block type="controls_if" id="`=u0q7JK*r8ox}wp6{S."><value name="IF0"><block type="variables_get" id="S`zjp]fX{i6~*7mG4ywc"><field name="VAR">value</field></block></value> <statement name="DO0"><block type="update" id="DAU9B17C(EQZ!h2,w7X7"><mutation delay_input="true"></mutation> <field name="OID">admin.0.Anwesenheit.Valentina</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">0</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="VALUE"><block type="logic_boolean" id="BLKO%x).AdcMLrb/f|h:"><field name="BOOL">TRUE</field></block></value></block></statement></block></statement> <next><block type="schedule" id="=:%3E--`sgvxL#0Jwn/D"><field name="SCHEDULE">*/5 9-22 * * *</field> <statement name="STATEMENT"><block type="controls_if" id="dc~4EAADd2J]xk`J[*@u"><value name="IF0"><block type="get_value" id="n1]K,(@]P7pB`q(CS{xG"><field name="ATTR">val</field> <field name="OID">admin.0.Anwesenheit.Valentina</field></block></value> <statement name="DO0"><block type="controls_if" id="qtKy+#reegSQ]LiiZ,:e"><value name="IF0"><block type="logic_negate" id="pOH^Y1O{P0tL-8yDbfdW"><value name="BOOL"><block type="get_value" id="?!D4tDC=bYy_jRh#}[nn"><field name="ATTR">val</field> <field name="OID">tr-064.0.devices.iPhone.active</field></block></value></block></value> <statement name="DO0"><block type="update" id="AgIOd}a8|;A.LTvtGW*~"><mutation delay_input="true"></mutation> <field name="OID">admin.0.Anwesenheit.Valentina</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">10</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="fA;^.W@~/QC;-}*l9jTs"><field name="BOOL">FALSE</field></block></value></block></statement></block></statement></block></statement> <next><block type="on_ext" id=":*j}F2t1pyx6Yj@P@==8"><mutation items="2"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id=";s5b0_,!u0C{AK/hhLTM"><field name="oid">admin.0.Anwesenheit.Bernd</field></shadow></value> <value name="OID1"><shadow type="field_oid" id=":#zLyra}hnJthGnZ:zM-"><field name="oid">admin.0.Anwesenheit.Valentina</field></shadow></value> <statement name="STATEMENT"><block type="variables_set" id=":Mh%Khr4O(p-?yN``i-:"><field name="VAR">anybody</field> <value name="VALUE"><block type="logic_boolean" id="Q})Nre/);hYa!BeWrSFx"><field name="BOOL">FALSE</field></block></value> <next><block type="controls_if" id="pJasH9X8#DcWpIcaiQ,u"><value name="IF0"><block type="get_value" id="l3JT}#:((!O3OsWa(B8L"><field name="ATTR">val</field> <field name="OID">admin.0.Anwesenheit.Bernd</field></block></value> <statement name="DO0"><block type="variables_set" id="KwT2k`Bw6P5@D8WpHnjW"><field name="VAR">anybody</field> <value name="VALUE"><block type="logic_boolean" id="(y4`!Oa7ybg@z(S.m[Q/"><field name="BOOL">TRUE</field></block></value></block></statement> <next><block type="controls_if" id="j7#YFjnUn-F3rx{U2x8q"><value name="IF0"><block type="get_value" id="e56o0lRxha7s}B2,c+?h"><field name="ATTR">val</field> <field name="OID">admin.0.Anwesenheit.Valentina</field></block></value> <statement name="DO0"><block type="variables_set" id="3n=h,Y:^lk#*Rs]/}9`H"><field name="VAR">anybody</field> <value name="VALUE"><block type="logic_boolean" id=")d!l@W}2umpB+HbbmT!N"><field name="BOOL">TRUE</field></block></value></block></statement> <next><block type="update" id="^sMeY1%o2!5|[ZV:mgOo"><mutation delay_input="false"></mutation> <field name="OID">admin.0.Anwesenheit.Person</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="variables_get" id="#X+flmfrFU?9oA4xQbHU"><field name="VAR">anybody</field></block></value></block></next></block></next></block></next></block></statement> <next><block type="on" id="OO)%KkH[6r(swsji*%m9"><field name="OID">admin.0.Anwesenheit.Person</field> <field name="CONDITION">ne</field> <statement name="STATEMENT"><block type="controls_if" id="!f?6wt/Q~Qi9QLWE_WET"><mutation else="1"></mutation> <value name="IF0"><block type="variables_get" id="RlnHGO.(X_]q##c,:Sl5"><field name="VAR">value</field></block></value> <statement name="DO0"><block type="timeouts_cleartimeout" id="b%jHZsPuzuBc8,wmn:c+"><field name="NAME">timeout</field></block></statement> <statement name="ELSE"><block type="timeouts_settimeout" id="f%p3lbDC~c+hfPd4@)m_"><field name="NAME">timeout</field> <field name="DELAY">5</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="update" id="bg}o;`[xKgaZ?IpO{=y3"><mutation delay_input="false"></mutation> <field name="OID">admin.0.Alles_</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="_J3Q};?BaDJvRVVgh8.)"><field name="BOOL">FALSE</field></block></value></block></statement></block></statement></block></statement></block></next></block></next></block></next></block></next></block></xml>
  • [gelöst]Syntaxbeschreiung JavaScript

    Moved
    3
    0 Votes
    3 Posts
    247 Views
    F
    Perfekt, danke!
  • Rolladensteuerung mit Alexa Lokal

    Moved
    11
    1
    0 Votes
    11 Posts
    5k Views
    M
    Ja Alexa Lokal ist hier der Thread.
  • Variable Blockly

    Moved
    3
    0 Votes
    3 Posts
    395 Views
    W
    Ja! Ich danke Dir

752

Online

32.4k

Users

81.4k

Topics

1.3m

Posts