Christians Tagebuch: hardware

The latest posts in full-text for feed readers.


OpenWrt support for Zyxel NWA90AX

The 2nd floor needed an additional wifi access point, and so I purchased a used Zyxel NWA90AX for 60€ on kleinanzeigen.de.

Before buying I checked that it is supported by OpenWrt and found that NWA90AX Pro is supported, but it uses a totally different chipset. The NWA50AX is also supported and has the same hardware as the NWA90AX:

NWA90AX: Identical hardware as in NWA50AX, but with added features like Captive portal for Guest access and WPA Enterprise for AD/Radius (Credential) authentication.

I followed the NWA50AX instructions (especially flashing the vendor firmware to get the Current Image to 1), but then flashing failed with:

errno: -25007
errmsg: Firmware content error!

I immediately suspected that the firmware contains a list of compatible models, but needed 5 days and many detours to - accidentially - find the model code 77 e1 of the NWA90AX.

Now the access point provides beautiful 5 + 2.4 GHz wireless lan with the latest OpenWrt firmware. The patch that adds support is awaiting review.

Zyxel NWA90AX

Accidental discovery

I downloaded every available NWA50AX and NWA90AX firmware to check which 50 version I can flash over the same 90 version.

Version NWA50AX NWA90AX
6.25(8) NWA50AX_6.25(ABYW.8)C0.zip
6.27(2) - NWA90AX_6.27(ACCV.2)C0.zip
6.29(3) NWA50AX_6.29(ABYW.3)C0.zip NWA90AX_6.29(ACCV.3)C0.zip
6.29(4) NWA50AX_6.29(ABYW.4)C0.zip NWA90AX_6.29(ACCV.4)C0.zip
7.00(1) - NWA90AX_7.00(ACCV.1)C0.zip
7.00(2) NWA50AX_7.00(ABYW.2)C0.zip NWA90AX_7.00(ACCV.2)C0.zip
7.10(1) - NWA90AX_7.10(ACCV.1)C0.zip
7.10(3) NWA50AX_7.10(ABYW.3)C0.zip NWA90AX_7.10(ACCV.3)C0.zip

Only the latest V7.10(3) was the one whose 50 version I could flash onto my 90 hardware.

While installing the firmware versions, I had the browser developer console's network tab open and saw the following:

## Checking hash(es) for FIT Image at 752a9000 ...
   Hash(es) for Image 0 (script): sha256+

   Hash(es) for Image 1 (Bootloader): sha256+

   Hash(es) for Image 2 (firmware): sha256+

   Hash(es) for Image 3 (rootfs_data): sha256+

   Hash(es) for Image 4 (logs): sha256+

   Hash(es) for Image 5 (myzyxel): sha256+

   Hash(es) for Image 6 (bootconfig): sha256+

   Hash(es) for Image 7 (mrd): sha256+

Content-Type: text/html

<html><head></head><body>
var zyshdata0=[{'_model':'NWA90AX','_firmware_version':'V6.29(ACCV.4)','_build_date':'2024-01-10 14:37:56'}];
var errno0=0;
var errmsg0='OK';
</body></html>
Upgrade started
Current time: Sat Sep 27 15:54:56 DGMT 2025
----- kernel cmdline -----
console=ttyS0,115200 loglevel=1 bootImage=1 bootVer=V1.03 rootfstype=squashfs,jffs2
------- FW version -------
FIRMWARE_VER=6.29(ACCV.4)
BUILD_DATE=2024-01-10 14:37:56
MODEL_ID=NWA90AX
COMPATIBLE_PRODUCT_MODEL_0=77E1
COMPATIBLE_PRODUCT_MODEL_1=FFFF
COMPATIBLE_PRODUCT_MODEL_2=FFFF
COMPATIBLE_PRODUCT_MODEL_3=FFFF
COMPATIBLE_PRODUCT_MODEL_4=FFFF

I don't know if that was a bug in this specific firmware, but the upgrade log was sent to the browser - not only the part within the <html>. But this was where I found the NWA90AX's model code.

Published on 2025-10-05 in


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 ,


Shelly Plug S in Volkszähler einbinden

Seit Jahren schon zeichne ich den Gesamtstromverbrauch des Hauses direkt von unserem Stromzähler mit Hilfe eines Optokopfes auf. Die niedrigsten Verbrauchswerte sind um die 150 Watt, darunter liegt der Stromverbrauch niemals. Ich wollte nun herausfinden, wo der ganze Strom verbraucht wird.

Von Weihnachten hatte ich noch ein paar Shelly Plug S-Zwischenstecker rumliegen. Diese kann man nicht nur per HTTP-Befehlen an- und ausschalten, sondern sie messen auch die verbrauchte Energie und bieten eine HTTP-basierte API zum Abruf des Verbrauchs: /meter/0.

Zur Datenaufzeichnung und Visualisierung nutze ich den Volkszähler. Der vzlogger wird alle 10 Minuten per cron gestartet, liest die Daten vom Stromzähler aus und schreibt sie dann in die "Middleware", die die Daten in die Datenbank wirft. Die Ausgabe erfolgt per volkszähler-Webinterface im Browser:

Volkszähler-Webinterface im Browser

Kanal anlegen

Bevor man den Logger konfigurieren kann, muss im Webinterface ein neuer Kanal angelegt werden. Also Kanal hinzufügen und dann Kanal erstellen und folgende Einstellungen vornehmen:

Typ
El. Energie (Zählerstände)
Auflösung
60000 (der normale Stromzähler hat kWh-Auflösung, und der Shelly Plug S misst aber Wattminuten. 60.000 Wattminuten sind eine kWh.)
Stil
steps (die richtige Einstellung für Zähler)

Der Rest ist nach Belieben wählbar.

Hat man den Kanal angelegt bekommt man eine UUID, die man sich merken bzw. in eine Textdatei kopieren sollte - man braucht sie für die Loggerkonfiguration.

Shelly Plug S: Daten abrufen

Der vzlogger muss die Daten vom Shelly abrufen. Dazu habe ich im "meters"-Abschnitt der vzlogger.conf-Datei ein neues Gerät angelegt:

Das Protokoll ist "exec", weil ein Befehl ausgeführt werden soll. Hier ist ganz wichtig, daß der vzlogger nicht als root laufen darf, weil das exec dann (absichtlich) nicht funktioniert.

Der Befehl command holt sich die aktuellen Verbrauchsdaten mit curl vom Shelly ab und formatiert sie mit jq so um, daß die Zeile "total 2342" rauskommt (wenn der Zählerstand 2342 ist).

Das format sagt, daß zuerst der Identifier ("total"), dann ein Leerzeichen und dann der Zählerstand ("2342") kommt. Ich hatte es ohne Identifier probiert und das format nur auf "$v" gesetzt, aber dann hat der vzlogger nicht mitbekommen, daß Daten vorhanden waren:

[Mar 26 13:00:02][exec] MeterExec::read: Closing process 'curl -s http://shellyplug1/meter/0 | jq -r .total''
[Mar 26 13:00:02][mtr3] Stopped reading.
[Mar 26 13:00:02][chn4] ==> number of tuples: 0
[Mar 26 13:00:02][chn4] JSON request body is null. Nothing to send now.

Mit diesen Einstellungen schreibt der Logger jetzt brav aller 10 Minuten die Verbrauchswerte für die fünf ShellyPlugS in die Datenbank.

Shelly PM Mini Gen3

Der Befehl für einen Shelly PM Mini Gen3 ist (API-Doku):

Das + 12412868 habe ich eingebaut, weil ich von einem Shelly Plug S auf einen Shelly PM Mini Gen3 umgestiegen bin und der Absolutwert in der Datenbank fortgeführt werden musste. Ohne die Anpassung kommt es zu einem krass Sprung von -154kW beim Wechsel vom alten zum neuen Zähler.

Außerdem muss man im Frontend beim Kanal die Auflösung auf 1000/kWh setzen, weil der PM Mini den Gesamtverbrauch in Wattstunden zurückgibt, und nicht in Wattminuten.

Aus diesem Grund ist es auch besser, wenn man beim Wechsel von Shelly Plug auf Shelly PM Mini einen neuen Kanal anlegt, weil sich die Basiseinheit geändert hat.

Restmenge

Die Daten wurden nun mitgeloggt und auch im Browser hübsch angezeigt. Was mir fehlte war noch eine Anzeige, wieviel des verbrauchten Stroms nicht gemessen wird.

Dazu legte ich einen "Verbrauchssensor (virt.)" an. In die Felder für die Eingänge schreibt man die UUIDs der Kanäle, und bei "Regel" die Berechnung:

val(in1)-val(in2)-val(in3)

Hier wird der Wert on Eingang 1 als Basis genutzt und dann die Werte von Eingang 2 und 3 abgezogen. So sehe ich, wieviel "unbekannten" Strom noch im Haus verbraucht wird.

Ich habe 2 weitere virtuelle Sensoren definiert, in denen ich jeweils 4 Messwerte zusammengerechnet habe (weil das Webinterface nur Felder für 4 Eingänge anzeigt). Diese habe ich dann im 3. virtuellen Sensor final vom Gesamtstrom abgezogen.

