Plugin-Daten
AutorMichael Schlenstedt Michael Kaufmann
Logo
StatusSTABLE
Version1.2.0
Min. LB Version0.2.3
Release Downloadhttps://github.com/mschlenstedt/LoxBerry-Plugin-Smartmeter/archive/refs/tags/Smartmeter-V1.2.0.zip
Pre-Release Downloadhttps://github.com/mschlenstedt/LoxBerry-Plugin-Smartmeter/archive/refs/tags/Smartmeter-V1.2.0.1.zip
BeschreibungDieses Plugin ermöglicht es, mit Hilfe eines USB-IR-Lesekopfs (z. B. von Volkszähler.org) viele Stromzähler über die IR-Schnittstelle auszulesen. Es werden Stromzähler unterstützt, die das SML-und das D0-Protokoll sprechen.
SprachenEN, DE
Diskussionhttps://www.loxforum.com/forum/projektforen/loxberry/plugins/85702-neues-plugin-smartmeter-stromz%C3%A4hler-auslesen

Smartmeter Plugin

Version History…

Änderungshistorie auf GITHub


Aktuell unterstützt das Plugin nur Zähler, die Ihre Daten über die serielle Schnittstelle unverschlüsselt ausgeben. Hast Du einen Schlüssel zur Entschlüsselung der Daten von Deinem Netzbetreiber bekommen (meist heisst dieser AES-Schlüssel oder ähnlich), kannst Du das Plugin leider aktuell nicht verwenden. Leider haben wir keine Möglichkeit die Entschlüsselung zu testen, da wir einen derartigen Zähler nicht besitzen.

Download

Installation

Eine sehr gute und leicht verständliche Anleitung zur Einrichtung des Plugins hat Jörg in seinem Blog veröffentlicht: http://www.meintechblog.de/2017/08/loxberry-smart-meter-mit-ir-lesekopf-in-loxone-integrieren-und-stromverbrauch-visualisieren/

Nach der Installation sucht das Plugin automatisch nach neu angeschlossenen Leseköpfen. Wenn Dein Lesekopf nicht erkannt wurde, trenne bitte die USB-Verbindung und schließe den Lesekopf erneut an. Anschließend aktiviere den Button "Nach I/R Leseköpfen suchen". Das Plugin scannt dann erneut nach neuen Leseköpfen.

Für die ersten Tests solltest Du zunächst das automatische Abfragen Deiner Zähler deaktiviert lassen. Konfiguriere Deine Zähler entsprechend (siehe "Konfigurationsoptionen" weiter unten) und speichere die Konfiguration ab. Dann frage für den ersten Test den Zähler über den entsprechenden Button manuell ab. Wenn das funktioniert kannst Du das automatische Abfragen der Zähler aktivieren.

Konfigurationsoptionen

Zähler automatisch abfragen

Mit dieser Option wird der Zähler regelmäßig vom Plugin abgefragt und die Daten an den Miniserver gesendet. Es kann ein Abfragezyklus zwischen 1 Minute und 60 Minuten festgelegt werden. Du solltest beachten, dass je nach maximal möglicher Baudrate Deines Zählers das Abfragen aller Zählerdaten eine gewissen Zeit in Anspruch nimmt. Ich empfehle einen Abfragezyklus von minimal 5 Minuten, wenn Du für Deine Anwendung keinen kürzeren Abfragezyklus benötigst. Wenn Du eine große Anzahl an Zählern über das Plugin abfragst (>5), solltest Du den Abfragezyklus noch etwas größer wählen (Faustformel: mindestens 1 Minute pro Zähler).

Daten per UDP senden

Wenn Du die Zählerdaten in Deiner Programmierung per virtuellem UDP-Eingang einlesen möchtest, musst Du diese Option aktivieren und dabei noch den UDP-Port angeben, auf dem der Miniserver die Daten erwartet. Nach jedem Abruf der Zählerdaten werden die Daten dann automatisch an den Miniserver gesendet. Die Daten werden immer an alle Miniserver gesendet, die im LoxBerry eingerichtet sind!

Die Datenstruktur, die per UDP gesendet wird, sieht wie folgt aus (die einzelnen Werte werden per Semicolon getrennt). Je nachdem welche Daten Dein Zähler bereitstellt, ist es normal, dass einige Werte nicht angegeben sind. Vorangestellt ist immer die Seriennummer des I/R-Lesekopfes (hier: 0092D106). Die Nummer wird in Deiner Installation natürlich abweichen! 

Datenstruktur Quelle erweitern

