Skip to content

Skripten / Logik

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

16.6k Themen 213.9k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    S
    @porty hast du HEMS und sowas deaktiviert? nicht das was dazwischen funkt.... auch die Device ID eineggeben? (Muss ja sonst würde die regelung nicht funktionieren.... [image: 1773589243921-598a01b2-677f-4e13-aec0-9287d2155e7a-image-resized.png] vielleicht auch mal, in der app (MQTT AUS) und einmal den Netzeingangs und Ausgangs-modus auswählen und jeweils dort 0 eingeben Auch vielleicht den Debug modus aktivieren (vielleicht reicht ja erstmal Info), ob da was bei raus kommt... Ich nutze inzwischen einen leichten bezug, finde die Regelung dann etwas besser: TARGET_W: 20, // Zielwert am Zähler (20 = leichter Bezug). Ich mache gleich mal oben meine aktuellste version rein, habe ein paar kleine Optimierungen eingebaut
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    B
    @Murphy-0 Hi, noch mal ne Frage: zum Beenden des Ladens bei maxVol 3.5V muss hier auch der socSet=100% sein. Ich hätte gedacht, dass erreichte Soc des Gesamtsystems=100% sein muss, liege ich da falsch? [image: 1773590559609-2a9cec51-e167-4e24-9529-7bb5880e232c-image.png]
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • Webhook von homey an IOB-TR064-Adapter löst Anruf aus

    2
    0 Stimmen
    2 Beiträge
    149 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
    544 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
    87 Aufrufe
    Niemand hat geantwortet
  • Gelöst: Bilder senden von einen IOB zum anderen IOB

    javascript
    23
    0 Stimmen
    23 Beiträge
    996 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
    9k 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
    74 Aufrufe
    Niemand hat geantwortet
  • Zeitzone bei influxdb - GMT+2 wird nicht angezeigt

    3
    1
    0 Stimmen
    3 Beiträge
    168 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
    333 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); } });
  • [gelöst] Verständnis Attribute mit Blockly ändern

    10
    1
    0 Stimmen
    10 Beiträge
    525 Aufrufe
    padrinoP
    @asgothian Also, ich glaube, der Adapter ist ziemlich tot. ;) Wollte damit auch niemanden behelligen... Hatte schon angefangen zu überlegen ob der Adapter evtl... und wie.... Aber dann dachte ich, ich guck mal, was ich in JS hin bekomme, und wenn's ordentlich klappt mach ich das Skript zugänglich für Interessierte. :relieved:
  • Zwangsladung mit Sungrow SH10RT

    10
    2
    0 Stimmen
    10 Beiträge
    908 Aufrufe
    D
    Hier noch der Vollständigkeitshalber das 3. Script. [image: 1760458589681-bildschirmfoto-vom-2025-10-14-18-15-40.png]
  • per script Rest anfrage senden

    31
    0 Stimmen
    31 Beiträge
    1k Aufrufe
    Great SUNG
    @delphinis Windows ist generell etwas schwieriger, als Linux. Du musst wohl zuerst mal node.js updaten, vorher macht alles andere keinen Sinn (es sei denn, Du hast schon die aktuellste Version). Danach kannst Du iobroker updaten. Ich finde diese Diskussion https://forum.iobroker.net/topic/80988/uralt-system-updaten-oder-umzug ganz gut.
  • IOBroker Automatisiertes Deployment

    12
    0 Stimmen
    12 Beiträge
    519 Aufrufe
    OliverIOO
    @vippis Dann musst du in den Adapter schauen was die gui des Adapters mit dem Passwort macht, was der Nutzer einträgt.
  • Anwesenheit Verzögerung, nochmalige Prüfung einbauen ?

    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    Samson71S
    @jolic sagte in Anwesenheit Verzögerung, nochmalige Prüfung einbauen ?: hi, keine Ahnung ob dir das hilft, ich nutze seit Jahren problemlos den TR-064-adapter für meine Anwesenheitserkennung mit Fritzbox und zwei APs im Mesh. Gelesen? @dasbrot sagte in Anwesenheit Verzögerung, nochmalige Prüfung einbauen ?: Ich muss das sowiso umstellen, da ich in Kürze auf ubiquiti umstelle. Dann gibt es keine Fritzbox mehr.
  • Adresse aus GPS Koordinaten ermitteln ?

    87
    0 Stimmen
    87 Beiträge
    8k Aufrufe
    Steffe.S.S
    Vielen Dank für Eure Mühe, das Blockly von @stenmic läuft. Ich werde aber auch mal das Skript von @bahnuhr testen. Vielen Dank für Eure Hilfe :beers:
  • Skript - automatisch Eintrag im Google Kalender machen

    7
    0 Stimmen
    7 Beiträge
    391 Aufrufe
    bahnuhrB
    @dirkhe sagte in Skript - automatisch Eintrag im Google Kalender machen: "unsicher" zugelassen unsicher, etc. kam da nicht. Das Blatt sieht anders aus.
  • Ostrom Api auslesen

    3
    0 Stimmen
    3 Beiträge
    472 Aufrufe
    Skyx3S
    @jpakusch Super Danke, habe es getestet und es funktioniert. Das Thema Preise wäre noch spannend.
  • FingerBot korrekt per Script ansprechen

    javascript blockly
    12
    2
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    B
    @kackpappe said in FingerBot korrekt per Script ansprechen: DeConz/Phoscon Moin, also Ich habe einen Fingerbot an meiner Spülmaschine im Einsatz, steuere Ihn aber noch nicht. Angebunden ist der via Deconz/Phoscon App und taucht auch bei mir im iobroker als Licht auf (Angelernt habe Ich den einfach über das Webfrontend): [image: 1759230015424-4298864e-eaaf-41e7-85f8-959fd1074a45-grafik.png] [image: 1759230055008-9b5de832-3cee-4a18-a232-400f1b50a2e2-grafik.png] Bei mir reagiert der Button auch, wenn ich den Datenpunkt Level mit 100 beschreibe: [image: 1759229760574-c9b47ddd-5e68-4cef-a72c-17e300661a55-grafik.png] Da Ich den Button noch nicht aktiv ansteure habe ich quick & dirty mal eben ein Blockly aufgesetzt und einfach nur den Datenpunkt mit der Zahl 100 "angesteuert" (ohne Trigger und so nen Vierlefanz): [image: 1759229749074-5f5afb20-7ac1-4ca0-b15c-f0f48bece2d4-grafik.png] Das funktioniert soweit bei mir, die Spülmaschine läuft. Jetzt brauche Ich nur noch einen wasserfesten Bot, der bei laufender Maschine das Geschirr umräumt (was die Kinder mal wieder mitten in den Ausleger für den Sprüharm gelegt haben :-). Gruß, Burn.
  • Anker Solix Solarbank Steuerung per Tibber Pulse mit Blockly

    1
    4
    0 Stimmen
    1 Beiträge
    957 Aufrufe
    Niemand hat geantwortet

737

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge