Christians Tagebuch: haus

The latest posts in full-text for feed readers.


Conexa 3.0 Smart Meter in Volkszähler einbinden

Mit dem Gesetz zur Digitalisierung der Energiewende vom August 2016 wurden Messstellenbetreiber dazu verpflichtet, daß

[...] ab 2017 innerhalb von acht Jahren alle Messstellen an Zählpunkten mit einem Jahresstromverbrauch über 10 000 bis einschließlich 20 000 Kilowattstunden mit einem intelligenten Messsystem ausgestattet werden [...]

Gesetz über den Messstellenbetrieb und die Datenkommunikation in intelligenten Energienetzen - §31, Punkt 1.4

Da meine Wärmepumpe bei ~11.000 kWh pro Jahr liegt, hätte ich bis 2025 angeschlossen werden müssen. Ende August 2025 habe ich von einem Subauftragnehmer der Mitnetz ein intelligentes Messystem installiert bekommen, d.h. einen digitaler Stromzähler mit angeschlossenem Smart Meter Gateway, der den Stromverbrauch alle 15 Minuten nach Hause sendet.

Die Zählerdaten wollte ich lokal abrufen und in meine Volkszähler-Instanz einspeisen - dort landen auch schon die Daten des Hausstromzählers, der schaltbaren Steckdosen und der Waschmaschine.

Theben Conexa 3.0

Der digitale Stromzähler ist ein Landis Gyr E320 Zweirichtungszähler, an den ein Smart Meter Gateway (SMGW) vom Typ Theben Conexa 3.0 angeschlossen ist. Da es im Zählerschrank nicht so guten Empfang gibt, hat der Installateur zusätzlich eine LTE-Antenne angeschlossen.

Das eigentlich schöne ist aber, daß es einen RJ45-Netzwerkanschluss gibt, der mit "HAN" - Home Area Network - betitelt ist.

Stromzähler + Smart Meter Gateway im Schaltschrank. Rechts ist die LTE-Antenne zu sehen.

IP-Adresse

Meine Kommunikationsversuche mit ihm schlugen aber alle fehl; ein Ping-Scan brachte keine Ergebnisse. Über die Netzwerkschnittstelle kamen keine Daten - nicht mal eine DHCP-Anfrage nach einer IP-Adresse. Im Handbuch steht dann folgendes:

Die IP-Adresse der HAN-Schnittstelle wird durch den Betreiber/Verwender zur Verfügung gestellt.

Portale, Portale

Da wir in digitalen Zeiten leben dachte ich mir, daß man die Zugangsdaten bestimmt online einsehen kann und registrierte mich im Kundenportal für Netzkunden - nur um festzustellen, daß es dort keine Zugangsdaten gibt.

Die restlichen Portale auf der Portale & Services-Seite der Mitnetz klangen nicht so, als sind sie für mich geeignet.

Dann las ich den Brief von der Mitnetz nochmal:

Ihr neuer Zähler ist mit dem Messdatenportal der MITNETZ STROM verbunden. Das hat für Sie den Vorteil, dass Sie Ihre Messdaten jederzeit genau im Blick haben können. Was ist dafür zu tun? Melden Sie sich nach dem Einbau einfach im Kundenportal der MITNETZ STROM unter meine.mitnetz-strom.de für diesen kostenfreien Service an.

Das "Kundenportal" unter dieser Adresse ist die AppC App im Online-ANA & Extranet für Installateure und Planungsbüros , für das ich mich natürlich neu registrieren musste. Dort gibt es einen Punkt Meine Apps > Messdaten, hinter dem ein Formular hängt: Sie möchten die Verbrauchswerte Ihres intelligenten Messsystems einsehen?.

Nachdem ich das abgeschickt hatte, bekam ich 2 Tage später 3 E-Mails: Eine mit dem Benutzernamen, eine zweite mit dem Passwort, und die dritte mit der URL für das dritte Kundenportal: Das "Ecount Webportal" unter edm.mitnetz-strom.de.

HAN-Passwort

Im Ecount-Webportal gibt es - neben der Anzeige der aktuellen Verbrauchsdaten - auch einen Menüpunkt "HAN", unter dem man Benutzernamen des Stromzählers sieht und das Passwort setzen kann.

