FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: dero am 12 Juni 2014, 00:26:34

Titel: Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: dero am 12 Juni 2014, 00:26:34
Hi,

hier sind zwei Codeschnippsel:


define JAL_IFTHEN dummy
define JAL_IFTHEN_notify notify JAL_IFTHEN:.* { \
$EVENT =~ m/(.*):(@?)(.*):(.*)/;; \
my $jal= $1;; \
my $ifat = $2;; \
my $if= $3;; \
my $then= $4;; \
if( $ifat eq "@" ) {\
if( ReadingsVal( $jal, "pct", "UNDEF" ) eq $if ) { \
fhem( "set $jal $then" );; \
} \
} else { \
fhem( "set $jal $if ;; setreading $jal IFTHEN $if:$then" );; \
} }

define JAL_IFTHEN_watcher notify J_.*:.* { \
ReadingsVal( $NAME, "IFTHEN", "" ) =~ m/(.*):(.*)/;; \
my $if= $1;; \
my $then= $2;; \
if( ReadingsVal( $NAME, "pct", "UNDEF" ) eq $if ) { \
fhem( "setreading $NAME IFTHEN UNDEF;; set $NAME $then" );; \
} }


So wird es benutzt:

Sequentiell:
set JAL_IFTHEN J_SZ:0:3
-> Fährt die Jalousie J_SZ erst komplett auf 0 (zu) und wenn sie dort angekommen ist, dann auf 3 (gewendet). Das benutze ich abends, da bei mir diese Jalousie im zweiten Stock ist und man bei gewendeter Jalousie nicht reinschauen kann.

Bedingt:
set JAL_IFTHEN J_WLO:@1.5:1
-> Fährt die Jalousie J_WLO nur dann auf 1, wenn sie gerade auf 1.5 steht. Dadurch kann man schrittweise wenden.

Folgendes Beispiel fährt bei mir WLO um 14 Uhr runter und wendet sie halb (Lamellen stehen waagerecht), was bei steiler Sonnenstrahlung gut ist. Wenn sich die Sonne dann senkt, klappe ich schrittweise die Jalousie zu. Falls aber jemand zwischendurch die Position manuell geändert hat, so passiert nichts, da die Bedinung dann nicht stimmt.

define WLO1 at *14:00:00 set JAL_IFTHEN J_WLO:0:1.5
define WLO3 at *16:00:00 set JAL_IFTHEN J_WLO:@1.5:1
define WLO4 at *17:00:00 set JAL_IFTHEN J_WLO:@1:0.5
define WLO5 at *18:00:00 set JAL_IFTHEN J_WLO:@0.5:off
define WLO6 at *19:00:00 set J_WLO on


Schön wäre es allerdings, wenn man solche Spielereien direkt in den HM-Aktoren hätte...

dero
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: kvo1 am 12 Juni 2014, 08:31:36
Hi Dero,

keine schlechte Idee, Danke für das Beispiel

klaus
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: Bernd D. am 12 Juni 2014, 15:48:25
Hallo dero,

vielen Dank für Dein Beispiel. Damit kann ich jetzt auch endlich mal die sonnenstandgeführte Ansteuerung unserer Raffstore in Angriff nehmen.
Falls Du weitere Features einbaust, dann halte uns bitte auf dem Laufenden!
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: dero am 12 Juni 2014, 16:06:03
Gerne ;) Ja, ich steuer damit auch meine Raffstores. Gut wäre es noch, wenn jemand eine Formel hätte, mit der man den gewünschten Lamellenwinkel anhand der akutellen Uhrzeit berechnen könnte (90° zur Sonne o.ä.)...

dero
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: Deudi am 12 Juni 2014, 17:49:49
verschieben nach Codeschnipsel?  :)
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: martinp876 am 13 Juni 2014, 10:11:38
Hi,

das Einstellen der Drehung sehe ich auch als "fehlendes Feature". Mit dem Code kann man sicher etwas bewirken.

Generell ist das einstellen nicht einfach, will man es präzise machen. Das Setzen der Einstellung passiert prozentual zur Laufzeit - eine eingabe von Fahrzeiten ist "erst einmal" nicht möglich. Die Granulatität ist 0,5%, wie immer bei HM. Die Einstellung nach Winkel ist demnach schwer. Man kann messen, wieviel Prozent eine komplett-wendung braucht. Das ist von Rollo zu Rollo unterschiedlich, da es von der Länge des Rollo abhängt. Schliesslich wendet ein baugleiches Rafftor in der gleiche Zeit, die Prozente ergeben sich aber anhand der Gesamtlänge.

Eine zufriedenstellende Lösung sehe ich daher nur ein einer Zeitsteuerung. Und die kann man nach meinem Kenntnissstand nur über register erreichen.
Mein Vorschlag ist also, einen peer einrichten und die rotation machen lassen
1) man braucht einen dummy-virtuellen aktor mit einem Button oder einen button der vccu. Im folgenden als jalRotBtn bezeichnet

2) peeren mit allen Jalousien
set jalRotBtn peerChan 0 jal1 single
set jalRotBtn peerChan 0 jal2 single

......

3) register setzen (ich werde wohl ein HMInfo template anbieten)
set jal1 regSet prep shBlJtDlyOff   refOff jalRotBtn
set jal1 regSet prep shBlJtDlyOn    dlyOff jalRotBtn
set jal1 regSet prep shBlJtOff      dlyOff jalRotBtn
set jal1 regSet prep shBlJtOn       dlyOff jalRotBtn
set jal1 regSet prep shBlJtRampOff     off jalRotBtn
set jal1 regSet prep shBlJtRampOn       on jalRotBtn
set jal1 regSet prep shBlJtRefOff  rampOff jalRotBtn
set jal1 regSet prep shBlJtRefOn        on jalRotBtn
set jal1 regSet exec shMaxTimeF        0.2 jalRotBtn

# maxTimeF bei meiner Jalousie muss min 0.2 betragen, bei 0.1 passiert nichts.

4) steuern:
set jal1 press short jalRotBtn
>= die Jal1 wird 0.2sec nach unten gefahren. Nach 6mal fahren ist mein Rollo gewendet.


m.E. ist das die einzige allgemeine und zuverlässige Methode eine Drehung zu steuern.

Kommentare?

Gruss Martin

Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: Cybers am 20 Juni 2014, 08:38:50
kann mir einer sagen wie ich diese Funktion hier eingebunden bekomme?

attr Jalousie_Bad eventMap on:hoch off:runter 5:Sichtschutz

Den eigentlichen Codeschnipsel habe ich schon in meine fhem.cfg eingefügt, aber ich weiß nicht wie ich diese "Schließ-/Wendebefehl" set JAL_IFTHEN J_SZ:0:3 in meine obige eventmap-Zeile einfüge.
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: dero am 20 Juni 2014, 10:57:00
Achtung, die Codezeile

define JAL_IFTHEN_watcher notify J_.*:.

erwartet, dass alle Jalousien mit J_ beginnen. Du solltest sie daher in

define JAL_IFTHEN_watcher notify Jalousie_.*:.

ändern.

Probier dann mal, ob

set JAL_IFTHEN Jalousie_Bad:0:3

erst runterfährt und dann wendet. Es sollte nicht längern als 10-20 Sekunden dauern, bevor nach vollständigem Runterfahren dann gewendet wird.

dero
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: Ovi am 22 April 2015, 21:17:17
Hallo Martin,

ich versuche gerade das Stellen der Lamellen umzusetzen und möchte gerne deinen Vorschlag nutzen.
Leider verstehe ich nur teilweise, was die einzelnen Befehle bewirken, denn die Bedeutung der einzelnen Register habe ich noch nicht ganz durchblickt.

Zwei Fragen sind für mich im Moment noch offen:
1. Wie rufe ich das Wenden innerhalb der Applikation auf? Innerhalb der Parametrierseite des Aktors klappt es prima, aber wenn ich set og_sz_Rolladen_1 press short jalRotBtn in die Kommandozeile eingebe, passiert nichts.
2. verstehe ich richtig, dass deine Lösung nur das Wenden nach unten unterstützt? Was muss ich tun um das auch in die andere Richtung zu machen? Einen zweiten Dummy anlegen? Oder nur einen 2. Button? Welches Register muss dabei geändert werden?

