Ich verwende es, um Fenster zu überwachenAqara-BerührungssensorIn einer versteckten Installation von Windows (mehr darüber).
Inhalt
diverse Änderungen
- Version 1:Ausgabe als reine Textliste
Zum Beispiel für Benachrichtigungen per Pushover, Whatsapp, Telegram oder E-Mail - Option 2:Ausgabe als HTML-Liste
brauchenmachs-smart.de Visualisierung
vorbereiten
Zuerst benötigen Sie einen neuen Datenpunkt
Zuerst erstellen Sie Ihre eigenen „gemischten“ Datenpunkttypen. Verwenden Sie beispielsweise „Fenster“ als Namen.
Weisen Sie einen Sensor zur Aufzählung zu
Um später nur Fenster- oder Portänderungen aufzurufen, verwenden Sie diesStatus jedes SensorsSie möchten ein „Attribut“ wie „Fenster“ verfolgen. Erstellen Sie dazu unter „enum“ eine neue Funktion:

Gehen Sie dann auf „Objekt“ und wählen Sie Ihren Berührungssensor aus. Sie weisen der Funktion „Fenster“ einen Zustand zu, der den Zustand „Offen“ überwacht:

Datenpunktname
Außerdem sollten Sie der Bedingung in der Spalte „Name“ einen aussagekräftigen Namen geben, z. B. „Badezimmerfenster“ (in diesem Beispiel „Fenster“):

ein Zimmer reservieren
Um auch den Raum anzuzeigen, in dem sich das Fenster befindet, müssen Sie den Raum einem Status (oder Kanal im Allgemeinen) zuweisen:

Blockiertes Skript
Option 1: Ausgabe als reine Textliste
Erstellen Sie offene und geschlossene Listen
Als nächstes erstellen Sie ein neues Blockly-Skript und fügen einen „if“-Trigger hinzu. Wählen Sie als Auslöser „Ids vom Picker“ (Erfahren Sie mehr über diesen Selektor in diesem Artikel):

status[id=*](function=window)
Dadurch reagiert das Skript auf alle Änderungen im Aufzählungs- oder „Fenster“-Modus.
Dann benötigen Sie 3 neue Variablen, die Sie auf Text oder eine leere Liste wie folgt setzen:

Fügen Sie dann einen neuen Block „für jeden Wert in der Liste“ aus dem Bereich „Schleife“ ein. In die Eingabe fügen Sie auch „id from selector“ mit dem gleichen Inhalt wie oben ein (Weitere Informationen zur automatischen Registrierung finden Sie hier):

Ziehen Sie nun den Block „Wenn ich es tue“ in die Logik in der grünen Schleife und ändern Sie ihn mit dem Zahnrad in „Wenn ich es sonst tue“:

Als Bedingung fügt man den „Objektwert“ aus dem Bereich „System“ hinzu und weist ihn der Variablen „i“ (aus der Schleife) zu. Die „make“-Bedingung wird also ausgelöst, wenn „i“ wahr ist:

Anschließend fügen Sie den Block „In List Set“ im Bereich „Lists“ im grünen Loop-Block ein. Sie müssen „Zuerst hinzufügen“ einstellen. Als Listenvariable verwenden Sie die Variable „Open List“:

Fügen Sie dann den Block „Liste erstellen mit“ aus dem Bereich „Listen“ in den Ausgang „on“ ein. Am Anfang des neuen Blocks „Liste erstellen“ hinzufügenJavaScript-Funktion „Name“Zehn z MIT „I“:

Vorsicht:Abhängig von der Version Ihres Javascript-Adapters müssen Sie unterschiedlichen Code für das „Peace“-Skript verwenden! Weitere Informationen hierArtikel.
Kopieren Sie nun den Block „Eintrag für“ und fügen Sie ihn in „Andere“ ein. Dann ändern Sie die Variable nach „in der Liste“ in „list-closed“:

sortieren und beenden
Fügen Sie zwei weitere „Wenn-Dann“-Blöcke zur „Logik“ außerhalb und unterhalb der grünen Schleife hinzu und fügen Sie einen „Nicht“-Block zur „Logik“ und einen „Ist leer“-Block zu den „Listen“ am Eingang hinzu. Fügen Sie Ihre beiden Variablen hinzu, zum Beispiel:

Jetzt benötigen Sie den Block „Text“ zweimal, um „Text an Element anhängen“ zu können. Fügen Sie es jeweils in die „if do“-Logik ein und setzen Sie „list-complete“ als Variable:

Text für „offene Liste“:
Offen:
Text für „Geschlossene Liste“:
Schließen:
Sie benötigen es zum SortierenSortieren Sie das Skript(absteigend) und eine neue Schleife „jeder Wert in der Liste“. Erstellen Sie eine Sortierfunktion und hängen Sie sie an die Schleifeneingabe an. Geben Sie am Eingang der Funktion „Liste“ die Variable „Liste öffnen“ ein und geben Sie die Nummer ein.3" (kürzlich aktualisiert):

Stellen Sie dann die eigentliche Ausgabelogik zusammen. Fügen Sie der grünen Schleife einen weiteren Block „Text“ „Text zum Element hinzufügen“ hinzu:

- Eingabe: „Ein Element aus einer Liste abrufen“
die Variable „j“ und den Wert „1“ als Zahl

Kopieren Sie als vorletzten Schritt die grüne Schleife (Rechtsklick -> Kopieren) und fügen Sie sie in den nächsten „if do“-Block ein, der noch leer ist, aber die Variable „list-closed“ enthält:

Abschließend können Sie nun die Variable „list-complete“ in den Block „sendto“ einfügen und die Liste wird Ihnen zugesandt. In diesem Beispiel verwende ich einen „Pushover“-Block:

Fertiges Skript
klumpig
Objekt Identifikation Die Liste ist vollständig offene Liste geschlossene Liste ICH Name bGV0IG5hbWUgPSBnZXRPYmplY3QoT2JqZWN0SUQpLmNvbW1vbi5uYW1lOwovL2lmKHR5cGVvZiByb29tID0 9ICdvYmplY3QnKSByZXR1cmNvbW1vbi5uYW1lOwovL2lmKHR5cGVvZiByb29tID 0 9ICdvYmplY3QnKSByZXR1cmNvbW1vbi5uYW1lOwovL2lmKHR5cGVvZiByb29tID0 Beschreibung der Dieselkraftstofffunktionen… das ist Vordefiniert status[id=*](functions=windows) Die Liste ist vollständig offene Liste geschlossene Liste ICH status[id=*](functions=windows) < block type="get_value_var" id=")kSAuROX6lA-U2N,FJ1Q">Wert ICH ICH LEGE ERSTE offene Liste ICH < field name="MODE">ENTERERSTE geschlossene Liste ICH offene Liste Die Liste ist vollständig Offen: < block type="text_append" id="mQWs]oKZy!!UBi#)2pN:">Die Liste ist vollständig BETEILIGUNG offene Liste , geschlossene Liste Die Liste ist vollständig Fall: Die Liste ist vollständig BETEILIGUNG geschlossene Liste , Zeitung prüfen Die Liste ist vollständig
JavaScript
var objectId , list , value , full_list , open_list , geschlossene_list und ? Funktionsname (Objekt-ID) { let name = getObject (Objekt-ID); name.public; } //if(typeof room == 'object') return room.de; 图像名称;}on({id: Array.prototype.slice.apply($("state[id=*](functions=window)" )), ändern: "ne" }, Funktion (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; complete_list = ''; open_list = []; geschlossene_list = []; var i_list = Array.prototype.slice.apply($("state[id=*] (functions=window)")); for (var i_index in i_list) { i = i_list[i_index]; if (getState(i).val ) { List_open.unshift(Name(s)); } else { List_closed.unshift (Name(s)); } } if (!!List_open.length) { List_complete += 'Open: '; List_complete += String(List_open .join(', '));} if (!!List_closed.length) { list_complete += 'Geschlossen:'; list_complete += String(list_closed.join(', ')); } console.log(list_complete); });
Variante: Ausgabe als HTML-Liste
Erstellen Sie offene und geschlossene Listen
Als nächstes erstellen Sie ein neues Blockly-Skript und fügen einen „if“-Trigger hinzu. Wählen Sie als Auslöser „Ids vom Picker“ (Erfahren Sie mehr über diesen Selektor in diesem Artikel):

status[id=*](function=window)
Dadurch reagiert das Skript auf alle Änderungen im Aufzählungs- oder „Fenster“-Modus.
Dann benötigen Sie 3 neue Variablen, die Sie auf Text oder eine leere Liste wie folgt setzen:

Fügen Sie dann einen neuen Block „für jeden Wert in der Liste“ aus dem Bereich „Schleife“ ein. In die Eingabe fügen Sie auch „id from selector“ mit dem gleichen Inhalt wie oben ein (Weitere Informationen zur automatischen Registrierung finden Sie hier):

Ziehen Sie nun den Block „Wenn ich es tue“ in die Logik in der grünen Schleife und ändern Sie ihn mit dem Zahnrad in „Wenn ich es sonst tue“:

Als Bedingung fügt man den „Objektwert“ aus dem Bereich „System“ hinzu und weist ihn der Variablen „i“ (aus der Schleife) zu. Die „make“-Bedingung wird also ausgelöst, wenn „i“ wahr ist:

Anschließend fügen Sie den Block „In List Set“ im Bereich „Lists“ im grünen Loop-Block ein. Sie müssen „Zuerst hinzufügen“ einstellen. Als Listenvariable verwenden Sie die Variable „Open List“:

Fügen Sie dann einen „Create List Using“-Block aus dem „Lists“-Bereich der „w“-Ausgabe ein und setzen Sie mit dem blauen Zahnrad den Wert auf 3. Fügen Sie im ersten Eingang des neuen „Create List Using“-Blocks hinzuJavaScript-Funktion „Name“Von „i“, im zweiten EingangJavascript-Funktion „Frieden“Mit „i“ und im dritten Eingabefeld „System“ wird „Object ID Value“ mit „i“ auf „Last Changed“ gesetzt.

Vorsicht:Abhängig von der Version Ihres Javascript-Adapters müssen Sie unterschiedlichen Code für das „Peace“-Skript verwenden! Weitere Informationen hierArtikel.
Kopieren Sie nun den Block „Eintrag für“ und fügen Sie ihn in „Andere“ ein. Dann ändern Sie die Variable nach „in der Liste“ in „list-closed“:

Jedes Mal, wenn ein Fenster geöffnet oder geschlossen wird, werden dessen Name und Status in der entsprechenden Liste gespeichert. Sortiert und druckt weiter.
sortieren und beenden
Jetzt benötigen Sie den Block „Text“ zweimal, um „Text an Element anhängen“ zu können. Fügen Sie es jeweils in die „if do“-Logik ein und setzen Sie „list-complete“ als Variable:

Geben Sie den folgenden HTML-Code als Text ein. Formatieren Sie dann die Ausgabe als Tabelle. Anschließend können Sie die CSS-Klassen „table-status“ und „inactive“ verwenden, um die beiden anderen Tabellen zu konfigurieren (Siehe auch meine Visualisierung iobroker FireHD oder 1024 x 640 px).
Text für „offene Liste“:
Offen
Text für „Geschlossene Liste“:
Geschlossen
Nun sieht das Sortieren und Einfügen einzelner Listeneinträge in die HTML-Tabelle so aus. du brauchst esSortieren Sie das Skript(absteigend) und eine neue Schleife „jeder Wert in der Liste“. Erstellen Sie eine Sortierfunktion und hängen Sie sie an die Schleifeneingabe an. Die Variable „List-open“ muss in den Eingang „List“ der i-Funktion eingefügt werdenNummer 2"Nummer "3" (kürzlich aktualisiert):

Sie benötigen außerdem den Block „Text zum Element hinzufügen“ „text“. Stellen Sie es unter die „if do“-Logik und legen Sie „list-complete“ als Variable fest. Geben Sie den folgenden HTML-Code als Text ein:
Stellen Sie dann die eigentliche Ausgabelogik zusammen. Fügen Sie dazu den Block „Text“ „Text zu Element hinzufügen“ in die grüne Schleife ein und fügen Sie den Block „Text erstellen aus“ mit 8 Eingängen (blaues Zahnrad) ein:

- Eingabe 1: leeres Textfeld
(Sie können das Bild unten herunterladen)

- Eingabe 2: „Ein Element aus einer Liste abrufen“
die Variable „j“ und den Wert „1“ als Zahl - Eingabe 3: „Ein Element aus einer Liste abrufen“
Variable 'j' und Wert '2' als Zahl - Eingabe 4: Leeres Textfeld
Letzte Bearbeitung:
- Eingabe 5: „Datum/Uhrzeit“ und „Element in Liste abrufen“
Variable „j“ und Wert „3“ als Zahlen, formatiert nach „DD.MM“ - Eingabe 6: Leeres Textfeld
, [1 x Leerzeichen]
- Eingabe 7: „Datum/Uhrzeit“ und „Element aus Liste holen“
Variable „j“ und Wert „3“ als Zahlen, formatiert nach „SS.mm“ - Eingabe 7: Leeres Textfeld
Uhr
Kopieren Sie als vorletzten Schritt die grüne Schleife (Rechtsklick -> Kopieren) und fügen Sie sie in den nächsten „if do“-Block ein, der noch leer ist, aber die Variable „list-closed“ enthält:

Jetzt fehlt nur noch der Befehl zum Speichern des gesamten Ergebnisses in Datenpunkten. Hierzu benötigen Sie im Bereich „System“ den Block „Steuerung“. Wählen Sie die oben erstellten Datenpunkte („Fenster“) aus. Fügen Sie die Variable „list-complete“ in das leere Feld „from“ ein:

Wenn Sie ein Fenster öffnen oder schließen, wird automatisch eine Liste erstellt, um zwischen den beiden Zuständen zu unterscheiden. Fügen Sie in Ihrer Visualisierung das Widget „Basic – String (unescaped)“ hinzu und verbinden Sie es mit einem Datenpunkt:

Sie können dieser Aufzählung jederzeit weitere Datenpunkte/Geräte hinzufügen, ohne das Skript zu ändern.
Hinweis: Wenn Sie das Skript zum ersten Mal ausführen, müssen Sie testweise eines der Fenster öffnen/schließen, um die Skriptlogik auszuführen und alle Fensterzustände auszuwerten.
notwendige Bilder
open_noun.jpgAufladung
Laden Sie das Bild mit dem Dateimanager des VIS-Editors in das Verzeichnis:
vis.0/main/icons
Erforderliche Stylesheets/CSS
Verdammt, dein Abgang ist wieMeine ioBroker-Visualisierung(siehe oben) Offenbar müssen Sie der Registerkarte „CSS“ die folgenden Stile hinzufügen:
.table-status {width: 100%; margin: 0px 0px 40px;}.table-status tr {background: none! last-child {Hintergrund: keiner! Großartig; border-bottom: 0px solid #cccc;}.table-status th:nth-child(1),.table-status td:nth-child(1) { padding: 5px 0px 0px !important; Textausrichtung: links! Großartig; Breite: 10 %! wichtig; Vertical-Align: Top?}.table-status th:nth-child(1) img,.table-status td:nth-child(1) img { width: 40px;height: auto;margin-left: - 6px ; }.table-status.inactive img {transparency: 0.6;}.table-status th:nth-child(2),.table-status td:nth-child(2) { padding: 0px 0px 0px 10px! Großartig; Textausrichtung: links; Breite: *; -moz-connector: keiner? -o-Bindestrich: keine? -webkit-connector: keiner? -ms-Einheit: keine; Nowrap? Schriftgröße: groß; Zeilenhöhe: 1; }
Klicken Sie hier, um die Visualisierungsvorlage herunterzuladen.
Fertiges Skript
klumpig
Objekt Identifikation Aufführen Wert Die Liste ist vollständig offene Liste geschlossene Liste ICH J Name bGV0IG5hbWUgPSBnZXRPYmplY3QoT2JqZWN0SUQpLmNvbW1vbi5uYW1lOwovL2lmKHR5cGVvZiByb29tID09ICdvYmplY3QnKSByZXR1cmS5CVKjCmd9 5hbWUrIjwvYj4iOw== Beschreiben Sie diese Funktion... Raum bGV0IHJvb20gPSBnZXRPYmplY3QoT2JqZWN0SUQsICdyb29tcycpLmVudW1OYW1lc1swXTsKcmV0dXJuICI8YnI+PHNwYW4gY2xhc3M9JYWrcZ9WSbSi F sbD48L3NwYW4+Ijs= Beschreiben Sie diese Funktion... Mehrfachsortierung Von Beschreiben Sie diese Funktion... das ist Vordefiniert status[id=*](functions=windows) Die Liste ist vollständig offene Liste geschlossene Liste ICH status[id=*](functions=windows) Wert ICH ICH LEGE ERSTE offene Liste ICH ICH lc ICH ICH LEGE ERSTE geschlossene Liste ICH ICH lc ICH offene Liste Die Liste ist vollständig Offen
J offene Liste 3 Die Liste ist vollständig 
ICH BEKOMME VON ANFANG AN J 1 ICH BEKOMME VON ANFANG AN J 2 Letzte Bearbeitung:
HMM. ICH BEKOMME VON ANFANG AN J 3 , ωω: mm ICH BEKOMME VON ANFANG AN J 3 Uhr Die Liste ist vollständig geschlossene Liste Die Liste ist vollständig Anzeige
J geschlossene Liste 3 Die Liste ist vollständig 
ICH BEKOMME VON ANFANG AN J 1 ICH BEKOMME VON ANFANG AN J 2 Letzte Bearbeitung:
HMM. ICH BEKOMME VON ANFANG AN J 3 , ωω: mm ICH BEKOMME VON ANFANG AN J 3 Uhr Die Liste ist vollständig Eigenes.0.Sichtbares.Fenster LÜGE Die Liste ist vollständig
JavaScript
var object_id, list, value, Whole_list, open_list, geschlossene_list, i, j;// Zurück zum Anfang …function Name(ObjectID) { let name = getObject(ObjectID).common.name; //if(typeof room == 'object') return room.de; ZURÜCKKEHREN "„+Name+“";}// Beschreibe diese Funktion...function Room(ObjectID) { let room = getObject(ObjectID, 'rooms').enumNames[0]; return "
„+room.de+“";}// 描述这个函数 …συνάρτηση Multisort(lista, value) { var value = value - 1; list.sort(函数(a, b){ 返回 b[值] - a[值]; });返回on({id: Array.prototype.slice.apply($("state[id=*](functions=window)")), αλλαγή: "ne"}, συνάρτηση (obj) { var value = obj .state. val; var oldValue = obj.oldState.val; list_complete = ''; list_open = []; list_closed = []; var i_list = Array.prototype.slice.apply($("stan[id=*] ( Functions=okno )")); για (var i_index in i_list) {i = i_list[i_index]; if (getState(i).val) { List_open.unshift([Nazwa(i), Room(i), getState (i). lc]); } else { List_closed.unshift([Nazwa(i), Pokój(i), getState(i).lc]); } } if (!!List_open.length) { List_complete += 'Offen'; var j_list = Multisort(List_open, 3); for (var j_index in j_list) { j = j_list[j_index]; List_complete += String(['
„,j[0],j[1],“ Letzte Bearbeitung:
',formatDate(getDateObject((j[2] )), "DD.MM.),', ',formatDate(getDateObject((j[2])), "gg:mm"),'时钟 ']. Beteiligung('')); } list_complete += '
'; } if (!!List_closed.length) { List_complete += 'Geschlossen'; var j_list2 = multisort(lista_closed, 3); for (var j_index2 in j_list2) { j = j_list2[j_index2]; List_complete += String(['
',j[0],j[1] ,' Letzte Bearbeitung:
',formatDate(getDateObject((j[2])), "DD.MM.") ,', ',formatDate(getDateObject((j[2])), "gg:mm"), '时钟 '].verbinden('')); } list_complete += '
'; } setState("Own.0.Vis.Window"/*window*/, list_complete);});
War dieser Artikel hilfreich?
Hat Ihnen der Beitrag geholfen?
Mit einem Sternchen (*) gekennzeichnete Links sind sogenannte Affiliate-Links. Wenn Sie auf einen solchen Affiliate-Link klicken und über diesen Link einen Kauf tätigen, erhalte ich eine Provision vom jeweiligen Online-Shop oder Anbieter. Der Preis ändert sich für Sie nicht.