Das Formular war bei mir deaktiviert, weil meinem Account das Smart Meter Gateway nicht zugeordnet war:

Es wurde kein zugeordnetes SMGW gefunden.

Ich schrieb eine E-Mail an den Support, und 2 Wochen später konnte ich den Benutzernamen sehen (004747572657_ECPR0000476734) und ein Passwort setzen. Nach ca. 45 Minuten war das Passwort dann auf das SMGW übertragen. Vorher stand da:

Das HAN-Passwort wird in Kürze gesetzt.

und

Das HAN-Passwort kann nicht gesetzt werden. Ein Auftrag zum Setzen des Passwortes liegt bereits vor.

Es werden sogar für das SMGW komplexe Passwörter verlangt:

Passwortrichtlinien

  • Mindestens 10 und maximal 32 Zeichen
  • Mindestens einen Kleinbuchstaben
  • Mindestens einen Großbuchstaben
  • Mindestens eine Ziffer
  • Mindestens ein Sonderzeichen. Zulässig sind: !/()=?+*~#',;.:-_

IP!

Initial hatte ich per E-Mail um die Zugangsdaten zum SMGW gebeten, nur um dann per Post die PIN für den digitalen Stromzähler zu bekommen.

Um das abzukürzen, hatte ich dann den Support angerufen (am Sonnabend - das ist noch Service!) und daraufhin eine E-Mail mit Hinweisen zum Zugriff erhalten:

Um die HAN-Schnittstelle des Gateways zu nutzen und die auf dem Gateway gespeicherten Daten abrufen können, stehen Ihnen zwei Möglichkeiten zur Verfügung.

Bitte beachten Sie, dass die IP-Adresse für die HAN-Schnittstelle des Gateways mit 192.168.1.200 fest vorgegeben ist.

1. Möglichkeit:

Eine vom Hersteller entwickelte Oberfläche, wo die abgespeicherten Messwerte abrufbar sind.

https://192.168.1.200/cgi-bin/hanservice.cgi

Für die Anmeldung nutzen Sie bitte folgende Nutzerdaten:

1. Der Benutzername ist voreingestellt und wird Ihnen im Visualisierungsportal unter dem Reiter "HAN" angezeigt.

2. Das Kennwort vergeben Sie sich bitte im Visualisierungsportal unter dem Reiter "HAN".

2. Möglichkeit

Über die sogenannte TruDi (transparent- und Display-Software) können Sie sich ebenfalls die im Gateway gespeicherten Messwerte über die HAN-Schnittstelle ansehen. Der Vollständigkeit halber erhalten Sie den Link zur Seite der Physikalisch Technischen Bundesanstalt (PTB), wo neben der Software TruDi auch die Bedienungsanleitung heruntergeladen werden kann.

https://www.ptb.de/cms/de/ptb/fachabteilungen/abt2/fb-23/ag-234/info-center-234/trudi.html

Für die Anmeldung benötigen Sie neben den oben benannten, folgende Informationen:

3. IP-Adresse: 192.168.1.200,

4. Port: 443.

Es gibt keine Möglichkeit, die IP-Adresse anzupassen.

Da auch die Subnetzmaske des SMGW nicht änderbar ist, kommt man mit der Änderung der eigenen Subnetzmaske auch nicht weit - die Pakete kommen dann zwar zum SMGW, aber nicht zurück. Man muss deshalb unbedingt eine Adresse im 192.168.1.x-er Netz haben, um auf das Gateway zugreifen zu können.

Mein Heimnetz liegt im Bereich 192.168.3.x, deshalb musste ich meinem Homeserver eine zweite IPv4-Adresse geben.

Conexa Web-Interface

Jetzt war der Weg frei, um an den aktuellen Stromverbrauch der Wärmepumpen zu kommen! Ich öffnete https://192.168.1.200/ im Browser, tippte Benutzernamen und Passwort ein und ... sah das:

Conexa Web-Interface Seite 1 Conexa Web-Interface Seite 2

Das wars! Keine Messdaten, keine Netzwerkinformationen, nichts. Nicht einmal das Ergebnis des Selbsttests kann man über das Interface abrufen.

Pfui, Theben Smart Energy.

Auch der versprochene hanservice.cgi ist nicht verfügbar.

