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": [] } ]
  • Frage an die HTML und Javascript Experten

    Verschoben Ungelöst javascript
    4
    2
    0 Stimmen
    4 Beiträge
    503 Aufrufe
    OliverIOO
    @oli wo ist da das problem. hier mal 3 knöpfe im html widget? [image: 1731444829204-32e4fcb9-6d6b-4969-968f-8176f937a2ce-image.png] <button>test1</button><button>test1</button><button>test1</button> im zweifel mit css
  • Sprachausgabe Alexa / Blockly

    11
    1
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    haselchenH
    @ralf War auf mich bezogen , weil ich das Blockly falsch gedeutet habe.
  • InfluxDB Daten aufarbeiten

    8
    0 Stimmen
    8 Beiträge
    576 Aufrufe
    M
    Eine Frage noch zur besseren Ordnung der Task jetzt habe ich jeden Raum mit einer Task Run für 0:00 gespeichert ist es auch möglich die Räume in einem Task zu speichern. Ich habe mal das Script für 2 Räume so wie es im Moment bei mir ist. option task = {name: "arbeitszimmerwerte", cron: "0 0 * * *"} from(bucket: "iobroker") |> range(start: -24h) |> filter( fn: (r) => r["_measurement"] == "zigbee.0.00124b002fabe53f.humidity" or r["_measurement"] == "zigbee.0.00124b002fabe53f.temperature", ) |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 60m, fn: mean, createEmpty: false) |> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value") |> map( fn: (r) => ({ _time: r._time, _field: "value", _measurement: "raumwerte", temperatur: r["zigbee.0.00124b002fabe53f.temperature"], humidity: r["zigbee.0.00124b002fabe53f.humidity"], zimmer: "arbeitszimmer", }), ) |> to( bucket: "raumwerte", tagColumns: ["zimmer"], fieldFn: (r) => ({temperatur: r.temperatur, humidity: r.humidity}), ) option task = {name: "badwerte", cron: "0 0 * * *"} from(bucket: "iobroker") |> range(start: -24h) |> filter( fn: (r) => r["_measurement"] == "zigbee.0.00124b002fabe555.humidity" or r["_measurement"] == "zigbee.0.00124b002fabe555.temperature", ) |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 60m, fn: mean, createEmpty: false) |> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value") |> map( fn: (r) => ({ _time: r._time, _field: "value", _measurement: "raumwerte", temperatur: r["zigbee.0.00124b002fabe555.temperature"], humidity: r["zigbee.0.00124b002fabe555.humidity"], zimmer: "badwerte", }), ) |> to( bucket: "raumwerte", tagColumns: ["zimmer"], fieldFn: (r) => ({temperatur: r.temperatur, humidity: r.humidity}), ) Gruß Mico
  • Hilfe bei parsen eines lokalen servers

    16
    1
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    HomoranH
    @bluelightcrew sagte in Hilfe bei parsen eines lokalen servers: eigentlich schon am aufgeben ...ist keine Option
  • Sonoff durch iQontrol und auch durch App schalten lassen

    11
    0 Stimmen
    11 Beiträge
    965 Aufrufe
    da_WoodyD
    @wofried ja, mit shelly ist das leben leichter. 91 stk lügen nicht. ;) btw, Sascha hat immer wieder gute angebote: https://shellyparts.de/
  • Fehlermeldung bei publishOnSubscribe

    1
    0 Stimmen
    1 Beiträge
    187 Aufrufe
    Niemand hat geantwortet
  • JSON Tabelle - Clients aus Fritzbox auslesen

    4
    2
    4 Stimmen
    4 Beiträge
    764 Aufrufe
    falke69F
    @haus-automatisierung Vielen herzlichen Dank für Deine Bemühungen. Es scheint aktuell zu laufen! Danke!
  • Mischer über PI(D) Regler....mit RL Beachtung

    6
    2
    0 Stimmen
    6 Beiträge
    719 Aufrufe
    MartinPM
    @paul53 sagte in Mischer über PI(D) Regler....mit RL Beachtung: Elektronische Heizthermostate enthalten i.d.R. einen PI-Regler. Insofern sie variable Öffnungszustände beherrschen ... Wenn es nur An/Aus gibt, reicht auch ein Zweipunktregler mit ein wenig Hysterese ...
  • dynamischer Inhalt für Trigger

    5
    1
    0 Stimmen
    5 Beiträge
    600 Aufrufe
    M
    @paul53 sagte in dynamischer Inhalt für Trigger: Dann muss man RegExp zum Triggern verwenden Hallo Paul, danke für den Hinweis, bzw Fingerzeit. Ich hab mit den Reg Exp. nun am Sonntag mal rumgespielt und verschiedene Trigger erfolgreich ausprobiert. Was ich noch nicht (zeitlich) geschafft habe, ist diese in den Workflow sauber einzubetten. Kommt wahrscheinlich noch. Dann dokumentiere ich den Part und setze die Anfrage aus erledigt. Merci! VG Michael
  • Sungrow SH10RT Wechselrichter

    2
    0 Stimmen
    2 Beiträge
    259 Aufrufe
    ubeckerU
    @volker123 Gehe mal hier auf die Suche, da findest du etliche Beiträge. zu deiner Frage dirkt, ja geht.
  • Überprüfen ob IOB läuft von einem anderen IOB

    javascript
    3
    0 Stimmen
    3 Beiträge
    216 Aufrufe
    S
    @michihorn Ich mach das mit simpleapi und checke ob der Datenpunkt aktualisiert wurde. Beide iobroker stehen im selben Haus. Mit dem http get Block: http://192.168.0.151:8087/set/0_userdata.0.iobroker-check?value=true [image: 1730568487947-screenshot_2024-11-02-18-27-28-625_com.android.chrome-edit.jpg] Und auf dem zweiten iobroker prüfe ich den Zeitstempel, ist der größer als 30 Sekunden dann Meldung. Mit einem pro Account geht das auch übers Internet und der Cloud.
  • Brauche bitte Hilfe mit Parser

    8
    0 Stimmen
    8 Beiträge
    972 Aufrufe
    HomoranH
    @bernd-0 sagte in Brauche bitte Hilfe mit Parser: Leider zeigt er nicht mehr das an, dann ist wahrscheinlich etwas geändert worden ich brauche dann den aktuellen Quelltext und die genaue Angave dessen, was du an Werten gerne hättest. Am besten mit Angabe der Werte zum Zeitpunkt des Downloads des Quelltexts.
  • Wenn Tür auf, soll die Stechdose geschalte werden (gelöst)

    6
    1
    0 Stimmen
    6 Beiträge
    538 Aufrufe
    C
    @tt-tom funktioniert, wie es sollte. Danke! @TT-Tom
  • Doorbird PlaySound

    7
    1 Stimmen
    7 Beiträge
    3k Aufrufe
    M
    Hab es jetzt aus lauter Verzweiflung mit einem Android-Simulator unter Windows versucht. Dort geht die App und ich kann den Ton hochladen ohne dass die App abstürzt. Ziel erreicht. Danke!
  • Script Tasmota Dimmer Zigbee Fernsteuerung

    4
    0 Stimmen
    4 Beiträge
    346 Aufrufe
    B
    @martinp Danke erst einmal für die Antwort. @paul53 Danke erst einmal für die Antwort. Aber meine Frau meint, ich soll erst mal Abendbrot machen. ...... Werde mich dann später um ausführlichere Antwort kümmern.
  • Java Script - Schreiben in CSV

    22
    0 Stimmen
    22 Beiträge
    2k Aufrufe
    Thomas BraunT
    @smartuser_1 sagte in Java Script - Schreiben in CSV: da ich der einzige "Gelegenheitsarbeiter" auf dem Raspberry bin, Du bist nicht alleine auf dem Ding. Du holst dir beständig fremden Code rein. Schau dir die Datei /etc/shadow an. Da sind alle deine Mitbenutzer aufgeführt. Vertraust du den allen? Die können alle alles mögliche mit der Datei machen. (Etwas vereinfacht....)
  • (gelöst )C-Programm auf Slave mit Rückgabewert ausführen

    36
    0 Stimmen
    36 Beiträge
    4k Aufrufe
    R
    @arteck , @MartinP , @paul53 , @Thomas-Braun Ich möchte mich recht herzlich bei Euch allen für die Inspiration und Eure Bemühungen danken. Auch wenn ich den Unterschied zwischen dem Javascript und dem Blockly nicht verstehe und warum das eine läuft und das andere nicht. Ich freue mich. Nochmals vielen Dank und eine gute Zeit.
  • JSON-Objekt im RAM allokieren

    3
    1
    0 Stimmen
    3 Beiträge
    196 Aufrufe
    L
    @mcu Vielen Dank für deinen Hinweis. Aus Verzweiflung hatte ich den Quelltext des Charts manuell eingetippt. Das hat auf Anhieb funktioniert. Auf deinen Hinweis hin, habe ich nun nochmals verglichen: In der Tat hatte ich die Stelle (unbewusst) korrigiert, indem ich die Zeile "formatter": .. vergaß einzugeben. Das nennt man dann wohl Glück im Unglück haben. Gemäß deines Hinweises habe ich das Ganze nun erfolgreich abgeändert. PS: Wenn man durchgängig einfache Hochkommata (') anstelle von doppelten (") verwendet, geht's auch. Allein das Mischen dieser beiden Delimeter mag ioBroker/JavaScript nicht.
  • zwei Links von Aliase ???

    5
    7
    0 Stimmen
    5 Beiträge
    574 Aufrufe
    C
    @da_woody Hi Leutz So. Funktioniert wieder. Hab den alias gelöscht und neu angelegt. Kein Erfolg. WLED Instanz neu gestartet. Kein Erfolg. Skripte gelöscht und neu angelegt. Kein Erfolg. Java-Skriptadapter neu gestartet und siehe da, es funktioniert. Jetzt steht unter den Objekten auch bei jedem WLED Eintrag "2 Links von Aliasen". Scheint also richtig zu sein. Der Schalter wird auch nicht mehr in rot angezeigt. Danke an Woddy und schönen Tag noch. LG aus dem Sauerland Jörg
  • RTSP-Kamera in VIS darstellen

    12
    0 Stimmen
    12 Beiträge
    3k Aufrufe
    wendy2702W
    @pezi Ich verarbeite von meinen 4x Reolink nur den Sub Stream den Onvif ausgibt. Mir reicht das zur Anzeige auf der VIS von der Qualität.

329

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge