Weiter zum Inhalt

Blockly

6.6k Themen 80.5k Beiträge

Hilfe für Skripterstellung mit Blockly

NEWS

  • Zähleränderungen pro Tag berechnen?

    18
    0 Stimmen
    18 Beiträge
    786 Aufrufe
    P
    Hi Leute, darf ich mich hier mal anschließen? Meine Umsetzung hilft vielleicht auch dem TE. Sie ist leider noch nicht perfekt, dazu am Ende mehr. Sie ist für Gas, kann aber neben dem Verbrauch auch gleich die Kosten mitberechnen und lässt sich einfach auf Strom anpassen. Ich lese mit Aqara die Gaszählerimpulse und habe einen DP Gaszählerstand, der auch zuverlässig in Schritten von 0,1m³ aktualsisiert wird. So weit so gut. Mit dem Blockly zur Verbrauchsberechnung hängt es aber noch ein wenig und ich weiß nicht, warum. Folgende User-Datenpunkte gibt es... Präfixe: h_ / d_ / w_ als Präfix für Stunde, Tag und Woche zu jedem Präfix dann die Werte: VerbrauchVolumen, VerbrauchEnergie, VerbrauchKosten, letzterZählerstand und die allgemeinen DP: Gaszählerstand, aktErdgasArbeitspreis, aktErdgasBrennwert, aktErdgasZustandszahl Das Blockly läuft stündlich und aktualisiert die Stundenwerte, prüft ob Mitternach ist und aktualisiert die Tageswerte, prüft dabei ob Montag ist und aktualisiert die Wochenwerte. Hier das Blockly als Quellcode: schedule("0 * * * *", async function () { // Aufruf stündlich, immer vorherige Stunde berechnen setState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchVolumen"/*h_VerbrauchVolumen*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Gaszählerstand").val) - getState("0_userdata.0.Gaszähler.Stunde.h_letzter_Zählerstand").val)*10)/10, true); setState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchEnergie"/*h_VerbrauchEnergie*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchVolumen").val) * parseFloat(getState("0_userdata.0.Gaszähler.aktErdgasZustandszahl").val) * getState("0_userdata.0.Gaszähler.aktErdgasBrennwert").val)*100)/100, true); setState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchKosten"/*h_VerbrauchKosten*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Stunde.h_VerbrauchEnergie").val) * getState("0_userdata.0.Gaszähler.aktErdgasArbeitspreis").val)*100)/100, true); setState("0_userdata.0.Gaszähler.Stunde.h_letzter_Zählerstand"/*h_letzter Zählerstand*/, getState("0_userdata.0.Gaszähler.Gaszählerstand").val, true); // Wenn Stunde gleich 0 dann Vortag berechnen if ((new Date().getHours()) == 0) { setState("0_userdata.0.Gaszähler.Tag.d_VerbrauchVolumen"/*d_VerbrauchVolumen*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Gaszählerstand").val) - getState("0_userdata.0.Gaszähler.Tag.d_letzterZählerstand").val)*10)/10, true); setState("0_userdata.0.Gaszähler.Tag.d_VerbrauchEnergie"/*d_VerbrauchEnergie*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Tag.d_VerbrauchVolumen").val) * parseFloat(getState("0_userdata.0.Gaszähler.aktErdgasZustandszahl").val) * getState("0_userdata.0.Gaszähler.aktErdgasBrennwert").val)*100)/100, true); setState("0_userdata.0.Gaszähler.Tag.d_VerbrauchKosten"/*d_VerbrauchKosten*/, Math.round((parseFloat((parseFloat(getState("0_userdata.0.Gaszähler.Tag.d_VerbrauchEnergie").val) * getState("0_userdata.0.Gaszähler.aktErdgasArbeitspreis").val)) / 100)*100)/100, true); setState("0_userdata.0.Gaszähler.Tag.d_letzterZählerstand"/*d_letzterZählerstand*/, getState("0_userdata.0.Gaszähler.Gaszählerstand").val, true); // Wenn Wochentag gleich 1 (Montag) dann Vorwoche berechnen if ((new Date().getDay() === 0 ? 7 : new Date().getDay()) == 1) { setState("0_userdata.0.Gaszähler.Woche.w_VerbrauchVolumen"/*w_VerbrauchVolumen*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Gaszählerstand").val) - getState("0_userdata.0.Gaszähler.Woche.w_letzterZählerstand").val)*10)/10, true); setState("0_userdata.0.Gaszähler.Woche.w_VerbrauchEnergie"/*w_VerbrauchEnergie*/, Math.round((parseFloat(getState("0_userdata.0.Gaszähler.Woche.w_VerbrauchVolumen").val) * parseFloat(getState("0_userdata.0.Gaszähler.aktErdgasZustandszahl").val) * getState("0_userdata.0.Gaszähler.aktErdgasBrennwert").val)*100)/100, true); setState("0_userdata.0.Gaszähler.Woche.w_VerbrauchKosten"/*w_VerbrauchKosten*/, Math.round((parseFloat((parseFloat(getState("0_userdata.0.Gaszähler.Woche.w_VerbrauchEnergie").val) * getState("0_userdata.0.Gaszähler.aktErdgasArbeitspreis").val)) / 100)*100)/100, true); setState("0_userdata.0.Gaszähler.Woche.w_letzterZählerstand"/*w_letzterZählerstand*/, getState("0_userdata.0.Gaszähler.Gaszählerstand").val, true); } } }); und hier in der Grafik: [image: 1671544257860-38bf1f3f-52b6-44f6-82da-cfa385f9121f-image.png] In den allermeisten Fällen läuft es zuverlässig jede Stunde und aktualisiert alle Werte die zu dem jeweiligen Zeitpunkt fällig sind. Manchmal jedoch wird je Sektion nur der letzte Punkt ausgeführt, also nur der letzte Zählerstand von Stunde, Tag oder Woche mit dem aktuellen Zählerstand aktualisiert. Die Berechnungen werden in den seltenen Fällen nicht ausgeführt oder nicht geschrieben. Hat jemand eine Idee, warum das manchmal passieren könnte? Oder was ich zum Debuggen unternehmen kann? In der Console unter dem Script erscheinen keine Fehler, im Protokoll auch nicht. Da bin ich ein wenig ratlos. Viele Grüße, Peter
  • Blockly täglichen Verbrauch hochzählen

    16
    1
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    paul53P
    @fritzk sagte: Der Verbrauch aktuell sollte ja dann auch um 23:58 Uhr auf null zurückgestellt werden ? Das kann man machen. Beim nächsten Zählimpuls fängt er ohnehin mit dem Wert einer Impulseinheit an.
  • Einfaches Rollanden zu Script zu Uhrzeit X

    14
    1
    0 Stimmen
    14 Beiträge
    955 Aufrufe
    F
    @nordischerjung ah ok, dann kommt javascript.0 2022-12-20 10:56:07.507 info script.js.Aktiv.automatik.Rolladen1: 30 javascript.0 2022-12-20 10:56:07.506 info script.js.Aktiv.automatik.Rolladen1: 7
  • Optimierung von Blockly Scripts

    13
    2
    0 Stimmen
    13 Beiträge
    2k Aufrufe
    M
    @Codierknecht funktioniert tadellos. bei weiteren fragen - und die werden kommen - melde ich mich.
  • Schaltung bei Nacht

    6
    1
    0 Stimmen
    6 Beiträge
    705 Aufrufe
    Dominik F.D
    @oberfragger Solange der Bewegungsmelder Bewegung registriert, bleibt das Licht an. Wird innerhalb von 5 Sekunden keine weitere Bewegung registriert, geht das Licht aus. Ich hab die Zeit so kurz gewählt um nicht unnötig das Licht vor der Haustür anzulassen. Edit: zur besseren Erklärung....Mein Bewegungsmelder hält den Datenpunkt für Bewegung für mindestens 15 Sekunden auf true, bei jeder Bewegungserkennung starten diese 15 Sekunden aufs neue. Das Licht bleibt also mindestens 20 Sekunden lang an Da hast du recht, dass ich das entschlanken könnte. Ich befinde mich allerdings noch recht am Anfang von Blockly und habe das bewusst gelassen um, wenn ich mal längere Zeit nichts mit Blockly mache, noch weiß was da passiert :D
  • Switch-Status wird nicht korrekt übermittelt

    Verschoben Ungelöst
    16
    1
    0 Stimmen
    16 Beiträge
    476 Aufrufe
    CodierknechtC
    @cranixx Geräte ohne eigenen Adapter bekommt man über diesen Weg nach ioBroker und von dort aus nach Homekit: 1.) Gerät in HomeKit einbinden 2.) Gerät wieder aus HomekKit entfernen 3.) Geräte über den "Homekit-Controller" in ioBroker einbinden 4.) Gerät über Yahka wieder nach Homekit bringen Ist zumindest insofern weniger verbastelt, als dass es hier keine zusätzliche Homebridge braucht und alles im ioB bleibt. Ist trotzdem etwas "von hinten durch die Brust ins Auge" - aber wenn's eben keinen Adapter gibt die etwas ressourcensparendere Lösung.
  • Ausführen in - variable Zeit

    2
    0 Stimmen
    2 Beiträge
    121 Aufrufe
    hotspot_2H
    @hotspot_2 Sorry, hab's schon gefunden bzw. seither übersehen. Gibt ja noch einen anderen Blockly Befehl von "Ausführen in".
  • http json request in neue Datenpunkte

    12
    3
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    S
    ich stehe gerade auf'm schlauch wenn die Verbindung wieder hergestellt wurde ... der Ping also wahr ist ... passiert das [image: 1671463105176-error.jpg] [image: 1671463165186-error1.jpg]
  • [gelöst] JSON - Werte von arrays ändern ?

    15
    0 Stimmen
    15 Beiträge
    458 Aufrufe
    DJMarc75D
    @mickym check und passt [image: 1671460404568-screenshot-2022-12-19-153244.png]
  • Frage zu "Ausführen interval"

    4
    1
    0 Stimmen
    4 Beiträge
    531 Aufrufe
    CodierknechtC
    @uwet Asynchrone Denkfalle Du darfst die in Blockly dargestellt Abfolge nicht als "Ablauffolge" eines Programms verstehen. In ioBroker läuft (fast) alles asynchron. Sobald hier die "zyklische Ausführung" eingerichtet wurde, geht's weiter und der Debug-Baustein mit "ende2" wird ausgeführt. Erst 100 ms später wird zum ersten Mal der Code innerhalb der zyklischen Ausführung durchlaufen.
  • solved: 3x Ausführung im Log - schaltet aber gar nicht

    74
    1
    0 Stimmen
    74 Beiträge
    7k Aufrufe
    HomoranH
    @ch90045 sagte in 3x Ausführung im Log - schaltet aber gar nicht: den Nutzer iobroker gibt es nunmal hier nicht dann läuft bei dir auch kein iobroker. Dieser Nutzer wird intern bei der Installation von iobroker angelegt.
  • Alexa Sprachausgabe Wert eines Datenpunktes

    9
    1
    0 Stimmen
    9 Beiträge
    953 Aufrufe
    haselchenH
    @hagst Na denn mal los, Wetter passt ja auch für so ne Spielerei heute :)
  • Kann ich auf das Entstehen eines Objektes triggern?

    4
    0 Stimmen
    4 Beiträge
    400 Aufrufe
    paul53P
    @jufu sagte: nicht getriggert, obwohl das Objekt angelegt wurde. Wurde auch ein Wert in den Datenpunkt geschrieben?
  • Backofensteuerung (gelöst)

    4
    2
    0 Stimmen
    4 Beiträge
    367 Aufrufe
    M
    kann geschlossen werden
  • JSON Objekte kombinieren

    5
    1
    0 Stimmen
    5 Beiträge
    869 Aufrufe
    J
    Danke euch, sehe ich mir nachher mal an 😊
  • Blockly Timestamp überprüfen

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    541 Aufrufe
    Chris 1C
    @fastfoot said in Blockly Timestamp überprüfen: @chris-1 [image: 1671220961231-zeitvergleich.png] Danke, probier ich aus
  • gelöst: Variable schalten

    blockly
    26
    1
    0 Stimmen
    26 Beiträge
    2k Aufrufe
    YunaKatoY
    @paul53 Danke! .. lasse ich so testweise laufen.
  • Einfacher BWM

    3
    1
    0 Stimmen
    3 Beiträge
    455 Aufrufe
    DJMarc75D
    @xnetworker-x sagte in Einfacher BWM: Kann mir bitte jemand sagen warum das folgende Script nicht klappt. Es soll nur eine Meldung per pushover bei Bewegung gesendet werden. @xnetworker-x sagte in Einfacher BWM: So funktioniert es jetzt. Gibt es Empfehlungen zur Anpassung des Scriptes? Ja, aber warum hat das im ersten Beitrag nicht funktioniert und im zweiten dann doch ? Mach mal so: [image: 1671212783649-screenshot-2022-12-16-184338.png]
  • (erledigt) Datenpunkt auf null setzen

    23
    1
    0 Stimmen
    23 Beiträge
    3k Aufrufe
    DJMarc75D
    @homoran sagte in (erledigt) Datenpunkt auf null setzen: Wo finde ich denn jetzt den Tageszähler? @homoran sagte in (erledigt) Datenpunkt auf null setzen: liest er doch immer noch den Gesamtzählerstand ein Ja klar, das ist der Trigger welche die Variable steuert und diese wiederum den DP "Brennerstart_Tag", welches der Tageszähler ist. Macht aber eigentlich nur Sinn zur LIVE-Ablesung in z.B. VIS. Wenn geloggt werden soll dann um 23:59 Uhr (z.B.) den Wert von "Brennerstart_Tag" in einen anderen DP schreiben und diesen dann historisieren.
  • Blockly Abschnitt in ein anderes Skript übertragen

    blockly
    4
    1
    0 Stimmen
    4 Beiträge
    633 Aufrufe
    frana120500F
    @mitch du kannst auch den Block den du kopieren möchtest einmal mit der linken Maus anklicken, dann STRG + C, dann rüber in das andere Script und dann dort mit STRG + V einfügen. Dann brauchst du nicht den Code zu exportieren. Wenn du das eingefügte Blockly Stück nicht siehst, mach mal die Ansicht mit dem - rechts über dem Mülleimer kleiner

186

Online

33.0k

Benutzende

83.7k

Themen

1.3m

Beiträge