FSB61NP: Reading "position" nach "set <name> stop" entweder 100 oder 0

Begonnen von 50watt, 03 August 2014, 22:54:41

Vorheriges Thema - Nächstes Thema

50watt

Bricht man bei einem Eltako FSB61NP das Herunterfahren des Rollladens
set FSB61 closes
mit
set FSB61 stop
ab, wird das Reading "position" nicht korrekt gesetzt (Die Informationen für das Setzen des Reading "position" wären vorhanden, die Bestätigungstelegramme des FSB61 sind aktiviert und werden von Fhem empfangen).

Ab Zeile 1362 wird bei jedem "set <name> closes" das Reading "position" auf "100" gesetzt:

} elsif ($cmd eq "closes") {
          # closes >> BI
          $anglePos = $angleMax;
          $position = 100;
          readingsSingleUpdate($hash, "anglePos", $anglePos, 1);
        readingsSingleUpdate($hash, "position", $position, 1);
          readingsSingleUpdate($hash, "endPosition", "closed", 1);


Ab Zeile 1315 wird für jedes "set" Kommando (also auch bei "set <name> stop") das Reading ".positionStart" mit dem Reading "position" überschrieben.

$anglePosStart = $anglePos;
$positionStart = $position;       
readingsSingleUpdate($hash, ".anglePosStart", $anglePosStart, 0);         
readingsSingleUpdate($hash, ".positionStart", $positionStart, 0);

Somit ist nach dem set <name> stop das Reading "Position" und das Reading ".positionStart" gleich 100, unabhängig von der ursprünglichen Position und der Zeit bis zum Stoppen des Rollladens.

Der Code an Zeile 3643 hat keine Möglichkeit die korrekte Position zu setzen, da das für die Berechnung verwendete Reading ".positionStart" nicht mehr die Position vor dem Beginn der Bewegung des Rollladens enthält.

Eine Lösung könnte sein, die Position vor dem Beginn der Bewegung des Rollladens in einem weiteren Reading zu speichern und erst dann zu überschreiben, wenn Bestätigungstelegramme vom FSB61 eintreffen. So würden FSB61 ohne Bestätigungstelegramme wie bisher funktionieren und Fhem könnte für FSB61 mit Bestätigungstelegrammen die korrekte Position des Rollladens auch nach Abbruch eines Kommandos mit "set <name> stop" darstellen.

Was meint ihr?
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

klaus.schauer

Beim manuellen stoppen der Rollofahrt ist die Position des Rollos undefiniert. Deshalb wird der Positionswert damit auch unbrauchbar, egal was dort steht. Man könnte in diesem Fall den Positionswert eigentlich ganz löschen. Aber Aktoren aus der aktuellen Fertigung senden bei Stop die bisherige Laufzeit in 1/10 s. Falls diese Rückmeldung kommt, wird die Position damit neu berechnet. Bisher habe ich zur Funktionsfähigkeit aber keine Rückmeldung bekommen.

50watt

Vielen Dank für das rasche Feedback!
Die Rückmeldung in 1/10s kommt von meinem FSB61 - die neue Position wird jedoch falsch berechnet, da für die Berechnung das Reading .positionStart verwendet wird. Dieses Reading wird jedoch durch "Set <name> stop" "falsch" gesetzt ($startReading = $position und $position =reading "position" und reading "position"= 100 durch "set <name> closes").

Ich würde gerne die gewünschte Rückmeldung zur Funktionsfähigkeit geben. Was ist hier gewünscht?

"set <name> position 60" funktioniert, das Reading "position" ist danach nicht genau 60 eher 61, oder 62 -> auch daraus schließe ich, dass die Rückmeldungen vom FSB61 kommen und ausgewertet werden.

Zum Status: Es gibt aktuell

  • open_ack und open
  • closed jedoch kein closed_ack

Zum "angle" kann ich leider nicht viel beisteuern, da ich nur einen Rollladen mit dem FSB61 (aus der Produktion 2013) verwende.
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

50watt

Noch etwas zum Reading "position" des FSB61 mit Bestätigungstelegrammen:

Fahrt man den mit einem FSB61 (mit Bestätigungstelegrammen) gesteuerten Rollladen mit einem physischen Schalter (z.B. FT55) in die obere Endlage, wird der state = "open_ack" gesetzt, sobald das Bestätigungstelegramm vom FSB61 eintrifft. Das Reading "position" wird jedoch nicht auf "0" aktualisiert, sondern behält den alten Wert.
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

klaus.schauer

- Bei open_ack wird die Position nicht aktualisiert, da die Aktoren leider schon "geöffnet" melden, bevor sie die obere Endposition erreicht haben. closed ist dagegen eindeutig >> Position wird in diesem Fall entsprechend gesetzt.

- Ich hatte letztlich schon darauf hingewiesen, dass die Genauigkeit der Positionsberechnung begrenzt ist. Ich deshalb froh, dass es mit den beschriebenen Toleranzen überhaupt geht.

- Mit der Fehlerbeschreibung komme ich leider nicht weiter. Was wird denn konkret bei set <device> stop empfangen? Was wird dann angezeigt? Notwendig wäre eine komplette Beschreibung einer Rollofahrt bis zum Stop und natürlich die üblichen Daten aus list und Protokolle mit verbose 5.

50watt

Vielen Dank für das rasche Feedback!

Hier die Ausgabe von "list st6.kueche.rollladen"

Internals:
   DEF        01863DF4
   IODev      TCM310_0
   LASTInputDev TCM310_0
   MSGCNT     102
   NAME       st6.kueche.rollladen
   NOTIFYDEV  global
   NR         304
   STATE      open_ack
   TCM310_0_DestinationID FFFFFFFF
   TCM310_0_MSGCNT 102
   TCM310_0_PacketType 1
   TCM310_0_RSSI -73
   TCM310_0_ReceivingQuality excellent
   TCM310_0_RepeatingCounter 0
   TCM310_0_SubTelNum 6
   TCM310_0_TIME 2014-08-04 23:30:19
   TYPE       EnOcean
   Readings:
     2014-08-04 23:29:39   anglePos        0
     2014-08-04 18:50:19   block           unlock
     2014-08-04 23:30:19   endPosition     open_ack
     2014-08-04 23:29:39   position        0
     2014-08-04 23:30:19   state           open_ack
Attributes:
   IODev      TCM310_0
   alias      Rollladen Küche
   devStateIcon closed:fts_shutter_100:opens open:fts_window_2w:closes 25:fts_shutter_30 50:fts_shutter_50 75:fts_shutter_70 down:fts_shutter_down@red:stop up:fts_shutter_up@yellow:stop
   eventMap   /opens:AUF/position 25:25/position 50:50/position 75:75/closes:ZU/
   group      Rollladen
   icon       fts_shutter_updown
   manufID    00D
   model      FSB61
   room       Küche,EnOcean
   shutTime   35
   shutTimeCloses 40
   subDef     FF98A101
   subType    manufProfile
   verbose    5
   webCmd     AUF:stop:ZU:25:50:75


Nun fahre ich den Rollladen mit "set st6.kueche.rollladen closes" zu und 7 Sekunden danach kommt ein "set st6.kueche.rollladen stop":
Das Log, TCM verbose 5:

2014.08.04 23:31:07 5: EnOcean set st6.kueche.rollladen closes .positionStart: 0
2014.08.04 23:31:07 2: EnOcean set st6.kueche.rollladen closed
2014.08.04 23:31:07 5: TCM TCM310_0 sending 55000A000180A500280208FF98A1010089
2014.08.04 23:31:07 5: SW: 55000A000180A500280208FF98A1010089
2014.08.04 23:31:07 4: EnOcean IOWrite st6.kueche.rollladen Header: 000A0001 Data: A500280208FF98A10100
2014.08.04 23:31:08 5: TCM TCM310_0 RAW: 550001000265000055000A0701EBA500280208FF98A1010102FFFFFFFF4F00E1
2014.08.04 23:31:08 5: TCM TCM310_0 RESPONSE: OK
2014.08.04 23:31:08 4: TCM TCM310_0 Telegram from FF98A101 blocked.
2014.08.04 23:31:08 5: TCM TCM310_0 RAW: 55000707017AF60201863DF43005FFFFFFFF49007E
2014.08.04 23:31:08 5: TCM310_0 dispatch EnOcean:1:F6:02:01863DF4:30:05FFFFFFFF4900
2014.08.04 23:31:08 5: EnOcean st6.kueche.rollladen PacketType:1 RORG:F6 DATA:02 ID:01863DF4 STATUS:30
Use of uninitialized value in string eq at FHEM/Blocking.pm line 85.
2014.08.04 23:31:15 5: EnOcean set st6.kueche.rollladen stop .positionStart: 100
2014.08.04 23:31:15 2: EnOcean set st6.kueche.rollladen stop
2014.08.04 23:31:15 5: TCM TCM310_0 sending 55000A000180A500230008FF98A101009D
2014.08.04 23:31:15 5: SW: 55000A000180A500230008FF98A101009D
2014.08.04 23:31:15 4: EnOcean IOWrite st6.kueche.rollladen Header: 000A0001 Data: A500230008FF98A10100
2014.08.04 23:31:15 5: TCM TCM310_0 RAW: 550001000265000055000A0701EBA500230008FF98A1010103FFFFFFFF50000C55000A0701EBA5004C020A01863DF40006FFFFFFFF4A00E9
2014.08.04 23:31:15 5: TCM TCM310_0 RESPONSE: OK
2014.08.04 23:31:15 4: TCM TCM310_0 Telegram from FF98A101 blocked.
2014.08.04 23:31:15 5: TCM310_0 dispatch EnOcean:1:A5:004C020A:01863DF4:00:06FFFFFFFF4A00
2014.08.04 23:31:15 5: EnOcean st6.kueche.rollladen PacketType:1 RORG:A5 DATA:004C020A ID:01863DF4 STATUS:00
2014.08.04 23:31:15 2: EnOcean st6.kueche.rollladen Eltako shutter: positionStart: 100 --- shutTimeStop: 7.6
2014.08.04 23:31:22 5: TCM TCM310_0 RAW: 55000A0701EBA500
2014.08.04 23:31:22 5: TCM TCM310_0 RAW: 55000A0701EBA50000150CFF9160010002FFFFFFFF4F0057
2014.08.04 23:31:22 5: TCM310_0 dispatch EnOcean:1:A5:0000150C:FF916001:00:02FFFFFFFF4F00


Und das Log vom FSB61NP verbose 5:

2014-08-04_23:31:07 st6.kueche.rollladen anglePos: 90
2014-08-04_23:31:07 st6.kueche.rollladen position: 100
2014-08-04_23:31:07 st6.kueche.rollladen endPosition: closed
2014-08-04_23:31:08 st6.kueche.rollladen endPosition: not_reached
2014-08-04_23:31:08 st6.kueche.rollladen down
2014-08-04_23:31:15 st6.kueche.rollladen endPosition: not_reached
2014-08-04_23:31:15 st6.kueche.rollladen stop
2014-08-04_23:31:15 st6.kueche.rollladen block: unlock
2014-08-04_23:31:15 st6.kueche.rollladen endPosition: closed
2014-08-04_23:31:15 st6.kueche.rollladen anglePos: 90
2014-08-04_23:31:15 st6.kueche.rollladen position: 100
2014-08-04_23:31:15 st6.kueche.rollladen closed


Und nun wieder ein "list st6.kueche.rollladen"

Internals:
   DEF        01863DF4
   IODev      TCM310_0
   LASTInputDev TCM310_0
   MSGCNT     104
   NAME       st6.kueche.rollladen
   NOTIFYDEV  global
   NR         304
   STATE      closed
   TCM310_0_DestinationID FFFFFFFF
   TCM310_0_MSGCNT 104
   TCM310_0_PacketType 1
   TCM310_0_RSSI -74
   TCM310_0_ReceivingQuality excellent
   TCM310_0_RepeatingCounter 0
   TCM310_0_SubTelNum 6
   TCM310_0_TIME 2014-08-04 23:31:15
   TYPE       EnOcean
   Readings:
     2014-08-04 23:31:15   anglePos        90
     2014-08-04 23:31:15   block           unlock
     2014-08-04 23:31:15   endPosition     closed
     2014-08-04 23:31:15   position        100
     2014-08-04 23:31:15   state           closed
Attributes:
   IODev      TCM310_0
   alias      Rollladen Küche
   devStateIcon closed:fts_shutter_100:opens open:fts_window_2w:closes 25:fts_shutter_30 50:fts_shutter_50 75:fts_shutter_70 down:fts_shutter_down@red:stop up:fts_shutter_up@yellow:stop
   eventMap   /opens:AUF/position 25:25/position 50:50/position 75:75/closes:ZU/
   group      Rollladen
   icon       fts_shutter_updown
   manufID    00D
   model      FSB61
   room       Küche,EnOcean
   shutTime   35
   shutTimeCloses 40
   subDef     FF98A101
   subType    manufProfile
   verbose    5
   webCmd     AUF:stop:ZU:25:50:75


Die Readings "position" und "endPosition" sind nun falsch, da der Rolladen bei einer "shutTime" von 35 Sekunden nur 7 Sekunden von "open_ack" runter gefahren ist.

Hilft das weiter?
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

klaus.schauer


50watt

Wow - unglaublicher Support! Tausend Dank!
Das oben geloggte Beispiel funktioniert nun - das Reading "position" wird korrekt gesetzt.

Ein neues Beispiel mit fehlerhafter Positionsberechnung, mit der 10_EnOcean.pm von oben:

die Ausgabe von "list st6.kueche.rollladen":

Internals:
   DEF        01863DF4
   IODev      TCM310_0
   LASTInputDev TCM310_0
   MSGCNT     33
   NAME       st6.kueche.rollladen
   NOTIFYDEV  global
   NR         304
   STATE      open_ack
   TCM310_0_DestinationID FFFFFFFF
   TCM310_0_MSGCNT 33
   TCM310_0_PacketType 1
   TCM310_0_RSSI -71
   TCM310_0_ReceivingQuality excellent
   TCM310_0_RepeatingCounter 0
   TCM310_0_SubTelNum 5
   TCM310_0_TIME 2014-08-05 09:37:13
   TYPE       EnOcean
   Readings:
     2014-08-05 09:36:33   anglePos        0
     2014-08-05 09:36:14   block           unlock
     2014-08-05 09:37:13   endPosition     open_ack
     2014-08-05 09:36:33   position        0
     2014-08-05 09:37:13   state           open_ack
Attributes:
   IODev      TCM310_0
   alias      Rollladen Küche
   devStateIcon closed:fts_shutter_100:opens open:fts_window_2w:closes 25:fts_shutter_30 50:fts_shutter_50 75:fts_shutter_70 down:fts_shutter_down@red:stop up:fts_shutter_up@yellow:stop
   eventMap   /opens:AUF/position 25:25/position 50:50/position 75:75/closes:ZU/
   group      Rollladen
   icon       fts_shutter_updown
   manufID    00D
   model      FSB61
   room       Küche,EnOcean
   shutTime   35
   shutTimeCloses 40
   subDef     FF98A101
   subType    manufProfile
   verbose    5
   webCmd     AUF:stop:ZU:25:50:75


Nun fahre ich den Rollladen mit "set st6.kueche.rollladen closes" zu und 9 Sekunden danach kommt ein "set st6.kueche.rollladen up 5".
Das Log, TCM verbose 5:

2014.08.05 09:42:32 2: EnOcean set st6.kueche.rollladen closed
2014.08.05 09:42:32 4: EnOcean st6.kueche.rollladen sent PacketType: 1 RORG: A5 DATA: 00280208 ID: FF98A101 STATUS: 00 ODATA:
2014.08.05 09:42:32 5: TCM TCM310_0 sending 55000A000180A500280208FF98A1010089
2014.08.05 09:42:32 5: SW: 55000A000180A500280208FF98A1010089
2014.08.05 09:42:33 5: TCM TCM310_0 RAW: 550001000265000055000A0701EBA500280208FF98A1010102FFFFFFFF4F00E1
2014.08.05 09:42:33 5: TCM TCM310_0 RESPONSE: OK
2014.08.05 09:42:33 4: TCM TCM310_0 Telegram from FF98A101 blocked.
2014.08.05 09:42:33 5: TCM TCM310_0 RAW: 55000707017AF60201863DF43006FFFFFFFF490018
2014.08.05 09:42:33 5: TCM310_0 dispatch EnOcean:1:F6:02:01863DF4:30:06FFFFFFFF4900
2014.08.05 09:42:33 5: EnOcean st6.kueche.rollladen received PacketType: 1 RORG: F6 DATA: 02 ID: 01863DF4 STATUS: 30
2014.08.05 09:42:42 2: EnOcean set st6.kueche.rollladen not_reached
2014.08.05 09:42:42 4: EnOcean st6.kueche.rollladen sent PacketType: 1 RORG: A5 DATA: 00050108 ID: FF98A101 STATUS: 00 ODATA:
2014.08.05 09:42:43 5: TCM TCM310_0 sending 55000A000180A500050108FF98A1010046
2014.08.05 09:42:43 5: SW: 55000A000180A500050108FF98A1010046
2014.08.05 09:42:43 5: TCM TCM310_0 RAW: 550001000265000055000A0701EBA500050108FF98A1010103FFFFFFFF4F0008
2014.08.05 09:42:43 5: TCM TCM310_0 RESPONSE: OK
2014.08.05 09:42:43 4: TCM TCM310_0 Telegram from FF98A101 blocked.
2014.08.05 09:42:43 5: TCM TCM310_0 RAW: 55000A0701EBA500
2014.08.05 09:42:43 5: TCM TCM310_0 RAW: 55000A0701EBA50066020A01863DF40006FFFFFFFF47001C
2014.08.05 09:42:43 5: TCM310_0 dispatch EnOcean:1:A5:0066020A:01863DF4:00:06FFFFFFFF4700
2014.08.05 09:42:43 5: EnOcean st6.kueche.rollladen received PacketType: 1 RORG: A5 DATA: 0066020A ID: 01863DF4 STATUS: 00
2014.08.05 09:42:44 5: TCM TCM310_0 RAW: 55000707017AF601
2014.08.05 09:42:44 5: TCM TCM310_0 RAW: 55000707017AF60101863DF43006FFFFFFFF460060
2014.08.05 09:42:44 5: TCM310_0 dispatch EnOcean:1:F6:01:01863DF4:30:06FFFFFFFF4600
2014.08.05 09:42:44 5: EnOcean st6.kueche.rollladen received PacketType: 1 RORG: F6 DATA: 01 ID: 01863DF4 STATUS: 30
2014.08.05 09:42:48 5: TCM TCM310_0 RAW: 55000A0701EBA500
2014.08.05 09:42:48 5: TCM TCM310_0 RAW: 55000A0701EBA50032010A01863DF40005FFFFFFFF47006A
2014.08.05 09:42:48 5: TCM310_0 dispatch EnOcean:1:A5:0032010A:01863DF4:00:05FFFFFFFF4700
2014.08.05 09:42:48 5: EnOcean st6.kueche.rollladen received PacketType: 1 RORG: A5 DATA: 0032010A ID: 01863DF4 STATUS: 00


Das Log des FSB61NP, verbose 5:

2014-08-05_09:42:32 st6.kueche.rollladen anglePos: 90
2014-08-05_09:42:32 st6.kueche.rollladen position: 100
2014-08-05_09:42:32 st6.kueche.rollladen endPosition: closed
2014-08-05_09:42:33 st6.kueche.rollladen endPosition: not_reached
2014-08-05_09:42:33 st6.kueche.rollladen down
2014-08-05_09:42:42 st6.kueche.rollladen endPosition: not_reached
2014-08-05_09:42:42 st6.kueche.rollladen anglePos: -90
2014-08-05_09:42:42 st6.kueche.rollladen position: 85
2014-08-05_09:42:43 st6.kueche.rollladen block: unlock
2014-08-05_09:42:43 st6.kueche.rollladen endPosition: closed
2014-08-05_09:42:43 st6.kueche.rollladen anglePos: 90
2014-08-05_09:42:43 st6.kueche.rollladen position: 100
2014-08-05_09:42:43 st6.kueche.rollladen closed
2014-08-05_09:42:44 st6.kueche.rollladen endPosition: not_reached
2014-08-05_09:42:44 st6.kueche.rollladen up
2014-08-05_09:42:49 st6.kueche.rollladen block: unlock
2014-08-05_09:42:49 st6.kueche.rollladen endPosition: not_reached
2014-08-05_09:42:49 st6.kueche.rollladen anglePos: -90
2014-08-05_09:42:49 st6.kueche.rollladen position: 85
2014-08-05_09:42:49 st6.kueche.rollladen stop


Und nun wieder ein "list st6.kueche.rollladen":

Internals:
   DEF        01863DF4
   IODev      TCM310_0
   LASTInputDev TCM310_0
   MSGCNT     37
   NAME       st6.kueche.rollladen
   NOTIFYDEV  global
   NR         304
   STATE      stop
   TCM310_0_DestinationID FFFFFFFF
   TCM310_0_MSGCNT 37
   TCM310_0_PacketType 1
   TCM310_0_RSSI -71
   TCM310_0_ReceivingQuality excellent
   TCM310_0_RepeatingCounter 0
   TCM310_0_SubTelNum 5
   TCM310_0_TIME 2014-08-05 09:42:49
   TYPE       EnOcean
   Readings:
     2014-08-05 09:42:48   anglePos        -90
     2014-08-05 09:42:48   block           unlock
     2014-08-05 09:42:48   endPosition     not_reached
     2014-08-05 09:42:48   position        85
     2014-08-05 09:42:48   state           stop
Attributes:
   IODev      TCM310_0
   alias      Rollladen Küche
   devStateIcon closed:fts_shutter_100:opens open:fts_window_2w:closes 25:fts_shutter_30 50:fts_shutter_50 75:fts_shutter_70 down:fts_shutter_down@red:stop up:fts_shutter_up@yellow:stop
   eventMap   /opens:AUF/position 25:25/position 50:50/position 75:75/closes:ZU/
   group      Rollladen
   icon       fts_shutter_updown
   manufID    00D
   model      FSB61
   room       Küche,EnOcean
   shutTime   35
   shutTimeCloses 40
   subDef     FF98A101
   subType    manufProfile
   verbose    5
   webCmd     AUF:stop:ZU:25:50:75


Das Readings "position" ist nun falsch (zu 85% geschlossen), da der Rolladen bei einer "shutTime" von 35 Sekunden nur 9 Sekunden von "open_ack" runter gefahren ist, wendet und für 5 Sekunden nach oben fährt.

Der Grund, warum es einen Status "open_ack" gibt, jedoch keinen Status "closed_ack" erschließt sich mir noch nicht. (Zumindest) Der Fsb61 sendet die Bestätigungstelegramme für "Endlage oben" bzw. "Endlage unten" nur, wenn der Rollladen mindestens die am FSB61 eingestellte Zeit bewegt wurde. Wie/woran erkenne ich, dass es hier einen Unterschied zwischen "open" und "close" gibt, der ein "open_ack" notwendig macht, ein "closed_ack" jedoch nicht?
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

klaus.schauer

Neue Fahrbefehle während einer laufenden Rollofahrt führen immer zu falschen Ergebnissen bei der Positionsbestimmung. Der Startwert ist immer der Zielwert aus der laufenden Fahrt; Ausnahme bei "Stop", falls entsprechende Quittungstelegramme kommen.