SOMFY Rolladen und Handsender Status bzw. Position abgleichen mit SIGNALduino

Begonnen von timtom, 20 Mai 2017, 14:35:24

Vorheriges Thema - Nächstes Thema

timtom

Hallo zusammen,

um den "Modul-Entwicklung: Somfy RTS" Thread nicht überzustrapazieren, habe ich zu dem Thema mal einen eigenen eröffnet. Dies ist auch nicht neu und man findet Fragen dazu in diversen anderen Threads. Jedoch habe ich bisher keine Antwort gefunden. Es geht um die Kopplung von SOMFY Rolläden mit einer Fernbedienung bzw. Wandtaster zur Status-/Positionsübernahme

Setup:
SIGNALduino FW 3.3.1 (nanoCUL mit CC1101) (Name: nanoSIGNALduino)
SOMFY Rolladen (Name: wz_Rolladen)
SOMFY Wandtaster bzw. Fernbedienung (Name: wz_RolladenHandsender)

Problemstellung: Der Status bzw. Position des Rolladens soll nach Steuerung über den Wandtaster (wz_RolladenHandsender) im FHEM-Rolladen Device (wz_Rolladen) korrekt angezeigt werden.

Eine direkte Kopplung über ein Attribut (z.B. rawDevice) ist meines Wissens nach nicht möglich. Oder gibt es eine fertige Lösung?

Andernfalls hätte ich folgende Ideen:

1. Das DOIF schaltet einfach bei Betätigung der Fernbedienung einfach noch mal per "set" das Rollade-Device. Somit bekommt der Rolladen das Signal 2x ab. Wäre das problematisch oder nur unschön?
([wz_RolladenHandsender:parsestate] eq "on") ##down
  (set wz_Rolladen on)
DOELSEIF ([wz_RolladenHandsender:parsestate] eq "off") ##up
(set wz_Rolladen off)
DOELSEIF ([wz_RolladenHandsender:parsestate] eq "stop") ##stop
(set wz_Rolladen stop)


2. Etwas komplizierter und nach meinem Gefühl fehleranfälliger wäre folgendes.
Man erweitert das o.g. DOIF so, dass beim Drücken des Handsenders dieser per "set wz_RolladenHandsender on" nachgezogen wird. Wenn man die Positionsattribute im Handsender analog zum Rolladen gesetzt hat, wird auch die Position berechnet (in der letzten Sekunde springt diese jedoch von 100 auf 200. Das müsste ich noch mal anlysieren.)
Sobald "stop" bestätigt wird oder die Position =0 bzw. >=100 (bzw. 200) ist, wird die "position" sowie "exact" des Handsenders per setreading von der Fernbedienung an das Rolladendevice übergeben.
Da mir dies auch irgendwie nicht ganz sauber vorkommt, habe ich vorerst Variante 1 gewählt.

Beste Grüße und ein schönes Wochenende

RaspiLED

Hi,
Es wäre auch eine Variante die normale FB zu entlernen ;-)
Aber es stimmt schon, kann man nicht mittels notify nur den State ohne Erneutes Befehlssenden übernehmen?
Evtl. Könnte der State dich auch ein Userreading anzeigen und dieses Userreading wird aus beiden FB gefüttert?
Gruß Arnd
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Powertrain01

Hallo timtom,

irgendwie stehe ich auf dem schlauch und bringe das ganze nicht hin.

Setup:
SIGNALduino FW 3.3.1 (nanoCUL mit CC1101) (Name: sduino)
SOMFY Rolladen (Name: RolloFrank)
SOMFY Wandtaster bzw. Fernbedienung (Name: SOMFY_Handsender_Frank)

ich habe den Wandtaster per autocreate erstellen lassen und bekomme auch die Log einträge.
aber das Icon des RoloFrank wird nicht nachgezogen.

mein DOIF

DOIF ([SOMFY_Handsender_Frank:parsestate] eq "on") ##down
  (set RolloFrank on)
DOELSEIF ([SOMFY_Handsender_Frank:parsestate] eq "off") ##up
(set RolloFrank off)
DOELSEIF ([SOMFY_Handsender_Frank:parsestate] eq "stop") ##stop
(set RolloFrank stop)


wo kann ich den suchen anfangen ?
Bin ganz neu und der Rolladen ist das erste was ich in FHEM mache also bitte verständlich erklären ;-)

RaspiLED

Verständnisfrage: RolloFrank ist die FHEM Fernbedienung und angelernt an der Rollade?
Wenn Du on FHEM on oder off drückst, dann fährt der Rolladen?
Warum benutzt Du nicht erstmal die folgenden Attribute in beiden Geräten:
devStateIcon open:fts_shutter_10 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 down:fts_shutter_100 closed:fts_shutter_100
   eventMap   on:open stop:stop off:close
   webCmd     open:stop:close
Danach meldest Du Dich nochmal. Was geht und was nicht! Achso bitte auch die Laufzeiten der Rolllade eintragen (steht im Somfy Wiki).
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Powertrain01

Hallo RaspiLED,

ja ist anlernt und geht auch die Zeiten sind wie im Wiki auch gestoppt und sowohl bei RolloFrank als auch beim Handsender eingetragen.

wenn ich per RolloFrank fahre bewegt sich auch mein Ivon auf das Passende State.
Nur die Verbindung zum Handsender bekomme ich das Icon von Rollo Frank nicht nachgezogen.

RaspiLED

Okay, dann zeige mal die
list RolloFrank
list SOMFY_Hansender_Frank
Sind die Befehle jetzt auch schon gemappt auf open/stop/close?
Wie heißt Dein DOIF und wie sieht es nach Anpassung auf open/close/... aus?
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Powertrain01

Hallo RaspiLED,

ich hoffe ich habe alles verstanden und zeig dir mal meine ausgaben (ich fange gerade erst mit FHEM an und bin noch nicht so tief drin).

list RolloFrank
Internals:
   ADDRESS    12345F
   DEF        12345F
   IODev      sduino
   NAME       RolloFrank
   NR         23
   STATE      open
   TYPE       SOMFY
   move       stop
   Code:
     1          12345F
   Readings:
     2017-05-21 09:14:46   enc_key         A9
     2017-05-21 09:15:06   exact           0
     2017-05-21 09:15:06   position        0
     2017-05-21 09:14:46   rolling_code    0019
     2017-05-21 09:15:06   state           open
Attributes:
   IODev      sduino
   devStateIcon open:fts_shutter_10 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 down:fts_shutter_100 closed:fts_shutter_100
   drive-down-time-to-100 15
   drive-down-time-to-close 19
   drive-up-time-to-100 4
   drive-up-time-to-open 20
   eventMap   on:close stop:stop off:open
   room       Rolladen
   webCmd     open:stop:close


list SOMFY_Handsender_Frank
Internals:
   ADDRESS    60E079
   DEF        60E079 AC 019C
   IODev      sduino
   LASTInputDev sduino
   MSGCNT     17
   NAME       SOMFY_Handsender_Frank
   NR         28
   STATE      ???
   TYPE       SOMFY
   move       stop
   sduino_DMSG YsA88A8B532ACAAA
   sduino_MSGCNT 17
   sduino_RAWMSG MC;LL=-1299;LH=1277;SL=-677;SH=622;D=A88A8B532ACAAA;C=645;L=55;R=22;
   sduino_RSSI -63
   sduino_TIME 2017-05-21 09:25:43
   Code:
     1          60E079
   Readings:
     1970-01-01 01:00:00   enc_key         AC
     2017-05-21 09:25:43   parsestate      off
     1970-01-01 01:00:00   rolling_code    019C
Attributes:
   IODev      sduino
   devStateIcon open:fts_shutter_10 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 down:fts_shutter_100 closed:fts_shutter_100
   drive-down-time-to-100 15
   drive-down-time-to-close 19
   drive-up-time-to-100 4
   drive-up-time-to-open 20
   eventMap   on:close stop:stop off:open
   room       SOMFY
   webCmd     open:stop:close


list SOMFY_Handsender_FrankNotify
Internals:
   DEF        DOIF ([SOMFY_Handsender_Frank:parsestate] eq "on") ##down
  (set RolloFrank close)
DOELSEIF ([SOMFY_Handsender_Frank:parsestate] eq "off") ##up
(set RolloFrank open)
DOELSEIF ([SOMFY_Handsender_Frank:parsestate] eq "stop") ##stop
(set RolloFrank stop)
   NAME       SOMFY_Handsender_FrankNotify
   NR         48
   NTFY_ORDER 50-SOMFY_Handsender_FrankNotify
   REGEXP     DOIF
   STATE      active
   TYPE       notify
   Readings:
     2017-05-21 09:25:23   state           active
Attributes:


auch wenn ich im DOIF anstelle von open und close off und on verwende geht es nicht.

was habe ich denn Falsch gemacht.

So bin 1 schritt weiter das DOIF habe ich nun als DOIF definiert (wer das WIKI list ist im Vorteil ;-) )
erste state Änderungen am Rollo sind erkennbar muss nochmals schauen hab da bestimmt noch irgendwo Falsche befehle im DOIF drin.

list SOMFY_Handsender_Frank_DOIF

Internals:
   CFGFN
   DEF        ([SOMFY_Handsender_Frank:parsestate] eq "on") ##down
  (set RolloFrank on)
DOELSEIF ([SOMFY_Handsender_Frank:parsestate] eq "off") ##up
(set RolloFrank off)
DOELSEIF ([SOMFY_Handsender_Frank:parsestate] eq "stop") ##stop
(set RolloFrank stop)
   NAME       SOMFY_Handsender_Frank_DOIF
   NR         156
   NTFY_ORDER 50-SOMFY_Handsender_Frank_DOIF
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-05-21 10:31:13   Device          SOMFY_Handsender_Frank
     2017-05-21 10:31:13   cmd             2
     2017-05-21 10:31:13   cmd_event       SOMFY_Handsender_Frank
     2017-05-21 10:31:13   cmd_nr          2
     2017-05-21 10:31:13   e_SOMFY_Handsender_Frank_parsestate off
     2017-05-21 10:31:13   state           cmd_2
   Condition:
     0          ReadingValDoIf($hash,'SOMFY_Handsender_Frank','parsestate') eq "on"
     1          ReadingValDoIf($hash,'SOMFY_Handsender_Frank','parsestate') eq "off"
     2          ReadingValDoIf($hash,'SOMFY_Handsender_Frank','parsestate') eq "stop"
   Devices:
     0           SOMFY_Handsender_Frank
     1           SOMFY_Handsender_Frank
     2           SOMFY_Handsender_Frank
     all         SOMFY_Handsender_Frank
   Do:
     0:
       0          set RolloFrank on
     1:
       0          set RolloFrank off
     2:
       0          set RolloFrank stop
     3:
   Helper:
     event      parsestate: open
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   SOMFY_Handsender_Frank
     timerevent parsestate: open
     triggerDev SOMFY_Handsender_Frank
     timerevents:
       parsestate: open
     timereventsState:
       parsestate: open
     triggerEvents:
       parsestate: open
     triggerEventsState:
       parsestate: open
   Internals:
   Itimer:
   Readings:
     0           SOMFY_Handsender_Frank:parsestate
     1           SOMFY_Handsender_Frank:parsestate
     2           SOMFY_Handsender_Frank:parsestate
     all         SOMFY_Handsender_Frank:parsestate
   Regexp:
     0:
     1:
     2:
     All:
   State:
     State:
   Trigger:
Attributes:



wenn ich das jetzt so einigermaßen richtig Kapiert habe kann ich das Notfy wieder löschen.
Ebenso müsste ich doch am Handsender das attr webCmd und das attr eventmap auch wieder löschen können ?



timtom

Zitat von: RaspiLED am 20 Mai 2017, 16:33:30
Hi,
Es wäre auch eine Variante die normale FB zu entlernen ;-)
Aber es stimmt schon, kann man nicht mittels notify nur den State ohne Erneutes Befehlssenden übernehmen?
Evtl. Könnte der State dich auch ein Userreading anzeigen und dieses Userreading wird aus beiden FB gefüttert?
Gruß Arnd
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Das entlernen wäre mir nicht so recht, da der Empfang des Handsenders nicht so zuverlässig ist.

Dein zweiter Vorschlag ist ja etwa da, was ich oben unter 2 beschrieben habe. Das Problem ist, dass bei Betätigung des Handsenders nicht die Positionsattribute "mitlaufen", sondern nur, wenn ich in FHEM auf on/off klicke. Dann könnte man die Attribute übernehmen. Da ist nur die Frage was besser ist.

Elektrolurch

Hallo, hier meine Lösung zum Abgleich der fhem-devices von Somfy, wenn die Rolladen über Hand/Wandsender verfahren werden:

Der Trick liegt in einer Namenskonvention.
Das fhem-Device heisst z.B. Wz_TRolladen und der dazugehörige Wandsender Wz_FB_TRoll.

Man definiert sich z.B ein notify:

define Roll_FB_not notify .._FB.Roll:.* {Roll_FB_not($NAME,$EVENT)}

Die sub sieht dann bei mir so aus:

sub Roll_FB_not($$)
{
my($fb,$event) = @_;
Log3($rolladenselektor,1,"Roll_FB_not: $fb event $event");
my ($rd,$val) = split(' ',$event);

return undef if($fb eq 'ExtMarkise');
return if($rd ne 'parsestate:');

# fb format is: xx_FB_[TF]Roll
# T = door, F = window FB = remote
# xx shortcut for room
# Somfy device for send
# xx_[TF]Rolladen
# example:
# FB: Wz_FB_TRoll
# Somfy: Wz_TRolladen

my $d = $fb . 'aden';
$d =~s/FB_//; # transform name
Log3($rolladenselektor,1,"set  $d virtual $val");
fhem("set  $d virtual $val");

return undef;
} # end sub Roll_FB_not

Der Trick liegt darin, die set - Funktion von Somfy mit "virtual" aufzurufen, dann wird kein Kommando gesendet, aber die Position korrekt berechnet.

Elektrolurch
configDB und Windows befreite Zone!

timtom

Zitat von: Elektrolurch am 20 Juni 2017, 11:17:34
Hallo, hier meine Lösung zum Abgleich der fhem-devices von Somfy, wenn die Rolladen über Hand/Wandsender verfahren werden:

Der Trick liegt in einer Namenskonvention.
Das fhem-Device heisst z.B. Wz_TRolladen und der dazugehörige Wandsender Wz_FB_TRoll.
...
Auch ein interessanter Ansatz. Ich frage mich nur, ob ich das nach längerer Zeit immer noch verstehe, was da gemacht wurde ;) Aber irgendwie komisch, dass es für so ein simples Problem, keine einfache Standardlösung gibt :(

Wobei mir bei deinem Ansatz eine Idee gekommen ist. Das Attribut Dummy verhindert doch, dass Funksignale gesendet werden? Könnte man dann mein DOIF so anpassen?

([wz_RolladenHandsender:parsestate] eq "on") ##down
  (attr wz_Rolladen dummy 1)
  (set wz_Rolladen on)
  (attr wz_Rolladen dummy 0)
DOELSEIF ([wz_RolladenHandsender:parsestate] eq "off") ##up
  (attr wz_Rolladen dummy 1)
  (set wz_Rolladen off)
  (attr wz_Rolladen dummy 0)
DOELSEIF ([wz_RolladenHandsender:parsestate] eq "stop") ##stop
  (attr wz_Rolladen dummy 1)
  (set wz_Rolladen stop)
  (attr wz_Rolladen dummy 0)



Elektrolurch

Hallo,

ich habe die SOMFY_Parse sub mal so erweitert, dass man beim Handsender über ein Attribut die Rolläden hinterlegen kann und sich der Status der Rolläden auch ändert, wenn man den Handsender drückt.

So wirds gemacht:

attr Az_FB_FRoll userattr associated-devices
attr Az_FB_FRoll associated-devices  Az_FRolladen

Da können auch mehrere Rolläden stehen, wenn man z.B. auf einer Taste der FB mehrere Rolläden angelernt hat.

Ich hänge mal die geänderte SOMFY-Datei an. Die 10_SOMFY.pm sollte man entfernen, da ansonsten das Modul zweimal geladen wird und beim Neustart das log voll geschrieben wird.

Viel Spaß damit.

Ach ja, damit die Handsender überhaupt erkannt wurden, musste die Abfrage etwas weniger strikt erfolgen. Leider werden über den SignalDuino die gesendeten Signale nicht immer erkannt, so dass er meint, neue devices anlegen zu müssen.
Man sollte
attr autocreate disable 1
setzen, um nicht lauter Leichen oder die Rollos der Nachbarn anzulernen, was ja auch missbraucht werden könnte.

Elektrolurch
configDB und Windows befreite Zone!

buennerbernd

Zitatich habe die SOMFY_Parse sub mal so erweitert, dass man beim Handsender über ein Attribut die Rolläden hinterlegen kann und sich der Status der Rolläden auch ändert, wenn man den Handsender drückt.

Das klingt gut und sollte in den Standard wandern!

Danke, Stefan.
Modulentwickler von KLF200 und KLF200Node

Mave

Ich bin an einer Lösung auch stark interessiert und fände es auch gut, wenn das im Standard umgesetzt werden würde....

timtom

Zitat von: timtom am 29 Juni 2017, 12:21:44
Auch ein interessanter Ansatz. Ich frage mich nur, ob ich das nach längerer Zeit immer noch verstehe, was da gemacht wurde ;) Aber irgendwie komisch, dass es für so ein simples Problem, keine einfache Standardlösung gibt :(

Wobei mir bei deinem Ansatz eine Idee gekommen ist. Das Attribut Dummy verhindert doch, dass Funksignale gesendet werden? Könnte man dann mein DOIF so anpassen?

([wz_RolladenHandsender:parsestate] eq "on") ##down
  (attr wz_Rolladen dummy 1)
  (set wz_Rolladen on)
  (attr wz_Rolladen dummy 0)
DOELSEIF ([wz_RolladenHandsender:parsestate] eq "off") ##up
  (attr wz_Rolladen dummy 1)
  (set wz_Rolladen off)
  (attr wz_Rolladen dummy 0)
DOELSEIF ([wz_RolladenHandsender:parsestate] eq "stop") ##stop
  (attr wz_Rolladen dummy 1)
  (set wz_Rolladen stop)
  (attr wz_Rolladen dummy 0)

Ich zitiere mich mal selber. Würde etwas gegen den Vorschlag sprechen?

RaspiLED

Hi,
hat jetzt jemand die Doif/Dummy Variante laufen und kann mal alles notwendige an defines posten?
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...