Skip to content

Skripten / Logik

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

16.6k Topics 213.8k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    HomoranH
    @BertDerKleine sagte in Skript aufteilen möglich?: Hallo, gibt es heute in 2026 eine Möglichkeit, ein größeres Skript in mehrere Module aufzuteilen? Ich habe nur einen 8 Jahre alten Thread gefunden dazu, damals ging es noch nicht. was genau meinst du damit?
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    Murphy 0M
    Du loggst dich mit Adapter in der Zendure Cloud ein und holst von dort die Werte. Den Key bekommst du in der App. Unten auf Profil und dann auf Authorisierungs Cloud Schlüssel. Das hat mit Offline Bezrieb erst mal nix zu tun. In diesem Modus müsst ihr beachten, dass alle Energieprofile in der App deaktiviert sind.
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    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
  • [gelöst] Javascript Raum auslesen gibt undefiniert aus

    4
    0 Votes
    4 Posts
    249 Views
    P
    @paul53 Hallo Ich hatte genau das gleiche vor. Dein Lösungsvorschlag funktioniert aber enumNames[0] wird als Fehler unterstrichen mit folgenden Text Property 'enumNames' does not exist on type '{ type: "state" | "channel" | "folder" | "device"; common: { [x: string]: any; [x: number]: any; }; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }'.(2339) Muss ich noch irgendetwas anderes machen oder hat sich was anderes geändert? MfG
  • [gelößt] Variable in curl Befehl nutzen

    3
    1
    0 Votes
    3 Posts
    586 Views
    B
    @paul53 Na klar, bin da aber einfach nicht selber drauf gekommen! Das funktioniert. Vielen Dank :+1:
  • Objekte KNX: Dokumentation für Objektdaten Skrip

    4
    0 Votes
    4 Posts
    141 Views
    M
    @mb001 Ich nutze ebenfalls diesen "KNX" Adapter und dabei ist die Namensgebung der KNX Objekte in der ETS und auch das durchgängig korrekte setzen der Flags immens wichtig. Ich benötigte dabei ca 4-5 h Zeit, seither habe ich zu 99% korrekt Importierte Datenobjekte.
  • Logik zum Abfragen/Schreiben von Werten per REST-API

    7
    0 Votes
    7 Posts
    688 Views
    AsgothianA
    @th3g3ntl3man sagte in Logik zum Abfragen/Schreiben von Werten per REST-API: @paul53 Vielen Dank schon mal für die schnelle Hilfe!! Ich glaube, dass ich kein Problem haben werde, die Skripte an sich zu schreiben, mir geht es eher um den "Best-Practice"-Ansatz. Also um das Konzept die Daten zwischen dem IOBroker und dem UniPi sauber zu synchronisieren. Ein Beispiel, welches ich aktuell im Kopf habe: Skript1: Holt alle Temperaturen des UniPis in einem Intervall von bspw. 30 Sekunden ab. Skript2: Holt die Werte der Relays in einem Intervall von ca. 1-2 Sekunden ab, sodass ich diese in meiner Visualisierung direkt anzeigen kann, wenn diese geschaltet werden. Skript3-X: Verwendet die Werte von Skript1 und reagiert mit entsprechenden Schaltungen im Homematic etc. Ich finde diesen Ansatz allerdings etwas "umständlich"(?) und weiß nicht ob man das vielleicht auch sauberer aufsetzen könnte... Zumal weiß ich nicht wie performant das ist alle paar Sekunden die REST-Abfragen durchzuführen... Sofern das System keine Push Benachrichtigung erlaubt wirst du um eine regelmässige abfrage nicht herum kommen. Ich würde an Stelle von "request" die JS Bibliothek "Axios" (https://www.npmjs.com/package/axios) einsetzen - da kannst du (wie in diesem Beispiel beschrieben) mit async / await arbeiten. um Überlappende Anfragen zu verhindern würde ich die regelmässigen Abfragen nicht über ein Intervall sondern eine sich selber verlängernde Kette von Timeouts lösen: var DataTimeout; async function getData() { try { const resp = await axios.get('yourlink'); // handle your response } catch (err) { // Handle Error Here console.error(err); } DataTimeout = setTimeout(getData, 5000) } getData() Kritisch sind bei schnellen Abfragen meiner Ansicht nach genau die überlappenden Anfragen, die entstehen können wenn das Netzwerk langsam ist oder der Server zeit benötigt die Anfrage zu beantworten. Ab welchem Intervall das kritisch ist hängt dabei von vielen Faktoren ab so das du das letztendlich wirst ausprobieren müssen. Wichtig zu beachten ist in diesem Fall auch das es Sinnvoll sein kann Dir innerhalb des Skriptes eine Schattenkopie der Werte der Datenpunkte zu halten deren Quellen du in so schneller Folge abfragst. Dadurch kannst du das aktualisieren der Datenpunkte im ioBroker auf die Fälle begrenzen wo sich der Status geändert hat. Dieses gibt die Möglichkeit ohne den Haken "alle States bei Start abonnieren" zu arbeiten ohne das beim Eintragen der Werte zeitverzögerungen wegen der Notwendigkeit entstehen auf das Ergebnis von "getState" zu warten. Der Ansatz die Aufgaben sauber zu trennen ist meiner Meinung nach sehr sinnvoll: Eine Ebene um die Werte bereitzustellen. (2 in Deinem Fall wegen der unterschiedlichen Intervalle) Eine Ebene um auf die Werte (deren Änderung, Aktualisierung) zu reagieren. Das erlaubt es Dir auch für die beiden Ebenen unterschiedliche Logikmaschinen zu benutzen (JS, Blockly, Rules, NodeRed) - Jeweils immer die für die Aufgabe und Dein wissen bestgeeignete. A.
  • Frage zu Schleifen und Listen

    4
    1
    0 Votes
    4 Posts
    399 Views
    AsgothianA
    @stefan1234 sagte in Frage zu Schleifen und Listen: Die Funktion IDs vom Selektor funktioniert aber bei Listen nicht, habe ich gelesen. Da hast du falsch gelesen. Der Baustein IDs vom Selektor $(...) gibt eine Liste zurück, wie man mit einem einfachen Skript verifizieren kann (Vorsicht - ich hab das bei einem 'leeren' Testsystem gemacht. der Selektor in dem Beispiel liefert Dir jeden Datenpunkt.): [image: 1648017965304-screenshot-2022-03-23-at-07.45.59.png] Das Problem des Namens hat @paul53 in seinem Skript bereits schön gelöst (über die JS Funktion mit Ergebnis getName) Du kannst also in seinem Beispiel einfach den Trigger auf Werteänderung umstellen auf einen CRON Trigger. A.
  • Objekte in Unterordnern erstellen

    20
    1
    0 Votes
    20 Posts
    635 Views
    HomoranH
    @legro sagte in Objekte in Unterordnern erstellen: Wie gesagt, das Ganze erinnert mich an Homematic, wie ebenfalls bereits gesagt: Da kommt das her! Mal ein deutliches Beispiel: Es gibt dort Geräte, z.B. Mehrfunktionssensoren wie die Wetterstation. Diese hat verschiedenen Kanäle (.0 für die Geräteparameter; .1 für die Messwerte....) und in diesen Kanälen gibt es Datenpunkte, z.B. die Temperatur, die Luftfeuchte, die Windstärke usw. [image: 1647961780182-objects_hm.png] @legro sagte in Objekte in Unterordnern erstellen: das mir in vielen Bereichen bis heute verschlossen blieb wenn man sich damit einmal beschäftigt hat, ist das ganz einfach.
  • Eigenverbrauch genüged Einspeisung ein Relais schalten

    4
    0 Votes
    4 Posts
    674 Views
    O
    Servus, Vielen Danke für die Antworten und Hilfe. den 1. Raspi will ich nicht für die Schaltung nutzen, er hat schon 70 % Speicherauslastung. Der 1. Raspi läuft sehr stabil, möchte das nichts ändern, hier liefen vorher noch ein paar sonoffs und ESP´s nicht stabil. Beim 2. Ist schon ein älteres Modell läuft der der iobroker nicht mehr. Meine Waschmaschine läuft auch bei Spannungsausfall weiter wenn die Spannung wieder ansteht, wäre als kein Problem. Ein Stromkreis würde reichen für die Schaltung. Der SDM120-Modbus MID ist über Modbus über einen USB Wandler am Raspi angeschlossen und liefert so seine Werte zum Iobroker. Gibt es keine Möglichkeit die Werte abzugreifen? Mit freundlichen Grüßen, orfix
  • Instanzen neustarten wenn Gerät offline

    6
    0 Votes
    6 Posts
    445 Views
    M
    @wintuxx Hallo ich habe von einem freindlichen User dieses Script bekommen, vielleicht hilft es auch dir //Skript startet Tahoma-Adapter bei Warnungen im Log neu var warten = 10; //Wartezeit bis zum Restart var warten_ms = warten * 60000; //Wartezeit bis zum Restart in ms var warten_buf = warten_ms + 120000; let sleep = false; var logging = true; //opt/iobroker/log/iobroker.current.log onLog('warn', data => { var check = data.message.includes("401 retry login"); if (check == true && sleep == false) { sleep = true; var text = "Tahoma Fehler identifiziert. Adapter wird gestoppt und in " + warten + " Minuten wieder aktiviert"; if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253xxxxxx' }); setState("system.adapter.tahoma.0.alive", false); setTimeout(function () { setState("system.adapter.tahoma.0.alive", true); var text = "Tahoma Adapter wieder gestartet"; if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253xxxxxx' }); }, warten_ms); setTimeout(function () { sleep = false; var text = "Adapterüberwachung wieder aktiv"; if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253xxxxx' }); }, warten_buf); } }); Gruß Michael
  • WioBrowser Skalierung einstellen

    1
    1
    0 Votes
    1 Posts
    165 Views
    No one has replied
  • Hilfe, Batterie Status von Windows Tablet an Iobroker senden

    48
    0 Votes
    48 Posts
    4k Views
    M
    @wal Danke genau das war es :+1:
  • Photovoltaik Q.Cell Hansol parsen

    javascript communication monitoring
    6
    0 Votes
    6 Posts
    1k Views
    U
    @ulli1 Ich habe mit Paser.... [image: 1647777632703-5d4628f3-b931-4898-9a57-18002f93f4d8-image.png] mir die Werte in Infuxdb gezogen und in Grafana weiter verarbeite. [image: 1647777837194-d15a548b-57df-4de7-b461-7624f38765db-image.png] ... an den Feinheiten bin ich noch am arbeiten.
  • Anwesenheit simulieren (Rolladen)

    2
    1
    0 Votes
    2 Posts
    201 Views
    paul53P
    @ionar sagte: funktioniert das Skript so? Ja, sollte. Aber 1 Stunde = 3600000 ms.
  • [gelöst] Problem Anwesenheitskontrolle in Blockly

    Moved
    10
    3
    0 Votes
    10 Posts
    4k Views
    K
    @homoran die Lösung kann so einfach sein. Vielen Dank, jetzt hab ichs auch verstanden :+1:
  • Textformatierung Telegram

    3
    0 Votes
    3 Posts
    281 Views
    C
    Top , hat geklappt. sendTo("telegram", "send", {text: 'Tagesverbrauch\n\n Aquarium ' +aq+' kWh\n Strom '+strom+' kWh\n PV '+pv+' kWh\n Gas '+gas+' kWh'});
  • Wert in Variable schreiben

    8
    0 Votes
    8 Posts
    698 Views
    H
    @paul53 Der Datenpunkt war nur ein Schalter zum ausprobieren. Jetzt passte es, Dankeschön für deine Hilfe
  • Wemos D1 mini - Schrittmotor auslösen

    5
    0 Votes
    5 Posts
    439 Views
    B
    @ralla66 Nicht wirklich. Die Treiberbausteine für Schrittmotoren sind nicht wirklich glücklich darüber wenn die Anschlüsse im Betrieb getrennt werden.
  • Datenpunkt nach x Sekunden wieder auf false setzen

    3
    0 Votes
    3 Posts
    298 Views
    R
    @zyan Ja klar, wenn er beschreibbar ist.
  • [gelöst] getState findet alias nicht

    8
    1
    0 Votes
    8 Posts
    155 Views
    AlCalzoneA
    @ben1983 Javascript. Ich glaube die Änderungen (5.3.x) sind noch nicht im stable.
  • Mal wieder Zeitdifferenz

    4
    2
    0 Votes
    4 Posts
    317 Views
    P
    Danke, das hat mir geholfen. Klar ist die Erstellung an einem anderen Tag gewesen...
  • [gelöst] Wert eines konstanten objekts wird nicht angezeigt

    8
    2
    0 Votes
    8 Posts
    217 Views
    Ben1983B
    @paul53 top. Werde ich in meinen Skripten mal anwenden.

469

Online

32.7k

Users

82.4k

Topics

1.3m

Posts