Weiter zum Inhalt

Skripten / Logik

16.6k Themen 214.8k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Themen
    49k Beiträge
    D
    @ArnoD meine Wallbox ist über E3DC eingebunden netzwerkkabel mit fester IP passend zu e3dc. Habe extra deswegen die Multiconect II genommen. Die Werte im E3DC stimmen Total Solar und Total all In der Walbox (über RSCPGui ausgelesen, WB#0) alles falsch. Nach neustart von iobroker adapter war es auf einmal wieder auf null????
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    D
    Vielen Dank, ich habe es mit euerer Hilfe und Copilot geschafft :-)
  • Hilfe für Skripterstellung mit Node-RED

    957 13k
    957 Themen
    13k Beiträge
    M
    @geschild Du kannst in der Instanz den RAM erhöhen. Standard ist 128MB. Könnte etwas knapp sein. [image: 1778866701209-4987c65c-722e-46f5-8638-4db4554a203d-image-resized.jpeg]
  • Mit Blockly eine Scene aktivieren oder deaktivieren

    blockly
    7
    1
    0 Stimmen
    7 Beiträge
    265 Aufrufe
    hananH
    Starten, stoppen, aktivieren, deaktivieren, was ist was? Ich habe ein Blockly welches den Szenezustand einer Szene auf true oder false (nennen wir dieses start, stop) stellt, doch ich möchte mit einem anderen Blockly verhindern das diese Szene funktioniert und auch wieder funktioniert (nennen wir es deaktivieren, aktivieren). Szene deaktiviert: [image: 1766685667452-99145574-fefb-404d-9c4e-4997e02af7e9-image.png] Szene aktiviert: [image: 1766685704823-19ca4daf-46f0-47ea-8c8a-9a99a2b19af6-image.png]
  • eCharge Hardy Barth Wallbox: eCB1 REST API Werte einlesen

    5
    2
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    D
    @ThHa sagte in eCharge Hardy Barth Wallbox: eCB1 REST API Werte einlesen: Die Steurung mache ich momentan über die Wallbox Oberfläche in einen iFrame. Hey zur Steuerung gibt es natürlich auch API Endpunkte, hier meine JS Funktionen die ich benutze für: ECO/SCHNELL/MANUAL Start/Stopp AI AN/AUS function wbSetPvMode(mode) { // mode: 'eco' | 'quick' | 'manual' wbPostForm( '/api/v1/pvmode', { pvmode: mode }, 'PvMode=' + mode ); } function wbSetEcoAutostart(on) { wbPostForm( '/api/v1/chargecontrols/01/mode/eco/startstop', { autostartstop: on ? 'true' : 'false' }, 'Eco-Autostart=' + on ); } function wbStart() { wbPostJson('/api/v1/chargecontrols/01/start', 'Start'); } function wbStop() { wbPostJson('/api/v1/chargecontrols/01/stop', 'Stop'); }
  • Programm oder Befehl über Vis starten bzw. ausführen

    19
    0 Stimmen
    19 Beiträge
    307 Aufrufe
    M
    nein, aber ich habe den Fehler gefunden. Es hing mit den Rechten zusammen Danke für Deine Unterstützung
  • VS Code + Cline + Devstral 2 (aktuell kostenlos)

    1
    3 Stimmen
    1 Beiträge
    214 Aufrufe
    Niemand hat geantwortet
  • KNX dpt 2.001 Zwangsführung steuern

    6
    0 Stimmen
    6 Beiträge
    231 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
    616 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
    367 Aufrufe
    HomoranH
    @Roelli jepp! genau so!
  • [Script] Die sprechende Kaffeemaschine – Home Connect

    javascript
    11
    1
    2 Stimmen
    11 Beiträge
    2k 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
    730 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
    352 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
    526 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
    1k 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
    535 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
    171 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
    675 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
    1k 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
    100 Aufrufe
    Niemand hat geantwortet
  • Gelöst: Bilder senden von einen IOB zum anderen IOB

    javascript
    23
    0 Stimmen
    23 Beiträge
    1k 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...

449

Online

32.9k

Benutzer

83.0k

Themen

1.3m

Beiträge