NEWS
Node-red iobroker Objekte in homekit einbinden
-
@minta79 Nun Du musst halt den Datenpunkt Deines Shellies, die den aktuellen Status ausgibt in die Node füttern. Also such Dir den Datenpunkt im Shelly, der Dir die aktuelle Position angibt oder vielleicht gibts auch ein Datenpunkt, wo der Shelly meldet, wenn er sich nicht mehr bewegt keine Ahnung - alles steht und hängt von Deinen Datenpunkten Deines Shellies ab.
Wenn Dir das nicht wichtig ist setzt Du halt gleich den CurrentState - ist halt nicht so schön.
Dann nimmst Du halt das was aus TargetState raus kommst und gibts es als CurrentState in die Node - -
@mickym Danke! Ich glaube ich habe es hinbekommen. Manchmal hilft ein kleiner Denkanstoß.
-
Ich habe noch ein Problem. Ab und zu kommt es vor, dass es aussieht als wäre der Shelly in einer Endlosschleife gefangen. Die Werte fangen an hin- und her zu flackern. Heute ist es zum Beispiel nach einem Neustart des ioBrokers aufgetaucht.
Hier mein Modell:
-
@minta79 Na mit 2 Function Nodes - die Du meiden sollst wo Du kannst, kann das schlecht was werden, wenn Du Nachrichten aufteilst und dann wieder in die gleiche Node laufen lässt. Und leider kann niemand von hier sehen, was Du für Dinge in diesen Function NOdes treibst. Wenn Du es Dir einfach machen willst dann hänge einfach hinter die iobroker-in Node eine Delay Node von 4-5 Sekunden, dann dreht sich das Rad halt immer eine konstante Zeit.
-
@mickym Sorry, klar. Hier Screenshots von den beiden functions. Ich habe die Umwandlung von String auf das Zielformat nicht hinbekommen und bin auf diese function gestoßen. Ich habe den Flow auch exportiert.
flows.json -
@minta79 Also Du darfst natürlich nur die Current Position setzen. Die Target Position setzt Du ja in Deiner Home App.
Mit der Target Position musst Du dann Deinen Shelly ansteuern.
Den jeweiligen Status meldest Du dann an den Node über die Current Position zurück, damit diese weiß, ob sie sich noch drehen muss oder nicht. Sobald die Current Position erreicht wurde, ist das Ziel (Target Position) ja erreicht und es dreht sich nichts mehr in der App.Und wie Du die CurrenPosition mittels eine Change Node setzt - also ohne Function Node siehst Du hier.
Also keine TargetPosition in der Node setzen, dass machst Du über die Home App und die Target Position ist die Zielposition mit der Du Deinen Rollladen ansteuern sollst.
Ach und wenn Du für Zahlenwerte Strings aus Deinem Datenpunkt raus bekommst, dann solltest Du das schleunigst in den NodeRed Adapter Einstellungen ändern, sonst darfst Du immer wieder konvertieren.
-
@mickym Meinst du so?
Das mit der Change Node hat super geklappt, nach dem ich das mit den Einstellungen im Adapter gefunden habe. Danke für den Tipp. -
@minta79 Genau die CurrentPosition speist Du in die Node und mit der TargetPosition steuerst Du den Shelly.
-
@mickym Das Rädchen dreht sich allerdings nicht, welches symbolisiert dass der Rolladen sich noch bewegt.
-
@minta79 Nun in dem Fall ist es halt dann doch so, dass weil der DP des Shelly Adapters der gleiche ist, Du noch einen anderen Datenpunkt brauchst, der signalisiert ob sich der Rolladen noch bewegt oder nicht. Das heißt dieser DP - weiss nicht wie dieser im Shelly Adapter heisst triggert den Flow und sobald der Rolladen stillsteht holst Du mit einer get Node den CurrentState.
Jetzt dreht es sich deshalb nicht - was ich zu Anfang gesagt habe, weil quasi zeitgleich TargetState= Current State. Vorher hat sich das Rädchen dauernd gedreht, weil Du den Current State nie auf Target State gesetzt hast.
-
@mickym Es gibt beim Shelly folgenden DP:
Wenn er auf "open" oder "close" steht bewegt sich der Rolladen, bei "stop" steht er still. Nur wo muss ich den wie in meinen Flow einbinden? Sorry, dass ich mich so schwer tue. -
@minta79 Nun das ist doch kein Problem, Du musst es ja verstehen.
Also die gelben Homekit Node sind das gleiche was der YAHKA Adapter macht. Du steuerst diese mit der Apple HomeApp und dann steuerst Du damit Deine im iobroker angebundenen Geräte.
So wie Du es zum Schluß gepostet hast funktioniert es ja nun super, weil sich das Rädchen nicht mehr dreht.
Über die HomeApp stellst Du die TargetPosition ein, die Dir die Homekit Node ausspukt und die Du in den Positionsdatenpunkt schreibst.
Da dieser gleichzeitig triggert und Du die CurrentPosition sofort den gleichen Wert wie die TargetPosition aufweist, dreht sich nichts und Du bekommst sofort den Zielwert angezeigt. Soweit der jetzige Status und ich hoffe Du verstehst warum das so ist.Nun wollen wir aber, dass die Zielposition erst dann erreicht wird, wenn der Rollladen sich nicht mehr bewegt und das zeigt uns anscheinend nur dieser state Datenpunkt und er der Rollladen steht erst dann still, wenn da stop drin steht. Und erst dann schicken wir folglich die CurrentPosition.
- Wir lassen also den State Datenpunkt triggern und starten deshalb mit einer iobroker In Node.
- Dann interessiert uns aber nur wann der Rolladen still steht. Also interessiert uns nur der Trigger aus dem state Datenpunkt, wenn dieser Stop ist. Das Filtern wir mit der Switch NOde aus
- Dann lesen wir mit der iobroker get Node die Position aus, die der Rollladen erreichen soll (wurde ja am anderen Ende des Flows über die Targetposition gesetzt).
- Schließlich bewegen wir die payload in die Eigenschaft payload.CurrentPosition und füttern damit die Homekit Node und informieren diese über den aktuellen Zustand des Rollladens.
-
@mickym Vielen vielen Dank noch mal für deine Hilfe! Ich habe es jetzt so umgesetzt wie beschrieben. Allerdings kommt in der get-Node die "CurrentPosition" nicht an. Im Debug Node wird auch nichts angezeigt. Im in-Node wird sie angezeigt. Im ersten DP wird auch ein stop übergeben laut Debug Node.
-
@minta79 Na wenn in der DebugStop eine Nachricht rauskommt, dann muss auch aus der getNode was rauskommen, wenn das Topic richtig gesetzt is. Aus der getNode kommt ja nur der Wert der in dem Position Datenpunkt steht und da steht ja was drin.
Also nochmal topic in der position getNode überprüfen bzw. das Topic halt richtig auswählen.
Wenn in der DebugStop Node nichts rauskommt, aus der Debugstate aber schon, dann halt mal alle states im Debugfenster der Debugstate anschauen und schauen, ob eine stop richtig ist eventuell poste den output der Debugstate.
-
@mickym Aus der DebugStop Node kommt keine Meldung. Hier die Ausgaben:
![Bildschirmfoto 2022-01-01 um 21.55.21.png]
Im Topic steht der DP "Position". Den hatte ich auch vorher in dem in-Node drin. -
@minta79 Dann stimmt was an der switch Node nicht. Die stop Nachricht muss durchgelassen werden. Überprüf die switch Node nochmal. Vielleicht irgendwelche Leerzeichen dahinter oder vor dem stop - Groß und Kleinschreibung.
-
@mickym Hier noch mal die get Node
und die Switch Node
-
@minta79 sagte in Node-red iobroker Objekte in homekit einbinden:
@mickym Hier noch mal die get Node
und die Switch Node
@minta79 Da steht stiop
in der Switch NOde.
-
@mickym Oh nein, wie peinlich
Ich glaube es funktioniert jetzt.
Eine Frage noch. Immer wenn ich den Flow speichere/deploye dann steht der Schalter in HomeKIt immer auf geschlossen, egal wie der aktuelle Status ist. Ich muss dann erst den Rolladen kurz "bewegen", damit der richtige Status wieder angezeigt wird. Kann man das irgendwie triggern, dass der Homekit Schalter sich den aktuellen Status holt?
-
@minta79 Nun normalerweise passiert das nur, wenn Du NodeRed neu startest oder Du bei Deploy immer den ganzen Flow neu deployest und nicht nur die geänderten Nodes. Wenn es nach dem Neustart von NodeRed Probleme macht kannst Du in der iobroker IN Node spezifizieren, dass der Status zu Beginn ausgelesen wird.