WMBus - AMB

Begonnen von hjb, 05 Oktober 2016, 09:54:55

Vorheriges Thema - Nächstes Thema

hjb

Hallo,

ich benutze z.Z einen CUL für Homematic und will zusätzlich auch wM-Bus Telegramme empfangen.
Mit der Umschaltung des Modus geht dies auch, ist aber keine gute Lösung.

Für den wM-Bus habe ich deshalb zusätzlich noch einen AMB8465-M von Amber-Wireless.
Der Unterschied zum CUL besteht darin, das im seriellen Datenstrom die Checksummen nicht
mehr vorhanden sind (werden vorher ausgewertet).

Darum mein Wunsch für eine nächste Softwarerevision:
- Modul zum seriellen Empfang der Daten (wie 00_CUL.pm)
- Anpassung von  36_WMBus.pm
      - Parameter zum Abschalten der Checksummenauswertung
- Anpassungen in WMBus.pm
      - Anpassen auf 'CRC_SIZE = 0'

Im Voraus schon vielen Dank
Hans-Jörg

kaihs

Ich kann das für den WMBUS Teil machen,  das gerätespezifische Modul für den AMB8465-M ist dann nochmal eine andere Sache. Dafür wäre es schon hilfreich wenn man einen solchen Stick während der Entwicklung hat.

Kannst du ein paar Nachrichten wie sie von dem Stick kommen hier (oder auch per PM) zur Verfügung stellen?
Dann kann ich damit testen.

Am besten wäre es, wenn der Benutzer dafür gar nichts einstellen muss, sondern das Modul automatisch das Format erkennt und sich entsprechend darauf einstellt.
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

herrmannj

Moin kaihs,

schau mal hier, da sieht man etwas mehr https://forum.fhem.de/index.php/topic,42232.msg453541.html#msg453541

In dem sniff sieht man etwas (kann man raten).

Die Daten kommen binär, mit header und ohne crc rein.

Würde für techem mitziehen wenn ich einen Stick in die Hand bekäme. Für das Gerätemodul muss man noch forschen. Wie kann man den mode setzen, wie lässt sich AES im Stick aktivieren etc ?

Du als Profi: hat der Amber Stick einen Vorteil vs CUL ?

vg
joerg

hjb

Auszug aus dem Log-File:

2016.10.05 20:02:10 5: AMB-Read 3:   b1B442B5D0825003906037AE10000002F2F0415117300000266CC0014
2016.10.05 20:02:10 5: amb dispatch b1B442B5D0825003906037AE10000002F2F0415117300000266CC0014
2016.10.05 20:02:10 5: WMBUS raw msg b1B442B5D0825003906037AE10000002F2F0415117300000266CC0014

Event-Monitor:

2016-10-05 20:12:10 dummy GasZaehler 36626
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 1_storage_no: 0
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 1_type: VIF_VOLUME
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 1_value: 2945.7
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 1_unit: m³
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 1_value_type: Instantaneous value
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 2_storage_no: 0
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 2_type: VIF_EXTERNAL_TEMP
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 2_value: 20.4
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 2_unit: °C
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 2_value_type: Instantaneous value
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 3_storage_no: 0
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 3_type: VIF_ENERGY_WATT
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 3_value: 0
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 3_unit: Wh
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 3_value_type: Maximum value
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 battery: ok
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 volume: 2945.7
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 unit: m³
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 is_encrypted: 0
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 decryption_ok: 1
2016-10-05 20:12:10 WMBUS WMBUS_WIK_39002508_6_3 no errors


hjb

#4
Noch vergessen:

Das letzte Byte im Datenstrom ist der Empfangspegel.

Es wird falsch ausgewertet als 3_type: VIF_ENERGY_WATT




kaihs

#5
Zitat von: herrmannj am 05 Oktober 2016, 19:38:44
Moin kaihs,

schau mal hier, da sieht man etwas mehr https://forum.fhem.de/index.php/topic,42232.msg453541.html#msg453541

In dem sniff sieht man etwas (kann man raten).

Die Daten kommen binär, mit header und ohne crc rein.

Hm, das was hjb danach gepostet hat ist dann schon in ein CUL ähnliches Format konvertiert?

