„Protocol error" im Mosquitto‐Log nach Zendure‐Firmware‐Update (KW26 27 in 2026) - Kieft-C/Zendure-BKW-PV GitHub Wiki

Fehlerbehebung: „no shared cipher" / „Protocol error" im Mosquitto-Log nach Zendure-Firmware-Update

Quelle/Kontext: GitHub-Issue #1438 im Zendure-HA-Repository, Lösung sinngemäß aus einem Kommentar dort übernommen und ins Deutsche übertragen.

Symptom

Nach einem Firmware-Update deines Zendure-Geräts (im gemeldeten Fall: Hyper 2000, AC-Firmware V2.1.17 / Master-Firmware 2.1.47) tauchen im Mosquitto-Log plötzlich Einträge wie diese auf:

New connection from <Geräte-IP>:<Port> on port 8883.
OpenSSL Error while trying to get the error[0]: error:0A0000C1:SSL routines::no shared cipher
Client <Geräte-IP> [<Geräte-IP>:<Port>] disconnected: Protocol error.

Gleichzeitig liefern alle Entitäten des betroffenen Geräts in Home Assistant keine Daten mehr.

Ursache

Das ist kein Problem mit Client-Zertifikaten, sondern ein reines Cipher-Negotiation-Problem (die Verschlüsselungsverfahren von Gerät und Broker passen nicht zusammen) – die TLS-Handshake-Verhandlung scheitert.

Hintergrund: Neuere Zendure-Firmware nutzt für die lokale MQTT-Verbindung jetzt verpflichtend eine TLS-verschlüsselte Verbindung auf Port 8883 statt der bisherigen unverschlüsselten Verbindung auf Port 1883. Diese Änderung geht auf die EU-Vorgabe EN 18031 zurück (Cybersicherheits-Anforderungen für Funkanlagen), auf die auch Zendures eigene ZenSDK-Dokumentation verweist. Ein Standard-Mosquitto-Broker (z. B. aus dem Home-Assistant-AddOn) ist von Haus aus aber nicht für einen passenden TLS-Listener auf Port 8883 konfiguriert – der Handshake scheitert, die Verbindung wird als „Protocol error" abgebrochen.

Wichtig: Das Gerät versucht die Verbindung fortlaufend automatisch erneut, bis der Broker sie akzeptiert. Es besteht also kein Zeitdruck oder Risiko eines dauerhaften Ausfalls, solange die Ursache behoben wird.

Lösung

Da sich das Gerät per IP-Adresse verbindet und das Zertifikat nicht validiert, reicht ein einfaches, selbstsigniertes RSA-Zertifikat für den Broker vollkommen aus.

Schritt 1: Zertifikat erzeugen

Öffne eine Shell auf deinem Home-Assistant-Host (z. B. über das AddOn „Advanced SSH & Web Terminal") und führe aus:

openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout /ssl/mqtt_rsa.key -out /ssl/mqtt_rsa.crt \
  -days 3650 -subj "/CN=homeassistant"

Schritt 2: Mosquitto auf das neue Zertifikat verweisen

Gehe zu Einstellungen → Add-ons → Mosquitto broker → Konfiguration und trage dort ein (die Pfade sind relativ zu /ssl/):

certfile: mqtt_rsa.crt
keyfile: mqtt_rsa.key

Schritt 3: Mosquitto-AddOn neu starten

Nach dem Neustart sollte das Gerät sich beim nächsten automatischen Verbindungsversuch erfolgreich verbinden – kein erneutes Pairing nötig.

Wichtig zu wissen

Diese Änderung betrifft ausschließlich den TLS-Listener auf Port 8883, den das Zendure-Gerät für die verschlüsselte Verbindung nutzt. Home Assistants eigene MQTT-Integration sowie die Zendure-HA-Integration selbst verbinden sich weiterhin unverschlüsselt auf Port 1883 mit dem Broker und sind von diesem Problem nicht betroffen.

Verbindung testen

Mit folgendem Befehl kannst du direkt prüfen, ob der Broker jetzt eine vom Gerät akzeptierte Cipher-Suite anbietet:

openssl s_client -connect <Broker-IP>:8883 -tls1_2 \
  -cipher 'AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA' </dev/null

Ein erfolgreicher Handshake bedeutet: Das Gerät verbindet sich von selbst wieder, sobald es seinen nächsten automatischen Versuch startet.

ℹ️ Ein Hinweis wie „self-signed certificate" in der Ausgabe ist normal und unbedenklich – das Zertifikat wird vom Gerät ohnehin nicht validiert.

Falls es weiterhin nicht funktioniert

Manche OpenSSL-Builds schließen diese (älteren) Cipher-Suiten standardmäßig aus ihren Default-Einstellungen aus. In diesem Fall musst du sie explizit aktivieren:

  1. Erstelle die Datei /share/mosquitto/zendure.conf mit folgendem Inhalt:
    ciphers AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA@SECLEVEL=0
    
  2. Aktiviere im Mosquitto-AddOn die Konfigurationsoption:
    customize:
      active: true
      folder: mosquitto
  3. Mosquitto-AddOn neu starten.

Kurz zusammengefasst

Was Wert
Betroffen Geräte mit Bluetooth-Umschaltung/lokalem MQTT nach Firmware-Update (z. B. Hyper 2000)
Ursache EN-18031-bedingte TLS-Pflicht auf Port 8883, Broker-Zertifikat/Cipher passt nicht
Fix Selbstsigniertes RSA-2048-Zertifikat für Mosquitto hinterlegen
Betrifft HA-MQTT-Integration selbst? Nein – die läuft weiterhin unverschlüsselt auf Port 1883
Neues Pairing nötig? Nein, Gerät verbindet sich automatisch neu
⚠️ **GitHub.com Fallback** ⚠️