Restmengenanzeige (lila)

Published on 2022-03-30 in ,


Broken screen hinge on Purism Librem 13v3

I've been using my Purism Librem 13v3 laptop daily for nearly 8 years, and now the left screen hinge mounts broke on the screen side.

I noticed it when closing the lid gave away cracking sounds. The closed screen is not aligned with the bottom case anymore; I can see a bit of the body.

Other people had the same problem with what Purism once advertised as super sturdy hinge:

Designed to last, reinforced metal, mounted directly to the case and screen

We get excited about hinges. Often overlooked by inadequate laptop makers, our hinge is built to be sturdy for life, staying shut when shut, and staying put in any of the 130° of screen angle while in use.

The screen hinge was never the best compared to experiences with e.g. a Macbook Air - tipping the screen a bit, or having some bumps while riding the train would wobble the screen back and forth a bit.

Screen displaced while closed, from the top Screen displaced, from the side Left hinge top Left hinge: Detached screw

Replacement

I contacted Purism support and they asked me to verify that the motherboard mounts are still ok - it's a common problem that when the screen's hinge mounts broke off, the motherboard ones follow suit:

It looks like you need a new display, however, if the screw mounts are cracked, then it will break on the keyboard side as soon as the new display is installed.

Please inspect the screw mounts for damage. If they are cracked, please prepare some epoxy glue and ensure that the screw mounts are properly aligned. Once they are aligned, please apply the glue in a couple of thin layers, letting it dry for a day or two between applications.

Support also gave me a price: USD $366.89 ($299.00 Librem 13 v3 screen, $67.89 shipping to, Germany).

My internal limit I set before contacting support was 100$, maybe plus a bit shipping, but over 300 is too much. I'll buy a new laptop, this time from a different manufacturer.

Librem 13v3 problems

I had a number of problems with this laptop. Some of them still occur today, which is part of why I won't repair it or buy a new one from Purism:

  1. Bottom case screws fell off before I ever tried to open it.

  2. When waking from sleep, the laptop CPU fan sometimes blasted to full speed, while the CPU itself was awful slow.

    Could be fixed by sleeping and waking again.

  3. Wifi driver stop working every now and then, spamming dmesg full of messages:

    ath: phy0: Failed to wakeup in 500us
    ath: phy0: RX failed to go idle in 10 ms RXSM=0xffffffff
    ath: phy0: DMA failed to stop in 10 ms AR_CR=0xffffffff AR_DIAG_SW=0xffffffff DMADBG_7=0xffffffff

    I had to reboot when I noticed this problem, which often was on the train to/from work.

  4. Left Ctrl, Shift, S and up/down arrow keys have their black paint removed probably because of fingernails and heavy use.

    Keys

  5. Rubber foot fell off

  6. Internal microphone is awful

  7. The screen gets more and more grey smudges below the top screen layer, which can't be wiped off. It's like dead pixels, but in grey instead of black.

  8. And now the broken hinge

What I still like are the hardware switches for webcam+microphone and bluetooth+wifi and that the system runs coreboot.

Apart from that, there is nothing that would want me get a Purism device again.

Published on 2025-06-08 in


Ersatzohrpolster für Sennheiser HD 461

2015 oder 2016 wollte ich Kopfhörer kaufen und entschied mich für Sennheiser HD 461, weil sie von einer Marke mit gutem Leumund waren. Jetzt im Jahre 2025 löste sich das Wildlederimitat der Ohrpolster auf und fiel auseinander:

Kaputt

Der Sennheiser-Support meinte, daß ich die Köpfhörer wegwerfen muss:

Leider haben wir keine Ersatzpolster mehr für HD 461.

Auch Ohrpolster anderer Kopfhörer sind leider nicht kompatibel.

So einfach wollte ich mich aber nicht geschlagen geben und fand in einem Onlineshop folgenden Produkttitel:

Sennheiser HD461 / HD471 / HD429 / HD200 / HD201 / HD200Pro Official Replacement Ear Pads

Also sind die Ohrpolster der HD 200 Pro kompatibel bzw. die gleichen wie für die HD 461?

Ich bestellte die Ersatzohrmuschelpolster für insgesamt 23,39€ auf einer deutschen Onlineshopseite, bei der "Lieferung aus Schweden" stand. Auf der Rechnung stand dann eine Firma aus Großbritannien, und auf dem Kopfhörer "made in China".

.. aber die Ersatzpolster passten! Wieder etwas Elektroschrott vermieden.

Neue vs. alte Ohrmuschel Alles wieder fein

Published on 2025-05-28 in


Dunstabzugshauben-LEDs brummen

Wir haben über unserer Kochinsel eine Dunstabzugshaube ("Inselhaube") Bosch DIE 975 A, die Slots für 4 Lampen mit Fassung G4 hat. Seit ein paar Wochen geben die LEDs allerdings einen nervigen Ton ab:

Meine Vermutung war, daß der Trafo nach 18 Jahren langsam nicht mehr will. Auf der Bosch-Produktseite ist in der Ersatzteilliste der Transformator 00187450 zu finden, zu einem Preis von 131,95€.

Ein Freund kam auf die Idee, daß der Trafo vielleicht zu wenig arbeiten muss und sich deshalb komisch verhält. Ursprünglich ist der Transformator für 4x 20W Halogen-Lampen mit insgesamt 80W Leistung ausgelegt. Durch die inzwischen eingebauten LEDs werden aber nur noch ~6W benötigt.

Erst im 6. Geschäft - einem Obi - fand ich noch Halogen-Lampen; die anderen Läden hatten alle nur noch LEDs. Mit dem Einbau einer 20W-Halogenlampe war das Störgeräusch verschwunden.

Die durch die Halogenlampe erhöhten Energiekosten erreichen bei 1h Nutzung pro Tag erst in ~75 Jahren die 130€, die ein neuer Trafo gekostet hätte.

Foto Kochinselhaube

Published on 2025-05-26 in


Waschmaschine: Türverriegelung defekt

Unsere Waschmaschine vom Typ Blomberg WNF 74461 wollte nicht mehr: Programm einstellen, Start/Pause drücken und .. nichts passiert. Sie geht einfach nicht an.

Das Handbuch sagt dazu:

Problem: Die Maschine arbeitet nicht, nachdem das Programm gewählt und die Start/Pause/Abbrechen-Taste gedrückt wurde.

Lösung: Die Waschmaschinentür ist möglicherweise nicht ganz geschlossen.

Die Waschmaschine verriegelt beim Programmstart normalerweise die Tür. Dabei wird dann auf dem Display ein Schloß angezeigt, und der Waschvorgang startet. Bei uns wurde kein Schloß mehr angezeigt, und ich vermutete, daß die Türsicherung defekt ist.

Türsicherung ausbauen

Zuerst den Waschmaschinenstecker aus der Steckdose.

Wenn man die Fronttür öffnet, sieht man einen runden grauen Gummi. Der Gummi wird mit einem Draht mit Spannfeder in Position gehalten. Mit einer Zange kann man den Draht an der Feder abziehen, und dann kann die Gummidichtung nach innen in die Trommel geklappt werden.

Gummidichtung Feder am Draht

Die Verriegelung ist mit zwei Schrauben gesichert und kann jetzt abgeschraubt werden. Mit der Hand kann man in den Spalt zwischen Gehäuse und Trommel greifen, die Türverriegelung festhalten und rausziehen.

Verschluss mit Schrauben

Es stellt sich raus, daß die Verriegelung vom Typ Metalflex ZV-446 ist und ca. 10€ + Versand kostet:

Türverschluss ZV 446

Reparatur?

Bei ifixit gibt es eine Anleitung Türschalter Metalflex ZV-446 reparieren, die leider etwas unvollständig ist. Das Säubern des Kontakts hat bei mir auch nicht geholfen.

Am Ende habe ich mich dazu entschieden, die Sicherung zu überbrücken. Die Waschmaschine denkt jetzt, daß die Tür immer gesichert ist, aber das stört nicht weiter. (Die Kinder sind groß genug, daß sie die Tür nicht während des Waschgangs öffnen.)

Gehäuse öffnen

Beim Gehäuse muss zuerst der braune Aufsatz an den Kontakten entfernt werden - es gibt zwei weiße Nasen, die unter ihm verborgen sind und die man abbricht, wenn man den Aufsatz drauflässt:

Nasen - die rechte ist schon abgebrochen

Ich habe den Aufsatz entfernt, indem ich einen Haken aus meinem Lock-Picking-Set in den kleinen Spalt geschoben und die Halterung nach außen gedrückt habe:

Kontaktabdeckung lösen

Die Schraube auf der Rückseite muss nicht angefasst werden!

Unnötige Teile ausbauen

Als der Deckel des Schalters offen war, habe ich die rot markierten Teile entfernt - auch den runden Heizstein, der vermutlich den Bimetallstreifen erhitzt. (Das war bei mir das Problem: sobald der heiß wurde, gab es keine elektrische Verbindung zwischen zweiten und dritten Kontakt mehr)

Teile

Dann die Spitze des Bimetallstreifens runterdrücken, damit die Verbindung mit dem drunterliegenden Kontaktpunkt hergestellt ist. Mit dem Multimeter prüfen, ob zwischen Kontakt 2 und 3 Strom fließen kann, und dann alles wieder zusammenbauen.

Fertig

Die Waschmaschine läuft wieder und zeigt auf dem Display das Schloß:

Display zeigt wieder das Schloß an

Published on 2025-04-05 in


GameStick: Remove melted rubber coating

2013 PlayJam GameStick devices have a all-around rubber coating, and the controllers have a rubberized bottom. After 11 years, the coating's chemicals dissolved, leaving a sticky mess that sticks to your fingers when touching it.

GameStick controller with sticky bottom

It is possible to get rid of the coating by rubbing it off with Isopropanol (Isopropyl alcohol), an old sock and a pair of surgical gloves.

Cleaned controller

The rubber coating was mentioned in the 2013-07-11 Kickstarter Update #36: The Golden Sample:

  • Put a rubberized coating on the bottom of the controller. This gives the finish a really nice quality feel.
  • Used a rubber coating on the GameStick so that it did not scratch when inserted in to the controller. It really looks and feels fantastic as a result.

Also on: Mastodon, Twitter

Published on 2024-12-31 in ,


"Waschmaschine fertig"-Benachrichtigungen

Immer mal wieder sind Waschmaschine oder Trockner fertig, aber wir vergessen danach zu schauen und nehmen die Wäsche dann zu spät raus. Idealerweise würde uns das Gerät Bescheid sagen wenn es fertig ist, aber bei uns sind weder Waschmaschine noch Trockner mit Netzwerkfähigkeit ausgestattet.

Nachdem ich den Shelly Plug S in den Volkszähler eingebunden hatte kam ich auf die Idee, daß ein Script einfach regelmäßig prüfen könnte, ob das Gerät in den letzten X Minuten Strom verbraucht hat und jetzt keinen mehr verbraucht. Das wäre das Signal, daß es fertig ist und der Trigger zum Verschicken der Benachrichtigung.

Das Ergebnis ist das Script washing-finished, welches auf meinem Git-Server und auf Codeberg zu finden ist.

Ich lasse es alle 5 Minuten per cron laufen; es prüft den Stromverbrauch der letzten 20 Minuten. Wenn der über 5 Watt war und jetzt unter 5 Watt liegt, dann beendet sich das Script mit Exitcode 0. Dadurch kann man es mit && mit dem nächsten Script verknüpfen:

*/5 * * * *  /usr/local/src/washing-finished-vz/washing-finished.php 03baab00-6d01-11ef-829a-7bbe8571431b && xmppc -m message chat cweiske@cweiske.de "Waschmaschine fertig"

Das Handy zeigt das ganze dann an:

Benachrichtigung auf dem Handy

Auch auf: Mastodon.

Published on 2024-09-15 in


PS/2-USB-Adapter für deutsche Tastatur

Mein neuer PC hat keine PS/2-Buchsen mehr, weshalb ich für mein Logitech "Internet Keyboard" einen PS/2-auf-USB-Adapter brauchte.

Es stellte sich heraus, daß viele Adapter nicht für deutsche Tastaturen geeignet sind - englische Tastaturen haben 104 Tasten, deutsche - und die für andere europäische Sprachen - aber 105, und zwar die Taste rechts neben dem linken Shift: die für <, > sowie |. (Das original PS/2-Layout hatte 101/102 Tasten, Microsoft fügte dann Windows- und Menütasten hinzu.)

Die meisten PS/2-auf-USB-Adapter sind für englische Keyboards mit 104 Tasten gemacht; die kleiner-als-Taste funktioniert dort nicht.

Adapter

Der DeLock 61051 USB to PS/2 Adapter funktioniert problemlos mit deutschen Tastaturen. Selbst Zusatztasten wie Browser, E-Mail und Suche werden erkannt. Ich erstand ihn für 8,95€ bei Reichelt.

Der PCPlay PS/2 Keyboard+Mouse Adapter (13ba:0017) hingegen ist ein Drecksgerät: Er funktioniert nur manchmal, dann muss man ihn ab- und wieder anstecken. Die <-Taste wird nicht erkannt. Verkauft wurde er für 3€ unter dem Namen USB Konverter, 1.1, A Stecker auf 2x PS/2-Buchse.

Published on 2024-05-04 in