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
Hi Dero,
keine schlechte Idee, Danke für das Beispiel
klaus
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!
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
verschieben nach Codeschnipsel? :)
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
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.
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
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
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
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
@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
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
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
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
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.