Vorab vielen Dank!
Gruß, Martin
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: martinp876 am 23 April 2015, 20:44:22
Die idee beim wenden ist, das rollo eine fixe zeit in eine richtung zu fahren. Leider kenne ich kein kommando, dies zu tun. Die kommandos sind alle relativ und somit von der rollolaenge abhaengig. Das wird dann insbesondere bei langen rollos immer ungenauer.
In den registern, also als reaktion auf einen buttonpress kann man aber absolute zeiten eingeben. Da man nicht so viele tasten hat muss man also mit virtuellen arbeiten.
Erstens erstellst du virtuelle buttons und peerst diese. Du solltest die register im rollo sehen. Dann stellst du ein, dass das rollo in eine richtung fuer eine sehr kurze zeit fahren soll, zb 0,2s .
Das alles kannst du mit einem getconfig pruefen.
Nun kannst du mit an den aktor ein kommando schicken, das einen press des virtuellen simuliert. Das ist nicht der press selbst, der geht nur an ein device. Ein press wuerde an alle peers des button gehen, ein sehr wichtiger und gut einsetzbarer unterschied.
Der rollo sollte fahren, die ricbtung wird in den registwr festgelegt.

Ggf einmal logs schicken
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: bmwfan am 27 Mai 2015, 21:54:50
Hallo dero,
habe Deinen Code eingebaut, aber leider macht meine Jalousie keinen Mucks. Kannst Du bitte mal den Code anschauen, ob ich einen Fehler eingebaut habe?
define du_Jal dummy
attr du_Jal event-on-change-reading 1
define di_Jal DOIF ([du_Jal] eq "off") (set JAL_IFTHEN Jal_KU_Ost_03:0:3)

define JAL_IFTHEN dummy
define JAL_IFTHEN_notify notify JAL_IFTHEN:.* { \
$EVENT =~ m/(.*):(@?)(.*):(.*)/;; \
my $jal= $1;; \
my $ifat = $2;; \
my $if= $3;; \
my $then= $4;; \
if( $ifat eq "@" ) {\
if( ReadingsVal( $jal, "pct", "UNDEF" ) eq $if ) { \
fhem( "set $jal $then" );; \
} \
} else { \
fhem( "set $jal $if ;; setreading $jal IFTHEN $if:$then" );; \
} }

define JAL_IFTHEN_watcher notify Jal_.*:.* { \
ReadingsVal( $NAME, "IFTHEN", "" ) =~ m/(.*):(.*)/;; \
my $if= $1;; \
my $then= $2;; \
if( ReadingsVal( $NAME, "pct", "UNDEF" ) eq $if ) { \
fhem( "setreading $NAME IFTHEN UNDEF;; set $NAME $then" );; \
} }


Erklärung: Den du_Jal dummy schalte ich über set auf on bzw. off, um das DOIF zu triggern und damit den Schließbefehl auszusenden.

Der Aktor ist ein HMW_LC_Bl1_DR, der auf dem Kanal 3 (Jal_KU_Ost_03) angesteuert wird.
Das log-file des Aktors hat keinen Inhalt, der von dem Schliessbefehl herrührt. Es scheint so, als ob er gar nicht ankommt. Klammerfehler o.ä.?

Im log-file finde ich das, wobei ich nicht im geringsten deuten kann, ob das von dem Versuch des Schliessens oder vom üblichen Betrieb kommt.
Zitat2015.05.27 21:36:21 4: HM485_LAN: TX: (168) I[0](0,Y,F,B)(98) 00000001 -> 0001076C [3] 68(h)
2015.05.27 21:36:21 4: HM485_LAN: TX: (169) I[1](0,F,B)(1A) 00000001 -> 0001076C [3] 6E(n)
2015.05.27 21:36:21 4: HM485_LAN: TX: (170) I[2](0,F,B)(1C) 00000001 -> 0001076C [3] 76(v)

2 015.05.27 21:36:25 3: HM485: Request config for device 0001076C
2015.05.27 21:36:25 4: HM485_LAN: TX: (177) I[3](0,F,B)(1E) 00000001 -> 0001076C [6] 52(R) 000010
2015.05.27 21:36:25 4: HM485_LAN: TX: (178) I[0](0,F,B)(18) 00000001 -> 0001076C [6] 52(R) 001010
2015.05.27 21:36:25 4: HM485_LAN: TX: (179) I[1](0,F,B)(1A) 00000001 -> 0001076C [6] 52(R) 002010
2015.05.27 21:36:26 4: HM485_LAN: TX: (180) I[2](0,F,B)(1C) 00000001 -> 0001076C [6] 52(R) 003010
2015.05.27 21:36:26 4: HM485_LAN: TX: (181) I[3](0,F,B)(1E) 00000001 -> 0001076C [6] 52(R) 004010
2015.05.27 21:36:26 4: HM485_LAN: TX: (182) I[0](0,F,B)(18) 00000001 -> 0001076C [6] 52(R) 005010
2015.05.27 21:36:26 4: HM485_LAN: TX: (183) I[1](0,F,B)(1A) 00000001 -> 0001076C [6] 52(R) 006010
2015.05.27 21:36:26 4: HM485_LAN: TX: (184) I[2](0,F,B)(1C) 00000001 -> 0001076C [6] 52(R) 007010
2015.05.27 21:36:26 4: HM485_LAN: TX: (185) I[3](0,F,B)(1E) 00000001 -> 0001076C [6] 52(R) 008010
2015.05.27 21:36:26 4: HM485_LAN: TX: (186) I[0](0,F,B)(18) 00000001 -> 0001076C [6] 52(R) 009010
2015.05.27 21:36:26 4: HM485_LAN: TX: (187) I[1](0,F,B)(1A) 00000001 -> 0001076C [6] 52(R) 00A010
2015.05.27 21:36:26 4: HM485_LAN: TX: (188) I[2](0,F,B)(1C) 00000001 -> 0001076C [6] 52(R) 00B010
2015.05.27 21:36:26 4: HM485_LAN: TX: (189) I[3](0,F,B)(1E) 00000001 -> 0001076C [6] 52(R) 00C010
2015.05.27 21:36:26 4: HM485_LAN: TX: (190) I[0](0,F,B)(18) 00000001 -> 0001076C [6] 52(R) 00D010
2015.05.27 21:36:26 4: HM485_LAN: TX: (191) I[1](0,F,B)(1A) 00000001 -> 0001076C [6] 52(R) 00E010
2015.05.27 21:36:26 4: HM485_LAN: TX: (192) I[2](0,F,B)(1C) 00000001 -> 0001076C [6] 52(R) 00F010
2015.05.27 21:36:26 3: HM485: Request config for device 000107E1
2015.05.27 21:36:26 4: HM485_LAN: TX: (193) I[3](0,F,B)(1E) 00000001 -> 0001076C [6] 52(R) 010010
2015.05.27 21:36:26 4: HM485_LAN: TX: (194) I[0](0,F,B)(18) 00000001 -> 0001076C [6] 52(R) 011010
2015.05.27 21:36:27 4: HM485_LAN: TX: (195) I[1](0,F,B)(1A) 00000001 -> 0001076C [6] 52(R) 012010
2015.05.27 21:36:27 4: HM485_LAN: TX: (196) I[2](0,F,B)(1C) 00000001 -> 0001076C [6] 52(R) 013010
2015.05.27 21:36:27 4: Connection closed for FHEMWEB:192.168.178.61:50401: EOF
2015.05.27 21:36:27 4: HTTP FHEMWEB:192.168.178.61:50403 GET /fhem?cmd=style%20edit%20fhem.cfg
2015.05.27 21:36:27 4: 7464:FHEMWEB:192.168.178.61:50403: /fhem?cmd=style%20edit%20fhem.cfg / RL:5757 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2015.05.27 21:36:27 4: HM485_LAN: TX: (197) I[3](0,F,B)(1E) 00000001 -> 0001076C [6] 52(R) 014010
2015.05.27 21:36:27 4: HTTP FHEMWEB:192.168.178.61:50398 GET /fhem/pgm2/jquery-ui.min.css

Das geht dann bis TX: (241) hoch.

Hast Du eine Idee, was ich falsch mache?

Gruß Jürgen
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: cocojambo am 14 September 2016, 10:33:06
@dero

auch wenn das Thema schon über 1 Jahr alt ist, hoffe ich es liest doch jemand. Ich habe den Code unverändert in die FHEM.cfg übernommen und dann den Befehl eingegeben.
set JAL_IFTHEN Jalousie_Fenster:0:3
Die Jalousie fährt runter, aber dann passiert nix, auch nicht im Event Monitor.

