Firmware 66

Begonnen von wahlm, 25 Mai 2013, 18:57:24

Vorheriges Thema - Nächstes Thema

wahlm

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);
  }

Willi

Zitat von: wahlm schrieb am Sa, 25 Mai 2013 18:57Seit 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

Tobias

hast du das auch rückwärtskompatibel eingebaut? Ich kann jetzt nicht so schnell ohne weiteres den rfxtrx updaten
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Willi

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