Autor Thema: Firmware 66  (Gelesen 1676 mal)

Offline wahlm

  • Newbie
  • Beiträge: 1
Firmware 66
« am: 25 Mai 2013, 18:57:24 »
Seit kurzem habe ich einen RFXTRX433, der mit Firmware 66 geliefert wurde. Schalte ich nun meine
Intertechno-Steckdosen mit dem arc-Protokoll so erhalte ich nach ein paarmal schalten

 TRX_ELSE: error transmit NACK=0x

im FHEM-Log (v5.4). Eine weitere Analyse mit RFXmngr zeigte, daß der FHEM-Treiber statt des Antwortcodes
die Sequence-Nummer analysiert. Ob das in der Firmware neu ist, kann ich natürlich nicht sagen.

Dazu wurde im debug-print bei num_bytes ein falscher Wert ausgegeben. Mit folgenden Änderungen war alles ok.

So sieht übrigens die Antwort des TRX auf das Sendekommando aus, das vorletzte Byte ist die Sequence-Nummer.

2013.05.24 18:43:42 5: TRX_Parse1 '0402010300'
2013.05.24 18:43:42 5: TRX dispatch 0402010300
2013.05.24 18:43:42 5: TRX_ELSE: decoding delay=33 hex=0402010300
2013.05.24 18:43:42 0: TRX_ELSE: error transmit NACK=03


Bye,
wahlm

--- 46_TRX_ELSE.pm.no 2013-04-08 12:06:51.000000000 +0200
+++ 46_TRX_ELSE.pm 2013-05-25 13:10:05.238699321 +0200
@@ -110,9 +110,9 @@
     push (@rfxcom_data_array, ord($_) );
   }
 
-  my $num_bytes = ord(substr($msg,0,1));
+  my $num_bytes = ord(substr($bin_msg,0,1));
 
-  if ($num_bytes < 3) {
+  if ($num_bytes < 4) {
     return;
   }
 
@@ -122,7 +122,7 @@
   my $res = "";
   if ($type == 0x02) {
  my $subtype = $rfxcom_data_array[1];
- my $msg = $rfxcom_data_array[2];
+ my $msg = $rfxcom_data_array[3];
  if (($msg != 0x00) && ($msg != 0x01)) {
    Log 0, "TRX_ELSE: error transmit NACK=".sprintf("%02x",$msg);
  }

Offline Willi

  • Sr. Member
  • ****
  • Beiträge: 594
Aw: Firmware 66
« Antwort #1 am: 26 Mai 2013, 17:32:58 »
Zitat von: wahlm schrieb am Sa, 25 Mai 2013 18:57
Seit kurzem habe ich einen RFXTRX433, der mit Firmware 66 geliefert wurde. Schalte ich nun meine
Intertechno-Steckdosen mit dem arc-Protokoll so erhalte ich nach ein paarmal schalten

 TRX_ELSE: error transmit NACK=0x

im FHEM-Log (v5.4). Eine weitere Analyse mit RFXmngr zeigte, daß der FHEM-Treiber statt des Antwortcodes
die Sequence-Nummer analysiert. Ob das in der Firmware neu ist, kann ich natürlich nicht sagen.


Danke für die Info. Du hast recht. Das Parsing des ACK war falsch. Habe ich soeben im SVN korrigiert.
Das ist bisher nicht aufgefallen, da bisher die Firmware die sequence number anders zurückgeliefert hat.
Das hat sich mit Firmware 66 geändert.

-- Willi  
FHEM@Q600(debian) mit DS9490R (1Wire) | FHEM@Sheevaplug(debian) mit RFXCOM-Receiver(80002), CULv3 & USB-WDE1 | FHEM@odroid mit CULv2 & RFXtrx433

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3737
Aw: Firmware 66
« Antwort #2 am: 26 Mai 2013, 19:22:53 »
hast du das auch rückwärtskompatibel eingebaut? Ich kann jetzt nicht so schnell ohne weiteres den rfxtrx updaten
FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamps, RPi für BLE Bodenfeuchtesenoren, Text2Speech.
Maintainer der Module: Text2Speech, TrashCal, MediaList

Meine Projekte auf https://github.com/tobiasfaust
u.a. PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM

Offline Willi

  • Sr. Member
  • ****
  • Beiträge: 594
Aw: Firmware 66
« Antwort #3 am: 26 Mai 2013, 19:49:47 »
Hallo Tobias,

habe ich bei mir auch mit Firmware 64 getestet. Sollte auch noch mit älterer laufen.
Die Auswertung in TRX_ELSE des ACK-Paketes war falsch.

Die Routine in TRX_ELSE kommt nur zum Einsatz, wenn man schaltet. Es kommt eine Fehlermeldung, wenn kein richtiges ACK vom RFXtrx433 kommt. Da passiert im schlimmsten Fall nichts außer einer Fehlermeldung im Log.

Grüße

Willi
FHEM@Q600(debian) mit DS9490R (1Wire) | FHEM@Sheevaplug(debian) mit RFXCOM-Receiver(80002), CULv3 & USB-WDE1 | FHEM@odroid mit CULv2 & RFXtrx433

 

decade-submarginal