NEWS
[gelöst]Werteliste in Objekten Anzahl-Wert
-
Hallo,
ist es möglich die Anzahl und Werte einer Werteliste eines Datenpunktes per Script oder Blockly ab zu fragen/aus zu lesen ?Ich habe zwei verschiedene Sorten Fenstersensoren von HMIP die ich mit nur einem Selektor triggern möchte, was auch funktioniert. Das Problem ist:
- einfache Sensoren haben 0 = geschlossen und 1 = offen
"min": 0, "max": 1, "states": { "0": "CLOSED", "1": "OPEN" },
die HMIP Drehgiffe haben
-
0 = geschlossen
-
1 = gekippt
-
2 = offen
"min": 0, "max": 2, "states": { "0": "CLOSED", "1": "TILTED", "2": "OPEN" },
geschlossen ist zwar bei beiden gleich (0), aber 1 kann also offen oder gekippt bedeuten.
Wie stelle ich es mit nur einem Selektor an alle Werte korrekt zu ermitteln. Bisher habe ich zwei Selektoren genommen und habe die dazu gehörigen Fenster da rein gepackt und dementsprechend ausgewertet.
Auswertung über ungleich 0 würde gehen, was aber nur bedeutet das ein Fenster nicht zu ist. Wenn ich aber das genaue Ergebnis auswerten möchte, wie stelle ich das an ?Bisher mache ich es so. Auch wenn die einfachen Sensoren nie eine zwei bekommen können, (kein kipp) habe ich die in der Auswertung drinn gelassen. In der Auswertung habe ich dann nur die 1 und 2 umgetauscht.
Einfache Sensoren
Drehgriffe
-
@dslraser sagte:
Anzahl und Werte einer Werteliste eines Datenpunktes per Script oder Blockly ab zu fragen/aus zu lesen ?
Ja, wegen getObject(id) aber nur mit einer Javascript-Funktion:
return getObject(id).common.states;
-
@paul53
Mit der folgenden Funktion stateText(id, val) kann man direkt den zum aktuellen Wert gehörenden Zustandstext zwecks Vergleich ermitteln:return getObject(id).common.states[val];
-
@paul53
Danke.
Ich habe gerade angefangen zu probieren. Ich war so wie im Bild unterwegs. Ich probiere gleich mal die von Dir eben gepostete Funktion. -
@dslraser
Mit der Funktion stateText(id, val) müssen in der Schleife nur die Vergleiche geändert werden, damit alle Fenster erfasst werden. -
@paul53
perfekt, danke. Probiere ich sofort. -
@paul53
kannst Du bitte mal den letzten Stand exportieren, bei mir kommen Fehler im Log.EDIT: brauchst nicht, habe meinen Fehler gefunden.
-
@paul53
Das Zählen von gekippt/geöffnet/geschlossen und gesamt funktioniert damit nun schon perfekt.Jetzt möchte ich noch eine Liste in einen Datenpunkt mit gekippten und geöffneten Fenstern mit den Fensternamen und dem dazugehörigem Zustand (gekippt oder geöffnet)schreiben. Du hattest mir für die Liste mit Namen (und um das .STATE gekürzt) zwei Funktionen zur Verfügung gestellt. Kann mann diese Funktionen auch kombinieren oder es sogar gleich mit einer erledigen ?
Das waren damals die Funktionen für die Liste mit "nicht geschlossenen Fenstern" ohne den Zustand.
if(getObject(id.substring(0, id.lastIndexOf('.')))) return getObject(id.substring(0, id.lastIndexOf('.'))).common.name; else return null;
und
return arry.join(trenner);
Das war das Blockly
Danke auf jeden Fall schon mal bis hier hin.
-
@dslraser sagte:
Kann mann diese Funktionen auch kombinieren oder es sogar gleich mit einer erledigen ?
Nein, getParentName(id) muss man für jedes Fenster in der Schleife ausführen und den ParentName in ein Array pushen. array_trenner(array, trenner) muss außerhalb der Schleife angewendet werden, um den Inhalt des Arrays in einen Datenpunkt zu schreiben. Das ist aber eine Standardfunktion in Blockly: Text aus Liste erstellen.
-
@dslraser
Die Schleife könntest Du so ergänzen (Zählvariablen habe ich weggelassen). -
Danke, funktioniert perfekt. An was ähnlichem habe ich gerade selbst "rumprobiert", aber auf Deine Variante wäre ich nicht gekommen. Ich setze dann mal auf gelöst.
Und immer wieder bin ich beeindruckt von Deinem Wissen auf diesem Gebiet.
script.js.17_Userdata.Fenstertest: Debug: Wohnzimmerfenster rechts offen,Werkstattkellerfenster gekippt
EDIT: um auf gelöst zu setzen mußte ich den Titel kürzen (50 Zeichen...)