FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Resyncer am 03 Juli 2013, 22:05:38

Titel: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 03 Juli 2013, 22:05:38
Hallo,
Ich habe zwei Rolladen nebeneinander, die jeweils über einen HM-LC-Bl1PBU-FM angesteuert werden.
Da einer der beiden Schalter schwer zugänglich ist, würde ich gerne folgende Optimierung vornehmen.

Wenn beide Rolladen bereits oben sind und ich trotzdem am linken Schalter nach oben drücke, sollen beide Rollos herunter fahren.

Im Event Monitor erscheint folgender Eintrag wenn ich den Taster nach oben betätige, obwohl der Rolladen oben ist.  

2013-07-03 21:46:28 structure Wohnzimmerrolladen on
2013-07-03 21:46:28 CUL_HM RO_Wohnzimmer_li level: 100 %
2013-07-03 21:46:28 CUL_HM RO_Wohnzimmer_li deviceMsg: on (to CUL_0)
2013-07-03 21:46:28 CUL_HM RO_Wohnzimmer_li on
2013-07-03 21:46:28 CUL_HM RO_Wohnzimmer_li motor: stop:on
2013-07-03 21:46:31 structure Wohnzimmerrolladen on
2013-07-03 21:46:31 CUL_HM RO_Wohnzimmer_li level: 100 %
2013-07-03 21:46:31 CUL_HM RO_Wohnzimmer_li deviceMsg: on (to CUL_0)
2013-07-03 21:46:31 CUL_HM RO_Wohnzimmer_li on
2013-07-03 21:46:31 CUL_HM RO_Wohnzimmer_li motor: stop:on

1. Warum wird doppelt geloggt?
2. Wie muss die Regular Expression der zu erstellenden notify aufgebaut sein, um den Tastendruck zu erwischen?

Danke für Eure Hilfe!

Gruß resyncer
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 03 Juli 2013, 22:40:56
Habe es nun hiermit versucht, aber leider erfolglos.


define Wohnzimmerrolladen structure room RO_Wohnzimmer_re RO_Wohnzimmer_li
#Wenn linkes Rollo oben und linker Taster hoch gedrückt wird, fahre beide Rollos runter
define Rollo_Notify notify FK_Wohnzimmer {\
    if(Value("RO_Wohnzimmer_li.deviceMsg") eq "off" && Value("RO_Wohnzimmer_li") eq "off")\
      {fhem("set Wohnzimmerrolladen on")}\
    else{\
    if(Value("FK_Wohnzimmer.deviceMsg") eq "on" && Value("RO_Wohnzimmer_li") eq "on")\
      {fhem("set Wohnzimmerrolladen off")}\
    }\
}


Gruß resyncer
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: martinp876 am 04 Juli 2013, 09:10:57
Hallo resyncer

Zitat1. Warum wird doppelt geloggt?
muesste ich mit in den Logs ansehen. Du kannst im HMLAN das Attribut hmProtokollEvents auf max (3?) setzen, dann kommen die messages auf den Schirm und ins log.
Ich denke das 2 messages kommen, die sind ja 3 sec auseinander.
Der BlindAktor: denkt, er sei bei 100%. Denn noch ein up kommt faehrt er dennoch ein kleines Stueck hoch (oder probiert es zumindest). Wuerde er dies nicht wuerden etliche User verzweifeln, die die  Fahrzeiten noch nicht korrekt haben und wenn nach stromausfall der level im BlindAktor auf 50% steht, egal wo der Rollo ist.

FHEM liefert IMMER alle aenderungen, auch wenn sich nichts geaendert hat. Der User sollte dringend mit event-on-change einstellen, dass nicht 'Schreiben der Variable' sondern 'aendern der Variable' in die Notifies eingeht.

In deinem Fall solltest du sicherstellen, dass ein Notify bei "Schreiben" kommt. Einen Tastendruck an sich  kann man von Blind nicht abfragen.


Value("RO_Wohnzimmer_li.deviceMsg") eq "off"
ui - habe ich noch nicht probiert - geht dass "Value("RO_Wohnzimmer_li.deviceMsg")"?
Normal ist ReadingsVal("RO_Wohnzimmer_li","deviceMsg","")
Ausserdem ist deviceMsg doch nie 'on' sondern "on (to CUL_0)"

also
define Rollo_Notify notify FK_Wohnzimmer {\
    if(ReadingsVal("RO_Wohnzimmer_li","deviceMsg","") =~ m /off/ && Value("RO_Wohnzimmer_li") eq "off")\
      {fhem("set Wohnzimmerrolladen on")}\
    else{\
    if(ReadingsVal("FK_Wohnzimmer","deviceMsg","") =~ m /on/  "on" && Value("RO_Wohnzimmer_li") eq "on")\
      {fhem("set Wohnzimmerrolladen off")}\
    }\
}

Gruss Martin

Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 05 Juli 2013, 18:30:02
Hallo Martin,
Danke für Deine Unterstützung.
Ich bekomme nun die folgenden Fehlermeldungen im Log sobald ich die config speichere

2013.07.05 18:15:39 3: Device FK_Wohnzimmer added to ActionDetector with 028:00 time
String found where operator expected at (eval 14406) line 1, near "m /on/ "on""
   (Do you need to predeclare m?)
2013.07.05 18:15:39 3: Rollo_Notify return value: syntax error at (eval 14406) line 1, near "m /on/ "on""
syntax error at (eval 14406) line 1, near "} }"

Hast Du einen Tipp?

Gruß resyncer
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 07 Juli 2013, 22:50:07
Hallo,
Der Fehler im Logfile kam vermutlich von dem ~ m /on/ "on" &&
Ich habe es geändert in ~ m /on/ &&
Das Ganze funktioniert aber auch nicht wie oben gewünscht.
Hat noch jemand eine Idee?

Gruß resyncer
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: martinp876 am 13 Juli 2013, 16:35:26
Hallo Resyncer,

sorry, man hat mich 1 Woche matt gesetzt. Jetzt arbeite ich langsam alles auf. Was geht den nicht? Klar ist, dass man den Taster nicht direkt bekommen kann, eben nur die Reaktion des Aktors - was passiert bei dir?

Gruss Martin
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 13 Juli 2013, 21:12:26
Hallo Martin,
hoffentlich war es nichts ernstes.

Ich habe alle Änderungen so gemacht wie Du es beschrieben hattes, dann aber noch die oben beschriebene Korrektur vorgenommen.
Wenn der Rolladen oben ist und ich drücke dann nach oben, hört man kurz danach ein klicken im Schalter (Relais) und im Monitor erscheint die exakt selbe Meldung wie in meinem ersten Post oben. Die Rolladen rühren sich aber nicht nach unten.
Im Logfile wird nichts geschrieben, trotz der Änderungen (log-Einstellungen) die Du vorgeschlagen hast.

Gruß Resyncer
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: martinp876 am 14 Juli 2013, 15:54:04
Hallo Resyncer,
Zitathoffentlich war es nichts ernstes.
schon - aber unglaubliches Glück gehabt. Schlecht wenn direkt vor einem jemand auf einer 4-spurigen Landstrasse plötzlich wendet.... aber egal.

ZitatWenn der Rolladen oben ist und ich drücke dann nach oben, hört man kurz danach ein klicken im Schalter (Relais) und im Monitor erscheint die exakt selbe Meldung wie in meinem ersten Post oben.
korrekt. Auch wenn der Rollo 'logisch' in der Endposition ist und du noch einen drauf gibst probiert er noch einmal diese Richtung. Somit kann man seinen Rollo wieder mit dem Aktor synchen und User die ihre Fahrzeiten noch nicht eingestellt haben bekommen lange Rollos in die Endstellung.

