Skip to content

Skripten / Logik

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

16.6k Themen 213.6k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    A
    @Dave69-CH Kannst du mir mal deinen Link zu der Proplanta Seite schicken. Ich denke das die Schweizer Version anders aufgebaut ist und deswegen die Zeit für die nächste Aktualisierung mit meinem Filter nicht gefunden wird. Auf der Seite werden diese Zeilen gesucht: [image: 1771532044543-1dd3b19e-1c7b-4586-814f-de0746287907-grafik.png] Entweder gibt es die in der Schweizer Version nicht, oder sind anders beschrieben.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    Jens G.J
    Danke werde ich morgen Mal testen
  • 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
  • [gelöst] Javascript Raum auslesen gibt undefiniert aus

    4
    0 Stimmen
    4 Beiträge
    249 Aufrufe
    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 Stimmen
    3 Beiträge
    582 Aufrufe
    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 Stimmen
    4 Beiträge
    141 Aufrufe
    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 Stimmen
    7 Beiträge
    685 Aufrufe
    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 Stimmen
    4 Beiträge
    398 Aufrufe
    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 Stimmen
    20 Beiträge
    588 Aufrufe
    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 Stimmen
    4 Beiträge
    670 Aufrufe
    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 Stimmen
    6 Beiträge
    442 Aufrufe
    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 Stimmen
    1 Beiträge
    165 Aufrufe
    Niemand hat geantwortet
  • Hilfe, Batterie Status von Windows Tablet an Iobroker senden

    48
    0 Stimmen
    48 Beiträge
    4k Aufrufe
    M
    @wal Danke genau das war es :+1:
  • Photovoltaik Q.Cell Hansol parsen

    javascript communication monitoring
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    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 Stimmen
    2 Beiträge
    198 Aufrufe
    paul53P
    @ionar sagte: funktioniert das Skript so? Ja, sollte. Aber 1 Stunde = 3600000 ms.
  • [gelöst] Problem Anwesenheitskontrolle in Blockly

    Verschoben
    10
    3
    0 Stimmen
    10 Beiträge
    4k Aufrufe
    K
    @homoran die Lösung kann so einfach sein. Vielen Dank, jetzt hab ichs auch verstanden :+1:
  • Textformatierung Telegram

    3
    0 Stimmen
    3 Beiträge
    280 Aufrufe
    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 Stimmen
    8 Beiträge
    697 Aufrufe
    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 Stimmen
    5 Beiträge
    437 Aufrufe
    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 Stimmen
    3 Beiträge
    297 Aufrufe
    R
    @zyan Ja klar, wenn er beschreibbar ist.
  • [gelöst] getState findet alias nicht

    8
    1
    0 Stimmen
    8 Beiträge
    155 Aufrufe
    AlCalzoneA
    @ben1983 Javascript. Ich glaube die Änderungen (5.3.x) sind noch nicht im stable.
  • Mal wieder Zeitdifferenz

    4
    2
    0 Stimmen
    4 Beiträge
    317 Aufrufe
    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 Stimmen
    8 Beiträge
    217 Aufrufe
    Ben1983B
    @paul53 top. Werde ich in meinen Skripten mal anwenden.

283

Online

32.7k

Benutzer

82.4k

Themen

1.3m

Beiträge