Skip to content

Skripten / Logik

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

16.6k Themen 213.7k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    S
    Habe mal denn Umgang mit dem Limit optimiert (und dabei etwas weiter gemacht), da ich gestern ins Limit gelaufen bin.... die neue Version findet sich im ersten Post im "Spoiler" Falls sich Bugs eingeschlichen haben, solltet ihr vielleicht die letzte 1.9.2 Version erstmal irgendwo zwischenspeichern ;-) Der API-KEY und die anzahl der Tage werden nun auch in Datenpunkten eingegeben... Spoiler Changelog: Wetter.com Forecast API (v1.9.2 ➔ v2.6.1) Dieser Bericht dokumentiert die Evolution des Skripts von einem einfachen API-Abruf hin zu einer performanten, typsicheren und ausfallsicheren ioBroker-Infrastruktur-Komponente. ⚙️ v2.6.x – Perfektionierung & Usability 2.6.1 (Hotfix): * Fix: Konfigurations-Datenpunkte (api_key, forecast_days) werden nun mit write: true angelegt. Retroaktiver Fix: Ein extendObjectAsync entsperrt automatisch Bestandsdatenpunkte, die in Vorversionen als Read-Only angelegt wurden. 2.6.0 (Ultra-Performance): * RAM-Cache (ensuredPaths): Eliminiert hunderte synchrone existsObject()-Aufrufe an die JS-Engine. I/O-Overhead beim Struktur-Check sinkt nach dem ersten Lauf auf nahezu null. Zero-Latency: Die künstliche Drosselung wcomWait() wurde vollständig entfernt, da das System durch Caching und Batching überlastungsfrei agiert. Memory-Management: Timeout-Clearing im HTTP-Request integriert, um Speicherlecks zu verhindern. Semantischer Fallback: wind_speed_max fällt auf wind.avg zurück, falls die API sporadisch den Maximalwert weglässt. 🚀 v2.5.x – Batching & Deadlock-Schutz 2.5.0: State-Write-Batching: Schreibvorgänge (setStateChangedAsync) eines Tages werden in einem internen Puffer gebündelt und per Promise.all simultan abgesetzt. Lock-Härtung: Der HTTP-Call ist nun in ein Promise.race mit einem 10-Sekunden-Timeout gekapselt. Verhindert unendliche Blockaden des isFetching-Locks bei fehlerhaften API-Servern. Type-Safety: Optionale Verkettung (data.hourly ?? []) schützt vor unvollständigen JSON-Antworten. API-Resilienz: Erweiterte isNaN-Prüfung in wcomExtractValue(), um korrupte Strings der API abzufangen. ✨ v2.3.x bis v2.4.x – Dynamisierung 2.4.0 (Dynamische Tage): * FORECAST_DAYS aus dem Code in den Datenpunkt info.forecast_days ausgelagert. Auto-Trigger: Das Skript reagiert sofort auf Änderungen dieses Wertes, passt den Abruf an und löscht überschüssige Tagesordner (cleanupObsoleteDays) rekursiv. 2.3.0 (API-Key Trigger): * Neuer on()-Trigger für info.api_key. Bei Eingabe eines neuen Keys wird sofort ein Test-Abruf (source: 'key_update') erzwungen, der den regulären Restart-Blocker überspringt. 🛡️ v2.1.x bis v2.2.x – Systemhärtung & Controller-Entlastung 2.2.0: Zeitzonen-Fix: new Date() statt toISOString() behebt falsche Tageswechsel-Berechnungen auf Systemen mit UTC-Offset. I/O-Reduktion: Einführung von wcomEnsureState() zur Minimierung von createStateAsync-Spam. 2.1.0: Zero-Churn (Hourly): Das destruktive, rekursive Löschen (deleteObjectAsync) von Stundenwerten wurde durch sauberes Überschreiben abgelöst. Verhindert massive Object-Events und Controller-Spikes. Null-Safety: wcomExtractValue() gibt strikt 0 statt null zurück, was Typerrors in Number-States verhindert. Koordinaten-Fix: Längen- und Breitengrade von exakt 0 (Äquator/Nullmeridian) werden nicht mehr als false verworfen. Native Logs: Das Log-Level debug wird nun korrekt an die ioBroker-Engine durchgereicht. 🔒 v2.0.x – Security & Architektur-Refactoring 2.0.1: Standardisierung des Key-Speicherorts auf 0_userdata.0.wetter_com.info.api_key. 2.0.0: * Security: API-Key aus dem Klartext-Quellcode entfernt. Semaphore (isFetching): Verhindert Race-Conditions und Doppel-Abrufe, wenn Timer und manuelle Trigger gleichzeitig feuern. Async-HTTP: httpGet wurde in ein asynchrones Promise gekapselt, um Netzwerkfehler im zentralen try/catch sicher fangen zu können. Daily-Reset: Fehleranfälliger Mitternachts-Cron für requests_today wurde durch datumsbasierte, asynchrone Prüfung vor jedem API-Call ersetzt. 📉 v1.9.3 – Budget-Stabilität 1.9.3: * Restart-Schutz: Skript-Neustarts lösen keinen API-Call mehr aus, wenn am selben Tag bereits Daten abgerufen wurden (schützt das 100-Calls/Monat Limit bei der Entwicklung). Erweiterter Economy-Mode: Unterscheidung der Trigger-Quellen (morning, afternoon, start). Notlauf-Modus: Fällt das Budget auf einen kritischen Wert, wird nur noch jeden zweiten Tag aktualisiert.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    T
    Wie meinst du das mit DEBUG-output mit "SONOS im Detail? [image: 1772019823209-c7e6ea8c-329f-4dda-9cd5-e36507e5a076-image.png] Anstatt "test" deine Variable Sonos damit du siehst ob wirklich "Wahr" rauskommt Ich habe jetzt folgendes Blockly Script: [image: 1772049019480-bildschirmfoto-2026-02-25-um-20.50.10.png] Und folgende Protokolleinträge. Soweit ich es erkennen kann, ist die Wenn-Bedingung nicht erfüllt. [image: 1772048976956-bildschirmfoto-2026-02-25-um-20.47.28.png] Was mir nicht klar ist, warum ich die interne Variable SONOS an den debug Output hänge? Diese Variable ist wahr und wird auch korrekt gesetzt, da der Sonos Lautsprecher entsprechend EIN und wieder AUSGESCHALTET wird. Danke für deine Hilfe.
  • 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
  • Hilfe bei RegEx gesucht

    javascript
    4
    0 Stimmen
    4 Beiträge
    376 Aufrufe
    J.A.R.V.I.S.J
    @SchuetzeSchulz du kannst es auch mit RegExp machen: const value = '[8018]406471600123456780'; const matches = /\\[8018]4064716(.{6})/.exec(value); const result = matches[1];
  • User-Abfrage Telegram

    communication
    3
    0 Stimmen
    3 Beiträge
    408 Aufrufe
    Tim 0T
    Holla die Waldfee! Vielen Dank, das wird meine Abendlektüre ^^ :+1:
  • Rolladen Zeit und Kalendergesteuert

    blockly
    2
    0 Stimmen
    2 Beiträge
    290 Aufrufe
    G
    Shuttercontrol mal angesehen? https://github.com/simatec/ioBroker.shuttercontrol/blob/master/docs/de/shuttercontrol.md
  • Spotify Playlist in Abhängigkeit einer Variable wiedergeben

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    368 Aufrufe
    FroschSTCF
    @kekz hast du das Script zum laufen bekommen? Ich bekomme es auch nicht hin
  • Zeitstempel listen

    blockly
    8
    0 Stimmen
    8 Beiträge
    466 Aufrufe
    J
    Habe es hinbekommen danke. Weiß aber nicht wie :disappointed:
  • "Wait" in blockly?

    Verschoben
    48
    0 Stimmen
    48 Beiträge
    21k Aufrufe
    S
    @rantanplan said in "Wait" in blockly?: Der undokumentierte "Trick" mit der Variablen funktioniert nicht mehr. @NUCChris said in "Wait" in blockly?: kennt jemand einen neuen Trick? :shock: @rantanplan said in "Wait" in blockly?: [EDIT] Stand 18.10.17 Das Folgende funktioniert NICHT mehr***** Bei mir funktioniert des Ersetzten der Zahl durch einen Variablennamen. Sogar Rechnen im Feld ist möglich. Also zB die Umrechnung von Minuten im Millisekunden.
  • Anfängerfrage: Sync mit Homematic Systemvariable

    javascript communication climate
    5
    0 Stimmen
    5 Beiträge
    478 Aufrufe
    E
    Vielen Dank für die Hinweise. Das Problem ist gelöst und lag nicht am Script, sondern nur an meiner Ungeduld: Die Wetterdaten werden nur alle paar Stunden aktualisiert, und bis dahin tut sich gar nichts. Grüße, Eckart
  • Blockly: sporadisch werden falsche Werte geschrieben

    blockly javascript
    10
    2
    0 Stimmen
    10 Beiträge
    662 Aufrufe
    fu_zhouF
    4 Sekunden ist schon zu schnell, da kommt alle paar Stunden ein Ausreisser, 5 Sek scheint okay.
  • Instanz per Script neu starten

    Verschoben
    19
    0 Stimmen
    19 Beiträge
    16k Aufrufe
    T
    Hallo, mein milight verliert nach ca. 20 sekunden die Verbindung. Habt Ihr hier schon eine Lösung gefunden? Mfg Tobias
  • [gelöst] Binding in Widget basic-bar

    javascript
    1
    0 Stimmen
    1 Beiträge
    127 Aufrufe
    Niemand hat geantwortet
  • Homematic Ip Heizungsthermostat mit Aqara Fensterkontakt

    blockly climate
    3
    0 Stimmen
    3 Beiträge
    453 Aufrufe
    Meister MopperM
    @lustig29 Ich befülle einen Datenpunkt mit der aktuellen Temperatur, setze die neue und beim Schließen des Fensters schreibe ich die vorige, dann werden auch manuell gewählte Temperaturen berücksichtigt: [image: 1590817204739-f8f9f971-63f4-400c-9fed-9bafe343bcdf-grafik.png] Code: Spoiler <xml xmlns="https://developers.google.com/blockly/xml"> <block type="on" id="Lo2Z3{DJgoRT)NtG6=E," x="-312" y="-312"> <field name="OID">hm-rpc.0.OEQ1985114.1.STATE</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="M3}s*{i,927;i8p=tb1("> <mutation else="1"></mutation> <value name="IF0"> <block type="on_source" id="p{O%QtaYAoX:E~#q.5wt"> <field name="ATTR">state.val</field> </block> </value> <statement name="DO0"> <block type="control" id="c0W^5f%-^:O3(95$k~$x"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Heizen.Status.Fitness_LastTemp</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="LQP+]EdXz24s1({58a)A"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.000A1A49A0C4D9.1.SET_POINT_TEMPERATURE</field> </block> </value> <next> <block type="control" id="O8^w^;(ppG(Ef:xb3ikC"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.1.000A1A49A0C4D9.1.SET_POINT_TEMPERATURE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="5YwUK;n0vS;J!I*ny8,C"> <field name="NUM">10</field> </block> </value> <next> <block type="debug" id="r_l85;TDkG+FwNP2=6uY"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="Teg3+q2_NxRbT@p}Xh:I"> <field name="TEXT">Heizung auf 10 Grad, weil Fenster geöffnet.</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="control" id="*s-F$ZQt`h}-Yjo:UQlP"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.1.000A1A49A0C4D9.1.SET_POINT_TEMPERATURE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="iLdzpc%I1,~f~yWu_+`_"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Heizen.Status.Fitness_LastTemp</field> </block> </value> <next> <block type="debug" id="Jh0eB,tg20B%hf9{-LwN"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="K-FK,=:GAhX$aHv{1IBH"> <field name="TEXT">Heizung auf letzte Temperatur, weil Fenster geschlossen.</field> </shadow> </value> </block> </next> </block> </statement> </block> </statement> </block> </xml>
  • *gelöst* Fehler im Skript? Jalousie fährt immer zu! help

    blockly
    6
    2
    0 Stimmen
    6 Beiträge
    477 Aufrufe
    FredFF
    @M1R0O :+1: Dann den Thread als gelöst markieren
  • -gelöst- Anzahl der Warnmeldungen in VIS anzeigen

    javascript monitoring
    3
    0 Stimmen
    3 Beiträge
    162 Aufrufe
    ChaotC
    @sigi234 Ui Danke! Jetzt muss ich noch schen warum bei mir keine Datenpunkte gefüllt werden. Aber das mache ich im anderen Tread.
  • Skript in Button

    template
    10
    0 Stimmen
    10 Beiträge
    882 Aufrufe
    W
    Hast recht, vllt falsch ausgerückt. Jetzt habe ich aber das Problem das unter einemPunkt bspw. DTS Surround 2 Presents hinterlegt sind =). Ich denke ich bastel mir da einfach paar wichtige Buttons und Lese dan den aktuellen Wert einfach aus. Danke vielmals für die Hilfe
  • [gelöst]Dimmen mit "Long Press"

    Verschoben
    39
    2
    0 Stimmen
    39 Beiträge
    7k Aufrufe
    coyoteC
    @paul53 coole Idee, funktioniert 1A. Danke:+1:
  • Summe aus verschiedenen Datenpunkte

    javascript
    20
    0 Stimmen
    20 Beiträge
    2k Aufrufe
    T
    @tigertim08 Werfe mal das parseFloat() raus und füge: log('a: '+a); log('b: '+b); log('c: '+c); log('d: '+d); log('e: '+e); log('f: '+f); log('g: '+g); nach Zeile 20 ein. Poste die Logeinträge. Denke mal das es ein Problem mit ".," oder Einheitenangaben ist.
  • Auswertung neues Objekt und Inhalt weiterverarbeiten

    blockly
    2
    0 Stimmen
    2 Beiträge
    207 Aufrufe
    T
    Keiner eine Idee?
  • Mähroboter per Blockly starten

    blockly
    5
    3
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    arteckA
    @Bastian-Rüggen da hat der @Sven_Topp doch ein schickes script geschrieben der genau das macht was du suchst .. warum das Rad 2 mal erfinden
  • Datenpunkt Date

    javascript
    2
    1
    0 Stimmen
    2 Beiträge
    130 Aufrufe
    M
    Edit: klappt nur Verzögert, offenbar klappt die Datenübergabe nur nach Aktualisierung Es hat was mit dem Eingabetype zu tun. Bei Date klappte es nur nach Aktualisierung, bei Text/String sofort
  • Skriptleichen entfernen

    javascript
    5
    0 Stimmen
    5 Beiträge
    494 Aufrufe
    B
    Cool! Danke :+1:

376

Online

32.7k

Benutzer

82.4k

Themen

1.3m

Beiträge