@hjb: Woher stammen die Daten die Rohdaten die du gepostet hast, hast du schon ein ein Gerätemodul geschrieben?

Zitat
Würde für techem mitziehen wenn ich einen Stick in die Hand bekäme. Für das Gerätemodul muss man noch forschen. Wie kann man den mode setzen, wie lässt sich AES im Stick aktivieren etc ?

Für die Ansteuerung kann man wahrscheinlich in https://github.com/ffcrg/ecpiww/blob/master/linux/src/energycam/wmbus.c was abschauen. Die Doku zu dem Stick muss ich erstmal lesen.

Zitat
Du als Profi: hat der Amber Stick einen Vorteil vs CUL ?

Ich bin da genauso viel oder wenig Profi wie du.
Der AMB-Stick macht wohl mehr bereits in der Firmware (CRC entfernen, Entschlüsselung) und er kann laut Datenblatt auch den C-Modus. Das kann die culfw (noch) nicht, nur T und S.

Aber die Firmware ist halt closed-source und preiswerter ist der Stick ja auch nicht.
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

hjb

Ich habe meine Dateien und ein Gerätemodul (Angepasst von 00_CUL) an Kai gesendet.

Der AMBER-Stick hat nicht unbedingt Vorteile gegenüber CUL.

Als Sender in Modulform ist er sehr gut einsetzbar und entlastet den externen uC.
(Kennungen, Verschlüsselung, Checksummen, ...)

Als Empfänger kann die AES-Entschlüsselung nicht benutzt werden, da ja mehrere Sender
ausgewertet werden sollen.


kaihs

Okay, ein Teil der Rätsel hat sich schon gelöst.

hjb hat schon ein rudimentäres AMB Modul analog 00_CUL geschrieben das die Binärdaten vom Stick in ein Format analog zum CUL konvertiert.

Die in dem anderen Thread verlinkte Doku beschreibt nur das Funkmodul das in dem Stick verwendet wird und dort auch nur wie konfiguriert/gesendet wird.
Das Format des Empfangs ist dort nicht beschrieben, sollte sich aber von den anderen bereits vorhandenen Informationen ableiten lassen.
Die verwenden übrigens auch einen CC1101 als Funkchip, so wie auch der CUL.

@hjb: Kannst du noch beschreiben, welche Konfigurationseinstellungen (mit der entsprechenden Software von AMBER?) du vorgenommen hast?
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

herrmannj

ZitatOkay, ein Teil der Rätsel hat sich schon gelöst.

Ich wollte schon fragen  ;) Nicht schlecht @hjb !

Wo kann man den Stick eigentlich kaufen ?
Das io modul mit einfachsten Funktionen sollte sich auf die Beine stellen lassen.

vg
joerg 

kaihs

Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

herrmannj

hmm, 80,- ... just for fun. ?

Ich schlaf mal einige Tage drüber ...

kaihs

So, hat leider ein bisschen gedauert aber hier jetzt die erste Version mit Unterstützung für AMB.

Damit das WMBUS Modul die Nachrichten von dem AMB Stick automatisch erkennen kann habe ich festgelegt, dass diese Nachrichten mit bAMB anfangen müssen.
Außerdem muss der rssi so wie bei den CUL Nachrichten übergeben werden, d.h. am Ende durch :: getrennt.

Wenn das der Fall ist, wird die CRC Auswertung abgeschaltet.

Ein funktionierender Define basierend auf einem deiner Datenpakete wäre dann

define amb WMBUS bAMB1B442B5D0825003906037AE10000002F2F0415117300000266CC00::-52.5


In 36_WMBUS.pm und WMBus.pm habe ich das komplett eingebaut und getestet.
In 00_AMB.pm habe ich nur die nötigsten Änderungen vorgenommen, um obiges Datenformat zu unterstützen.
Für eine vollständige Unterstützung des Sticks ist da sicher noch eine Menge mehr zu tun.
Ohne solch einen Stick zu haben werde ich das aber eher nicht selbst machen.

Bitte teste, ob das so funktioniert. Falls ja werde ich die Änderungen im WMBus Teil einchecken.

Gruß,

Kai


Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

hjb

Danke für deine Mühe.

Leider erfolgt keine korrekte Auswertung:

2016.10.19 08:09:49 5: AMB-Read 3:   bAMB1B442B5D0825003906037AD10000002F2F0415C07600000266D00011::-65.5
2016.10.19 08:09:49 5: amb dispatch bAMB1B442B5D0825003906037AD10000002F2F0415C07600000266D00011::-65.5
2016.10.19 08:09:49 5: WMBUS raw msg bAMB1B442B5D0825003906037AD10000002F2F0415C07600000266D00011::-65.5
2016.10.19 08:09:49 2: WMBUS Error during LinkLayer parse:CRC check failed on link layer
2016.10.19 08:09:49 5: WMBUS raw msg bAMB1B442B5D0825003906037AD10000002F2F0415C07600000266D00011::-65.5
2016.10.19 08:09:49 2: WMBUS Error during LinkLayer parse:CRC check failed on link layer
2016.10.19 08:09:49 3: amb: Unknown code bAMB1B442B5D0825003906037AD10000002F2F0415C07600000266D00011::-65.5, help me!

Die Auswertung bei der 'define'-Anweisung erfolgt korrekt aber die
normale Auswertung erfolgt nicht.
 

Bis jetzt sind mir folgende Dinge aufgefallen:

00_AMB.pm
    Zeile 330 einblenden:   2 Letzten Zeichen entfernen

36_WMBus.pm
    Funktion 'WMBUS_Define' ist scheinbar o.k.
    aber 'WMBUS_Parse' sollte doch die gleichen Umwandlungen
    vornehmen.   

WMBUS.pm:
    Zeile 1427 einblenden
    Zeile 1428 ausblenden


Gruß
Hans-Jörg

kaihs

Ja, du hast natürlich recht, sorry.

Anbei ein neuer Versuch.
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

pokerazor

Hallo! :-) Es freut mich, dass ihr Support für den Amber Stick nachrüstet. Kann ich irgendwie helfen?

Cheers,
Hanno

kaihs

Die nötigen Änderungen in den WMBUS Modulen habe ich mittlerweile vorgenommen und eingecheckt, d.h. das wird per update ausgeliefert.

Was noch fehlt ist das Device Modul für den Stick.
Den aktuellen Stand hänge ich mal an. Das Modul ist aber nur eine 'gehackte' Version von 00_CUL.pm und daher (noch) nicht geeignet um eingecheckt zu werden.
Funktioniert aber bei hjb wohl.

Dazu müsste m. E. noch

  • überflüssiger Code entfernt werden
  • eine Konfiguration des Sticks (rfmode, RSSI) ermöglicht werden
  • die Dokumentation angepasst werden
  • Tests durchgeführt werden

Da ich den Stick nicht habe ist mir das ehrlich gesagt zu mühsam.
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

pokerazor

Ah, OK, das klingt doch toll!
Ich schaue mal, ob ich in den nächsten Wochen dazu komme, das bei mir zu testen. Da ich mich mit FHEM und Perl kaum auskenne (lebe eher in der Java-Welt und spiele momentan mit openHAB2), bin ich skeptisch, ob ich beim Aufräumen, Konfiguration nachrüsten und Doku schreiben hilfreich bin, aber ich schau mal. Testen sollte zumindest gehen! ;-)

Cheers,
Hanno

tomster

#17
Nachdem mir kürzlich auch ein AMB-Stick in die Hände gefallen ist (und ich vor ein paar Tagen einen Wasserzähler mit Engelmann FAW Funkaufsatz installiert bekommen habe), hab ich das Modul auch Mal ausprobiert.
Das Modul lädt (fehlerfrei) und zeigt auch brav "initialized" an. Ich hab es definiert mit
define amb AMB /dev/serial/by-id/usb-FTDI_AMB8465-M_AMBER_USB_Stick_2701C903-if00-port0@38400
Jedoch kann ich keinerlei get-Befehle ausführen. Egal, ob ich version, uptime, oder raw anfrage, ich bekomme stets "no answer" zurück. Hat sich hier (wäre nicht ungewöhnlich nach 6 Jahren...) vielleicht irgendetwas geändert?

Oder tut sich nur nix, weil die obigen Punkte im Modul nicht implementiert sind und (z.B.) der Wasserzähler gerade nix sendet (Uhrzeitfenster)?