Woran kann das liegen?
Gruß aus Köln
Norbert
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: Otto123 am 14 September 2016, 10:42:48
Zitat von: dero am 20 Juni 2014, 10:57:00
Achtung, die Codezeile

define JAL_IFTHEN_watcher notify J_.*:.

erwartet, dass alle Jalousien mit J_ beginnen. Du solltest sie daher in

define JAL_IFTHEN_watcher notify Jalousie_.*:.

ändern.

Ich habe nur Interessehalber mitgelesen und ansonsten keine Ahnung von dem Codeschnipsel, den Fakt oben hast Du beachtet?

Gruß Otto
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: cocojambo am 15 September 2016, 14:41:03
Ich möchte jede Jalousie einzeln ansteuern und wenden, weil Sie unterschiedliche Lauf- und Wendezeiten haben, deshalb habe ich auch den Befehl
set JAL_IFTHEN Jalousie_Fenster:0:3
verwendet um gezielt diese Jalousie runterzufahren und zu wenden. Der Codeschnipsel nimmt ja auch den Befehl teilweise an und die Jalousie fährt runter aber wendet nicht.
Wenn hier keiner weiß, muß ich evtl. mal dem Ersteller eine PM schicken, das der mal ein Blick drauf wirft.
Gruß aus Köln
Norbert
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: Otto123 am 15 September 2016, 15:00:58
Hallo Norbert,

eventuell verstehst Du mich falsch. Das Codeschnipsel hat zwei Teile, der zweite Teil ist ein notify welches wahrscheinlich dafür zuständig ist am Ende die Jalousie zu wenden. Diese notify geht davon aus, dass die Jalousien die überwacht werden mit J_ beginnen.
Wenn Du den Codeschnipsel so genommen hast wie er ist, deine Jalousien aber mit Jalousie und nicht mit J_ beginnen, funktioniert das notify nicht.
Deswegen passiert am Ende nichts, ist meine Vermutung.

Gruß Otto 
Titel: Antw:Jalousienaktoren -- sequentielle und bedingte Fahranweisungen
Beitrag von: m2privat am 12 Dezember 2020, 11:35:55
Guten Morgen zusammen,

ich rufe dieses Thema erneut auf, da ich aktuell folgende Fehler im LOG angezeigt bekomme:

PERL WARNING: Use of uninitialized value $ifl in string eq at (eval 112) line 5.
2020.12.12 07:27:53 3: eval: my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{
   ReadingsVal( $NAME, "IFTHEN", "" ) =~ m/(.*):(.*)/;
   my $ifl= $1;
   my $thenl= $2;
   if( ReadingsVal( $NAME, "pct", "UNDEF" ) eq $ifl ) {
      fhem( "setreading $NAME IFTHEN UNDEF; set $NAME $thenl" );
   } }
2020.12.12 07:27:53 1: stacktrace:
2020.12.12 07:27:53 1:     main::__ANON__                      called by (eval 112) (5)
2020.12.12 07:27:53 1:     (eval)                              called by fhem.pl (1142)
2020.12.12 07:27:53 1:     main::AnalyzePerlCommand            called by fhem.pl (1171)
2020.12.12 07:27:53 1:     main::AnalyzeCommand                called by fhem.pl (1098)
2020.12.12 07:27:53 1:     main::AnalyzeCommandChain           called by ./FHEM/91_notify.pm (121)
2020.12.12 07:27:53 1:     main::notify_Exec                   called by fhem.pl (3810)
2020.12.12 07:27:53 1:     main::CallFn                        called by fhem.pl (3727)
2020.12.12 07:27:53 1:     main::DoTrigger                     called by fhem.pl (4097)
2020.12.12 07:27:53 1:     main::Dispatch                      called by ./FHEM/00_CUL.pm (953)
2020.12.12 07:27:53 1:     main::CUL_Parse                     called by ./FHEM/00_CUL.pm (831)
2020.12.12 07:27:53 1:     main::CUL_Read                      called by fhem.pl (3810)
2020.12.12 07:27:53 1:     main::CallFn                        called by fhem.pl (755)

Kann mir einer dabei helfen?

Soweit funktioniert es, dass die Jalousien gekippt werden.

Danke.