Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.9k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    O
    Ich hatte mit der 2.0.1 weiterhin Probleme mit der Verbindung zwischen meinem Raspi und meiner 2400AC+ (ca. alle 2 Tage Verbindungsabbrüche und dann musste der Speicher resettet werden). Nach dem Einspielen der neuen Version 2.0.2 auf der 2400AC+ läuft es nun seit 4 Tagen stabil. Sehr schön, Daumen drücken, dass es so bleibt!
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    D
    Nochmals herzlichen Dank!!!
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    A
    @OliverIO Für mich als ex. Elektroninstallateur ist es eben vielfach einfacher in einer Maske zu sehen was der Code eigentlich machen sollte, als in einem strukturierten Text. Wir verwenden bei uns im Job auch sehr viel strukturierte Text für Steuerungsfunktionen, aber das ist in der Regel eine andere Abteilung, ich bin nur zuständig, dass die Elektropläne korrekt und vollständig für alle sind. Klar, dass interesse an den Möglichkeiten ist schon lange geweckt, aber wie bei allem, wenn man das nicht oft macht, vergisst man sehr vieles wieder. Bei mir ist entstehen solche Dinge eben manchmal aus "dummen" Ideen, oder eben aus "herausforderungen" die man nicht direkt sucht. Ich arbeite mich jetzt mal rund um und schaue was da raus kommt. Nochmals herzlichen Dank Gruss Andi (aus der überhitzten Schweiz)
  • LowBatterie abfragen für ein Widget

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    M
    Hallo, vielen dank für die Antworten. Habe es geschafft mit dem Script. Vielen Dank.
  • Parameter Zeit der letzten Statusänderung

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    779 Aufrufe
    R
    Super. Danke. Habs gefunden :-) Grüße
  • [GELÖST] Blockly Bedingung erneut Prüfen

    Verschoben
    9
    1
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    R
    @Spike08122: Habe es jetzt hinbekommen :D ` Schön! :) @Spike08122: Nichts nervt so, wie jemand, der sein Problem gelöst hat und die Lösung für sich behält :!: ` Genau, danke für die Rückmeldung, ist mal ne ganz anders gedachte und durchgeführte Verzögerung. Enrico
  • Bei Filmstart Tradfri runterdimmer

    Verschoben
    25
    0 Stimmen
    25 Beiträge
    5k Aufrufe
    AlCalzoneA
    @Marcel85: edit: Leider etwas zu früh gefreut. Die Lampe schaltet sich bei Filmende (Stop, Pause) wieder kurz ein und danach wieder aus. (Lampe war aus) ` Entferne diese Zeile (recht am Ende): else aus();
  • Wie am besten Nachkommastellen beschränken?

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    766 Aufrufe
    R
    "Runde auf" ist glaub ich falsch, du musst nur "Runde" nehmen. Enrico
  • Bei Änderung nach N Sekunden Pushover

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    772 Aufrufe
    S
    Besten Dank für die schnellen Antworten. Ich habe jetzt den Filterwert in der Konfiguration der CCU auf 2 Sekunden gestellt und es funktioniert… Das Skript kann ich super für einen anderen Anwendungsfall weiternutzen ;) Klasse Forum hier! Gesendet von iPad mit Tapatalk
  • Geht Trigger im Trigger?

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    AlCalzoneA
    @Skydream: hmmmm…..glaube ich nicht. ;) Da ist doch kein warte/sleep etc drin. ` Blöd ausgedrückt… ich wollte den inneren Trigger durch eine if-Abfrage ersetzen. Der stand ja im Timeout. Kommt davon, wenn man auf der Arbeit nebenher Fragen beantwortet :D
  • Probleme mit Variablenabfrage

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    620 Aufrufe
    AlCalzoneA
    time ist ein String mit dem Namen des Datenpunkts var time = pfad + raum + "." + neuedatenpunkte["Timeout"].DpName; // DP Timeout to ist der konfigurierte Timeout (Zahl) var to = datenpunkte[raum].Objekt_Timeout; // Timeout-Wert lesen Und hier vergleichst du, ob der Name des Datenpunkts (String) größer oder kleiner als der Timeoutwert (Zahl) ist: if (time >= to) setState(warn, true); if (time < to) setState(warn, false); Das kann nicht funktionieren. Wenn du den Inhalt eines Datenpunkts vergleichen willst, musst du diesen vorher mit getState(datenpunktID) auslesen.
  • [Gelöst] Blockly - Ventilatorsteuerung Verständnisfrage

    Verschoben
    18
    1
    0 Stimmen
    18 Beiträge
    3k Aufrufe
    rantanplanR
    Sieht gut aus. Willkommen im Club :D
  • Cron Job startet mehrmals.

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    976 Aufrufe
    L
    @ThomasD: Hallo, sieht nach dem gleichen Problem aus, ich hatte inzwischen den ioBroker mit sudo iobroker stop und start neu gestarte: ` > 0 false javascript.0 2017-12-06 18:58:00.423 1 false javascript.0 2017-12-06 18:57:00.435 0 false javascript.0 2017-12-06 18:56:00.424 1 false javascript.0 2017-12-06 18:55:00.425 0 false javascript.0 2017-12-06 18:54:00.424 1 false javascript.0 2017-12-06 18:53:00.423 0 false javascript.0 2017-12-06 18:52:00.616 1 false javascript.0 2017-12-06 18:51:00.424 0 false javascript.0 2017-12-06 18:50:00.428 1 false javascript.0 2017-12-06 18:49:00.436 0 false javascript.0 2017-12-06 18:48:00.424 1 false javascript.0 2017-12-06 18:47:00.425 0 false javascript.0 2017-12-06 18:46:00.424 1 false javascript.0 2017-12-06 18:45:00.424 0 false javascript.0 2017-12-06 18:44:00.424 ` Jetzt geht es erst einmal. Vielleicht sind meine Anderen Problem jetzt auch erst mal verschwunden :-). Schöne Grüße ThomasD ` Ok. Werde ich dann mal in Telko Reporten. Workaround ist, das Script zu stoppen - aendern- speichern - Script starten. Dann hast du das Problem nicht. Vg looxer Mobile getapt Gesendet von meinem SM-G935F mit Tapatalk
  • [Gelöst]State erstellen mit speziellen Zugriffrechten wie ???

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    595 Aufrufe
    C
    @paul53: Das sollte gehen, wenn setObject in der JS-Komfiguration freigegeben ist. ` Super! Das mit der js config habe ich natürlich überhaut nicht bedacht! Danke!
  • Wert von Somfy IO Temperatursensor in K lesen und in neues Objekt in °C schreiben

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    917 Aufrufe
    paul53P
    @ronny82: Besteht die Möglichkeit den Temperaturwert auf 1 Nachkommastelle zu runden, z.B. 20.1°C? ` setState(idTempC, Math.round(10 * (dp.state.val - 273.1)) / 10, true);
  • Alle Thermostate mit neuem Partymodus updaten

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    L
    Hi, ich beschäftige mich schon eine Zeit lang mit der Steuerung von Thermostaten. (Heizungsscript ist veröffentlicht) Beim Heizungsscript habe ich immer auf den DC geachtet. Ausschläge gibt es nur, wenn ich mehrfach hintereinander an alle Thermostate sende. Hochgerechnet au deine 26 Thermostate dürfte es bei z.B. einer Temperaturänderung nicht zu einer Überschreitung des DC kommen. (PartyMode Änderungen sind allerdings bei mir nicht vorgesehen , da das Konzept ein anderes ist)- könnte also mit längerer Sendezeit bei der Änderung des Party-Modus zusammenhängen) Aus meiner Sicht hast du die folgenden Optionen: du fügst Hardware hinzu, die den DC aufteilt. Das sind z.B. Wandthermostate, die dann mehrere Heizungsthermostate steuern müssten. Ich nehme mal nicht an, dass du 26 Räume hast. Du fügst LAN Adapter hinzu (bei nicht IP-Geräten) du versuchst software technisch den DC in den Griff zu bekommen du Gruppierst die Geräte mit der CCU (wenn es denn keine alten Thermostate sind) und sprichst dann nur jeweils ein Gerät an. Könnte aber sein, dass da ein Problem auftaucht. Ich hatte das mal mit dem Boost Modus. Der wurde zwar weitergereicht, wenn ich den Boost Modus am WT manuell bediene aber nicht per Software. Kommt auf einen Versuch an. du sendest zeitversetzt über Verzögerungen vG Looxer
  • Auf Wert triggern?

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    561 Aufrufe
    P
    on({ id: 'mqtt.0.Sensor.RFID', val: 'WUNSCHWERT' }, function (data) { log("Transponder ID: " + data.state.val); }); Gruß Pix
  • Wert wird nicht gelesen

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    673 Aufrufe
    K
    Danke für die ausführliche Erklärung!
  • Raumname ermitteln

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    3k Aufrufe
    R
    Nein, geht leider nicht. Ich habe meine Kanäle auch mehr als einem Raum zugewiesen. Eigentlich sollte dann ein Array mit allen Räumen zurückgeliefert werden. Gesendet von meinem A0001 mit Tapatalk
  • Frage: im Skript prüfen, ob ein Datenpunkt vorhanden ist

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    4k Aufrufe
    P
    Hallo paul53, ohne den Code zu versuchen, kann ich aber sagen, dass ich in anderen Teilen des Skriptes schon auf LEVEL_REAL reagiere. Das ist nicht das Problem. Ich zähle grundsätzlich alle Geräte, deren LEVEL_REAL sich ändern. Alle diese Geräte haben virtuelle Kanäle, die ich viel nutze. Meistens sind es drei virtuelle Kanäle, die dann verknüpft sind. LEVEL_REAL ist in jedem Kanal vorhanden, zeigt aber immer den selben Wert, nämlich das Ergebnis der Verknüpfung und damit die tatsächliche Helligkeit (bei einer Lampe). Es gibt nun aber auch Geräte, die nur den LEVEL Datenpunkt haben. Diese kann ich nicht mit dem Subscribe auf LEVEL_REAL überwachen. Daher überwache ich einmal LEVEL_REAL und einmal LEVEL. Letzteres schließt alle Geräte, die LEVEL_REAL besitzen, mit ein. Daher prüfe ich dann noch genau darauf, denn die älteren Dimmer von HM haben kein LEVEL_REAL. Hier nochmal das ganze Skript: ! ```` /* Status Zahl Lichter ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich Daten kommen vom Gewerk "Licht" ! Vorraussetzung: globale Funktion deleteDuplicates() ! erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564 23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt Log Ausgabe auskommentiert 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=20#p9267 24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens) 06.05.2016 Datenpunkt für Ansagen zugefügt 02.07.2016 abgeschaltet, da Fehler 03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer search statt indexOf und RegEx für Suche nach Virtuellen Kanälen 27.11.2016 Verschoben in Status Code optimiert 19.12.2016 Räume eingebaut 25.12.2016 Doppelte Einträge aus dem Raum-Array werden mit deleteDuplicates gelöscht 12.11.2017 Wenn bei Dimmern zusätzlich zu LEVEL noch der DP LEVEL_REAL vorhanden ist, wird LEVEL ignoriert 04.12.2017 Virtuelle Kanäle nun übner Kanalnummer des Objekts herausgefiltert LEVEL Datenpunkte werden nicht gezählt, wenn Gerät auch einen LEVEL_REAL hat todo: erzeugt noch Fehler, wenn kein LEVEL_REAL vorhanden: State "hm-rpc.0.FEQ0069673.1.LEVEL_REAL" not found */ var logging = false; ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein', idAnzahl = 'javascript.0.Status.Lichter.Anzahl', idText = 'javascript.0.Status.Lichter.Text', idRaum = 'javascript.0.Status.Lichter.Raum', idAnsage = 'javascript.0.Status.Lichter.Ansage'; // Ab hier nix mehr ändern createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter type: 'number', name: 'Anzahl aller Lichter', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen type: 'number', name: 'Anzahl der eingeschalteten Lichter', min: 0, def: 0, role: 'value' }); createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen type: 'string', name: 'Eingeschaltete Lichter', desc: 'Namen der eingeschalteten Lichter', def: ' ', role: 'value' }); createState(idAnsage, { type: 'string', name: 'Eingeschaltete Lichter (Ansage)', desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)', def: ' ', role: 'value' }); createState(idRaum, { // Räume, in denen Lichter brennen type: 'string', name: 'Räume mit eingeschalteten Lichter', desc: 'Namen der Räume, in denen Lichter eingeschaltet sind', def: ' ', role: 'value' }); ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht var cacheSelectorLevel = $('channelstate.id=*.LEVEL'); var cacheSelectorLevelReal = $('channelstate.id=*.LEVEL_REAL'); ! function checkDevices(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0 var anzahlLichterAn = 0; var anzahlLichter = 0; var textLichterAn = []; var textRaum = []; if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status); } if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status } // ENDE VK-Abfrage }); if (logging) log('#### DIMMER ##### '); cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".LEVEL")); //.LEVEL aus Text entfernen var raumname = getObject(id, "rooms"); var objid = obj._id; // hm-rpc.0.LEQ1234567.1.LEVEL var objid_arr = objid.split("."); if (parseInt(objid_arr[3]) <= 1 ) { // Kanalnummer kleiner gleich 1 (also keine virtuellen Kanäle) if (!getObject(objid + '_REAL')) { // <<<<<<<<<<<<<< RELEVANTE ZEILE if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status + '%'); } if (parseFloat(status) > 0) { // Wenn Dimmwert über 0 ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status } else if (logging) log('Gerät hat auch LEVEL_REAL Datenpunkt, daher wird LEVEL nicht gezählt.'); } else if (logging) log ('keine Zählung, da virtueller Kanal ' + objid); }); cacheSelectorLevelReal.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL_REAL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".LEVEL_REAL")); //.LEVEL_REAL aus Text entfernen var raumname = getObject(id, "rooms"); var objid = obj._id; // hm-rpc.0.LEQ1234567.1.LEVEL_REAL var objid_arr = objid.split("."); // ########## Abfrage ob Virtueller Kanal? if (parseInt(objid_arr[3]) <= 1 ) { // Kanalnummer kleiner gleich 1 (also keine Virtuellen Kanäle) if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status + '%'); } if (parseFloat(status) > 0) { // Wenn Dimmwert über 0 ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status } // Ende Abfrage VK }); textRaum = deleteDuplicates(textRaum); ! // Array mit Lichternamen sortieren textLichterAn.sort(); textRaum.sort(); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben if (logging) log("Text: " + textLichterAn); if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn); // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt } ! // Trigger cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat if (!getObject(obj.id + '_REAL').val ) checkDevices(); // <<<<<<<<<<<<<< RELEVANTE ZEILE }); cacheSelectorLevelReal.on(function(obj) { // bei Zustandänderung *.LEVEL_REAL im Gewerk Licht if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); ! function main() { setTimeout(function(){ if (logging) log('Auslöser Skriptstart'); checkDevices(); }, 2000); } ! main(); // Skriptstart-Auslöser ! // Aufbereitung für Ansage function strip_tags(data) { var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " "); return(rueckgabe); } ! on(idText, function (obj) { var text = obj.state.val; text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet'; setState(idAnsage, text); }); ! ```` Gruß Pix
  • URL Request mit Blockly

    Verschoben
    12
    1
    0 Stimmen
    12 Beiträge
    5k Aufrufe
    G
    Ich werd narrisch :D Genau so funktioniert es! Vielen, herzlichen Dank an Dutchman und AlCalzone. Ich hatte schon in vielen anderen Foren-Beiträgen den Hinweis mit setState gelesen. Ich konnte es aber nie richtig in meinem Script umsetzen (habe z.B. setState("javascript.0.Test_Objekt_JS").val = arr_test; versucht usw…). Aber jetzt habe ich es verstanden. Ich poste hier mal für alle anderen Suchenden meine Lösung. Use-Case: Meine ETA-Heizung (mit Web-Server) liefert mir auf einen URL-Request eine entsprechende Antwort als XML (siehe Beispiel oben). Ich möchte nun diese Antwort in ein (globales) Objekt speichern. Ziel ist diesen String in JS/ Blockly/ vis weiterzuverwenden. Das Objekt "javascript.0.Test_Objekt_JS" bzw. Datenpunkt habe ich in ioBroker im Reiter "Objekte" als Objekt definiert Das Script sieht so aus: var parseString = require('xml2js').parseString; var request = require('request'); arr_test = []; request('http://192.168.178.13:8080/user/var//112/10021/0/0/12000', function (error, response, body) { if (!error && response.statusCode == 200) { parseString(body, { explicitArray: false, mergeAttrs: true }, function (err, result) { if (err) { log("Fehler: " + err); } else { arr_test = (JSON.stringify(result.eta)); setState("javascript.0.Test_Objekt_JS", arr_test); } }); } else { log(error); } }); Kleiner Schönheitsfehler: Es erscheint im log die Warnung```` 10:52:30.773 [warn] javascript.0 at script.js.Skript1:30:15 10:52:30.778 [warn] javascript.0 at Request._callback (script.js.Skript1:20:7)
  • [Gelöst] Monitor per Scriptbefehl aufwecken. (Linux / Raspian)

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    T
    Hallo, so, ich denke ich hab es. Hier aber trotzdem nach meine Skripte: Javascript Adapter auf dem slave wo auch der Webbrowser läuft: schedule("* * * * *", function (obj) { var wakeup = '/opt/iobroker/wakeup.sh'; exec(wakeup); }); Da ioBroker als root läuft, braucht man den ersten Schritt nicht: > setfacl -m u:the-user:r ~/.Xauthority Hier dann das shell Skript: #!/bin/bash DISPLAY=:0 XAUTHORITY=~pi/.Xauthority xdotool mousemove 10 20 Danke und Schöne Grüße ThomasD
  • Frage zu Script Fenster zählen

    Verschoben
    4
    2
    0 Stimmen
    4 Beiträge
    974 Aufrufe
    dslraserD
    @tempestas: Hallo, die IP Fensterkontake haben als Zustand "1/0" für "offen/zu". Dieser Teil status === 2 /*RHS*/ ist für die Drehgriffkontakte zuständig, die eben für gedreht noch die 2 ausgeben. Eigentlich sollte bei dir da gar nichts kommen, denn deine Kontakte können keine 2 ausgeben als Status für Telegram musst du durch \n ersetzen als Zeilenumbruch ` Ich habe mir das nochmal angesehen. Wenn ich das Script richtig verstehe ist das für Drehgriffe und für "alte Fensterkontakte oder nicht IP Kontakte" gedacht ? Kann das sein ? Denn meine IP Fensterkontakte geben auch 0/1 bei geschlossen/offen aus. (in dem Script sollen aber die TFK bei true reagieren) Kann es sein das die Drehgriffe 0/1/2 für geschlossen/gekippt/offen haben ? Dann würde es das Verhalten erklären und man könnte das Script dann so nicht mit IP Fensterkontakten und IP Drehgriffen verwenden. Dann würde mir nur noch einfallen ein zusätzliches Gewerk für Drehgriffe anzulegen und ein extra Script dafür ein zu richten ? Oder geht das vielleicht einfacher ? 3822_ipfenster.jpg 3822_ipfenster2.jpg

336

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge