Rolladen zu und Lamellen quer stellen (Homematic)

Begonnen von mmatt, 08 Mai 2013, 08:39:22

Vorheriges Thema - Nächstes Thema

mmatt

Hallo
Ich versuche gerade an einem Rolladen mit Homematic.
Ich würde gerne eine "leichte Beschattung" einbauen. Das heisst
dass der Rolladen komplet herunter (zu) ist und die Lamellen quer stehen.

Mein erster Gedanke war: mit "set Rolladen 0" den Rolladen herunterfahren, dann warten bis der Rolladen ganz herunter ist. Dannach mit "set Rolladen 3" den Rolladen wieder etwas hochfahren, dammit sich die Lamellen quer stellen.

Ist nicht ganz trivial, da der Rolladen zuerst ja irgendwo stehen kann, und nach "set Rolladen 0" unterschiedliche Zeiten haben kann um ganz nach unten zu fahren.
Müsste etwas mit einem Reading (auf dem Rolladen) sein um zu sehen, wann der Rolladen ganz unten ist.

Über Anregungen würde ich mich freuen
Gruss Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

MisterEltako

Hi!

Aber ist dazu nicht "regSet DriveTurn" gedacht?

MfG, MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

mmatt

Danke für die Antwort

Mit "regSet DriveTurn" stellt man doch nur das Register vom Aktor für das Umkehren.

Einen Befehl wie "DriveTurn" das nur die Lamellen kippt gibt es (so glaube ich) nicht ?

Gruss Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

mmatt

in der Mittagspause habe ich mir follgendes ausgedacht:
sub
BeschattungTest($)
{
  my $aktorname=shift;
  my $level=readingsVal($aktorname,"level","keinWert");
  #Rolladen ganz herunterfahren
  set $aktorname 0;
  # auf Rolladen warten bis ganz heruntergefahren
  while($level ne "0%")
  {
   $level=readingsVal($aktorname,"level","keinWert");
  }
  #Lamellen umstellen
  set $aktorname 3;
 }


Wobei ich nicht wirklich weiss, ob das funktioniert.

Gruss Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

MisterEltako

noch Syntaxänderungen: :o)

Beschattung($)
{
  my $aktorname=shift;
  my $level=readingsVal("$aktorname","level","keinWert");
  #Rolladen ganz herunterfahren
 fhem("set $aktorname 0");
  # auf Rolladen warten bis ganz heruntergefahren
  while($level ne "0 %")
  {
   $level=readingsVal("$aktorname","level","keinWert");
  }
  #Lamellen umstellen
  fhem("set $aktorname 3");
 }


Direkt einen Befehl zum Wenden gibt es m.W. nicht, ich denke das regSet driveTurn die Wendezeit zum Öffnen der Lamellen ist. Also wird das so provisorisch funktionieren. Ich habe alles Rollläden, kann es also nur bedingt testen. Ich habe das so ähnlich mit dem Öffnen der Lüftungsschlitze gemacht.

MfG,MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

mmatt

Danke für die Hilfe

Noch eine kleine Syntaxänderung
Beschattung($)
{
  my $aktorname=shift;
  my $level=ReadingsVal("$aktorname","level","keinWert");
  #Rolladen ganz herunterfahren
  fhem("set $aktorname 0");
  # auf Rolladen warten bis ganz heruntergefahren
  while($level ne "0 %")
  {
    $level=ReadingsVal("$aktorname","level","keinWert");
  }
  #Lamellen umstellen
  fhem("set $aktorname 3");
}

Beim ersten Test ist der Rolladen bis ganz heruntergefahren, dannach hat sich FHEM komplett weggehängt. Ist wohl in der while-Schleife hängengeblieben. Konnte FHEM nicht mal über die Konsole stoppen. :-(

Denke FHEM mag kein ReadingsVal() in einer While-Schleife ?

Vielleicht müsste man noch ein sleep() Befehl innerhalb While einbauen ?
Ein Timeout, falls der Aktor nicht reagiert währe wohl auch nicht verkehrt ?

Gruss Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

justme1968

da fhem single threaded ist wird es durch die while schleife blockiert und bekommt keine änderungen mehr von außen mit. d.h. deine while schleife läuft unendlich.

definiere dir ein (temporäres) notify das nach dem der rollo unten ist wieder ein stueck zurueck fährt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mmatt

Zitat von: justme1968 schrieb am Mo, 13 Mai 2013 07:38da fhem single threaded ist wird es durch die while schleife blockiert und bekommt keine änderungen mehr von außen mit. d.h. deine while schleife läuft unendlich.
Ok, ist eine logische Erklärung. Wieder was gelernt.

Zitatdefiniere dir ein (temporäres) notify das nach dem der rollo unten ist wieder ein stueck zurueck fährt.
Leichter gesagt, als getan. Hast Du mir da Starthilfe, wie das aussehen könnte.

Gruss Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

mmatt

Würde das gehen ?

in der fhem.cfg:
define notify_Rolladen_Beschattung notify dummy_Rolladen_Beschattung:EIN {Beschattung("CUL_HM_Rolladen_Buero")}

in der 99_Utils.pm:
sub
Beschattung($)
{
 my $aktorname=shift;
 #Rolladen ganz herunterfahren
 fhem("set $aktorname 0");
 #Lamellen umstellen
 define notify_Temp notify $aktorname {if (ReadingsVal ("$aktorname","level","keinWert") eq "0 %") {fhem ("set $aktorname 3")};
}


Bin mir nicht sicher, ob man ein notify in der 99_Utils.pm (temporär) definieren kann , dieses auch nur ausgeführt wird, wenn die Funktion Beschattung()aus der fhem.cfg heraus aufgerufen wird. ?
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

justme1968

habe grad keine zeit es genauer zu probieren. aber noch ein paar hinweise:

- natürlich kannst du ein notify da definieren. du musst es aber als fehm kommando ausführen also fhem("define ...")
- wenn das notify nur temporär sein soll musst du es von hand wieder löschen. am besten am ende des notify.
- du kannst das notify direkt auf AUS (ich vermute mal das heisst bei dir so) ansprechen lassen. dann brauchst du nicht mit readingsval den wert prüfen.
- ich würde erst das notify definieren und dann den dollo runter fahren. das macht in diesem fall aber vielleicht auch keinen unterschied.
- eigentlich müsste man noch motor stop abfangen und das notify dann löschen. sonst bleibt es aktiv wenn der rollo z.b. zwischendruch per hand gestoppt wird.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mmatt

Etwa in der Art ?

sub
Beschattung($)
{
 my $aktorname=shift;
 #Rolladen ganz herunterfahren
 fhem("set $aktorname close");
 #Lamellen umzstellen
 fhem("define notify_Temp notify $aktorname:close set $aktorname 3, delete notify_Temp");
}

wobei der "motor stop" hier noch nicht berücksichtigt ist.
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

MisterEltako

Ich würde bei deinem ReadingsVal bleiben, da oft im Status Set_1 oder ähnliches steht und "level" hier den "exakten" Stand der Jalousie zeigt.
Das Löschen des "define" könnte so aus sehen:


define notify_Rolladen_Beschattung notify dummy_Rolladen_Beschattung:EIN {Beschattung("CUL_HM_Rolladen_Buero")}


in der 99_Utils.pm:

sub
Beschattung($)
{
 my $aktorname=shift;
 #Rolladen ganz herunterfahren
 fhem("set $aktorname 0");
 #Lamellen umstellen
 fhem("define notify_Temp notify $aktorname {
   if (ReadingsVal ("$aktorname","level","keinWert") eq "0 %") {
     fhem("set $aktorname 3");
     fhem("define Stop_Rollo at +00:00:30 delete notify_Temp");
   }
 }
}

Vielleicht noch 00:00:30 auf deine gewünschte Laufzeit anpassen.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

mmatt

Danke für die Antworten

Ich bleibe mal bei der Variante "Readings"
bei:
sub
Beschattung($)
{
my $aktorname=shift;
#Rolladen ganz herunterfahren
fhem("set $aktorname 0");
#Lamellen umstellen
fhem("define notify_Temp notify $aktorname {
if (ReadingsVal ("$aktorname","level","keinWert") eq "0 %") {
fhem("set $aktorname 3");
fhem("define Stop_Rollo at +00:00:30 delete notify_Temp");
}
}
}

bekomme ich:
Can't find string terminator '"' anywhere before EOF at ./FHEM/99_Utils.pm line 236.

Und ich sehe den Fehler nicht. Sieht doch ganz ok aus ?

Grüsse Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

MisterEltako

Ok, da fehlte noch: ");;\

sub
Beschattung($)
{
my $aktorname=shift;
#Rolladen ganz herunterfahren
  fhem("set $aktorname 0");
#Lamellen umstellen
  fhem("define notify_Temp notify $aktorname {
     if (ReadingsVal ("$aktorname","level","keinWert") eq "0 %") {
         fhem("set $aktorname 3");
         fhem("define Stop_Rollo at +00:00:30 delete notify_Temp");
     }
  }");;\
}


MfG, MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

mmatt

Nochmals Danke für Deine Hilfe (welche ich leider immer noch benötige)
Der FHEM/PERL Syntax macht mir schon arg zu schaffen.

mit:
sub
Beschattung($)
{
my $aktorname=shift;
#Rolladen ganz herunterfahren
  fhem("set $aktorname 0");
#Lamellen umstellen
  fhem("define notify_Temp notify $aktorname {
     if (ReadingsVal ("$aktorname","level","keinWert") eq "0 %") {
         fhem("set $aktorname 3");
         fhem("define Stop_Rollo at +00:00:30 delete notify_Temp");
     }
  }");;\
}

-> Syntaxfehler
syntax error at ./FHEM/99_Utils.pm line 234, near "if (ReadingsVal ("$aktorname" syntax error at ./FHEM/99_Utils.pm line 239, near "}"


Versucht habe ich auch:
sub
Beschattung($)
{
my $aktorname=shift;
#Rolladen ganz herunterfahren
fhem("set $aktorname 0");
#Lamellen umstellen
fhem("define notify_Temp notify $aktorname if (ReadingsVal($aktorname,level,keinWert) eq 0 %) set $aktorname 3");
#Notify löschen
    fhem("define at_delete_notify at +00:00:30 delete notify_Temp");
}

-> kein Syntaxfehler aber bei Ausführung:
2013.05.14 09:19:45 3: notify_Temp return value: Unknown command if, try help

Gruss Martin
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM