CUL_HM sendet gleiche Sequenznummer doppelt

Begonnen von mgernoth, 30 Juni 2013, 23:39:42

Vorheriges Thema - Nächstes Thema

mgernoth

Hallo,

anscheinend kann es passieren, dass CUL_HM die gleiche Sequenznummer hintereinander in zwei unterschiedlichen Kommandos an den selben Aktor benutzt. Das zweite Kommando wird dann natürlich ignoriert...

Mir ist das aufgefallen, weil manchmal LEDs einer HM-OU-LED16 nicht richtig gesetzt werden, obwohl nach dem Log alles (bis auf die Sequenznummer) richtig aussieht:

1. Nachricht an Display, abschalten aller LEDs:


2013-06-30 23:11:42 CUL_HM Display color: 00000000
2013-06-30 23:11:42 CUL_HM Display set_00000000
2013-06-30 23:11:42 CUL_HM Display CMDs_pending
2013-06-30 23:11:42 CUL_HM Display set_led 00000000
2013-06-30 23:11:42 CUL_HM Display CMDs_processing...
2013-06-30 23:11:42 CUL HM_CUL SND L:0F N:49 F:A0 CMD:11 SRC:68EA13 DST:Display 810000000000 (LEVEL CHANNEL:0x00 TIME:0 SPEED:0) (,BIDI,RPTEN)
2013-06-30 23:11:42 CUL HM_CUL RCV L:12 N:49 F:80 CMD:02 SRC:Display DST:68EA13 010000002800000000 (ACK_STATUS CHANNEL:0x00 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-40) (,RPTEN)
2013-06-30 23:11:42 CUL_HM Display CMDs_done_events:8
2013-06-30 23:11:42 CUL_HM Display_Led_01 color: off
2013-06-30 23:11:42 CUL_HM Display_Led_01 off
2013-06-30 23:11:42 CUL_HM Display noReceiver: src:1E0375 8002 010000002800000000


2. Nachricht an Display, aktivieren der 1. LED:

2013-06-30 23:21:50 CUL_HM Display color: 00000003
2013-06-30 23:21:50 CUL_HM Display CMDs_pending
2013-06-30 23:21:50 CUL_HM Display set_led 00000003
2013-06-30 23:21:50 CUL_HM Display CMDs_processing...
2013-06-30 23:21:50 CUL HM_CUL SND L:0F N:49 F:A0 CMD:11 SRC:68EA13 DST:Display 810000000003 (LEVEL CHANNEL:0x00 TIME:0 SPEED:0) (,BIDI,RPTEN)
2013-06-30 23:21:50 CUL HM_CUL RCV L:12 N:49 F:80 CMD:02 SRC:Display DST:68EA13 010003002A00000003 (ACK_STATUS CHANNEL:0x00 STATUS:0x03 UP:0 DOWN:0 LOWBAT:0 RSSI:-42) (,RPTEN)
2013-06-30 23:21:50 CUL_HM Display CMDs_done_events:8
2013-06-30 23:21:50 CUL_HM Display_Led_01 color: orange
2013-06-30 23:21:50 CUL_HM Display_Led_01 orange
2013-06-30 23:21:50 CUL_HM Display noReceiver: src:1E0375 8002 010003002A00000003


Die LED blieb trotz Ack aus...

Im Anhang das gesamte Log, da sieht man auch, was die LED-Zustandsänderung ausgelöst hat (ein Tastendruck auf einer RC-19, mit fast identischer (47) Sequenznummer). Wird hier evtl. die Sequenznummer der Fernbedienung übernommen? Sollte nicht besser mit dem Maximalwert der lokalen und empfangenen Sequenznummer weitergemacht werden?

Edit: Oder sollte die Sequenznummer für jedes Gerät direkt am Gerät gespeichert werden und nicht global am IO-Interface? Ansonsten können immernoch doppelte Sequenznummern auftreten.

Gruß
  Michael

martinp876

Hallo Michael,