0092D106:Last_Update:2017-03-14 21:20:26
0092D106:Last_UpdateLoxEpoche:258758426
0092D106:Consumption_Total_OBIS_1.8.0:0008230.850
0092D106:Consumption_Tarif1_OBIS_1.8.1:0005413.520
0092D106:Consumption_Tarif2_OBIS_1.8.2:0002817.330
0092D106:Consumption_Tarif3_OBIS_1.8.3:0000000.000
0092D106:Consumption_Tarif4_OBIS_1.8.4:0000000.000
0092D106:Consumption_Tarif5_OBIS_1.8.5:
0092D106:Consumption_Tarif6_OBIS_1.8.6:
0092D106:Consumption_Tarif7_OBIS_1.8.7:
0092D106:Consumption_Tarif8_OBIS_1.8.8:
0092D106:Consumption_Tarif9_OBIS_1.8.9:
0092D106:Consumption_CalculatedPower_OBIS_1.99.0:1.3597
0092D106:Consumption_Power_OBIS_1.7.0:
0092D106:Delivery_Total_OBIS_2.8.0:
0092D106:Delivery_Tarif1_OBIS_2.8.1:
0092D106:Delivery_Tarif2_OBIS_2.8.2:
0092D106:Delivery_Tarif3_OBIS_2.8.3:
0092D106:Delivery_Tarif4_OBIS_2.8.4:
0092D106:Delivery_Tarif5_OBIS_2.8.5:
0092D106:Delivery_Tarif6_OBIS_2.8.6:
0092D106:Delivery_Tarif7_OBIS_2.8.7:
0092D106:Delivery_Tarif8_OBIS_2.8.8:
0092D106:Delivery_Tarif9_OBIS_2.8.9:
0092D106:Delivery_CalculatedPower_OBIS_2.99.0:0.0000
0092D106:Delivery_Power_OBIS_2.7.0:
0092D106:Total_Power_OBIS_15.7.0:
0092D106:Total_Power_OBIS_16.7.0:

Daten per HTTP abrufen

Diese Option ist automatisch aktiviert. Die URL für den virtuellen HTTP Eingang lautet: http://IP_LOXBERRY/plugins/smartmeter/index.php

I/R-Lesekopf: Beschreibung

Hier kann eine beliebige Beschreibung des Zählers (ohne Sonderzeichen und Umlaute) hinterlegt werden. Die Beschreibung dient nur zur einfacheren Erkennung, um welchen Lesekopf es sich handelt, wenn mehrere Leseköpfe an den LoxBerry angeschlossen sind.

I/R-Lesekopf: Zähler

Viele gängige Zähler sind mit Ihren Parametersätzen bereits ins Plugin integriert. Wenn Dein Zähler bereits hinterlegt ist wähle hier den Typ aus. Du brauchst den Zähler dann nicht manuell einzurichten. Häufig funktionieren auch andere Typen des gleichen Herstellers. Funktioniert auch das nicht sollte man noch "Generic D0-Protocol" oder "Generic SML-Protocol" versuchen. Wenn Dein Zähler nicht out-of-the-box unterstützt wird, wähle hier "Manuelle Konfiguration".

I/R-Lesekopf: Manuelle Einstellungen

Wenn die voreingerichteten Zähler nicht funktionieren kannst Du Deinen Zähler von Hand einrichten. Eine gute Anlaufstelle für die notwendigen Schnittstellenparameter ist die Webseite von Volkszähler.org. Du benötigst verschiedene Optionen für die serielle I/R-Schnittstelle sowie das Protokol, welches Dein Zähler spricht (D0 oder SML).

Zu Beginn solltest Du die Baudrate jeweils auf 300 Baud einstellen, Das sprechen alle Zähler. Unterstützt Dein Zähler auch eine höhere Übertragungsrate, so muss meist die Initiale Baudrate auf 300 Baud gesetzt werden (für den Handshake) und nur die maximale Baudrate wird entsprechend erhöht. Falls Du Probleme mit dem Auslesen des Zählers hast kannst Du auch versuchen über den Parameter "Verzögerung" eine Verbesserung zu erreichen. Dieser Parameter stellt eine Wartezeit zwischen einzelnen Befehlen, die an den Zähler gesendet werden, ein.

Wenn Du funktionierende Parameter für Deinen Zähler gefunden hast wären wir Dir für eine Nachricht sehr dankbar! Wir nehmen Deinen Zähler dann in die Liste unterstützter Zähler mit auf.

Einrichtung in der Loxone Config Software

Daten per UDP empfangen

Die Einrichtung erfolgt wie bei anderen Daten auch, die per UDP an den Miniserver gesendet werden. Es werden sogenannteVirtuelle UDP-Eingangsbefehle verwendet. Für jeden Wert muss ein separater UDP-Eingangsbefehl angelegt werden. Als erstes legst Du unter Peripherie -> Virtuelle E/A (oder per Taste F4) einen virtuellen UDP-Eingang an und benennst diesen beliebig (z. B. "Stromzähler"). Den Port, auf den der Eingang hören soll, musst Du in den Eigenschaften festlegen (normalerweise 7000). Dieser muss natürlich mit dem Port übereinstimmen, den Du oben im Plugin angegeben hast. Anschließend legst Du unterhalb des virtuellen Eingangs einen "Virtuellen UDP Eingang Befehl" an und benennst diesen ebenfalls beliebig (z. B. "Zählerstand").

  

In den Eigenschaften dieses Befehls musst Du unter "Befehlserkennung" nun noch eingeben, wie die empfangenen Daten verarbeitet werden sollen. Das Plugin sendet für jeden Zähler die ausgelesenen Daten (siehe oben). Wenn Du auf "Zähler manuell auslesen" klickst, werden Dir die gesendeten Daten angezeigt. Alternativ kannst Du natürlich auch im UDP Monitor in LoxoneConfig nachschauen. Jeden Wert wird dabei die Seriennummer des I/R-Lesekopfes vorangestellt. Im Beispiel oben wird der aktuelle Zählerstand z. B. wie folgt an den Miniserver gesendet: 0092D106:Consumption_Total_OBIS_1.8.0:0008230.850. Die dazugehörige Befehlserkennung sieht dann wie folgt aus:

\i0092D106:Consumption_Total_OBIS_1.8.0:\i\v

Damit erkennt der Miniserver, dass es sich bei dem Wert um den aktuellen Zählerstand handelt und setzt diese als Wert (alles, was nach dem \i……\i Zeichen kommt: \v). Diesen Schritt muss man nun für jeden Wert, den das Plugin sendet und den man in der Programmierung verarbeiten will, wiederholen. Der Wert bleibt immer so lange aktuell bis der Miniserver einen neuen Wert per UDP übermittelt bekommt.

Eine Besonderheit gibt es bei Werten, die eine Datums-/Uhrzeitangabe enthalten, zum Beispiel die Zeit des letzten UPdates. Hier sendet das Plugin die Zeitangabe als Wert in Sekunden seit 01.01.2009 (Last_UpdateLoxEpoche). Diese Angabe erwartet der Miniserver in dieser Form. Im Virtuellen Eingang musst Du angeben, dass der empfangene Wert als Datum/Uhrzeit interpretiert werden soll: <v.u>. Wenn Du die Validierung verwenden möchtest, musst Du unbedingt darauf achten, den Parameter "Maximaler Wert" hoch genug einzustellen (Ideal: 1000000000 = 1+9 Nullen)! Ich empfehle für den Anfang die Validierung zu deaktivieren.

Per HTML bereitstellen

Anstelle von UDP kannst Du auch einen Virtuellen HTTP-Eingang verwenden. Der Vorteil ist, dass die Einrichtung im Gegensatz zu UDP häufig einfacher gelingt. Insbesondere wenn der LoxBerry nicht im eigenen Netzwerk betrieben wird solltest Du diese Methode verwenden, da man sich dann keine Gedanken über das Routing der UDP-Pakete machen muss. Der Nachteil ist, dass permanent vom Miniserver Anfragen an den LoxBerry gestellt werden, bei UDP hingegen werden nur direkt nachdem das Plugin neue Zählerdaten abgeholt hat diese an den Miniserver gesendet. Normalerweise sollten die Anfragen aber kein Problem für Dein Netzwerk und den LoxBerry darstellen.

Die Einrichtung erfolgt analog zur Einrichtung der Virtuellen UDP-Eingänge (siehe oben), als Adresse für den HTML-Eingang dient folgende Adresse, als Abfragezyklus bietet sich 60 Sekunden an:

http://IPADRESSE/plugins/smartmeter/index.php

Unterhalb des HTML-Eingangs wird analog zum UDP-Eingang ein „Virtueller HTML Eingang Befehl“ angelegt. Nach dem entsprechenden Zähler-Wert sucht man im Feld "Befehlserkennung" wieder mittels \i….\i (siehe Loxone-Doku zum HTML-Eingang).

Roadmap

  • Verschlüsselung. Wann? Sobald uns ein entsprechender Zähler für Tests zur Verfügung gestellt wird
  • Einfacher Lesekopf über die serielle Schnittstelle des RaspPi. Wann? Ist integriert, Tests stehen noch aus (siehe Forum-Thread)

Fehler melden