Problem mit FSB12 und "position"

Begonnen von Bitzer, 18 Juli 2013, 15:05:08

Vorheriges Thema - Nächstes Thema

Bitzer

Hallo,

ich habe ein Problem beim Befehl "Postition". Ich verwende diesen um die Rollos in eine Beschattungsstellung zu fahren.

set Rolladen_Kueche_Tuer position 50

Das Problem ist dass meistens erstmal nichts passiert, außer dass laut log der Befehl gesendet wurde und die states entsprechend geändert werden.

Logeintrag:
2013.07.18 14:53:59 2: EnOcean: set Rolladen_Kueche_Tuer position

nach einem
set Kueche_Rolladen_Tuer opens

und Wiederholung des obigen Befehls fährt der Rolladen dann in die gewünschte Position. Alle anderen Kommandos wie opens, closes funktionieren auf Anhieb.

Hat jemand eine Idee was das Problem sein könnte?

Danke und Gruß
Oli


Hier noch die Definition des Rollos in der fhem.cfg

define Rolladen_Kueche_Tuer EnOcean FF810725
attr Rolladen_Kueche_Tuer eventMap /opens:Auf/position 50:50/closes:Zu/
attr Rolladen_Kueche_Tuer fp_Erdgeschoss 854,601,5,
attr Rolladen_Kueche_Tuer group EG
attr Rolladen_Kueche_Tuer manufID 00D
attr Rolladen_Kueche_Tuer model FSB12
attr Rolladen_Kueche_Tuer room 04_EG,02_Rolladen
attr Rolladen_Kueche_Tuer shutTime 30
attr Rolladen_Kueche_Tuer subType manufProfile
attr Rolladen_Kueche_Tuer webCmd Auf:50:Zu:stop
define FileLog_Rolladen_Kueche_Tuer FileLog ./log/Rolladen_Kueche_Tuer-%Y.log Rolladen_Kueche_Tuer
attr FileLog_Rolladen_Kueche_Tuer logtype text
attr FileLog_Rolladen_Kueche_Tuer room EnOcean

Bitzer

Hallo,

habe jetzt selbst herausgefunden, dass das oben beschrieben Verhalten dann auftritt, wenn STATE und das Reading "postition" nicht zusammenpassen, also z.B. STATE ist opens und position ist 100. Das kann bei mir vorkommen, weil ich die Hardwareschalter über ein notify überwache und den Status in FHEM mit SETSTATE anpasse um immer den aktuellen Zustand in FHEMWeb sehen zu können (Unidirektionaler Aktor FSB12)
Wenn ich nun das Rollo einmal über FHEM z.B. schließe und anschließend mit dem Hardwareschalter wieder öffne ergibt sich die beschriebene Inkonsistenz, danach laufen weitere positions-kommandos ins Leere.

Bei SET wird scheinbar STATE und POSITION aktualisiert. Bei SETSTATE wird nur STATE aktualisiert, POSITION bleibt unverändert. Wäre es nicht besser hier das gleiche Verhalten wie bei SET zu haben, oder gibt es Gründe die dagegensprechen?

Würde mich freuen wenn Klaus dazu mal Stellung nehmen würde.

Danke und schönes Wochenende.
Oli

klaus.schauer

Zitat von: Bitzer schrieb am Fr, 26 Juli 2013 12:15Hallo,

habe jetzt selbst herausgefunden, dass das oben beschrieben Verhalten dann auftritt, wenn STATE und das Reading "postition" nicht zusammenpassen, also z.B. STATE ist opens und position ist 100. Das kann bei mir vorkommen, weil ich die Hardwareschalter über ein notify überwache und den Status in FHEM mit SETSTATE anpasse um immer den aktuellen Zustand in FHEMWeb sehen zu können (Unidirektionaler Aktor FSB12)
Wenn ich nun das Rollo einmal über FHEM z.B. schließe und anschließend mit dem Hardwareschalter wieder öffne ergibt sich die beschriebene Inkonsistenz, danach laufen weitere positions-kommandos ins Leere.

Bei SET wird scheinbar STATE und POSITION aktualisiert. Bei SETSTATE wird nur STATE aktualisiert, POSITION bleibt unverändert. Wäre es nicht besser hier das gleiche Verhalten wie bei SET zu haben, oder gibt es Gründe die dagegensprechen?

Würde mich freuen wenn Klaus dazu mal Stellung nehmen würde.

Danke und schönes Wochenende.
Oli
Ich werde versuchen in die "position" Routine Abfragen des aktuellen Öffungszustands der Rollos einzubauen und damit. Bitte aber etwas Geduld, ich habe augenblicklich wenig Zeit für die Programmierung an dem Fhem-Modul.

karpate

Hallo Oli,
Kannst ein Beispiel für das notify für den Hardware-Schalter posten. Ich verwnde auch den unidirektionalen FSB12.

Danke und Gruß ingo
# Pi3 (BBB;FB7390)
# TCM310, CUL V4, HM-CFG-LAN,JeeLink,Tradfri,ESP32-Cam@MQTT: Wasseruhr

Bitzer

Hallo Ingo,

anbei ein Beispiel für eine Doppelwippe mit Schalter für Licht und Rollo:


define HSw_Bad EnOcean 00246E41
attr HSw_Bad room EnOcean
attr HSw_Bad subType switch
define FileLog_HSw_Bad FileLog ./log/HSw_Bad-%Y.log HSw_Bad
attr FileLog_HSw_Bad logtype text
attr FileLog_HSw_Bad room EnOcean
define notify_HSw_Bad notify HSw_Bad {my $rvar=Value("HSw_Bad");; \
if ($rvar =~ m/A0/) {readingsSingleUpdate($main::defs{Rolladen_Bad}, 'state', 'Auf', 1);; readingsSingleUpdate($main::defs{Rolladen_Bad}, 'position', '0', 1)} \
elsif ($rvar =~ m/AI/) {readingsSingleUpdate($main::defs{Rolladen_Bad}, 'state', 'Zu', 1);; readingsSingleUpdate($main::defs{Rolladen_Bad}, 'position', '100', 1)};; \
if ($rvar =~ m/B0/) {readingsSingleUpdate($main::defs{Licht_Bad}, 'state', 'on', 1)} \
elsif ($rvar =~ m/BI/) {readingsSingleUpdate($main::defs{Licht_Bad}, 'state', 'off', 1)}}


Die EnOcean Adresse von dem Hardware-Schalter habe ich vorher über den Eventmonitor ermittelt, diese wird angezeigt sobald der Taster gedrückt wird. Über das NOTIFY wird dann das STATE und position-Reading (Bei Rolläden) neu gesetzt, je nachdem welche Taste des Schalters gedrückt wurde.

Ist kompliziert, geb ich zu, funktioniert aber. Nachteil ist halt bei den Rolläden, dass es nur richtig Sinn macht wenn die Rolläden über den Schalter ganz auf oder zu gefahren werden, Zwischenpositionen bekommt FHEM in diesem Fall nicht mit. Mir reicht das aber so, geht halt leider nicht anders mit den Unidirektionalen Aktoren.

Viele Grüße,
Oli

karpate

Hallo Oli,

super, vielen Dank.

Habe dein Beispiel mal für meine Bedürfnisse für 1 Doppellichtschalter umgebaut. Warte auch auf die Erweiterung von klaus.schauer für die Erkennung der Rollo Position.


define notify_EnO_switch_0021B1E3 notify EnO_switch_0021B1E3 {my $rvar=Value("EnO_switch_0021B1E3");; \
if ($rvar =~ m/A0/) {readingsSingleUpdate($main::defs{eg_kue_Licht}, 'state', 'on', 1)} \
elsif ($rvar =~ m/AI/) {readingsSingleUpdate($main::defs{eg_kue_Licht}, 'state', 'off', 1)};; \
if ($rvar =~ m/B0/) {readingsSingleUpdate($main::defs{eg_ez_Licht}, 'state', 'on', 1)} \
elsif ($rvar =~ m/BI/) {readingsSingleUpdate($main::defs{eg_ez_Licht}, 'state', 'off', 1)}}


Gruß ingo
# Pi3 (BBB;FB7390)
# TCM310, CUL V4, HM-CFG-LAN,JeeLink,Tradfri,ESP32-Cam@MQTT: Wasseruhr

krikan

Hallo!

Zum Setzen der Stati meiner unidirektionalen F..61 bei Switch-Bestätigung nutze ich in meinen notifys

statt Eurem

Zitat{readingsSingleUpdate($main::defs{eg_kue_Licht}, 'state', 'off', 1)

immer nur setstate (commandref.html#setstate).

Was bietet Eure Lösung für einen Vorteil/Unterschied? Oder habe ich etwas mißverstanden !?

Danke, Christian

rudolfkoenig

setstate setzt STATE, was als Status in FHEMWEB/list/etc angezeigt wird.

readingsSingleUpdate($defs{eg_kue_Licht}, 'state', 'off') setzt zuerst das state Reading und danach STATE, beachtet aber die Attribute stateFormat, event-on-*, usw. Danach wird ein Event ausgeloest.

Enduser sollten setstate (+ trigger falls notwendig) benutzen.


Bitzer

Hallo,

ich hatte vor Kurzem auch noch SETSTATE drin. Dabei gab es aber ein Problem mit der Anzeige in FHEM mit longpoll, da bei setstate kein Event ausgelöst wird. Ich habe dann alles auf ReadingSingleUpdate umgestellt, damit wird auch die Anzeige des Status im Floorplan sofort ohne Refresh der Seite angezeigt.

Viele Grüße,
Oli

karpate

Hallo Oli,

ich benutze das von dir beschriebene notify. Habe noch nicht auf die neueste Version von klaus.schauer aktualisiert.


define notify_EnO_switch_0021B1E3 notify EnO_switch_0021B1E3 {my $rvar=Value("EnO_switch_0021B1E3");; \
if ($rvar =~ m/A0/) {readingsSingleUpdate($main::defs{eg_kue_Licht}, 'state', 'on', 1)} \
elsif ($rvar =~ m/AI/) {readingsSingleUpdate($main::defs{eg_kue_Licht}, 'state', 'off', 1)};; \
if ($rvar =~ m/B0/) {readingsSingleUpdate($main::defs{eg_ez_Licht}, 'state', 'on', 1)} \
elsif ($rvar =~ m/BI/) {readingsSingleUpdate($main::defs{eg_ez_Licht}, 'state', 'off', 1)}}


Im Filelog werden je Schalterdruck des Hardwareschalters 3 gleiche Logeinträge erzeugt.
2013.08.18 19:11:00 3: notify_EnO_switch_0021B1E3 return value: on
2013.08.18 19:11:00 3: notify_EnO_switch_0021B1E3 return value: on
2013.08.18 19:11:00 3: notify_EnO_switch_0021B1E3 return value: on

Ist das bei dir auch so?

Gruß ingo
# Pi3 (BBB;FB7390)
# TCM310, CUL V4, HM-CFG-LAN,JeeLink,Tradfri,ESP32-Cam@MQTT: Wasseruhr

Bitzer

Hallo Ingo,

das ist bei mir auch so, hatte mich schon gewundert aber erstmal nix weiter unternommen. Vielleicht kann Klaus da mal nachschauen warum das so ist. Ich setzte in dem Notify jetzt übrigens auch noch das Reading "position" auf 0 (Rollo oben) und 100 (Rollo unten). Hatte sonst Probleme die Rollos in eine Beschattungsposition zu fahren nachdem diese mit dem Hardwareschalter bedient worden sind.

Gruß,
Oli

klaus.schauer

Zitat von: Bitzer schrieb am Mo, 19 August 2013 08:49Hallo Ingo,

das ist bei mir auch so, hatte mich schon gewundert aber erstmal nix weiter unternommen. Vielleicht kann Klaus da mal nachschauen warum das so ist. Ich setzte in dem Notify jetzt übrigens auch noch das Reading "position" auf 0 (Rollo oben) und 100 (Rollo unten). Hatte sonst Probleme die Rollos in eine Beschattungsposition zu fahren nachdem diese mit dem Hardwareschalter bedient worden sind.
Update 10_EnOcean V3746 laden und alles ist gut, hoffentlich. Natürlich auch Anleitung lesen, da sich wieder im Detail was geändert hat.

karpate

Hallo,

ZitatUpdate 10_EnOcean V3746 laden und alles ist gut, hoffentlich. Natürlich auch Anleitung lesen, da sich wieder im Detail was geändert hat.

habe jetzt Version 3958 im Einsatz.

Der vorhandene Aktor wurde mit neuen Attributen ergänzt.

define eg_ez_Rollo_Fenster EnOcean FF822DA1
attr eg_ez_Rollo_Fenster manufID 00D
attr eg_ez_Rollo_Fenster shutTime 25
attr eg_ez_Rollo_Fenster subType manufProfile
attr eg_ez_Rollo_Fenster model FSB12
attr eg_ez_Rollo_Fenster angleMax 90
attr eg_ez_Rollo_Fenster angleMin -90
attr eg_ez_Rollo_Fenster angleTime 0
attr eg_ez_Rollo_Fenster shutTimeCloses 25


dieser notify
define notify_EnO_switch_0021B72A notify EnO_switch_0021B72A {my $rvar=Value("EnO_switch_0021B72A");; \
if ($rvar =~ m/A0/) {readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'state', 'auf', 1);; readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'position', '0', 1)} \
elsif ($rvar =~ m/AI/) {readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'state', 'zu', 1);; readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'position', '100', 1)};; \
if ($rvar =~ m/B0/) {readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'state', 'auf', 1);; readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'position', '0', 1)} \
elsif ($rvar =~ m/BI/) {readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'state', 'zu', 1);; readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'position', '100', 1)}}


bringt 5 Logeinträge
2013.09.27 09:57:06 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:06 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:06 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:07 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:07 3: notify_EnO_switch_0021B72A return value: position: 0

Ich hoffe jemand hat mir einen Tipp was falsch ist.

Danke und Gruss
ingo
# Pi3 (BBB;FB7390)
# TCM310, CUL V4, HM-CFG-LAN,JeeLink,Tradfri,ESP32-Cam@MQTT: Wasseruhr

klaus.schauer

Zitat von: karpate schrieb am Fr, 27 September 2013 09:58Hallo,

ZitatUpdate 10_EnOcean V3746 laden und alles ist gut, hoffentlich. Natürlich auch Anleitung lesen, da sich wieder im Detail was geändert hat.

habe jetzt Version 3958 im Einsatz.

Der vorhandene Aktor wurde mit neuen Attributen ergänzt.

define eg_ez_Rollo_Fenster EnOcean FF822DA1
attr eg_ez_Rollo_Fenster manufID 00D
attr eg_ez_Rollo_Fenster shutTime 25
attr eg_ez_Rollo_Fenster subType manufProfile
attr eg_ez_Rollo_Fenster model FSB12
attr eg_ez_Rollo_Fenster angleMax 90
attr eg_ez_Rollo_Fenster angleMin -90
attr eg_ez_Rollo_Fenster angleTime 0
attr eg_ez_Rollo_Fenster shutTimeCloses 25


dieser notify
define notify_EnO_switch_0021B72A notify EnO_switch_0021B72A {my $rvar=Value("EnO_switch_0021B72A");; \
if ($rvar =~ m/A0/) {readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'state', 'auf', 1);; readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'position', '0', 1)} \
elsif ($rvar =~ m/AI/) {readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'state', 'zu', 1);; readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'position', '100', 1)};; \
if ($rvar =~ m/B0/) {readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'state', 'auf', 1);; readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'position', '0', 1)} \
elsif ($rvar =~ m/BI/) {readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'state', 'zu', 1);; readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'position', '100', 1)}}


bringt 5 Logeinträge
2013.09.27 09:57:06 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:06 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:06 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:07 3: notify_EnO_switch_0021B72A return value: position: 0
2013.09.27 09:57:07 3: notify_EnO_switch_0021B72A return value: position: 0

Ich hoffe jemand hat mir einen Tipp was falsch ist.
Das Reading state muss durch notify auf open oder closed gesetzt werden. Die Ausgabe- und Abfragewerte in state musste ich vereinheitlichen, damit die Position eindeutig daraus abgeleitet werden kann.

commandref:

◦Manufacturer Specific Applications (EEP A5-3F-7F)

 Shutter (EEP F6-02-01 ... F6-02-02)
 [Eltako FSB12, FSB14, FSB61, FSB70]
◾teach
 Teach-In is sent
◾open
 The status of the device will become "open" after the TOP endpoint is reached, or it has finished an "opens" or "position 0" command.
◾closed
 The status of the device will become "closed" if the BOTTOM endpoint is reached
◾stop
 The status of the device become "stop" if stop command is sent.
◾not_reached
 The status of the device become "not_reached" between one of the endpoints.
◾anglePos: α/° (Sensor Range: α = -180 ° ... 180 °)
◾buttons: pressed|released
◾endPosition: open|closed|not_reached|not_available
◾position: pos/% (Sensor Range: pos = 0 % ... 100 %)
◾state: open|closed|not_reached|stop|teach

karpate

Danke klaus für deine Hilfe.

geändert in
define notify_EnO_switch_0021B72A notify EnO_switch_0021B72A {my $rvar=Value("EnO_switch_0021B72A");; \
if ($rvar =~ m/A0/) {readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'state', 'open', 1);; readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'position', '0', 1)} \
elsif ($rvar =~ m/AI/) {readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'state', 'closed', 1);; readingsSingleUpdate($main::defs{eg_kue_Rollo}, 'position', '100', 1)};; \
if ($rvar =~ m/B0/) {readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'state', 'open', 1);; readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'position', '0', 1)} \
elsif ($rvar =~ m/BI/) {readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'state', 'closed', 1);; readingsSingleUpdate($main::defs{eg_ez_Rollo_Fenster}, 'position', '100', 1)}}


Log hat immer noch 5 gleiche Einträge
# Pi3 (BBB;FB7390)
# TCM310, CUL V4, HM-CFG-LAN,JeeLink,Tradfri,ESP32-Cam@MQTT: Wasseruhr