Rollladenaktor HM-LC-Bl1PBU-FM toggle

Begonnen von Vladi2010, 21 Mai 2013, 07:39:16

Vorheriges Thema - Nächstes Thema

Vladi2010

Hallo zusammen, wenn ich an meinem Rollladenaktor folgenden Befehl ausführe:

set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle

fährt die Roulade rauf bzw. runter in die Endposition.

kann mir jemand sagen wie ich es mache dass die Roulade stoppt?

ich wollte auf meiner Fernbedienung damit einen Taste belegen.

danke für eure Hilfe

Andreas



MisterEltako

set <Jalousie> stop

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

Vladi2010

Hallo, danke für die erste Antwort

mit den zwei befehlen würde ich au der Fernbedienung zwei tastn belägen:

set <Jalousie> toggle
set <Jalousie> stop

ich hatte aber eigentlich eine ein Tasten Lösung gedacht

Runter --> Stop ---> Rauf--|
   ^                            
   |--------------------------|

gibt es da keine Lösung ?

Grüße Andreas

martinp876

Hallo Andreas,
klar gibt es eine Loesung - und natuerlich nicht nur eine.
Erst einmal die Fakten auf den Tisch:
Du redest von einer HM fernbedienung? oder einer fremden?
Wenn es eine HM ist - willst du direkt peeren oder es von der Zentrale abhaengig machen?
willst du zwischen lang und kurz gedrueckt unterscheiden?
Der Klassiker einer ein-tasten bedienung waere wohl: peere deine HM-taste mit peerChan und parameter 'single' mit deinem Rollo. Dann sollte es eigentich schon fast fertig sein. ggf. musst du noch ein bischen an der Statemachine optimieren. Langer Tastendruck faehrt so lange bis du los laesst. beim naechsten Mal wird die Richtung geaendert. Kurzer Tastendruck macht ein toggle

Wenn du es mit fhem loesen willst musst du den Zustand des motors einbeziehen.
wenn 'motor' eq 'stop' schicke ein 'toggle'
ansonsten schicke ein 'stop'

Gruss Martin

Vladi2010

ich habe FS20 Fernbedinungen...

da ich ältere Personen im Haushalt habe die die Tasten manchmal Kurz manchmal lang betätigen wäre es am besten wenn kurz oder lang kein Unterschied machen würde

am besten wäre denke ich, Taste A=Stop; Taste A=Runter; Taste A=Stop; Taste A=Rauf .... Wiederholung

martinp876

Hi Andreas,
ok - beleiben noch ein paar Moeglichkeiten:

Grundsaetzlich
a) alles über FHEM und ein notify
b) ueber einen simulierten HM schalter (virtual Button)

a) ist eigentlich elegant - hat aber das Problem des Umschaltens. FHEM weiss erst ob der Motor steht, wenn der Aktor dies gemeldet hat. Man kann also
a1) mit den Verzögerungen leben und bei schnellem Drücken evtl Probleme bekommen
a2) Das Schalten des FS20 und den letzten Zustand in notifies nachbilden und quasi mitzaehlen. Somit wäre das Drücken der lokalen Tasten nicht berücksichtigt.
a3) a1 und a2 mischen, was relativ komplex wird

b) bedarf der Programmierung des Bl1PBU. Vorteil ist, dass der Bl1 immer seinen Zustand kennt. Somit waere das die stabilste Lösung, muss man aber etwas mehr aufpassen...

Lange Vorrede, hier ein Versuch zu a1)
habe den Bl1... einmal "Bl1" genannt - musst du den korrekten Namen einsetzen, evtl CUL_HM_HM_LC_Bl1PBU_FM_1F0033

define nf notify <fs20Trigger> {\
my $mot = ReadingsVal('Bl1','motor','');;\
if($mot ne 'stop'){fhem(set Bl1 stop)}\
else{fhem(set Bl1 toggle)};;\
}

Nicht getestet, hoffe auf wenig tipfehler. Ich denke, das Prinzip kannst du erkennen?

Falls du die komplexer Lösung b) brauchst muessen wir einmal experimentieren.

Gruss Martin

Vladi2010

habe es so gemacht:

define nf notify FS20_d78407:off {\my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\if($mot ne 'stop'){fhem(set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop)}\else{fhem(set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle)};;\}

leider tut sich nichts  :-(

Log:
2013.05.22 23:47:29 1: Including ./log/fhem.save
2013.05.22 23:47:33 3: nf return value: Can't modify single ref constructor in scalar assignment at (eval 48) line 1, at EOF
syntax error at (eval 48) line 1, near "\if"
syntax error at (eval 48) line 1, near "\else"

2013.05.22 23:47:33 3: Device CUL_HM_HM_SEC_RHS_1E92F9 added to ActionDetector with 028:00 time
2013.05.22 23:47:36 3: nf return value: Can't modify single ref constructor in scalar assignment at (eval 50) line 1, at EOF
syntax error at (eval 50) line 1, near "\if"
syntax error at (eval 50) line 1, near "\else"

2013.05.22 23:47:38 3: nf return value: Can't modify single ref constructor in scalar assignment at (eval 51) line 1, at EOF
syntax error at (eval 51) line 1, near "\if"
syntax error at (eval 51) line 1, near "\else"

2013.05.22 23:47:41 3: nf return value: Can't modify single ref constructor in scalar assignment at (eval 52) line 1, at EOF
syntax error at (eval 52) line 1, near "\if"
syntax error at (eval 52) line 1, near "\else"



ich habe eventuell aber noch eine Idee:

könnte man durch drücken des Tasters FS20_d78407:off, immer zwei Befehle gleichzeitig "im Kreis" auslösen ?   (STOP und STOP)-> (STOP und Rauf)-> ( STOP und Runter)  usw.

Danke für deine Hilfe

Grüße Andreas

Vladi2010

nun hab ich es so versucht:
define nf notify FS20_d78407:off {\my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\
if($mot ne 'stop'){fhem(set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop)}\
else{fhem(set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle)};;\}

folgende Fehlermeldung kommt:

LOG:
013.05.23 01:35:29 3: Device CUL_HM_HM_SEC_RHS_1E92F9 added to ActionDetector with 028:00 time
2013.05.23 01:35:43 2: IT set Steckdose_M5 off
2013.05.23 01:35:44 3: FHT8V set Stellantrieb_Wochnzimmer valve 0
2013.05.23 01:35:58 3: nf return value: Can't modify single ref constructor in scalar assignment at (eval 212) line 1, at EOF
syntax error at (eval 212) line 1, at EOF
Bareword "stop" not allowed while "strict subs" in use at (eval 212) line 1.
Bareword "toggle" not allowed while "strict subs" in use at (eval 212) line 1.

martinp876

Hallo Andreas,

da fehlen die ""
den \ brauchst du nur, wenn du den code in der naechsten Zeile fortsetzen willst.
Ausserden kommt bei "motor" nicht nur 'stop' zurueck sondern noch mehr, der level. Also muss man nicht mit eq abfragen... sondern mit match

define nf notify FS20_d78407:off {\
my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\
if($mot =~ m"stop"){fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop")}\
else{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle")};;\
}

oder unleserlich in einer Zeile
define nf notify FS20_d78407:off {my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;if($mot =~ m"stop"){fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop")}else{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle")};;}

Gruss Martin

Vladi2010

habe das eingefügt:

define nf notify FS20_d78407:off {\
my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\
if($mot =~ m"stop"){fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop")}\
else{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle")};;\
}

es tut sich leider nichts

LOG

2013.05.23 09:07:43 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 09:07:45 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 09:07:46 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 09:09:26 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 09:09:31 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 09:09:36 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1

martinp876

sorry, nicht nachgedacht.

Die Bedingung lautet (falsch) dass, wenn  'stop' bei motor kommt soll stop gesendet werden.
daher sendet der code jetzt immer stop, wenn schon stop ist

Muss natuerlich umgekehrt sein, also

define nf notify FS20_d78407:off {\
my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\
if($mot !~ m"stop"){fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop")}\
else{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle")};;\
}

Vladi2010

ES tut sch etwas :)

habe deine Letzte Version genommen

jetzt Fährt die Rollade Runter und Stopp  allerdings fährt sie nicht hoch

LOG:

2013.05.23 11:54:42 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle rxt:1
2013.05.23 11:54:45 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 11:54:46 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle rxt:1
2013.05.23 11:54:48 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1
2013.05.23 11:54:51 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 toggle rxt:1
2013.05.23 11:54:53 2: CUL_HM set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop rxt:1

ich bin wirklich dankbar für deine Mühe

martinp876

Hi,

ok, ist klar soweit. Toggle soll zwischen on/off hin und her schalten. Zum toggeln zwischen up/down ist es nicht gemacht. Es schaltet bei zwischenwerten immer erst aus, dann an. Aus ist beim Rollo (leider) unten.

Du kannst das Toggle aber so bauen:

define ld dummy # zwischenvariable die sich merkt, wohin es letztes mal ging

define nf notify FS20_d78407:off {\
my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\
if($mot !~ m"stop"){fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop")}\
else{\
if (Value("ld") ne "off"){\
      fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 off");;\
      fhem("set ld off");;}\
}else{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 on");;\
      fhem("set ld on");;}\
};;\
}

Vladi2010

habe es so gemacht, soweit ich es aus der LOG Verstehe ist etwas mit den klammern oder Anführungsstrichen nicht in Ordnung, selber kann ich es aber auch überhaupt nicht :-(

2013.05.23 13:04:11 3: nf return value: syntax error at (eval 1304) line 1, near "}else"
syntax error at (eval 1304) line 1, near "} }"
Unmatched right curly bracket at (eval 1304) line 1, at end of line

2013.05.23 13:04:17 3: nf return value: syntax error at (eval 1305) line 1, near "}else"
syntax error at (eval 1305) line 1, near "} }"
Unmatched right curly bracket at (eval 1305) line 1, at end of line

2013.05.23 13:04:23 3: nf return value: syntax error at (eval 1306) line 1, near "}else"
syntax error at (eval 1306) line 1, near "} }"
Unmatched right curly bracket at (eval 1306) line 1, at end of line

martinp876

ja, war eine zu viel geschlossen

define nf notify FS20_d78407:off {\
my $mot = ReadingsVal('CUL_HM_HM_LC_Bl1PBU_FM_1F0033','motor','');;\
if($mot !~ m"stop"){fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 stop")}\
else{\
if (Value("ld") ne "off"){\
      fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 off");;fhem("set ld off");;\
}else{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_1F0033 on");;fhem("set ld on");;}\
};;\
}