API

Glücklicherweise sind die Geräte mit einer API ausgestattet, die auch von der TRuDi-Software genutzt wird. Mit dieser Software war es möglich, die Zählerdaten abzurufen.

Ich fand das smgw-theben-conexa-Projekt auf GitHub, welches eine Kopie der API-Dokumentation Schnittstellenbeschreibung IF_GW_CON.pdf enthält. Damit hatte ich alle notwendigen Informationen.

Smart Meter Gateway-Informationen

Den URL-Pfadteil ecpr0000476738.sm habe ich aus der URL des Web-Interface kopiert.

$ curl -s --digest -k --user "username:passwort"\
  -XPOST -H 'Content-type: application/json'\
  https://192.168.1.200/smgw/m2m/ecpr0000476738.sm/json\
  --data '{"method":"smgw-info"}'\
  | jq .
{
  "elapsed-time": "28 miliseconds",
  "method": "smgw-info",
  "smgw-info": {
    "certificates": {
      "han": {
        "tls": "2d2d2d2d2[...]"
      },
      "wan": [
        {
          "cert-index": "0",
          "sig": "308203be[...]",
          "sub-ca": "308204373[...]"
        },
        {
          "cert-index": "1",
          "sig": "308203c130[...]",
          "sub-ca": "3082042b3[..]"
        }
      ]
    },
    "firmware-info": {
      "component": "Firmware",
      "hash": "bff7b08c0b6669be02fece905da7acc7c92b73a53c992893d1e19673e7dd1cfd",
      "version": "v3.80.3-cc"
    },
    "smgw-id": "ethe0300427561",
    "smgw-state": "a0000000",
    "smgw-time": "2025-10-03T11:21:57"
  },
  "version": "1.3.0"
}

Logmeldungen

$ curl -s --digest -k --user "username:password"\
  -XPOST -H 'Content-type: application/json'\
  https://192.168.1.200/smgw/m2m/ecpr0000476738.sm/json\
  --data '{"method":"log","fromtime":"2025-10-03T11:20:00"}'\
  | jq .
{
  "elapsed-time": "19 miliseconds",
  "log": {
    "entries": [
      {
        "event-id": "13003",
        "event-sub-id": "0",
        "index": "2439",
        "level": "6",
        "message": "Die Systemzeit wurde mit der gesetzlichen Zeit synchronisiert. Die neue Zeit ist 2025-10-03T11:20:49+02:00. Die alte Zeit war 2025-10-03T11:20:49+02:00. Die Differenz betrug 22 Millisekunden.",
        "outcome": "0",
        "subject-identity": "01005e3180a0.ethe0300427561.sm",
        "time": "2025-10-03T09:20:50Z",
        "user-identity": "01005e318011.ecpr0000476738.sm",
        "vendor-id": "PTB",
        "version": "1"
      }
    ],
    "records": "1"
  },
  "method": "log",
  "version": "1.3.0"
}

Vertragsinformationen

Hier wird es interessant, weil wir für das Auslesen die usage-point-id benötigen. Bei mir gibt es 2 "usage points": Der erste gruppiert monatlich und deshalb wenig "billing-Periods"; der zweite gruppiert nach Tagen:

$ curl -s --digest -k --user "username:password"\
  -XPOST -H 'Content-type: application/json'\
  https://192.168.1.200/smgw/m2m/ecpr0000476738.sm/json\
  --data '{"method":"user-info"}'\
  | jq .
{
  "elapsed-time": "781 miliseconds",
  "method": "user-info",
  "user-info": {
    "usage-points": [
      {
        "billing-Periods": [
          {
            "end-time": "2025-08-31T22:00:00Z",
            "start-time": "2025-08-29T10:30:01Z"
          },
          {
            "end-time": "2025-09-30T22:00:00Z",
            "start-time": "2025-08-31T22:00:00Z"
          },
          {
            "start-time": "2025-09-30T22:00:00Z"
          }
        ],
        "capture-time": "00:00:00",
        "delivery-id": "ecpr0000476735",
        "end-time": "",
        "meter": [
          {
            "meter-id": "1lgz0082488485"
          }
        ],
        "metering-point-id": "DE0010810480800000000000000088119",
        "on-demand-profile-configured": "true",
        "start-time": "2025-08-29T10:30:01Z",
        "taf-number": "1",
        "taf-state": "running",
        "usage-point-id": "01005e318021.taf014042805000706de0010810480800000000000000088119000000305185.sm",
        "usage-point-name": "IM4G_TAF01_15MI_MON_MON"
      },
      {
        "billing-Periods": [
          {
            "end-time": "2025-08-29T22:00:00Z",
            "start-time": "2025-08-29T10:30:01Z"
          },
          [...]
          {
            "end-time": "2025-10-01T22:00:00Z",
            "start-time": "2025-09-30T22:00:00Z"
          },
          {
            "end-time": "2025-10-02T22:00:00Z",
            "start-time": "2025-10-01T22:00:00Z"
          },
          {
            "start-time": "2025-10-02T22:00:00Z"
          }
        ],
        "capture-time": "00:00:00",
        "delivery-id": "ecpr0000476735",
        "end-time": "",
        "meter": [
          {
            "meter-id": "1lgz0082488485"
          }
        ],
        "metering-point-id": "DE0010810480800000000000000088119",
        "on-demand-profile-configured": "true",
        "start-time": "2025-08-29T10:30:01Z",
        "taf-number": "7",
        "taf-state": "running",
        "usage-point-id": "01005e318027.taf074042805000706de0010810480800000000000000088119000000305184.sm",
        "usage-point-name": "IM4G_TAF07_15MI_15MI_DAY"
      }
    ]
  },
  "version": "1.3.0"
}

Ich hab mir "usage point" mit der täglichen Gruppierung ausgesucht.

Daten!

Mit der usage-point-id kann man sich Verbrauchsdaten über einen Zeitraum abholen, oder aber nur den letzten Zählerwert:

$ curl -s --digest -k --user "username:password"\
  -XPOST -H 'Content-type: application/json'\
  https://192.168.1.200/smgw/m2m/ecpr0000476738.sm/json\
  --data '{"method":"readings","database":"origin","last-reading":true,"usage-point-id":"01005e318027.taf074042805000706de0010810480800000000000000088119000000305184.sm"}'\
  | jq .
{
  "elapsed-time": "26 miliseconds",
  "method": "readings",
  "readings": {
    "channels": [
      {
        "obis": "0100010800ff",
        "readings": [
          {
            "capture-time": "2025-10-03T09:29:57Z",
            "cosem-status": "a000000020803800",
            "meter-status": "20803800",
            "owner-number": "1lgz0082488485.sm",
            "signature": "91ba8abd883[...]",
            "smgw-status": "a0000000",
            "target-time": "2025-10-03T09:30:00Z",
            "value": "4075668"
          }
        ]
      }
    ],
    "records": "1"
  },
  "version": "1.3.0"
}

Die 4075668 sind 407,5668 kWh.

Volkszähler-Integration

Der Smart Meter Gateway wird auf dieselbe Weise eingebunden, wie ich es schon mit den Shelly Plug S gemacht hatte.

Zuerst im Webinterface des Volkszählers einen neuen Kanal anlegen:

Typ
El. Energie (Zählerstände)
Auflösung
10000
Stil
Stufen

Nach dem Anlegen wird eine Kanal-ID angezeigt; diese braucht man jetzt bei der vzlogger-Konfiguration im meters-Abschnitt:

//wärmepumpen
{
    "protocol": "exec",
    "enabled": true,
    "allowskip": true,
    "interval": 300,
    "command": "curl -s --digest -k --user \"username:password\" -XPOST -H 'Content-type: application/json' https://192.168.1.200/smgw/m2m/ecpr0000476738.sm/json --data '{\"method\":\"readings\",\"usage-point-id\":\"01005e318027.taf074042805000706de0010810480800000000000000088119000000305184.sm\",\"database\":\"origin\",\"last-reading\":true}' | jq -r '[\"total\", .readings.channels[].readings[].value] | join(\" \")'",
    "format": "$i $v",
    "channels": [
	{
            "uuid": "a9cc7410-a01f-11f0-bd17-a9f5d1d0316e",
            "middleware": "http://strom.home.cweiske.de/middleware.php",
            "identifier": "total",
	    "aggmode": "max"
	}
    ]
},

Jetzt den vzlogger neustarten und die Daten fließen alle 5 Minuten in die Datenbank.

Rupert schrieb auf volkszaehler-users, daß das SMGW die Daten nur alle 15 Minuten abliest. Wenn man sich die Graphen genauer anschaut, dann stimmt das auch :( Das interval kann deshalb auf 900 geändert werden.

Screenshot vom Volkszähler-Webinterface mit den Daten

Published on 2025-10-03 in ,


Volkszähler: Absoluten Zählerstand anzeigen

Ich bin bei meinem Stromanbieter Naturstrom auf einen flexiblen Tarif umgestiegen und muss deshalb jeden Monat den aktuellen Zählerstand melden, weil der kWh-Preis jeden Monat ein anderer ist.

Den Stromverbrauch erfasse ich bereits mit dem Volkszähler, d.h. Daten vom Stromzähler werden über einen USB-Infrarot-Lesekopf mit vzlogger ausgelesen, der die Daten an die middleware sendet, die sie in die Datenbank schreibt. Die Anzeige im Browser erledigt das Frontend.

Das Frontend zeigt allerdings nur relative Werte wie den aktuellen Verbrauch in Watt oder den Tagesverbrauch in kWh. Der SML-Zähler (Iskra MT175) liefert den absoluten Wert (1-0:1.8.0), und dieser steht auch in der Datenbank drin:

SELECT FROM_UNIXTIME(timestamp / 1000) AS `date`, `timestamp`, `value`
FROM `data` WHERE `channel_id`=2
ORDER BY `timestamp` DESC LIMIT 20
date timestamp value
2024-08-31 15:55:53 1725112553327 38402731.4
2024-08-31 15:50:52 1725112252638 38402711
2024-08-31 15:45:53 1725111953496 38402691.3

Im Wiki steht dazu:

In der Tabelle unter dem Graphen wird der absolute Zählerstand mit angezeigt wenn in den Kanaleigenschaften der Initialwert eingetragen ist (Zählerstand bei Inbetriebnahme des Volkszähler).

Ich habe den Kanal bearbeitet und bei "Initialverbrauch" eine 0 eingetragen. Nach 5 Minuten wurde mir der Gesamtverbrauch angezeigt, der allerdings zu niedrig war.

Nachdem ich die Differenz von aktuellem zu angezeigten Wert eingetragen hatte (8241) bekam ich den richtigen Wert angezeigt:

Volkszähler-Frontend mit aktuellem Zählerstand

Published on 2024-08-31 in


Automower: Kein Schleifensignal

Unser Mähroboter Husqvarna Automower 450X verrichtet seinen Dienst seit mehreren Jahren problemlos. Da wir die große Wiese nicht komplett nutzen wollte ich ein paar Blumeninseln anlegen, die der Roboter nicht mäht.

Weiterhin gibt es im Garten einige Obstbäume, die uns im Herbst Sorgen bereiten: Der Automower fährt über die gefallenen Äpfel drüber und hackt sie an, so daß sie nicht mehr zu gebrauchen sind. Dieser Bereich soll nur im Herbst nicht gemäht werden, den Rest des Jahres aber schon.

Schaltung

Auf der Robomäher-Website gibt es eine Seite mit Schaltplan, die das ganze erklärt.

Prinzipiell müssen die Blumeninseln mit dem normalen Begrenzungsdraht in Reihe geschaltet werden:

Schaltplan Blumeninsel

In echt ist der Plan etwas komplizierter:

Blumeninseln auf Satellitenbild

Verlegen

Ich habe kein Verlegegerät, das mir den Rasen aufschneidet, das Kabel reinlegt und wieder zumacht. Nach einiger Recherche hatte ich die nötigen Werkzeuge:

  1. Eine alte Axt, mit der ich den Boden ~3cm aufschneiden kann
  2. Eine Kulihülle, mit der ich den Draht auf den Boden des mit der Axt geschnittenen Kanals drücken kann
  3. Ein Gummihammer, um den Ritz wieder zu verschließen

Werkzeuge zum Kabelverlegen

Damit habe ich an einem Tag ca. 150m Kabel verlegt. Zeit für viele Podcasts.

Als Kabelverbinder habe ich 3M Scotchlok 314 genommen. Der lokale Händler wollte 2€/Stück haben, im Internet habe ich dann 18,59€ für 50 Stück bezahlt (und da war der Versand mit dabei). Die sind mit einer Art Kunstharz gefüllt das dafür sorgt, daß man die auch problemlos vergraben kann und keine Probleme mit Feuchtigkeit bekommt.

Kein Schleifensignal

Als das Kabel verlegt und angeschlossen war, schaltete ich den Strom ein. Die LED an der Ladestation leuchtete durchgängig grün, was laut Handbuch "Gutes Signal, keine Maßnahmen erforderlich" bedeutet.

Der Roboter fuhr auch los wie immer, blieb jedoch mit blinkenden Scheinwerfern stehen, wenn er in die Nähe der Blumeninsel kam. Das Display zeigte dann:

Kein Schleifensignal

Kein Schleifensignal

Ich war mir sicher, daß ich alles korrekt verlegt hatte. Das Kabel zur Blumeninsel hin und von der Insel zurück lagen im selben Kanal, und ich hatte die Kabel auch nicht überkreuzt.

Mein Händler meinte, daß ich den Mäher mal in den Kreis stellen sollte. Wenn er dort fährt, ist das Kabel vertauscht.

Ich stellte ihn rein, drückte "Start" und .. er fuhr vergnügt innerhalb der Blumeninsel. Kabel vertauscht.

Schaltplan: Kabel falsch verlegt

Seitdem ich das korrigiert habe fährt der Roboter wieder problemlos.

Published on 2020-05-25 in ,


Geringer Wasserdruck aus Druckkessel

Wir haben auf dem Grundstück einen Brunnen, von dem eine Leitung ins Haus an eine Pumpe führt. Stellt der Druckschalter fest, daß im Wasserdruckkessel zu wenig Wasser ist, schaltet er die Pumpe an, die dann Wasser aus dem Brunnen in den Kessel befördert.

Druckkessel mit Druckschalter Wasserpumpe

Der Kessel ist ein "100 VIM" von "AVAG-Pumpen" mit 100 Litern Fassungsvermögen.

Problem

Letztens hatten wir folgendes Problem beim Duschen:

  1. Wasser aufdrehen und auf gewünschte Temperatur einstellen
  2. 10 Sekunden mit gewollter Temperatur duschen
  3. 10 Sekunden lang: Temperatur steigt, man muss permanent nachregeln
    (weil der Kaltwasserdruck abfällt)
  4. Pumpe springt an; Temperatur fällt sehr weit ab, man muss nachregeln
    (weil der Kaltwasserdruck wieder steigt)
  5. Das Spiel beginnt von neuem

Ein ziemlich unhaltbarer Zustand. Eine Messung am normalen Wasserhahn ergab, daß lediglich 2 Liter kaltes Wasser entnommen werden mussten, um die Pumpe anspringen zu lassen.

Druck

Auf dem Typenschild des Druckkessels steht: Precharge Pressure: 2 bar. Also Kompressor rangeholt, angesteckt und auf 2 bar aufgepumpt. Problem gelöst!

Eine Dusche später stand fest, daß das Problem nicht ansatzweise gelöst war und alles noch so war wie vorher.

Richtiger Druck

Bei der Suche im Netz fand ich eine schöne Erklärung für das Druckproblem: pumpenprofi: Welchen Vordruck sollte ein Membran Druckkessel haben . Dort steht in einem Nebensatz auch die Lösung:

Der Kessel wird mit 2,5 Bar Luft oder besser Stickstoff befüllt. In dem Moment wo die Pumpe einschaltet, ist nur Luft und kein Tropfen Wasser im Tank.

Die Lösung ist es, das komplette Wasser abzulassen und erst dann die 2 bar Luftdruck reinzupumpen. "Precharge pressure" heißt auf deutsch "Vorfülldruck", der ... vor dem Befüllen hergestellt werden muss.

Ich musste zwar fast 100 Liter Wasser wegfließen lassen, aber jetzt gibt es keinerlei Probleme mehr mit der Dusche. Die Pumpe springt auch nur noch dann an, wenn wirklich nur noch wenig Wasser drin ist.

Published on 2019-05-12 in ,