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
    @T-147 sagte: ...zwischen Laden und Entladen gewechselt werden soll, um die Relais zu schonen.... Wer zusätzliche Sicherheit möchte: Blockly – Einfache DPL-Regelung (Nulleinspeisung & AC-Laden) für Einsteiger in Verbindung mit dem Steuerungs-Script dieses Threads Post update 18.07.2026; 15:30h Version wie zuvor inkl. kritische Verbraucher + Neu: intervalSec_change_acModeAllowed intervalSec_change_acModeAllowed: acMode-Wechsel nur alle x Sekunden erlaubt. Schont Relais und verhindert häufiges Umschalten zwischen Laden und Entladen. 0 oder 10-60 sec. Auch > 60 möglich. Darf jede(r) für sich entscheiden. Je höher der Wert, desto später erfolgt der Wechsel zwischen Laden und Entladen. Da das Blockly im Inneren wieder sehr ausführlich kommentiert ist, verzichte ich hier auf eine lange Erklärung. Bitte die Hinweise direkt im Skript lesen. Import-Anleitung: Wie man ein Blockly importiert, ist in diesem Post hier beschrieben. Das Skript ist standardmäßig für einen Zendure 1600AC+ vorkonfiguriert. Bitte prüft vor dem ersten Start unbedingt die folgenden Variablen und passt sie an euer eigenes System an: max_outputLimit: 1600 max_inputLimit: 1600 criticalGridPower: 600 criticalOutputLimit: 1600 Urheberrechtshinweis Bitte respektiert die Arbeit, die in diesem Projekt steckt, und beachtet den Urheberhinweis direkt im Skript. Wenn ihr auf Basis dieses Skripts (oder Teilen davon) eigene Modifikationen veröffentlicht, fügt bitte eine kurze Verlinkung zu diesem Thread und / oder die Nennung meines Namens maxclaudi hinzu. Vielen Dank! Datei: maxclaudi_dpl_acMode_kV.zip enthält nur maxclaudi_dpl_acMode_kV.xml Datei herunterladen und Virenscan. maxclaudi_dpl_acMode_kV.zip entpacken in iobroker neues, leeres Blockly erstellen maxclaudi_dpl_acMode_kV.xml importieren. Download: maxclaudi_dpl_acMode_kV.zip Viel Spaß damit!
  • 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
    mickymM
    @KlausStoertebeker sagte: Also hier meine konkreten Fragen: Wie frage ich den Status des Request-Nodes über ein JavaScript ab? Den Status der Request Node würde ich über die status Node abfragen und in einen eigenen Datenpunkt schreiben. Dieser Datenpunkt kann dann ein Javascript triggern. Wie starte ich den Flow über ein JavaScript neu? Einen einzelnen Flow kannst Du nicht von außen steuern, lediglich die gesamte Instanz.
  • KNX dpt 2.001 Zwangsführung steuern

    6
    0 Stimmen
    6 Beiträge
    285 Aufrufe
    paul53P
    @cortezz sagte: weil die von dir angegebene 3 und 2 als dual zahlen gelesen werden? Dezimal - binär 3 = 0b11 2 = 0b10 Javascript selbst unterscheidet nicht, sondern kennt nur Gleitkommazahlen.
  • SendTo-Blockly für Bilderstellung geht nicht

    14
    2
    0 Stimmen
    14 Beiträge
    815 Aufrufe
    haus-automatisierungH
    So wie ich das sehe wird aktuell immer der Default von 2000 ms genutzt.
  • Gerätenamen anstatt "Switch State" im Blockly

    8
    2
    0 Stimmen
    8 Beiträge
    459 Aufrufe
    HomoranH
    @Roelli jepp! genau so!
  • [Script] Die sprechende Kaffeemaschine – Home Connect

    javascript
    11
    1
    2 Stimmen
    11 Beiträge
    3k Aufrufe
    B
    @sigi234 said in [Script] Die sprechende Kaffeemaschine – Home Connect: @Bongo said in [Script] Die sprechende Kaffeemaschine – Home Connect: @sigi234 Ich habe noch einen Geschirrspüler und einem Backofen von Siemens über Home-Connect. Da wird das Programm für die Kaffeemaschine sicher nicht funktionieren. Aber ich plane auch für diese Geräte ein Script zu machen. Wird aber noch dauern :-) Hallo, hast du schon ein Skript für den GS? Nein, dazu bin ich noch nicht gekommen.
  • Temperaturänderung für Ofen an/aus

    14
    0 Stimmen
    14 Beiträge
    855 Aufrufe
    BananaJoeB
    @yablu87 ok, in meinem Kopf war bei "Ofen" irgendwie ein Bild eines Backofens ...
  • Variable wird nicht ausgegeben

    6
    2
    0 Stimmen
    6 Beiträge
    422 Aufrufe
    D
    @homoran Ok .. jetzt hab ich's verstanden .. danke! Mal wieder der Groschen, der Pfennigweise fällt.
  • [ gelöst ]. Auslösenden Kontakt anzeigen lassen ... wie

    9
    0 Stimmen
    9 Beiträge
    615 Aufrufe
    H
    @paul53 Danke dir auch für deine Hilfe.... :)
  • ioBroker >> OpenEPaperLink (OEPL)

    10
    3 Stimmen
    10 Beiträge
    2k Aufrufe
    K
    @awd4u Vielen Dank für Deine Anleitung!
  • javascript.0 bricht ab

    javascript
    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    CodierknechtC
    @digi-bit sagte in javascript.0 bricht ab: die ins Nevada geführt hat <besserwissermode> Das Ding heißt "Nirvana" </besserwissermode>
  • ioBroker wenn online-sonst OpenCCU

    6
    0 Stimmen
    6 Beiträge
    626 Aufrufe
    BananaJoeB
    @cäptnblaubär sagte in ioBroker wenn online-sonst OpenCCU: Die Zwangsabhängigkeit in Proxmox wegen fehlendem (Ziel-)storage war mir bis dato nicht bewußt. Bin strikt nach Vorgaben zum Einbinden eines QNAP-NAS als Backup-Ziel vorgegangen. Das wird irgendetwas anders gewesen sein, etwas wichtiges des Containers oder der VM muss dort gelegen haben. Und wenn es nur eine ISO oder eine andere Datei war. War wohl dann nicht per Proxmox Backup Server? Wäre aber ein separates Thema. Ich sehe das wie @Samson71 : Ein System richtig redundant halten bzw. auf den Ausfall vorbereitet sein. Und das geht mit ioBroker nun mal super, gerade wenn es als VM (von mir aus auch als Container) und insbesondere mit Proxmox. Mit 2 Stück kann man eine Replikation einrichten so das das 2. Gerät sogar mitlaufen kann und bei Hardwareausfall schnell übernehmen kann. Do kann man dann auch im laufenden Betrieb Updates einspielen und dafür die VMs (geht nicht kit Container) ohne Unterbrechung (Herunterfahren) verschieben. Mit dem Proxmox Backup Server (der gerne ein NAS als Ziel haben kann) kann man duzende Backups bei geringen Speicherbedarf vorhalten. Dahin kann man auch gut das ioBroker Backup senden lassen. Ganz nebenbei kann man vor Upgrades, insbesondere vor größeren Umbauten, z.B. Update Debian von Bookworm auf Trixie, neue NodeJS Version etc. mal eben vorher einen Snapshot (aka Spielstand speichern) machen und so bei Bedarf wieder zurück springen (aka Spielstand laden) Das geht mit einem Bare-Metal-System eher schlecht, und die CCU wäre Bare-Metal, oder?
  • Webhook von homey an IOB-TR064-Adapter löst Anruf aus

    2
    0 Stimmen
    2 Beiträge
    207 Aufrufe
    FriedhofsblondF
    @friedhofsblond Habe mal bischen was getestet - aber ehrlich steh ich auf dem Schlauch wie ich einen Wert vom homey auf IOB senden kann. Ich habe noch die App Simple-API im IOB installiert und einen Datenpunk erzeugt. Dieser Punkt soll dann ja per Webhook geändert werden auf on oder off , damit ich diesen im Blockly nutzen kann. Geht das schon in die Richtung - oder bin ich total falsch ?? [image: 1762277637524-26ed0a36-2e6a-4648-a407-6ad3680b0388-image.png] [image: 1762277141697-screenshot-2025-11-04-182011.png] [image: 1762277205673-screenshot-2025-11-04-182619.png] update: so ist es richtig, setzt den Alarm auf true oder false: [image: 1762288559552-screenshot-2025-11-04-213522.png]
  • [gelöst] Nuos A8T - ESP32 Chipsatz - Scripte

    13
    1
    -1 Stimmen
    13 Beiträge
    815 Aufrufe
    D
    @oliverio Moin, wenn Du den gesamten, auch den Vorthread (wurde leider geschlossen) liest wird es dir klar sein. https://forum.iobroker.net/topic/82370/nuos-a8t-esp32-chipsatz-email-info-protokoll/10?_=1762146987441 VG dojodojo
  • Werte per Telegram an iobroker senden

    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    B
    Falls es jemanden interessiert ist hier ein Taschengeld Script: Javascript: // Taschengeld-Verwaltung mit wöchentlicher Gutschrift + VIS-Steuerung // Stand: November 2025 // Anpassungen: 24h-Zeit ohne Sekunden + HTML-Log-Tabelle + nur 20 letzte Einträge const kinder = { Alrik: { konto: '0_userdata.0.Taschengeld.Alrik.Konto', einzahlung: '0_userdata.0.Taschengeld.Alrik.Einzahlung', auszahlen: '0_userdata.0.Taschengeld.Alrik.Auszahlung', btn_einzahlen: '0_userdata.0.Taschengeld.Alrik.Einzahlen', btn_auszahlen: '0_userdata.0.Taschengeld.Alrik.Auszahlen', woechentlich: '0_userdata.0.Taschengeld.Alrik.Woechentlich', log: '0_userdata.0.Taschengeld.Alrik.Log' }, Theda: { konto: '0_userdata.0.Taschengeld.Theda.Konto', einzahlung: '0_userdata.0.Taschengeld.Theda.Einzahlung', auszahlen: '0_userdata.0.Taschengeld.Theda.Auszahlung', btn_einzahlen: '0_userdata.0.Taschengeld.Theda.Einzahlen', btn_auszahlen: '0_userdata.0.Taschengeld.Theda.Auszahlen', woechentlich: '0_userdata.0.Taschengeld.Theda.Woechentlich', log: '0_userdata.0.Taschengeld.Theda.Log' } }; // 🧾 Logik: Eintrag im Log speichern (HTML-Tabelle, 24h-Zeit, max. 20 Einträge) function logEintrag(kind, betrag, art) { const datum = new Date().toLocaleString('de-DE', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false }); const logPfad = kinder[kind].log; let aktuellesLog = getState(logPfad).val || ''; // Wenn noch keine Tabelle existiert → Grundstruktur erzeugen if (!aktuellesLog.includes('<table')) { aktuellesLog = ` <table style="width:100%; border-collapse:collapse; font-family:Arial; font-size:12px;" border="1"> <thead style="background:#ddd;"> <tr> <th style="padding:4px;">Datum</th> <th style="padding:4px;">Art</th> <th style="padding:4px;">Betrag</th> </tr> </thead> <tbody></tbody> </table>`; } // Neue Tabellenzeile (neueste Einträge oben) const neueZeile = ` <tr> <td style="padding:4px;">${datum}</td> <td style="padding:4px;">${art}</td> <td style="padding:4px; text-align:right;">${betrag.toFixed(2)} €</td> </tr>`; // Neue Zeile am Anfang des Tabellenkörpers einfügen aktuellesLog = aktuellesLog.replace(/(<tbody>)/, `$1${neueZeile}`); // Nur die letzten 20 Einträge behalten const tbodyInhalt = aktuellesLog.match(/<tbody>([\s\S]*?)<\/tbody>/); if (tbodyInhalt) { const alleZeilen = tbodyInhalt[1].match(/<tr>[\s\S]*?<\/tr>/g) || []; const begrenzteZeilen = alleZeilen.slice(0, 20); // Nur die ersten 20 behalten (neueste zuerst) const neuerTbody = "<tbody>" + begrenzteZeilen.join("") + "</tbody>"; aktuellesLog = aktuellesLog.replace(/<tbody>[\s\S]*?<\/tbody>/, neuerTbody); } setState(logPfad, aktuellesLog); } // 🕗 Wöchentliche Auszahlung (Sonntag 08:00 Uhr) schedule("0 8 * * 0", () => { for (const kind in kinder) { const kontoPfad = kinder[kind].konto; const betragPfad = kinder[kind].woechentlich; const betrag = parseFloat(getState(betragPfad).val) || 0; const standAlt = parseFloat(getState(kontoPfad).val) || 0; const standNeu = standAlt + betrag; setState(kontoPfad, standNeu); logEintrag(kind, betrag, "Wöchentliche Gutschrift"); } }); // 💰 Einzahlung per Button for (const kind in kinder) { on({ id: kinder[kind].btn_einzahlen, change: 'ne' }, () => { const betrag = parseFloat(getState(kinder[kind].einzahlung).val); if (isNaN(betrag) || betrag <= 0) return; const konto = kinder[kind].konto; const stand = parseFloat(getState(konto).val) || 0; setState(konto, stand + betrag); logEintrag(kind, betrag, "Manuelle Einzahlung"); // Reset setState(kinder[kind].einzahlung, 0); setState(kinder[kind].btn_einzahlen, false); }); } // 💸 Auszahlung per Button for (const kind in kinder) { on({ id: kinder[kind].btn_auszahlen, change: 'ne' }, (obj) => { const btnStatus = obj.state.val; if (btnStatus !== true) return; // Nur reagieren, wenn Button gedrückt (true) const betrag = parseFloat(getState(kinder[kind].auszahlen).val); const konto = kinder[kind].konto; const stand = parseFloat(getState(konto).val) || 0; if (isNaN(betrag) || betrag <= 0 || betrag > stand) { console.warn(`[Taschengeld] Ungültiger Auszahlungsbetrag für ${kind}: ${betrag}`); setState(kinder[kind].btn_auszahlen, false); return; } setState(konto, stand - betrag); logEintrag(kind, betrag, "Auszahlung"); // Reset setState(kinder[kind].auszahlen, 0); setState(kinder[kind].btn_auszahlen, false); }); } Objekte unter 0_userdata 0 anlegen: [image: 1762114774582-2025-11-02-21_17_02-clipboard.png] Hier eine vis-2: [image: 1762114855292-2025-11-02-21_20_28-clipboard.png]
  • Reagieren auf Homematic Fensterkontakt

    28
    3
    0 Stimmen
    28 Beiträge
    2k Aufrufe
    paul53P
    @jay-jey sagte: Hier noch das andere Blockly Dann verwende direkt den Tasten-Datenpunkt als Trigger zur Abfrage, ob noch Fenster offen sind: [image: 1762097076890-blockly_temp.jpg] EDIT: Die Prüfung ohne Vergleich funktioniert sowohl mit 0/1 als auch mit false/true.
  • Tradfri LED1624G9 und E1524/E1810

    1
    0 Stimmen
    1 Beiträge
    127 Aufrufe
    Niemand hat geantwortet
  • Gelöst: Bilder senden von einen IOB zum anderen IOB

    javascript
    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    MartinPM
    @michihorn Die Integration meiner Kameras in iobroker ist rudimentär ... Reolink-Adapter für die beiden richtigen Kameras, und frigate per MQTT für eine experimentell genutzte ESP32 CAM. Bisher keine Web-Visualisierung der Kameras in Vis2 o. Ä. Für das "Angucken" nutze ich die Web-Oberfläche von Frigate bzw die Reolink App und den Browser am PC. "Nach Hause telefonieren" können die Reolink Cams nicht, da sie in der Fritzbox den Internet-Zugang gesperrt bekommen haben. Das Ablagern der Bilder auf dem USB-Drive am Server dient nur der Langzeitarchivierung ... Aus Platzgründen räume ich täglich per Cron Job alle Aufzeichnungen, die älter sind, als 50 Tage auch auf diesem USB-Drive ab. Fand es wichtig, die Dateien "einfach so" in einem Netzwerkshare liegen zu haben...
  • [gelöst] Hargassner HV40 Daten über telnet abgreifen

    heating javascript monitoring
    32
    0 Stimmen
    32 Beiträge
    10k Aufrufe
    A
    @70sman ja bei mir auch, die haben seit Juli eine neue FW, seit dem ist das alles gefixt :) es geht mit dem normalen Adapter von ioBroker. Aber wie fragst du alle Adressen ab, die Digitalen DAQ? MfG
  • Mediola-Adapter Systemvariable befüllen

    1
    0 Stimmen
    1 Beiträge
    114 Aufrufe
    Niemand hat geantwortet
  • Zeitzone bei influxdb - GMT+2 wird nicht angezeigt

    3
    1
    0 Stimmen
    3 Beiträge
    254 Aufrufe
    S
    @haus-automatisierung Den Button, den du beschreibst, habe ich auf local stehen. Trotzdem erscheint nicht die Anzeige "GMT+2". So, ich habe es jetzt selber herausgefunden. In der Darstellungsform ist standardmäßig "Graph" eingestellt. Wenn ich die Werte sehen wollte, habe ich nach Submit den Schalter "View Raw Data" eingeschaltet. Dann werden mir die Werte als UTC angezeigt. Eine Änderung der Darstellungsform bringt jetzt nichts. Jetzt kommts: Wenn ich das Browserfenster aktualisiere (firefox), die Darstellungsform "Table" (nur diese) einstelle, anschließend die Query aufbaue und dann submit betätige, dann werden mir die Zeitangaben in der lokalen Zeit , mit der Ergänzung GMT+2 dargestellt. Wechsel ich jetzt in die Darstellungsform Graph, dann werden dort die UTC-Daten angezeigt. Wieder zurück nach Table als GMT. Muss ich nicht verstehen, weiß jetzt wie es funktioniert. Vielen Dank @haus-automatisierung Gruß Georg
  • Zeile aus JSON löschen

    javascript
    4
    1
    0 Stimmen
    4 Beiträge
    476 Aufrufe
    paul53P
    @michihorn sagte: auch löschen nach "_geht" oder "_kommt"? Den ersten Eintrag? const idTable = '0_userdata.0.Haus.AW.Noel_JSON'; // ID JSON-Tabelle schedule('59 23 * * *', function() { const arr = JSON.parse(getState(idTable).val); if(arr[0].includes('_geht')) { arr.shift(); setState(idTable, JSON.stringify(arr), true); } });

440

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge