NEWS
Offene Fenster in node-red
-
Hallo und schönen Sonntag,
ich Werkel zwar schon eine Weile mit node-red, aber in Kombination mit iobroker noch nicht sehr lange.
Ich will mal zum Einstieg einen flow erstellen, der ausgibt, ob noch irgendwo ein Fenster offen ist.
Ja, die nativen Lösungen mit Javascript kenne ich, wollte aber mal sehen ob/wie man das in node.red machen kann. Ich hab das mal für 2 Fenster getestet, was ganz gut geht:
! ````
[
{
"id": "76e5f2ca.ba9304",
"type": "inject",
"z": "36db0a59.9d010e",
"name": "Object of HM Object.STATES",
"topic": "",
"payload": "{"hm-rpc.0.LEQ0187373.1.STATE":"","hm-rpc.0.NEQ1681523.1.STATE":""}",
"payloadType": "json",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 160,
"y": 1100,
"wires": [
[
"75d48239.60494c"
]
]
},
{
"id": "75d48239.60494c",
"type": "split",
"z": "36db0a59.9d010e",
"name": "",
"splt": "\n",
"spltType": "str",
"arraySplt": 1,
"arraySpltType": "len",
"stream": false,
"addname": "topic",
"x": 230,
"y": 1160,
"wires": [
[
"74f007e1.835348"
]
]
},
{
"id": "74f007e1.835348",
"type": "ioBroker get",
"z": "36db0a59.9d010e",
"name": "",
"topic": "",
"attrname": "payload",
"payloadType": "object",
"x": 210,
"y": 1240,
"wires": [
[
"a4cdfce0.9f025"
]
]
},
{
"id": "a4cdfce0.9f025",
"type": "join",
"z": "36db0a59.9d010e",
"name": "if all false then true",
"mode": "reduce",
"build": "object",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\n",
"joinerType": "str",
"accumulate": false,
"timeout": "",
"count": "2",
"reduceRight": false,
"reduceExp": "($A or payload.val)",
"reduceInit": "false",
"reduceInitType": "bool",
"reduceFixup": "",
"x": 210,
"y": 1320,
"wires": [
[
"bbcda8f4.974f18"
]
]
},
{
"id": "bbcda8f4.974f18",
"type": "debug",
"z": "36db0a59.9d010e",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 470,
"y": 1320,
"wires": []
}
]Nun will ich das Ganze so erweitern, dass eine Liste der offenen Fenster ausgegeben wird. Dazu wäre es aber ganz gut, wenn ich in Node.red irgendwie an die Namen der Fenster können könnte. Ich wollte sie nicht alle einzeln eingeben. Weiss jemand, wie ich in node.red an die Namen kommen könnte?
-
daran wäre ich auch interessiert.
-
@MagicSven Ist zwar schon 2 Jahre her und inzwischen hab ich das in JS gelöst, ich weis jetzt allerdings trotzdem wie es geht;-)
Dazu kannst du das ioB-get-node nehmen.
Hab da mal als Beispiel ein HM-Fenster von mir. Als Namen hatte ich da
"Fenster Vorratsraum" vergeben, während das Teil im original "Vorratsraum Fenster" heisst. (siehe Bild)Fragst du im ion-get mit der ID des Actors ab, bekommst du im Common der Ausgabe den Namen des Actors.
Fragst du mit der ID des State ab, bekommst du im Common den Namen des States. Siehe BildDu musst also jeweils mit 2 Abfragen arbeiten
Einmal mit der State-Id für den Status und einmal mit der Actor-ID für den Namen. -
cool - vielen Dank. Der Ansatz ist gut.
Wie hast du das in JS gelöst? Das habe ich auch versucht aber bei mir ist folgender Fehler den ich nicht weg bekomme.
Wird ein Fenster geöffnet, steht in einem Textfeld "Fenster Bad"
wird ein zweites Fenster geöffnet, steht "Fenster Bad; Fenster Küche"
wird jetzt ein Fenster geschlossen, dann steht: " "
obwohl ja noch eins offen sein sollte.Daher würde mich das in JS natürlich sehr interessieren
-
@MagicSven sagte in Offene Fenster in node-red:
Wird ein Fenster geöffnet, steht in einem Textfeld "Fenster Bad"
wird ein zweites Fenster geöffnet, steht "Fenster Bad; Fenster Küche"
wird jetzt ein Fenster geschlossen, dann steht: " "Das hat eigentlich nichts mit NR oder JS zu tun. Ich frage halt nur zu einer bestimmten Zeit ab und reagiere nicht automatisch auf den Zustand. Wenn das bei dir so sein soll, musst du immer wenn sich der Zustand eines Fensters ändert, den String komplett neu aufbauen.
Was mein JS-Script anbetrifft so wirst du es nicht ohne Weiteres verwenden können.
Ich arbeite inzwischen für alle Tür-/Fensteraktoren mit alias.0-States. Das hat den Vorteil, dass in gleicher Weise sowohl HM- als auch meine Zigbee-Aktoren bearbeitet werden können. Und einen Aktor austauschen ist auch kein Problem mehr.Das Skript sieht dann so aus:
Das Skript ist mehr mit der heissen Nadel und war mal ne Vorlage um alle offenen oder geschlossenen Fenster auszulesen. Tut es aber. Und wie das meist mit Improvisationen ist...