Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.8k 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
    KusselinK
    @Ro75 sagte: ja. Allerdings wirst du auf Dauer keinen Spaß haben, denn da wird ja jeden Tag mindestens ein weiterer Datenpunkt angelegt. Wenn du daraus eine Historie ableiten willst, völlig ungeeignet - wurde aber schon weiter oben angesprochen. Ro75. Hi Ro75, ich habe es jetzt so gelöst: // ═══════════════════════════════════════════════════════════════ // Einspeisung – Tageswert (wird täglich überschrieben) // ═══════════════════════════════════════════════════════════════ // ── Quell-Datenpunkte ────────────────────────────────────────── const DP_HEUTE_KWH = 'javascript.0.Einspeisung.heute_kWh'; const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro'; // ── Ziel-Datenpunkte (fest, werden täglich überschrieben) ────── const DP_TAG_KWH = '0_userdata.0.Einspeisung.letzter_tag_kWh'; const DP_TAG_EURO = '0_userdata.0.Einspeisung.letzter_tag_euro'; const DP_TAG_DATUM = '0_userdata.0.Einspeisung.letzter_tag_datum'; // ── Jahressummen ─────────────────────────────────────────────── const DP_JAHR_KWH = '0_userdata.0.Einspeisung.jahr_kWh'; const DP_JAHR_EURO = '0_userdata.0.Einspeisung.jahr_euro'; // ── Archiv-Präfix ────────────────────────────────────────────── const DP_ARCHIV = '0_userdata.0.Einspeisung.Archiv.'; // ── Schutz vor Doppeladdierung ───────────────────────────────── const DP_LETZTER_RUN = '0_userdata.0.Einspeisung.letzter_run_datum'; // ═══════════════════════════════════════════════════════════════ // Datenpunkte anlegen // ═══════════════════════════════════════════════════════════════ createState(DP_TAG_KWH, 0, { name: 'Einspeisung letzter Tag', unit: 'kWh', type: 'number', role: 'value.energy', read: true, write: true }); createState(DP_TAG_EURO, 0, { name: 'Einspeisevergütung letzter Tag', unit: '€', type: 'number', role: 'value.money', read: true, write: true }); createState(DP_TAG_DATUM, '', { name: 'Datum letzter gespeicherter Tag', type: 'string', role: 'text', read: true, write: true }); createState(DP_JAHR_KWH, 0, { name: 'Einspeisung Jahr gesamt', unit: 'kWh', type: 'number', role: 'value.energy', read: true, write: true }); createState(DP_JAHR_EURO, 0, { name: 'Einspeisevergütung Jahr gesamt', unit: '€', type: 'number', role: 'value.money', read: true, write: true }); createState(DP_LETZTER_RUN, '', { name: 'Letztes Ausführungsdatum', type: 'string', role: 'text', read: true, write: true }); // ═══════════════════════════════════════════════════════════════ // Hauptfunktion // ═══════════════════════════════════════════════════════════════ function tageswertSpeichern() { const d = new Date(); const datum = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`; // ── Schutz vor Doppeladdierung ───────────────────────────── const letzterRun = getState(DP_LETZTER_RUN).val; if (letzterRun === datum) { log(`⚠️ Tageswert für ${datum} wurde bereits gespeichert – Abbruch.`, 'warn'); return; } // ── Werte lesen ──────────────────────────────────────────── const tagesKwh = parseFloat(getState(DP_HEUTE_KWH).val) || 0; const tagesEuro = parseFloat(getState(DP_HEUTE_EURO).val) || 0; // ── Fehlerbehandlung: ungültige Werte ────────────────────── if (tagesKwh < 0 || tagesEuro < 0) { log(`❌ Ungültige Werte: ${tagesKwh} kWh / ${tagesEuro} € – Abbruch.`, 'error'); return; } if (tagesKwh === 0 && tagesEuro === 0) { log(`⚠️ Beide Werte sind 0 – kein Einspeisungstag oder Sensor-Fehler.`, 'warn'); } // ── Letzten Run-Datum speichern ──────────────────────────── setState(DP_LETZTER_RUN, datum, true); // ── Tagesdatenpunkte überschreiben ───────────────────────── setState(DP_TAG_KWH, tagesKwh, true); setState(DP_TAG_EURO, tagesEuro, true); setState(DP_TAG_DATUM, datum, true); // ── Jahressummen aufaddieren ─────────────────────────────── const neueKwh = Math.round(((parseFloat(getState(DP_JAHR_KWH).val) || 0) + tagesKwh) * 100) / 100; const neueEuro = Math.round(((parseFloat(getState(DP_JAHR_EURO).val) || 0) + tagesEuro) * 100) / 100; setState(DP_JAHR_KWH, neueKwh, true); setState(DP_JAHR_EURO, neueEuro, true); log(`✅ ${datum}: ${tagesKwh} kWh / ${tagesEuro} € gespeichert`, 'info'); log(`📊 Jahressumme: ${neueKwh} kWh / ${neueEuro} €`, 'info'); // ── Silvester: Jahresabschluss ins Archiv schreiben ──────── if (d.getMonth() === 11 && d.getDate() === 31) { jahresabschlussArchivieren(d.getFullYear(), neueKwh, neueEuro); } } // ═══════════════════════════════════════════════════════════════ // Jahresabschluss archivieren // ═══════════════════════════════════════════════════════════════ function jahresabschlussArchivieren(jahr, gesamtKwh, gesamtEuro) { const dpArchivKwh = DP_ARCHIV + jahr + '_kWh'; const dpArchivEuro = DP_ARCHIV + jahr + '_euro'; createState(dpArchivKwh, gesamtKwh, { name: 'Einspeisung Jahr ' + jahr, unit: 'kWh', type: 'number', role: 'value.energy', read: true, write: false }, () => { setState(dpArchivKwh, gesamtKwh, true); }); createState(dpArchivEuro, gesamtEuro, { name: 'Einspeisevergütung Jahr ' + jahr, unit: '€', type: 'number', role: 'value.money', read: true, write: false }, () => { setState(dpArchivEuro, gesamtEuro, true); }); log(`🗄️ Jahresabschluss ${jahr} archiviert: ${gesamtKwh} kWh / ${gesamtEuro} €`, 'info'); // ── Jahressummen zurücksetzen für neues Jahr ─────────────── setTimeout(() => { setState(DP_JAHR_KWH, 0, true); setState(DP_JAHR_EURO, 0, true); log('🔄 Jahressummen für neues Jahr zurückgesetzt.', 'info'); }, 3000); } // ═══════════════════════════════════════════════════════════════ // Täglich um 23:55 Uhr ausführen // ═══════════════════════════════════════════════════════════════ schedule('55 23 * * *', () => { tageswertSpeichern(); }); log('📋 Script "Einspeisung Jahressumme" gestartet – läuft täglich um 23:55 Uhr.', 'info');
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    M
    @oliverio Ja, genauso ist meine Installation (MariaDB, phpmyadmin und jeweils im Docker Container). Der SQL läuft bereits und ist mit ioBroker über den SQL Adapter verbunden.
  • Hilfe für Skripterstellung mit Node-RED

    962 13k
    962 Themen
    13k Beiträge
    Marc BergM
    @Thomas-Braun sagte: In der Konfigurationsdatei von Node Red, also in der settings.js, kann durch hinzufügen der Zeitzone das Problem behoben werden. Wenn man den Adapter nutzt, werden Änderungen in der settings.js immer wieder überschrieben. Das bringt nichts. @taddy81 Was konkret ist denn das Problem? Lösen die inject Nodes falsch aus? Oder geht es nur um diese Meldung, bei der niemand weiß, woher sie kommt? @Taddy81 sagte: Auszug: 7/26/2026, 11:15:23 AMnode: debug 3msg.payload : string[24]
  • Waschmaschine fertig

    6
    1
    1 Stimmen
    6 Beiträge
    452 Aufrufe
    XenonX
    oder den adapter "device-reminder" der exakt dafür entwickelt wurde
  • Skripte zusammen fassen oder einzelne?

    node-red blockly
    3
    0 Stimmen
    3 Beiträge
    655 Aufrufe
    SKBS
    Hi, ich schließe mich hier mal an und würde gerne um eine Empfehlung bitten. Macht es denn Sinn, wenn man z.B. mehrer Abonnements in verschiedenen Skripts hat, diese in ein Skript zu schreiben, statt auf mehrere zu verteilen? Macht dies etwas aus, weil meinetwegen jedes Skript "von Grund auf" so und soviel Speicher belegt? Danke!
  • Proxmox CPU Mhz auslesen und in Datenpunkt schreiben

    2
    0 Stimmen
    2 Beiträge
    275 Aufrufe
    Thomas 18147T
    #!/bin/bash tempi= cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq curl "http://192.168.2.187:8087/set/0_userdata.0.tempi?value=$tempi" funktioniert wohl
  • Java Script Classes funktionieren nicht mehr

    2
    0 Stimmen
    2 Beiträge
    363 Aufrufe
    K
    Habs selbst gefunden. Hab versehentlich auf dem neuen Raspberri NodeJS 10.2 installiert - mit 12.2 funktioniert es wieder - Nur falls jemand auf dasselbe Problem reinfällt
  • Wallbox Webasto Live mit modbus Adapter steuern

    1
    0 Stimmen
    1 Beiträge
    479 Aufrufe
    Niemand hat geantwortet
  • mjpg-Streamer über ioBroker starten/stoppen

    multimedia
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    TheDukeT
    @renegade-0 sagte in mjpg-Streamer über ioBroker starten/stoppen: Danke dir vielmals. gerne
  • Lametric: Setzen von "Clockface (Base64)" klappt nicht

    1
    0 Stimmen
    1 Beiträge
    211 Aufrufe
    Niemand hat geantwortet
  • CRON Editor von iobroker nutzen

    1
    1
    0 Stimmen
    1 Beiträge
    250 Aufrufe
    Niemand hat geantwortet
  • Welche Service-Types bei Yahka funktionieren?

    communication
    6
    0 Stimmen
    6 Beiträge
    3k Aufrufe
    M
    @linedancer @el_malto Danke!
  • Doppeltes result von exec

    4
    0 Stimmen
    4 Beiträge
    419 Aufrufe
    T
    @asgothian Anbei auch das Bild: [image: 1613557213466-bd37fc3f-0ad6-49ab-ab8b-3b510a680b21-image.png]
  • [gelöst] Brauche hilfe json Array verschachtelung zu parsen

    blockly javascript
    24
    0 Stimmen
    24 Beiträge
    4k Aufrufe
    machs-smart.deM
    @newpicsel ich habe dazu eine Anleitung geschrieben, vielleicht hilft es dir ja: https://www.machs-smart.de/json-blockly-einlesen-parsen-verarbeiten/
  • Home Connect - Siemens EQ.9 richtig nutzen

    javascript
    11
    4
    0 Stimmen
    11 Beiträge
    3k Aufrufe
    D
    Ich habe auch seit einigen Tagen meine Kaffeemaschine über den ioBroker drin und kann diese mittels Sprache ein und ausschalten sowie per Sprache mir meinen Kakao sowie die anderen Standardgetränke zubereiten. Hat jemand zufällig ein Script mit dem ich mir mein Wunschgetränk zusammen bauen kann? z.B. dieses im Bildanhang [image: 1613509881891-cappu.png] Viele Grüße André
  • Alles Licht aus bei verlassen des Hauses

    Verschoben
    29
    0 Stimmen
    29 Beiträge
    7k Aufrufe
    M
    @ja-rod wie schon @Robbi12 erwähnt und auch ich hier schon gesagt, löse ich das über Szenen. Alternativ sollte es auch per Blockly mittlerweile einfacher sein, Stichwort IDs vom Selektor [image: 1613494106684-07e21144-df8c-4999-91bc-fa3de57ddf78-grafik.png] mit Java kenn ich mich selbst auch nicht aus.
  • node Red 2 Geräte und ein Arduino

    5
    0 Stimmen
    5 Beiträge
    434 Aufrufe
    R
    @unclesam node braucht schon weniger als ioBroker und zwar um ein Stück. Ja MQTT über Mosquitto war ich auch schon am überlegen. Quasi dann eine kleine GUI mit Python und die schickt an den MQTT, Wäre sicherlich die "schlankeste" Variante, aber auch ein wenig mehr Programmierung, wobei ich das nicht unbedingt scheue.
  • Shellys in Szenen / Bezeichnung

    14
    1
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    da_WoodyD
    @heimweh said in Shellys in Szenen / Bezeichnung: man muss pro Datenpunkt einen eigenen Alias anlegen oder? ja, ist mühsam, aber glaub mir, nach dem 10. alias wirst du schneller... ;) ist zwar zäh, aber der vorteil überwiegt dann. kaputt, ID ändern, fertig. keine scripte u.s.w. mehr ändern müssen...
  • Flurlicht mit Schalter und BM steuern

    blockly
    20
    1
    0 Stimmen
    20 Beiträge
    2k Aufrufe
    w00dst0ckW
    @ulli1 Sorry, ich hab erst jetzt wieder ins Forum geschaut. Brauchst Du hier noch Input, oder hast Du Dir den Adapter schon angesehen? Ich finde die integrierte Hilfe eigentlich sehr gut und damit erklärt sich alles von selbst.
  • Import von Daten in ioBroker

    javascript blockly
    24
    0 Stimmen
    24 Beiträge
    4k Aufrufe
    W
    Hallo, vielen Dank für den Adapter :) Wenn um 15 Uhr neue Daten kommen, sind die vom aktuellen Tag dann weg? Eigentlich müsste man ja 36 Datenpunkte / Preise haben. Um 14 Uhr weiß man ja die Preise der nächsten 36h Und noch was zum ausrechnen der billigen Stunden: kann man die Start und End Zeit beschreibbar machen? Ich würde die mir gerne am Wochenende auf 00:00 bis 00:00 setzen. Samstag / Sonntag ist es mir egal wann das Auto lädt. Meist ist ja Sonntag Mittag am günstigsten. Mo - Fr hab ich aber n anderes Zeitfenster. Gruß Benni
  • DOORPI Konfiguration

    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    S
    @hansi1234 Danke, probiere ich nachher mal
  • [Gelöst] Probleme mit HmIP-FCI1 und einfachem Blockly

    blockly
    16
    4
    0 Stimmen
    16 Beiträge
    879 Aufrufe
    HomoranH
    @paul53 sagte in Probleme mit HmIP-FCI1 und einfachem Blockly: @homoran sagte: aktualisiert der bei press long nochmal beim loslassen. Gibt es bei HMIP kein PRESS_LONG_RELEASE mehr? Nein! Gibt es nur bei HM_RFD
  • [erledigt] Minus Temparaturen in Systemvariable schreiben

    3
    1
    0 Stimmen
    3 Beiträge
    410 Aufrufe
    falke69F
    @paul53 DANKE! manches kann so einfach sein.

440

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge