UniRoll Steuerung mit FS20

Begonnen von Daedalus, 04 April 2015, 12:16:57

Vorheriges Thema - Nächstes Thema

Daedalus

Hallo zusammen,

ich bräuchte Hilfe bei folgender Konstellation, leider fällt mir kein passender Lösungsansatz ein.

Die Rollladensteuerung läuft über UniRoll Unterputzantriebe, definiert als Roll_EG_K, Roll_EG_T, Roll_EG_W, Roll_OG_S, Roll_OG_T und Roll_OG_K.
Alle sechs in Fhem eingebunden, funktionieren soweit ohne Probleme.

Jetzt habe ich einen FS20 3/6 Kanal Sender.

Nun möchte ich für jeden Kanal einen Roll Antrieb belegen und bei Toggle den Rollladen hoch, bzw runter fahren lassen (bei up --> Down und andersrum).
Natürlich, einen Taster mit set Roll_EG_K,Roll_EG_T ,... down würde auch gehen, hat aber nicht den Charm jeden separat ansteuern zu können.

Da das UniRoll nur den Status up, down, pos und stop kennt stehe ich vor dem Problem, wie ich das dem FS20 sinnvoll beibringe.

Hat an der Stelle jemand eine Idee und kann mir weiterhelfen?

Danke vorab schonmal :)

Puschel74

ZitatDa das UniRoll nur den Status up, down, pos und stop kennt stehe ich vor dem Problem, wie ich das dem FS20 sinnvoll beibringe.
Per notify auf den FS20-Taster triggern und im notify den Status des Rollladen abfragen und passend reagieren.

Frei Schnauze etwa so:
define n_Rollo_EG_T notify <Name_des_FS20_Tasters>:<ggf_das_regexp_wenn_nötig> {
  if (Value("Name_des_Rollo") eq "down") set <Name_des_Rollo> up;
  if (Value("Name_des_Rollo") eq "up") set <Name_des_Rollo> down;
  ...
  ...
}


Leichter wäre es aber wenn wir wüssten welche Namen deine FS20-Taster haben und ob du toogle oder on/off sendest.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Daedalus

#2
Hallo Puschel,

danke für den Gedankenanstoß, den Perl Code werde ich heute Abend mal ausprobieren sobald ich zuhause bin.
Der  Taster ist noch im Standard FS20_c43200 - FS20_c43202 mit 3 paaren a on/off. Wird irgendwann mal in Roll_EG_K_Button getauft.
Aktuell sendet der Taster im Default noch ein On Off, bzw das Dimup Dimdown Signal (so zumindest laut Log der Taster)

Puschel74

#3
ZitatDer  Taster ist noch im Standard FS20_c43200 - FS20_c43206. Wird irgendwann mal in Roll_EG_K_Button getauft.
Nicht aufschieben - machs gleich.
Das erleichtert dir das weitere Leben mit FHEM  8)
rename FS20_c43200 Roll_EG_K_Button
in die Befehlszeile und die Attribute per Detailansicht verteilen und du hast einen besseren Überlick.

ZitatAktuell sendet der Taster im Default noch ein On Off, bzw das Dimup Dimdown Signal (so zumindest laut Log der Taster)
Was das ganze vereinfacht.

1. Ich würde das ganze dann mal so versuchen (es geht auch DOIF - dazu Punkt2):
define n_Rollo_schalt notify Roll_.*._Button:(On|Off|Dim.*) {
in die Befehlszeile einwerfen und Enter drücken.
In der Detailansicht die sich direkt im Anschluss öffnet beherzt auf DEF klicken und folgendes eintragen:
Achtung! Ich bin noch am schauen wie man das _Button abschneiden kann in $NAME.

Umständlich wäre folgendes:
if ($NAME eq "Roll_EG_K_Button") {
  fhem("set Roll_EG_K up") if($EVENT eq "On");
  fhem("set Roll_EG_K down") if($EVENT eq "Off");
  fhem("set Roll_EG_K pos 30") if($EVENT eq "Dimup");
  fhem("set Roll_EG_K pos 70") if($EVENT eq "Dimdown");
  }
  elsif($NAME eq <nächster Rollladen>_Button) {
  obigen Abschnitt bearbeiten und passend einfügen
  }
}


Die Variante mit abgeschnittenem _Button sollte so aussehen:
my $Geraet=<hier bin ich noch am suchen um _Button abschneiden zu können in $NAME>;
fhem("set $Geraet up") if($EVENT eq "On");
fhem("set $Geraet down") if($EVENT eq "Off");
fhem("set $Geraet pos <was_du_willst>") if($EVENT eq "Dimup");
fhem("set $Geraet pos <auch_was_du_willst>") if($EVENT eq "Dimdown");
}


2. Es geht sicher auch mit DOIF aber da kann ich dir nur mit der commandref und Damians DOIF-Beitrag unter Automatisierung helfen.
Sorry.

Edith: Fehlermeldungen bitte hier posten.
"sprechendere" Namen kannst du mit alias vergeben - diese zählen aber nicht für notifys oder at`s ... sondern sind wirklich nur Aliasnamen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Daedalus

Hallo Puschel,

danke für deine Antworten. Klar wenn dann gleich, daher konnte ich nur die Antworten liefern die ich per Mobiltelefon und VPN rausbekommen habe. Nur wenn es dann darum geht zu prüfen ob das Ding hoch und runter fährt, dann wäre ich gerne vor Ort ;)
Habe das gleich mal nach deiner Anleitung gemacht und: nix :D

Vom Logging her habe ich folgendes:

Log der Fernbedienung:
2015-04-05_09:40:54 Roll_EG_K_Button on
2015-04-05_09:40:56 Roll_EG_K_Button off
2015-04-05_09:40:59 Roll_EG_K_Button on
2015-04-05_09:41:00 Roll_EG_K_Button off


In der Log von FHEM sind keine Auffälligkeiten

Im Eventmonitor bekomme ich je nach Tastendruck:

Events (Filter:.*):
2015-04-05 09:43:31 FS20 Roll_EG_K_Button off
2015-04-05 09:43:35 FS20 Roll_EG_K_Button on
2015-04-05 09:43:36 FS20 Roll_EG_K_Button dimdown
2015-04-05 09:43:37 FS20 Roll_EG_K_Button dimup


Die Definitionen sind so wie von dir vorgegeben und auch eine Eingabe des State On oder Off in der Befehlszeile fährt den Rollo nicht hoch oder runter.

Hast du mir noch einen Rat oder brauchst weitere bestimmte Infos?

Puschel74

on und off != On und Off
FHEM ist Case sensitiv und beachtet Gross- Kleinschreibung peinlichst genau.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Daedalus

Jetzt freu ich mich - es funktioniert mit den zwei Buttons.
Meine Programmierzeiten sind schon etwas her, muss mich da erst wieder reinfinden. Danke für die Hilfestellung.

Ich hatte gerade noch (ohne das Case Sensitive zu bedenken) die Überlegung, ob es daran liegen könnte, dass wir zwei Buttons der Fernbedienung nutzen, aber der eigentliche Gedanke die Abfrage des Status mit gegenteiligem Event war, wo wir wieder beim Toggle wären...

Dazu eine Idee?

Noch grundsätzlich eine Frage zum Code: Wenn ich das korrekt verstehe verwendest man mit deinem Code einen Notify für alle Tasten, welche durch das elseif ermöglicht werden?
So aus dem bauch raus hätte ich sonst für jeden Rollladen ein eigenes Notify geschrieben (was imPrinzip aber unnötig wäre)

Puschel74

Zitatwo wir wieder beim Toggle wären...

Klar geht das mit toogle als $EVENT auch.

Du musst dann nur im Code abfragen ob Value("<Name_des_Rollladen>") eq "up" - dann Rollo down,
Value("<Name_des_Rollladen>") eq "down" - dann Rollo up usw.
Achtung: Hier wird der Status des Rollladen abgefragt der uns vorhin egal war.

ZitatWenn ich das korrekt verstehe verwendest man mit deinem Code einen Notify für alle Tasten, welche durch das elseif ermöglicht werden?
Beinahe.
das notify reagiert aufgrund des Regexp auf alles was mit Roll_.*._Button durch die Luft geflogen kommt und als Event on oder off oder dim sendet. dim matcht aufgrund des .* auch auf dimup und dimdown.
Mit dem elsif prüfen wir nur welcher Button gesendet hat um den richtigen Rollladen zu fahren.
Wie gesagt:
Wenn ich endlich Zeit habe um _Button zu entfernen dann klappt das auch mit 4 Zeilen für alle Rollläden.

ZitatSo aus dem bauch raus hätte ich sonst für jeden Rollladen ein eigenes Notify geschrieben
Ginge auch aber ich benutze für eine! Funktion (fahr die Rollläden) auch gerne ein! notify.
Wobei das ganze auch in die 99_myUtils.pm ausgelagert werden kann - Achtung!
Dabei sind Anpassungen am Code notwendig.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Daedalus

Hallo Puschel,

danke für den Hinweis, werde das am Dienstag umsetzen und dir dann berichten, ob das so funktionier mit der Abfrage des Rollladens und dem Toggle.
Mit den myUtils muss ich mich erst noch auseinandersetzen, bin im Moment froh etwas Ordnung durch Includes hinzubekommen, zuviel Neues auf Einmal ist auch nicht gut ;)

MfG
D

Puschel74

Zitatbin im Moment froh etwas Ordnung durch Includes hinzubekommen
Ich rate generell davon ab die fhem.cfg von Hand zu bearbeiten.
In der Konfig muss sich FHEM auskennen und zurecht finden und sonst niemand und FHEM kann das am besten wenn der User seine Finger davon lässt.
Einzige Einschränkung: Der User weiß was er darin macht.

Aber grundsätzlich gilt: Es ist deine Konfig und du darfst darin natürlich machen was und wie du willst.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Daedalus

Hoi hoi,

also ich hab das mal nach bestem Wissen und Gewissen in Code gepackt, aber wollen tut es noch nicht, bekomme folgende Meldung aus dem Log:


2015.04.08 21:10:38 1: PERL WARNING: Variable "$value" is not imported at (eval 54) line 3.
2015.04.08 21:10:38 3: eval: my $EVTPART0='toggle';my $TYPE='FS20';my $EVENT='toggle';my $NAME='Roll_EG_K_Button';{
if ($NAME eq "Roll_EG_K_Button") {
  fhem("set Roll_EG_K up") if($value ("Roll_EG_K") eq "on");
  fhem("set Roll_EG_K down") if($value ("Roll_EG_K") eq "off");
  }
}
2015.04.08 21:10:38 1: PERL WARNING: Variable "$value" is not imported at (eval 54) line 4.
2015.04.08 21:10:38 3: eval: my $EVTPART0='toggle';my $TYPE='FS20';my $EVENT='toggle';my $NAME='Roll_EG_K_Button';{
if ($NAME eq "Roll_EG_K_Button") {
  fhem("set Roll_EG_K up") if($value ("Roll_EG_K") eq "on");
  fhem("set Roll_EG_K down") if($value ("Roll_EG_K") eq "off");
  }
}


Und hier die umgeschriebene DEF:

Roll_EG_K_Button:(toggle) {
if ($NAME eq "Roll_EG_K_Button") {
  fhem("set Roll_EG_K up") if($value ("Roll_EG_K") eq "on");
  fhem("set Roll_EG_K down") if($value ("Roll_EG_K") eq "off");
  }
}

Daedalus

Habe den Code nochmals signifikant geändert, bekomme aber leider dennoch kein Resultat:


Roll_EG_K_Button:(toggle) {
if ($NAME eq "Roll_EG_K_Button") {
  fhem("set Roll_EG_K up") if($VALUE ("Roll_EG_K") eq "closed");
  fhem("set Roll_EG_K down") if($VALUE ("Roll_EG_K") eq "open");
  }
}


Die Log bringt folgenden Output:


2015.04.09 08:28:49 3: Roll_EG_K_notify return value: Global symbol "$VALUE" requires explicit package name at (eval 100) line 3.
syntax error at (eval 100) line 3, near "$VALUE ("
Global symbol "$VALUE" requires explicit package name at (eval 100) line 4.
syntax error at (eval 100) line 4, near "$VALUE ("


Nur wie gebe ich dem Kameraden die Infos, die er will???

Daedalus

So, der Vormittag neigt sich dem Ende, aber mit folgendem Workaround kriege ich die Funktion zumindest mal auf eine Taste:


Roll_.*._Button:(on|off|toggle|dim.*) {
if ($NAME eq "Roll_EG_K_Button") {
  fhem("set Roll_EG_K up") if($EVENT eq "toggle") ;
  fhem("set Roll_EG_K down") if($EVENT eq "dimupdown") ;
  }
}


Nur wer könnte mir helfen um das Ganze nur noch über das "toggle" abzuwickeln und den Status des Rollantriebs hier mit einzubinden?

Daedalus

Sooo...

was lange währt:

um da auch persönlich nen Haken dran zu machen und für alle Interessierten die Lösung mitzuteilen, funktioniert es mit folgendem Code:


Roll_.*._Taster:(on|off|toggle|dim.*) {
if ($NAME eq "Roll_EG_K_Taster") {
  fhem("set Roll_EG_K up") if(ReadingsVal("Roll_EG_K","state",0) eq "down") ;
  fhem("set Roll_EG_K down") if(ReadingsVal("Roll_EG_K","state",0) eq "up") ;
  }
elsif ($NAME eq "Roll_EG_T_Taster")
...
...



--> Thema kann geclosed werden