rdmtc / node-red-contrib-ccu

Node-RED Nodes for the Homematic CCU
https://flows.nodered.org/node/node-red-contrib-ccu
MIT License
71 stars 13 forks source link

FROLL / Nodered Problem ( Cache geht nicht mit allen Geräten die 2 Kanäle für Soll / Ist haben und per Hand bedient werden ) #151

Open vigeland opened 3 years ago

vigeland commented 3 years ago

Wie bekommt man den Froll richtig in den Griff?

Beispiel: Ich drücke auf HMIP-WRC2, der sendet Press was in NodeRed ankommt. Dann sendet Node Red ein 1 an den Froll ( Kanal 4 ). Rollo fährt. OK.

Nun fahre ich den Froll per Hand am Schalter auf z.b. 8 % ( Kanal 3 steht auf 8 % , 4 Weiter z.b. auf 100 % ) Drücke ich jetzt auf meine HMIP-WRC2 passiert mit ( ccu-value ) nichts mehr. Das Rollo bleibt wie es ist stehen. Am Funk kann es nicht liegen, mit dem Homematic Manager reagiert das Rollo sofort auf Kanal 4. Über den Debug Node kann ich sehen das die 1 im ccu-value node ankommt.

Im Node habe ich nur "Queue Commands" an. Es gibt keine Direktverknüpfung oder Programme in der CCU.

Danke für die Unterstützung.

Sineos commented 3 years ago

Die Logik, was passieren soll, musst du dir in Node-Red selber bauen. Vom Schalter kommt kommt ja nur "jemand hat mich gedrückt". Ein Beispiel hier: https://github.com/Sineos/redmatic-flow-misc/tree/master/CanvasBlind

vigeland commented 3 years ago

Habe ich ja. Ich schicke dem CCU-value eine 1 ( Kanal 4 ), sehe ich in dem Debug Node der parallel zum ccu-value steht. Nur mir scheint der schickt scheinbar nichts an die CCU. Vermutung er glaubt das der FROLL schon auf 1 ist, da der echte Wert 8% ja im Kanal 3 steht. ( Es mit Homematic Manager sofort, wenn ich ein Setvalue 1 auf Kanal 4 sende ) Das gleiche passiert auch wenn ich übers Dashboard die 1 an die CCU-Value sende, keine Reaktion des Rollos.

Das ganz geht auch, Dash, HMIP-WRC2 usw. Nur sobald man per Hand eingreift und dann Kanal 4 und 3 nicht mehr synchron sind. Dann geht es schief.

a) Per Programm Ziel 100 % (Kanal) Ok. b) per Hand auf 50 % am Gerät. OK. c) per Programm Ziel 100 % . Rollo regt sich nicht.

Sineos commented 3 years ago

Versuchs mal mit der rpc-event-node

vigeland commented 3 years ago

rpc-event-node ist die falsche Richtung, ich will ja eine Postion anfahren. Der Node hat keinen Eingang.

Sineos commented 3 years ago

Stell doch mal deinen Flow hier ein

vigeland commented 3 years ago

Anbei der Flow. ( Nix kompliziertes )

Ablauf:

Taste Lang .z.b. Oben (HMIP-WRC2) unten drücken ( Könnte auch dashnode sein ). Rollo per Hand am Schalter vom Froll drücken, Rollo hält irgendwo.

Nun wieder Taste Lang .z.b. Oben (HMIP-WRC2) unten drücken, keine Reaktion. Der Debug Node zeigt an das, das Rollo angesteuert werde soll.

image flows-2.json.zip

Sineos commented 3 years ago

Sollte eigentlich so gehen. Hast du mal überprüft welche Werte NR für ACTIVITY_STATE, LEVEL und LEVEL_STATUS "sieht", z.B. über eine rpc-event-node?

vigeland commented 3 years ago

Nach dem ich Stop am Froll gedrückt habe. Kanal 4: ( Steuerkanal im Node ) Level 0 (Zielwert über den Node der Taster ) Level_Status = Normal ACTIVITY_STATE = stable

Kanal 3: ( im Flow nicht verwendet ) Level 0,3 Entspricht dem Realen Status nach Stop am Froll Level_Status = Normal ACTIVITY_STATE = stable

Um den Froll zu Nutzen braucht man einen Kombi Node mit Kanal 3 und 4. Sonst wird das nichts vernünftiges mit dem Froll, das ist meine Meinung.

Kanal 4 als setzten und Kanal 3 als Status, alles andere ist Stückwerk.

vigeland commented 3 years ago

Schon was rausbekommen?

vigeland commented 3 years ago

Das ist das Problem (value !== currentValue) , hier wird geprüft ob der Value gleich dem bekannten Status ist. Beim Froll geht es nicht, sobald außerhalb von NodeRed agiert wird. (CCU, per Hand, direkt Verknüpfung ) Also im Grunde alle Geräte die Ziel und Ist-Wert getrennt verwalten.

Ob Feature oder Bug mal dahingestellt. Aber Queue ( wichtiges Feature ) und Froll kann nicht funktionieren. Zweieinhalb Lösungsansätze: a) Ein Kombinode für die const currentValue = ... ( 2*datapoint ) b.1) Workaround value !== currentValue raus b.2) ein Flag das nicht value !== currentValue geprüft wird. ( im Grunde Force = true ) Für Press machst du es ja auch schon, nur das man es per Hand Steuern kann. b.3) Das man currentValue von Extern setzten kann, ohne das gesendet wird. Oder ein Mix aus dem,. ..... setValueQueued(iface, address, datapoint, value, burst, force) { return new Promise((resolve, reject) => { this.setValueQueue = this.setValueQueue.filter(element => { return element.iface !== iface || element.address !== address || element.datapoint !== datapoint; }); const datapointName = iface + '.' + address + '.' + datapoint; const currentValue = this.values[datapointName] && this.values[datapointName].value; const cache = this.values[datapointName] && this.values[datapointName].cache; if (force || (value !== currentValue) || cache || datapoint.startsWith('PRESS')) { ...

vigeland commented 3 years ago

Ist das nicht grundsätzlich falsch ? const currentValue = this.values[datapointName] && this.values[datapointName].value; Wird es nicht immer true oder false ( 0/1 ) ?

Sineos commented 3 years ago

Ich hab nur HM-LC-Bl1PBU-FM und bei denen funktioniert die heutige Logik korrekt. LEVEL gibt bei mir den jeweils korrekten momentanen Wert aus

vigeland commented 3 years ago

Es geht um Froll und um Geräte die 2 Kanäle nutzen. Kanal 3 für den Status und Kanal 4 für das setzten des Levels. Deiner hat nur einen Kanal für beides, da geht es.

siehe https://homematic-forum.de/forum/viewtopic.php?f=77&t=52037&sid=f08dcb93742e44e91d2a25e0e091ffce

Dort haben Sie es mit einen Read und Write Kanal gelöst. Vorschlag a) https://forum.iobroker.net/topic/36902/gelöst-hmip-froll-kanal-3-4-level-in-vis

Sineos commented 3 years ago

Wenn das so funktioniert, was spricht dann dagegen, Chan 3 für etwaige Stati zu benutzen und 4 fürs Steuern?

vigeland commented 3 years ago

Mich beschleicht das Gefühl, was du nicht das Problem verstehst oder nicht wirklich gelesen hast.

Da der Node über Kanal 4 ( level setzten ) eine 1 geschickt hat und man per Hand Stop gedrückt hat, steht im node immer noch die 1. Obwohl man bei 0,5 Stop gedrückt hat. Schickt man nun wieder eine 1, glaubt der Node er müsse nichts tun.

Sineos commented 3 years ago

Ah, k. Dann schreib den realen Wert aus Chan 3 halt zurück auf 4: Den Übergang von WORKING true --> false per rpc event abfangen und den Aktor dann quasi nochmals auf den Wert fahren lassen, den er laut Chan 3 sowieso schon hat.

vigeland commented 3 years ago

Geht nicht wirklich, siehe den oben verlinkten Artikel. https://homematic-forum.de/forum/viewtopic.php?f=58&t=51289

habe ich alles durch, für den Froll / Broll braucht es eine Anpassung.