mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
WMBUS: better error checking and documenation fixes
git-svn-id: https://svn.fhem.de/fhem/trunk@6406 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
cdc166c8f5
commit
80d1e85001
@ -69,20 +69,24 @@ WMBUS_Define($$)
|
||||
|
||||
} else {
|
||||
# manual specification
|
||||
# $a[2] =~ m/[A-Z]{3}/;
|
||||
# return "$a[2] is not a valid WMBUS manufacturer id" if( !defined($1) );
|
||||
if ($a[2] !~ m/[A-Z]{3}/) {
|
||||
return "$a[2] is not a valid WMBUS manufacturer id";
|
||||
}
|
||||
|
||||
# $a[3] =~ m/[0-9]{1,8}/;
|
||||
# return "$a[3] is not a valid WMBUS serial number id" if( !defined($1) );
|
||||
if ($a[3] !~ m/[0-9]{1,8}/) {
|
||||
return "$a[3] is not a valid WMBUS serial number";
|
||||
}
|
||||
|
||||
# $a[4] =~ m/[0-9]{1,2}/;
|
||||
# return "$a[4] is not a valid WMBUS version" if( !defined($1) );
|
||||
if ($a[4] !~ m/[0-9]{1,2}/) {
|
||||
return "$a[4] is not a valid WMBUS version";
|
||||
}
|
||||
|
||||
# $a[5] =~ m/[0-9]{1,2}/;
|
||||
# return "$a[5] is not a valid WMBUS type" if( !defined($1) );
|
||||
if ($a[5] !~ m/[0-9]{1,2}/) {
|
||||
return "$a[5] is not a valid WMBUS type";
|
||||
}
|
||||
|
||||
$hash->{Manufacturer} = $a[2];
|
||||
$hash->{IdentNumber} = $a[3];
|
||||
$hash->{IdentNumber} = int($a[3]);
|
||||
$hash->{Version} = $a[4];
|
||||
$hash->{DeviceType} = $a[5];
|
||||
|
||||
@ -402,24 +406,24 @@ WMBUS_Attr(@)
|
||||
<a name="WMBUS"></a>
|
||||
<h3>WMBUS - Wireless M-Bus</h3>
|
||||
<ul>
|
||||
Dieses Modul unterstützt Zähler mit Wireless M-Bus, z. B. für Wasser, Gas oder Elektrizität.
|
||||
Wireless M-Bus ist ein standardisiertes Protokoll das von unterschiedlichen Herstellern unterstützt wird.
|
||||
Dieses Modul unterstützt Zähler mit Wireless M-Bus, z. B. für Wasser, Gas oder Elektrizität.
|
||||
Wireless M-Bus ist ein standardisiertes Protokoll das von unterschiedlichen Herstellern unterstützt wird.
|
||||
|
||||
Es verwendet das 868 MHz Band für Radioübertragungen.
|
||||
Daher wird ein Gerät benötigt das die Wireless M-Bus Nachrichten empfangen kann, z. B. ein <a href="#CUL">CUL</a> mit culfw >= 1.59.
|
||||
Es verwendet das 868 MHz Band für Radioübertragungen.
|
||||
Daher wird ein Gerät benötigt das die Wireless M-Bus Nachrichten empfangen kann, z. B. ein <a href="#CUL">CUL</a> mit culfw >= 1.59.
|
||||
<br>
|
||||
WMBus verwendet zwei unterschiedliche Radioprotokolle, T-Mode und S-Mode. Der Empfänger muss daher so konfiguriert werden, dass er das selbe Protokoll
|
||||
WMBus verwendet zwei unterschiedliche Radioprotokolle, T-Mode und S-Mode. Der Empfänger muss daher so konfiguriert werden, dass er das selbe Protokoll
|
||||
verwendet wie der Sender. Im Falle eines CUL kann das erreicht werden, in dem das Attribut <a href="#rfmode">rfmode</a> auf WMBus_T bzw. WMBus_S gesetzt wird.
|
||||
<br>
|
||||
WMBus Geräte senden Daten periodisch abhängig von ihrer Konfiguration. Es können u. U. Tage zwischen einzelnen Nachrichten vergehen oder sie können im
|
||||
WMBus Geräte senden Daten periodisch abhängig von ihrer Konfiguration. Es können u. U. Tage zwischen einzelnen Nachrichten vergehen oder sie können im
|
||||
Minutentakt gesendet werden.
|
||||
<br>
|
||||
WMBus Nachrichten können optional verschlüsselt werden. Bei verschlüsselten Nachrichten muss der passende Schlüssel mit dem Attribut AESkey angegeben werden.
|
||||
Andernfalls wird die Entschlüsselung fehlschlagen und es können keine relevanten Daten ausgelesen werden.
|
||||
WMBus Nachrichten können optional verschlüsselt werden. Bei verschlüsselten Nachrichten muss der passende Schlüssel mit dem Attribut AESkey angegeben werden.
|
||||
Andernfalls wird die Entschlüsselung fehlschlagen und es können keine relevanten Daten ausgelesen werden.
|
||||
<br><br>
|
||||
<b>Voraussetzungen</b><br>
|
||||
Dieses Modul benötigt die perl Module Crypt::CBC, Digest::CRC and Crypt::OpenSSL::AES (AES wird nur benötigt wenn verschlüsselte Nachrichten verarbeitet werden sollen).<br>
|
||||
Bei einem Debian basierten System können diese so installiert werden<br>
|
||||
Dieses Modul benötigt die perl Module Crypt::CBC, Digest::CRC and Crypt::OpenSSL::AES (AES wird nur benötigt wenn verschlüsselte Nachrichten verarbeitet werden sollen).<br>
|
||||
Bei einem Debian basierten System können diese so installiert werden<br>
|
||||
<code>
|
||||
sudo apt-get install libcrypt-cbc-perl libdigest-crc-perl libssl-dev<br>
|
||||
sudo cpan -i Crypt::OpenSSL::AES
|
||||
@ -430,23 +434,23 @@ WMBUS_Attr(@)
|
||||
<ul>
|
||||
<code>define <name> WMBUS [<manufacturer id> <identification number> <version> <type>]|<bHexCode></code> <br>
|
||||
<br>
|
||||
Normalerweise wird ein WMBus Device nicht manuell angelegt. Dies geschieht automatisch bem Empfang der ersten Nachrichten eines Gerätes über den
|
||||
Normalerweise wird ein WMBus Device nicht manuell angelegt. Dies geschieht automatisch bem Empfang der ersten Nachrichten eines Gerätes über den
|
||||
fhem autocreate Mechanismus.
|
||||
<br>
|
||||
Für eine manuelle Definition gibt es zwei Wege.
|
||||
Für eine manuelle Definition gibt es zwei Wege.
|
||||
<ul>
|
||||
<li>
|
||||
Durch Verwendung einer WMBus Rohnachricht wie sie vom CUL empfangen wurde. So eine Nachricht beginnt mit einem kleinen 'b' und enthält mindestens
|
||||
Durch Verwendung einer WMBus Rohnachricht wie sie vom CUL empfangen wurde. So eine Nachricht beginnt mit einem kleinen 'b' und enthält mindestens
|
||||
24 hexadezimale Zeichen.
|
||||
Das WMBUS Modul extrahiert daraus alle benötigten Informationen.
|
||||
Das WMBUS Modul extrahiert daraus alle benötigten Informationen.
|
||||
</li>
|
||||
<li>
|
||||
Durch explizite Angabe der Informationen die ein WMBus Gerät eindeutig identfizieren.<br>
|
||||
Der Hersteller Code, besteht aus drei Buchstaben als Abkürzung des Herstellernamens. Eine Liste der Abkürzungen findet sich unter
|
||||
Durch explizite Angabe der Informationen die ein WMBus Gerät eindeutig identfizieren.<br>
|
||||
Der Hersteller Code, besteht aus drei Buchstaben als Abkürzung des Herstellernamens. Eine Liste der Abkürzungen findet sich unter
|
||||
<a href="http://dlms.com/organization/flagmanufacturesids/index.html">dlms.com</a><br>
|
||||
Die Idenitfikationsnummer ist die Seriennummer des Zählers.<br>
|
||||
Version ist ein Versionscode des Zählers.<br>
|
||||
Typ ist die Art des Zählers, z. B. Wasser oder Elektrizität, kodiert als Zahl.
|
||||
Die Idenitfikationsnummer ist die Seriennummer des Zählers.<br>
|
||||
Version ist ein Versionscode des Zählers.<br>
|
||||
Typ ist die Art des Zählers, z. B. Wasser oder Elektrizität, kodiert als Zahl.
|
||||
</li>
|
||||
<br>
|
||||
</ul>
|
||||
@ -462,24 +466,24 @@ WMBUS_Attr(@)
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#IODev">IODev</a><br>
|
||||
Setzt den IO oder physisches Gerät welches für den Empfang der Signale für dieses 'logische' Gerät verwendet werden soll.
|
||||
Ein Beispiel für ein solches Gerät ist ein CUL.
|
||||
Setzt den IO oder physisches Gerät welches für den Empfang der Signale für dieses 'logische' Gerät verwendet werden soll.
|
||||
Ein Beispiel für ein solches Gerät ist ein CUL.
|
||||
</li><br>
|
||||
<li>AESKey<br>
|
||||
Ein 16 Bytes langer AES-Schlüssel in hexadezimaler Schreibweise. Wird verwendet um Nachrichten von Zählern zu entschlüsseln bei denen
|
||||
die Verschlüsselung aktiviert ist.
|
||||
Ein 16 Bytes langer AES-Schlüssel in hexadezimaler Schreibweise. Wird verwendet um Nachrichten von Zählern zu entschlüsseln bei denen
|
||||
die Verschlüsselung aktiviert ist.
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
<a name="WMBUSreadings"></a>
|
||||
<b>Readings</b><br>
|
||||
<ul>
|
||||
Zähler können sehr viele unterschiedliche Informationen senden, abhängig von ihrem Typ. Ein Elektrizitätszähler wird andere Daten senden als ein
|
||||
Wasserzähler. Die Information hängt auch vom Hersteller des Zählers ab. Für weitere Informationen siehe die WMBus Spezifikation unter
|
||||
Zähler können sehr viele unterschiedliche Informationen senden, abhängig von ihrem Typ. Ein Elektrizitätszähler wird andere Daten senden als ein
|
||||
Wasserzähler. Die Information hängt auch vom Hersteller des Zählers ab. Für weitere Informationen siehe die WMBus Spezifikation unter
|
||||
<a href="http://www.oms-group.org">oms-group.org</a>.
|
||||
<br><br>
|
||||
Die Readings werden als Blöck dargestellt, beginnend mit Block 1. Ein Zähler kann mehrere Blöcke senden.
|
||||
Jeder Block enthält zumindest einen Typ, einen Wert und eine Einheit. Für einen Elektrizitätszähler könnte das z. B. so aussehen<br>
|
||||
Die Readings werden als Block dargestellt, beginnend mit Block 1. Ein Zähler kann mehrere Blöcke senden.
|
||||
Jeder Block enthält zumindest einen Typ, einen Wert und eine Einheit. Für einen Elektrizitätszähler könnte das z. B. so aussehen<br>
|
||||
<ul>
|
||||
<code>1:type VIF_ELECTRIC_ENERGY</code><br>
|
||||
<code>1:unit Wh</code><br>
|
||||
@ -488,9 +492,9 @@ WMBUS_Attr(@)
|
||||
<br>
|
||||
Es gibt auch eine Anzahl von festen Readings.
|
||||
<ul>
|
||||
<li><code>is_encrypted</code> ist 1 wenn die empfangene Nachricht verschlüsselt ist.</li>
|
||||
<li><code>decryption_ok</code> ist 1 wenn die Nachricht entweder erfolgreich entschlüsselt wurde oder gar nicht verschlüsselt war.</li>
|
||||
<li><code>state</code> enthält den Status des Zählers und kann Fehlermeldungen wie 'battery low' enthalten. Normalerweise ist der Wert 'no error'.</li>
|
||||
<li><code>is_encrypted</code> ist 1 wenn die empfangene Nachricht verschlüsselt ist.</li>
|
||||
<li><code>decryption_ok</code> ist 1 wenn die Nachricht entweder erfolgreich entschlüsselt wurde oder gar nicht verschlüsselt war.</li>
|
||||
<li><code>state</code> enthält den Status des Zählers und kann Fehlermeldungen wie 'battery low' enthalten. Normalerweise ist der Wert 'no error'.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
@ -401,7 +401,8 @@ my %validDeviceTypes = (
|
||||
0x19 => 'A/D Converter',
|
||||
0x1a => 'Smokedetector',
|
||||
0x1b => 'Room sensor (e.g. temperature or humidity)',
|
||||
0x1c => 'Gasdetector'
|
||||
0x1c => 'Gasdetector',
|
||||
0x28 => 'Waste water',
|
||||
|
||||
);
|
||||
|
||||
@ -838,7 +839,7 @@ sub decodeApplicationLayer($) {
|
||||
#print "Long header\n";
|
||||
($self->{meter_id}, $self->{meter_man}, $self->{meter_vers}, $self->{meter_dev}, $self->{access_no}, $self->{status}, $self->{cw})
|
||||
= unpack('VvCCCCn', substr($applicationlayer,$offset));
|
||||
$self->{meter_devtypestring} = $validDeviceTypes{$self->{meter_dev}};
|
||||
$self->{meter_devtypestring} = $validDeviceTypes{$self->{meter_dev}} || 'unknown';
|
||||
$self->{meter_manufacturer} = $self->manId2ascii($self->{meter_man});
|
||||
$offset += 12;
|
||||
} else {
|
||||
@ -919,7 +920,7 @@ sub decodeLinkLayer($$)
|
||||
}
|
||||
|
||||
$self->{manufacturer} = $self->manId2ascii($self->{mfield});
|
||||
$self->{typestring} = $validDeviceTypes{$self->{afield_type}};
|
||||
$self->{typestring} = $validDeviceTypes{$self->{afield_type}} || 'unknown';
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user