ok - werde ich aendern.
Sollte mit dem loeschen der Zeile ~510
  $iohash->{HM_CMDNR} = hex($mNo) if($dst eq $id);# updt message cnt to rec
behoben sein. War einst fuer ACK relevant.

Gruss Martin

mgernoth

Hallo Martin,

Zitat von: martinp876 schrieb am Mo, 01 Juli 2013 09:20Sollte mit dem loeschen der Zeile ~510
  $iohash->{HM_CMDNR} = hex($mNo) if($dst eq $id);# updt message cnt to rec
behoben sein.

Danke :-)

Seitdem ich die Zeile gestern auskommentiert habe, ist das Problem nicht mehr aufgetreten. Davor konnte ich es relativ gut reproduzieren.

Gruß
  Michael

mgernoth

Zitat von: mgernoth schrieb am Di, 02 Juli 2013 08:15Seitdem ich die Zeile gestern auskommentiert habe, ist das Problem nicht mehr aufgetreten. Davor konnte ich es relativ gut reproduzieren.

Und natürlich ist es gerade wieder passiert:


2013-07-02 08:28:19 CUL HM_CUL SND L:0F N:42 F:A0 CMD:11 SRC:68EA13 DST:Display 810000040000 (LEVEL CHANNEL:0x00 TIME:0 SPEED:4) (,BIDI,RPTEN)
2013-07-02 08:28:19 CUL HM_CUL RCV L:12 N:42 F:80 CMD:02 SRC:Display DST:68EA13 010000003200040000 (ACK_STATUS CHANNEL:0x00 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-50) (,RPTEN)
...
2013-07-02 08:28:22 CUL HM_CUL RCV L:0C N:41 F:A4 CMD:41 SRC:Fenster_AZ DST:68EA13 013600 (Sensor_event BUTTON:1 LONG:0 LOWBAT:0 VALUE:54 NEXT:0) (,CFG,BIDI,RPTEN)
2013-07-02 08:28:22 CUL HM_CUL SND L:0D N:41 F:80 CMD:02 SRC:68EA13 DST:Fenster_AZ 0101C800 (ACK_STATUS CHANNEL:0x01 STATUS:0xC8 UP:0 DOWN:0 LOWBAT:0) (,RPTEN)
...
2013-07-02 08:28:27 CUL HM_CUL SND L:0F N:42 F:A0 CMD:11 SRC:68EA13 DST:Display 810000080000 (LEVEL CHANNEL:0x00 TIME:0 SPEED:8) (,BIDI,RPTEN)
2013-07-02 08:28:31 CUL HM_CUL RCV L:12 N:42 F:80 CMD:02 SRC:Display DST:68EA13 010000002D00080000 (ACK_STATUS CHANNEL:0x00 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-45) (,RPTEN)


Die Zeile in 10_CUL_HM ist auskommentiert und Fhem wurde auch neu gestartet...

Gruß
  Michael

martinp876

Hi Michael,

hast mich erwischt - nur die halbe Miete.
Erste Teil ist im Update von Gestern Abend drin Jetzt noch:

Zeile 2775:
  if($mn eq "++") {
    $mn = $io->{HM_CMDNR} ? (($io->{HM_CMDNR} +1)&0xff) : 1;
  }
  elsif($cmd =~ m/^[+-]/){; #continue pure
    IOWrite($hash, "", $cmd);
return;
  }
  else {
    $mn = hex($mn);
  }
  $io->{HM_CMDNR} = $mn;


verschieben nach

  if($mn eq "++") {
    $mn = $io->{HM_CMDNR} ? (($io->{HM_CMDNR} +1)&0xff) : 1;
    $io->{HM_CMDNR} = $mn;
  }
  elsif($cmd =~ m/^[+-]/){; #continue pure
    IOWrite($hash, "", $cmd);
return;
  }
  else {
    $mn = hex($mn);
  }


dann haben wir auch die ACKs gefangen
Gruss Martin

hm - kann es im "code" nocht bold machen. Also nur die Zeile "io-> ..." verscheiben