ZitatDie Rolladen rühren sich aber nicht nach unten.
hm - koennte am Timing liegen. Dass das kommando zu schnell kommt und der Rollo noch nicht will.
Also einmal langsam debuggen
a) wird das notify richtig ausgewertet
b) wird das Kommando abgesetzt
c) wird das kommando akzeptiert.

zu a)
define x dummy
define Rollo_Notify notify FK_Wohnzimmer {\
   if(ReadingsVal("RO_Wohnzimmer_li","deviceMsg","") =~ m /off/ && \
                   Value("RO_Wohnzimmer_li") eq "off")\
         {fhem("set x on")}\
    else{\
    if(ReadingsVal("FK_Wohnzimmer","deviceMsg","") =~ m /on/ && \
                   Value("RO_Wohnzimmer_li") eq "on")\
         {fhem("set x off")}}\
    else{fhem("set x other")}\
}


dann sehen, was in 'x' als state steht.

zu b) wird eine message abgesetzt? Du kannst einmal in HMLAN hmProtocolEvents einschalten - dann sollten messages kommen (mit dem alten Notify)

zu c) einmal hmlan hmProtocolEvents setzen und den loglevel im HMLAN auf 1 setzen. Logs schicken

Gruss Martin

Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 14 Juli 2013, 20:39:11
Hallo Martin,
oha, Glück im Unglück...
Danke für Deine Unterstützung!

zu a) es steht "???" im State

zu b) hmProtocol habe ich auf 3_dumpTrigger gesetzt
2013-07-14 20:28:52 CUL CUL_0 RCV L:0D N:0B F:A4 CMD:10 SRC:RO_Wohnzimmer_li DST:F11034 0601C800 (INFO_ACTUATOR_STATUS) (,CFG,BIDI,RPTEN)
2013-07-14 20:28:52 CUL CUL_0 SND L:0A N:0B F:80 CMD:02 SRC:F11034 DST:RO_Wohnzimmer_li 00 (ACK) (,RPTEN)
2013-07-14 20:28:52 structure Wohnzimmerrolladen on
2013-07-14 20:28:52 CUL_HM RO_Wohnzimmer_li level: 100 %
2013-07-14 20:28:52 CUL_HM RO_Wohnzimmer_li deviceMsg: on (to CUL_0)
2013-07-14 20:28:52 CUL_HM RO_Wohnzimmer_li on
2013-07-14 20:28:52 CUL_HM RO_Wohnzimmer_li motor: stop:on
2013-07-14 20:28:55 CUL CUL_0 RCV L:0D N:0C F:A4 CMD:10 SRC:RO_Wohnzimmer_li DST:F11034 0601C800 (INFO_ACTUATOR_STATUS) (,CFG,BIDI,RPTEN)
2013-07-14 20:28:55 CUL CUL_0 SND L:0A N:0C F:80 CMD:02 SRC:F11034 DST:RO_Wohnzimmer_li 00 (ACK) (,RPTEN)
2013-07-14 20:28:55 structure Wohnzimmerrolladen on
2013-07-14 20:28:55 CUL_HM RO_Wohnzimmer_li level: 100 %
2013-07-14 20:28:55 CUL_HM RO_Wohnzimmer_li deviceMsg: on (to CUL_0)
2013-07-14 20:28:55 CUL_HM RO_Wohnzimmer_li on
2013-07-14 20:28:55 CUL_HM RO_Wohnzimmer_li motor: stop:on


zu c) 3_dumpTrigger, Loglevel auf 1
2013.07.14 20:35:02 1: CUL_0: A0D0EA4101AF8ADF110340601C800 -65.5
2013.07.14 20:35:02 1: RCV L:0D N:0E F:A4 CMD:10 SRC:RO_Wohnzimmer_li DST:F11034 0601C800 (INFO_ACTUATOR_STATUS) (,CFG,BIDI,RPTEN)
2013.07.14 20:35:02 1: SW: As0A0E8002F110341AF8AD00
2013.07.14 20:35:02 1: SND L:0A N:0E F:80 CMD:02 SRC:F11034 DST:RO_Wohnzimmer_li 00 (ACK) (,RPTEN)
2013.07.14 20:35:05 1: CUL_0: A0D0FA4101AF8ADF110340601C800 -65
2013.07.14 20:35:05 1: RCV L:0D N:0F F:A4 CMD:10 SRC:RO_Wohnzimmer_li DST:F11034 0601C800 (INFO_ACTUATOR_STATUS) (,CFG,BIDI,RPTEN)
2013.07.14 20:35:05 1: SW: As0A0F8002F110341AF8AD00
2013.07.14 20:35:05 1: SND L:0A N:0F F:80 CMD:02 SRC:F11034 DST:RO_Wohnzimmer_li 00 (ACK) (,RPTEN)


Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: martinp876 am 16 Juli 2013, 08:42:39
hi resyncer

Zitatdefine x dummy
define Rollo_Notify notify FK_Wohnzimmer:deviceMsg.* {\
    my $dm = ReadingsVal("FK_Wohnzimmer","deviceMsg","");;\
    my $vl = Value("FK_Wohnzimmer");;\
    if($dm =~ m /on/ && $vl eq "auf")\
         {fhem("set x on")}\
    else{\
    if($dm =~ m /off/ && $vl eq "zu")\
         {fhem("set x off")}}\
}

habe mal gespielt.
a) du solltest das Notify nur auf einen event des Wohnzimmers ausführen (hier deviceMsg).
b) die Events dürfen nicht gefiltert sein (attribut event-on....)

dann funktioniert es bei mir wie oben. Zu beachten ist, dass wenn der Rollo "auf" ist und die "zu" sagst meldet der Rollo zu beginn der Fahrt den Aktuellen Zustand, der ist "auf", da triggert es noch einmal.

Ich hoffe, das Gerüst oben hilft, dein Nofity anzupassen

Gruss Martin
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 19 Juli 2013, 07:55:05
Hallo Martin,
Ich habe versucht das umzusetzen.
Irgendwie landet in X nichts.
Ehrlichgesagt habe ich die Anmerkungen a) und b) nicht wirklich verstanden.
Bin mir auch nicht bewusst etwas gefiltert zu haben.
Sorry, bin bezüglich fhem noch Grün hinter den Ohren :-}

Gruß resyncer
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: martinp876 am 19 Juli 2013, 10:47:36
Hi resyncer,

fhem erzeugt jede Menge events. Damit man diese eindämmen kann(und sollte) kann man einstellen, dass einige nur kommen, wenn sich etwas geaendert hat. Siese Attr event-on-change. Das sollte i.a. auf '.*' stehen, also default: events nur wenn sich etwas aendert. Wenn du dieses Attribut löscht kommen alle events.
Siehe auch event-on-update - das arbeitet mit event-on-change zusammen und erzeugt ggf. für manche Readings immer events wenn ein trigger kommt, auch wenn der Inhalt sich nicht aendert.

zu a) Du hattest einen notify filter von FK_Wohnzimmer. Der notify wird also ausgewertet IMMEr wenn etwas vom FK_Wohnzimmer gemeldet wird. Schon bei einem einzigen hochfahren kommt der state, die deviceMsg und ich denke noch einer. Also 3mal. Nimm einen der immer kommt, aber nur einmal pro aktion. Also FK_Wohnzimmer:deviceMsg.* - nur reading deviceMsg vom FK_Wohnzimmer, inhalt egal.

für den Test kannst du evetn-on-change löschen, solltest du später aber wieder einbauen, zusammen mit event-on-update

Gruss Martin
Titel: Aw: Rolladensteuerung -Erweiterung
Beitrag von: Resyncer am 19 Juli 2013, 12:36:03
Hi Martin,
Danke, ich werde am WE mein bestes geben und berichten.
Gruß resyncer