[gelöst] Vom Fensterkontakt auf die entsprechende Rolllade schließen

Begonnen von Sirel, 08 Dezember 2016, 20:38:14

Vorheriges Thema - Nächstes Thema

Sirel

Hallo zusammen,
ich möchte, ohne für jedes Fenster eine eigene Bedingung zu schreiben, folgendes erreichen:

Wird ein Fenster geöffnet, soll der entsprechende Rollladen sich öffnen. Nachdem das Fenster wieder geschlossen wurde, soll die vorherige/ursprüngliche Position angefahren werden. Für 1-5 Fenster kein Problem, da schreibe ich DOIF-Schleifen. Bei > 5 wird es aber lästig.

Ich habe jedem Fensterkontakt ein Reading gegeben, welches dem Name des entsprechenden Rollladenaktor enthält. Das Reading heißt "Fenster". Die Rolllädenaktoren haben die Namen RL_1,RL_2,...,RL_n. Der Fenstertürkontakt 1 hat also als das Reading Fenster:RL_1.

Zum abspeichern der ursprünglichen Position würde ich gerne etwas in dieser Art erreichen:

(["^FL:^open$"]) (setreading [$Device:Fenster] pos_old {ReadnigsVal("RL_n:Fenster";"position";"Runter"})

Es soll also ein Reading names "pos_old" erzeugt werden, in welches die ursprüngliche Rollladenposition vor dem hochfahren enthält.
Wie bekomme ich das hin? Und wie kann ich anschließend das neue Reading auslesen, so dass der Rollladen auf die zuvor gespeicherte Position zurückfährt?

Vielen Dank vorab und Grüße,
Max

Per

Ich sehe da zwei Möglichkeiten. Entweder ein Userreading pro Fenster, welches bei Öffnen mit gesetzt wird.
Allerdings sehe ich gar kein Bedarf dafür. Wenn das Fenster wieder zu ist, kann es doch einfach den Standardwert (den es ja von irgendwoher bekommen hat) wieder anfahren.

Sirel

Hi Per,
danke für Deine Idee. Das Problem ist ja, dass der Fester-Tür-Kontakt ein anderes Device ist als der Rollladenaktor.
Daher kann ich die Variablen $Device nur sehr begrenzt nurtzen, weil es sich bei $Device um den Fenster-Tür-Kontakt handelt und der steuert ja nicht die Rollläden.
Hintergrund meiner Frage ist, dass ich eine skalierbare Lösung suche, ohne das ich für jeden neuen Fenster-Tür-Kontakt mein DOIF erweitern muss - sonder einfach nur in meinem System hinzufüge.
Vielleicht wäre ein Skript die bessere Lösung, nur habe ich keine Ahnung, wie ich mich dem Thema dann annähern sollte...

Viele Grüße,

Max

CBSnake

Hi Max,

ich ähnliches schon mal gemacht. Immer wenn ein Fenster den Status ändern, wollte ich diesen Status in ein Reading im LaCrosse Thermometer im selben Raum übertragen haben.

(["fenster$"])(  ## der trigger, hier auch ein Fensterkontakt
{
my $msg_msgfenster_room = ReadingsVal('$DEVICE','room_short','');;  ## im Fensterkontakt liegt ein Reading mit der Kurzform des Raumes dies wird in eine variable übertragen, bei dir dann der Name des Rollo
my $msg_msgfenster_state = ReadingsVal('$DEVICE','state','');;   ## der Status des Fenster ebenso in eine variable bei dir dann der Öffnungsgrad des Rollo
fhem ("setreading LaCrosse_$msg_msgfenster_room fenster $msg_msgfenster_state")}) ## die erste Variable wird genutzt um das passende (gleicher raum, passend benannt) Lacrosse Device zu beschreiben. Hier müsstest du dann den Öffnungsgrad in ein Reading schreiben und dann den Rollo öffnen lassen.


Probier mal damit rum, falls nicht klar kommst gib Bescheid und wenn einer ne bessere Lösung hat nur her damit.

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Sirel

Hi Achim,

das geht genau in die richtige Richtung. Habe es jetzt so geschreiben

(["^FTK:^open$"])
(
{
my $RL_Device = ReadingsVal('$DEVICE','Fenster','');;
my $RL_pos = ReadingsVal('$RL_Device','position','');;
fhem ("set $RL_Device Hoch;; setreading $RL_Device pos_old $RL_pos")}) DOELSEIF
(["^FTK:^closed$"])
(
{
my $RL_Device = ReadingsVal('$DEVICE','Fenster','');;
fhem ("set $RL_Device dim ReadingsVal('$RL_Device','pos_old','')")}) DOELSE


Der Rollladen wird jetzt hochgefahren, er schreibt mir aber nicht das Reading pos_old bei dem Aktor.
Wenn ich das Fenster wieder schließe, bekomme ich die Info, das pos_old nicht nummerisch wäre. Ich nehme an, das Leerzeichen zwischen Dim und dem Wert wird nicht übermittelt.

Irgendwas ist da noch falsch...

Hast Du eine Idee?

Viele Grüße,

Max

CBSnake

Hallo Max,
nimm im open - Zweig nach Device Hoch nicht ;; sondern ein ,
Sollte der close Zweig dann noch immer nicht gehen, lag evtl am fehlenden wert?? Poste ich dir morgen was dazu, bin Grad nicht am PC da ist das etwas fummelig ;-)
Alternativ müsste gehen: das pos_old auch als reading zum Fenster, dann mit set $RL_Device dim  {([$DEVICE:pos_old])}

Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Sirel

Hi Achim,
jetzt funktioniert es


(["^FTK:^open$"])
(
{
my $RL_Device = ReadingsVal("$DEVICE","Fenster","");;
my $RL_pos = ReadingsVal("$RL_Device","position","");;
fhem ("set $RL_Device Hoch");;
fhem ("setreading $RL_Device pos_old $RL_pos")}) DOELSEIF
(["^FTK:^closed$"])
(
{
my $RL_Device = ReadingsVal("$DEVICE","Fenster","");;
my $RL_Pos = ReadingsVal("$RL_Device","pos_old","");;
fhem ("set $RL_Device dim $RL_Pos")}) DOELSE


Den "Dim-Wert" im Runterfahrszenario habe ich auch noch als Variable deklariert. Damit funktioniert es ohne Probleme.

Vielen Dank für die super Hilfe und für den 1a Denkanstoß!

Max

PS:
Vielleicht kann man das auch noch eleganter lösen - Lösungen gerne noch anhängen!

CBSnake

Moin,

wunderbar :-)

Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen