Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.6k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    maxclaudiM
    Erweitertes Energie-Logging für Zendure-Geräte Ich arbeite aktuell an einem Script, das zusätzliche Datenpunkte für Energieauswertungen (kWh) erzeugt: [image: 1784641392579-iobroker_dp_kwh.png] Zusätzlich können zwei CSV-Dateien erzeugt werden. 1. Tagesenergie-Datei Beispiel: zendure_energy_2026.csv Diese Datei enthält Tageswerte über ein Kalenderjahr: Datum;pvInput_kWh;gridChargeInput_kWh;gridhomeOutput_kWh;gridOffSocketPower_kWh Vor Scriptstart kann einmalig festgelegt werden, ob pvInput_kWh integriert werden soll. Diese Option ist für Zendure-Geräte ohne DC-PV-Module-Eingänge gedacht, da dieser Wert dort immer 0 wäre. Bedeutung der Werte: pvInput_kWh Vom Zendure-System gemeldete PV-Energie der angeschlossenen DC-PV-Modul-Eingänge. gridChargeInput_kWh Energie, die das Zendure-Gerät per 230V AC aus dem Hausnetz aufgenommen hat (AC-Laden). gridhomeOutput_kWh Energie, die das Zendure-Gerät in das 230V AC Hausnetz abgegeben hat. gridOffSocketPower_kWh Energiefluss über die gridOff-Steckdose: positive Werte: Energiefluss von der Steckdose in das Zendure-Gerät (z.B. Microinverter) negative Werte: Energiefluss vom Zendure-Gerät zur Steckdose (z.B. Verbraucher) Die Datei enthält integrierte Tagesenergien in kWh und eignet sich für Statistiken, Diagramme und Langzeitauswertungen. Die Jahresdatei wird automatisch anhand des aktuellen Kalenderjahres erzeugt. Beim Jahreswechsel wird automatisch eine neue Jahresdatei begonnen. 2. Live-Leistungsdatei Beispiel: zendure_liveEnergy.csv Die Aufzeichnung erfolgt in einem einstellbaren Intervall (z.B. jede Minute). Enthalten sind aktuelle Leistungswerte: Zeit;pvInput_W;gridChargeInput_W;gridhomeOutput_W;gridOffSocketPower_W Die Werte werden nicht integriert oder aufsummiert. Jede Zeile stellt eine Momentaufnahme der aktuellen Leistung in Watt dar. Bedeutung: pvInput_W Aktuelle PV-Eingangsleistung der PV-Module an den DC-PV-Eingängen. gridChargeInput_W Aktuelle 230V AC-Lade-Leistung aus dem Hausnetz zum Zendure-Gerät. gridhomeOutput_W Aktuelle AC-Leistung vom Zendure-Gerät ins 230V AC Hausnetz. gridOffSocketPower_W Aktuelle Leistungsrichtung der gridOff-Steckdose: positive Werte: Leistung von der Steckdose in das Zendure-Gerät negative Werte: Leistung vom Zendure-Gerät zur Steckdose Die Datei eignet sich für Leistungsdiagramme (W) und Dashboards. Archivierung Live-Datei: Beim Tageswechsel bzw. beim nächsten Schreibvorgang nach einem Tageswechsel wird: zendure_liveEnergy.csv automatisch archiviert als z.B.: zendure_liveEnergy_2026-07-20.csv Danach wird wieder die aktuelle Datei: zendure_liveEnergy.csv weitergeführt. Es werden maximal 30 Tagesarchive behalten. Ältere Dateien werden automatisch gelöscht. Zusätzlich kann im Script eingestellt werden, ob CSV-Dateien erzeugt werden sollen oder nur die ioBroker-Datenpunkte. Die Berechnung basiert ausschließlich auf den von Zendure gelieferten Leistungswerten. Es werden keine geschätzten Wirkungsgrade oder pauschalen Umrechnungen (z.B. Faktor 0,96 wie teilweise bei anderen Scripts verwendet) eingesetzt. Die gridOffSocketPower-Werte beschreiben ausschließlich den Energiefluss über die gridOff-Steckdose und stellen keine separate Netzeinspeisungsmessung dar. Die Energiezähler werden über die von Zendure gelieferten Zeitstempel und Leistungswerte fortgeführt. Bei Neustarts oder Unterbrechungen werden keine fehlenden Werte geschätzt oder nachberechnet. Das Script arbeitet unabhängig von der Gerätesteuerung und greift ausschließlich lesend auf vorhandene Zendure-Datenpunkte zu. Es verändert keine Geräteeinstellungen und kann daher parallel zu bestehenden Steuerungsscripten betrieben werden. Mehr fällt mir dazu im Moment nicht ein; genug getippt :-) Besteht Interesse an dieser Erweiterung bzw. an dem Script? Über eine Rückmeldung, wer welches meiner Blockly-Scripte verwendet und ob diese problemlos laufen, würde ich mich ebenfalls freuen ;-)
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    A
    @paul53 sagte: @andreas7712 [sagte]: als Taster funktioniert Also nur kurz einschaltet? Super so funktioniert es!!!! Vielen Dank!!!!!!
  • Hilfe für Skripterstellung mit Node-RED

    961 13k
    961 Themen
    13k Beiträge
    Marc BergM
    Man kann einen Flow von außen neu starten, indem man ihn per API deaktiviert und wieder aktiviert. Nicht sehr elegant, aber geht. Hier ein Flow dazu, das könnte man auch im Skript abbilden (hostname und Flow-ID im Inject Node anpassen: [ { "id": "0101b52dd8b0e69c", "type": "inject", "z": "tab_restart", "name": "Flow neu starten", "props": [ { "p": "baseUrl", "v": "http://nuc.fritz.box:1880", "vt": "str" }, { "p": "flowId", "v": "56a35d28dbb8d4c1", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": "", "topic": "", "x": 160, "y": 140, "wires": [ [ "ffb73632947a1b74" ] ] }, { "id": "ffb73632947a1b74", "type": "http request", "z": "tab_restart", "name": "GET /flow/:id", "method": "GET", "ret": "obj", "paytoqs": "ignore", "url": "{{{baseUrl}}}/flow/{{flowId}}", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 370, "y": 140, "wires": [ [ "78e47724692d9c26" ] ] }, { "id": "78e47724692d9c26", "type": "change", "z": "tab_restart", "name": "deaktivieren", "rules": [ { "t": "set", "p": "flow", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "flow.disabled", "pt": "msg", "to": "true", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "flow", "tot": "msg" }, { "t": "set", "p": "headers", "pt": "msg", "to": "{}", "tot": "json" }, { "t": "set", "p": "headers.content-type", "pt": "msg", "to": "application/json", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 570, "y": 140, "wires": [ [ "b570b346c80301a6" ] ] }, { "id": "b570b346c80301a6", "type": "http request", "z": "tab_restart", "name": "PUT (aus)", "method": "PUT", "ret": "obj", "paytoqs": "ignore", "url": "{{{baseUrl}}}/flow/{{flowId}}", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 770, "y": 140, "wires": [ [ "a062c2baa0932d3e" ] ] }, { "id": "a062c2baa0932d3e", "type": "delay", "z": "tab_restart", "name": "1s warten", "pauseType": "delay", "timeout": "1", "timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "outputs": 1, "x": 960, "y": 140, "wires": [ [ "664a32887d83b305" ] ] }, { "id": "664a32887d83b305", "type": "change", "z": "tab_restart", "name": "aktivieren", "rules": [ { "t": "set", "p": "flow.disabled", "pt": "msg", "to": "false", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "flow", "tot": "msg" }, { "t": "set", "p": "headers", "pt": "msg", "to": "{}", "tot": "json" }, { "t": "set", "p": "headers.content-type", "pt": "msg", "to": "application/json", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 140, "y": 220, "wires": [ [ "83d399c90d46240f" ] ] }, { "id": "83d399c90d46240f", "type": "http request", "z": "tab_restart", "name": "PUT (ein)", "method": "PUT", "ret": "obj", "paytoqs": "ignore", "url": "{{{baseUrl}}}/flow/{{flowId}}", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 320, "y": 220, "wires": [ [ "529c0e1896d1f278" ] ] }, { "id": "529c0e1896d1f278", "type": "debug", "z": "tab_restart", "name": "Ergebnis", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 480, "y": 220, "wires": [] } ]
  • PIR und LED Licht: Wo ist mein Fehler

    blockly javascript
    5
    1
    0 Stimmen
    5 Beiträge
    500 Aufrufe
    J
    @paul53 Irgendwas hat da bei mir nicht geklappt. Mal ging es, mal ging es nicht.... Ich hab das jetzt mal durch ChatGPD gejagd und das kam dabei rum: var timeout, timeout2; function clearPreviousTimeouts() { if (timeout) { clearTimeout(timeout); timeout = null; } if (timeout2) { clearTimeout(timeout2); timeout2 = null; } } on({ id: [].concat(['deconz.0.Sensors.12.presence']), change: 'ne' }, (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; // Prüfen, ob der Sensor auf Anwesenheit schaltet und Lichtsteuerungsbedingungen erfüllt sind if (value && !getState('javascript.0.Anwesenheitserkennung.Bad').val && (getState('deconz.0.Sensors.13.lux').val <= 20 || getState('deconz.0.Sensors.3.lux').val <= 30)) { // Wenn innerhalb der Zeitbereiche if (compareTime('06:00', '07:00', 'between') || compareTime('21:30', '22:45', 'between')) { clearPreviousTimeouts(); setState('deconz.0.Lights.13.level', 100); // Setze Lichtlevel auf 100% setState('deconz.0.Lights.13.on', true); // Schalte das Licht ein // Timeout nach 3 Minuten timeout = setTimeout(() => { timeout = null; setState('deconz.0.Lights.13.on', false); // Schalte das Licht aus }, 180000); } else { clearPreviousTimeouts(); setState('deconz.0.Lights.13.level', 100); setState('deconz.0.Lights.13.on', true); // Timeout nach 1 Minute timeout2 = setTimeout(() => { timeout2 = null; setState('deconz.0.Lights.13.on', false); // Schalte das Licht aus }, 60000); } } });
  • Neuer Javascript Adapter

    javascript
    2
    0 Stimmen
    2 Beiträge
    224 Aufrufe
    mcm1957M
    @michihorn Bitte verwende die SUCHFUNKTION. Zur Deprecation von request gibts gefühlt 100 Beiträge. Und schau mal in die Dokumentation: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/upgrade-guide.md#request-to-httpget
  • Vormonat als Text ausgeben klappt nicht

    6
    1
    0 Stimmen
    6 Beiträge
    597 Aufrufe
    M
    Genial, vielen vielen Dank!!
  • SCOP Berechnen Live

    1
    0 Stimmen
    1 Beiträge
    125 Aufrufe
    Niemand hat geantwortet
  • [Vorlage] Witze aus API über sayit in zb Sonos ausgeben

    9
    1
    1 Stimmen
    9 Beiträge
    2k Aufrufe
    madingM
    @meister-mopper gute Idee!
  • Verständnisfrage Blockly schaltet Pumpe nicht aus

    blockly
    22
    3
    0 Stimmen
    22 Beiträge
    3k Aufrufe
    da_WoodyD
    @altersrentner nö. lies den Post an wen das gegangen ist.
  • [gelöst] Parametrierung der Viessmann Heizung Adapter v2.3.0

    3
    0 Stimmen
    3 Beiträge
    465 Aufrufe
    Thomas BraunT
    @franzda Dann bring den Rest vom System (Betriebssystem + ioBroker) auch auf Stand. Ist dann vermutlich auch alles angejahrt.
  • Drucker über Anwesenheit steuern MQTT

    15
    1
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    B
    @codierknecht said in Drucker über Anwesenheit steuern MQTT: Das wäre aber doppelt gemoppelt. In boolvar steht ja bereits ein "bool'scher" (Wahrheits-) Wert. Dann kann man das auch gleich so schreiben: ok das ist der Grund warum in speziell diesem Skript falls als war definiert ist ? Ich hoffe, das war jetzt verständlich? Jedenfalls bleibt immer n bisschen was hängen ! Nur Interesse halber, mein Skript oben ist nicht falsch nur umständlich ? ( also es würde funktionieren ? ) Grüße Balu Danke euch !!!
  • Yahka mit Bosch Smart Home Rolladensteuerung

    1
    0 Stimmen
    1 Beiträge
    183 Aufrufe
    Niemand hat geantwortet
  • Änderung State durch hqwidget-CheckBox

    1
    1
    0 Stimmen
    1 Beiträge
    152 Aufrufe
    Niemand hat geantwortet
  • Objekte

    8
    1
    0 Stimmen
    8 Beiträge
    778 Aufrufe
    C
    @codierknecht ich habe es hinbekommen und jetzt auch verstanden. Danke für die Hilfe.
  • Jarvis JSON in Datenpunkt schreiben

    13
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    K
    @mcu ok, kann man mit leben...
  • [gelöst] Script um Befehl auf Synology ausführen

    javascript
    12
    0 Stimmen
    12 Beiträge
    3k Aufrufe
    NegaleinN
    @glasfaser sagte in [gelöst] Script um Befehl auf Synology ausführen: hier das Script : Spoiler Hallo Zwar schon etwas älter der Thread, aber erst jetzt entdeckt. ;) Hast du vielleicht die View für mich?
  • Blockly: Steuerung Wasserbetten Heizung mit Tibber Strom

    blockly scenes heating
    8
    1
    0 Stimmen
    8 Beiträge
    794 Aufrufe
    S
    Ich hatte dass bei uns ganz einfach gelöst hat super funktioniert wenn dass Preislevel auf expensive oder very expensive geht habe ich die Heizung ausgeschalten und wenn sie auf die anderen geht wieder eingeschalten. <xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="Iaww$|?,R!f~SggtB1wH" x="62" y="63"> <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="6^Wlg$K2P#{CdTe)Q.8m"> <field name="oid">tibberlink.0.Homes.aa15df5f-d4cc-482a-b389-2bbc3a803677.CurrentPrice.level</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="0@dl,lX2_Y-Fw?tsstO."> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="-hlIOy)*hb*lsAWGL0Nw"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="9$0qG[V$!9/fxSy=4r$0"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="v|I]=_usj:`KNQ3)`2IK"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="T6(_haPetQ~QaZ)dfGFD"> <field name="TEXT">EXPENSIVE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="1:UegFxLj2W[t0=tka6("> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="l+NQpQDK?1u{#H%uQ;=d"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="KD#titybnVjU%Wt]oqhz"> <field name="TEXT">VERY_EXPENSIVE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="^Ne#i8LzGHsoEKI?kB8e"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Bett_Marcel.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="`dq7R:[s32!-CA{eZNtb"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="f4m#Qd^nh?O3-3V+`ig?"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Bett_Natascha.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="{qn79Abt8DTU?cQrQ1vU"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block type="control" id="{@__yU=A{kv{85Ip|==)"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Bett_Marcel.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="$^*ALBNIxVig.254C-,t"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="ZM|I0IR]@K-RrA`3D;[L"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Bett_Natascha.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="hN?_?K+I.gD~Ix:#P^`~"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </xml>
  • [Vorlage] Generisches Zählscript

    34
    2
    1 Stimmen
    34 Beiträge
    5k Aufrufe
    L
    Hi, Version 4.8 ist hochgeladen. / Changelog im script vG Looxer
  • [gelöst]MQTT-Adapter verliert bei Neustart per Skript Passw.

    5
    2
    0 Stimmen
    5 Beiträge
    676 Aufrufe
    D
    @haus-automatisierung said in [gelöst]MQTT-Adapter verliert bei Neustart per Skript Passw.: @darth2010 sagte in [gelöst]MQTT-Adapter verliert bei Neustart per Skript Passw.: Dieser verliert nach dem Stoppen per Skript das hinterlegte Passwort: Logisch. In dem Objekt sind sog. "protected Attribute" (wie das Passwort). Damit Du nicht einfach mit einem Script das Passwort auslesen kannst (oder andere Instanzen). Holst Du nun das Objekt, fehlt das Passwort da drin. Dann speicherst Du das Objekt neu, ohne das Passwort = weg. Nimm startInstanceAsync('email.0'); bzw. stopInstanceAsync('email.0'); (ab Adapter v8.7.0) @haus-automatisierung Macht zu 100% Sinn, wenn man das so liest. Danke für die Erklärung . So macht ioBroker einfach Spaß Gruß Darth
  • JSON in taugliches E-Charts umwandeln

    4
    0 Stimmen
    4 Beiträge
    514 Aufrufe
    M
    @mickym Mega, genau das habe ich gesucht. Funktionierte auf Anhieb - baue ich mir jetzt nach meinen wünschen zusammen. Besten Dank :-)
  • Sonoff Datenpunkt color

    10
    1
    0 Stimmen
    10 Beiträge
    921 Aufrufe
    DerMichaD
    @armilar Moin, nach dem Update auf 3.1.2 hat es auch nicht funktioniert. Habe jetzt noch mal die Instanz mit allen Objekten gelöscht und wieder den den Stand 3.1.0 installiert. Jetzt FUNKTIONIERT ES !!! Ich weiß nicht was da vorher schief gelaufen ist, aber trotzdem danke für die Unterstützung. MfG
  • Blocky RGB zu Hex

    4
    0 Stimmen
    4 Beiträge
    459 Aufrufe
    CodierknechtC
    @paul53 Danke für die Erklärung! @nick21 Dann sollte das auch so gehen: [image: 1727295372455-02f0ac3c-e5d6-4acb-b209-1611239ac500-grafik.png]
  • EVCC Adapter Datenpunkte PV Speicher

    14
    3
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    J
    @docsnyder7 sagte in EVCC Adapter Datenpunkte PV Speicher: Werte wie, tagesverbrauch, tageserzeugung, tageseinspeisung etc... das kommt bei meinem Setup direkt aus dem WR naja, diese Werte z.B. wären sehr nett, diese berechne ich mit Sourceanalytics was aber eh fast stimmt dann am Tag Ich habe einen Huawei Sun2000 WR samt Huawei Speicher Modbus Adapter habe ich nicht am Laufen, da ich keine Geräte via Modbus bis dato einbinde. Hier noch der Export meiner VIS: Viel Spass damit Liebe Grüße Jürgen Energieübersicht.rtf Wochenübersicht.rtf

441

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge