Pysmaplus für SMA findet Energy Meter 10 nicht

Moin, ich möchte gerne meine HA-Installation von HASS.OS auf docker umstellen. Dazu lasse ich tagsüber eine Testinstanz auf meinem Linux-System (open LEAP) laufen. pysmaplus findet meinen WR STP 10.0 SE und und zeigt alle Werte an.

Bein Hinzufügen eines weiteren Gerätes im Discovery-Modus kommt die Meldung “nix gefunden”. Wähle ich Energymeter/Homemanager bekomme ich das hier:

Und in den Logs:

Den EM10 kann und will ich ja nicht per speedwire ansprechen, der sendet ja seine Daten zyklisch per Multicast an alle, die es interessiert.

Die HA-Docker-Instanz läuft mit “networks: host” und kann daher potentiell alles empfangen, was mein Linux-System empfängt. Die EM10 Multicast-Pakete kann ich auf meinem System mit Wireshark sehen. HA bzw. pysmaplus kann das also ebenfalls sehen.

Ich habe keine Idee, warum das nicht funktioniert. Hat vielleicht schon jemand ein EM10 mit pysmaplus “entdecken” können? Wäre für jeden Tip dankbar …

Lass dich nicht durch die Fehlermeldung irritieren. Wenn du Energeymeter auswählst, versucht er auf Multicast-Pakete zu hören. wenn er innerhalb von 2 oder 3 Sekunden kein Paket empfängt, wird die Fehlermeldung angezeigt.

Versuche doch mal tcpdump mit Port 9522 innerhalb der Docker-Umgebung zu starten. Prüfe, dann ob die Multicast-Pakete überhaupt ankommen.

Herzlichen Dank für den Hinweis! tcpdump gibt es im HA container leider nicht, aber der Hinweis hat mich veranlasst, mein Hirn mal richtig einzuschalten. Fazit - kaum macht man’s richtig, schon funktioniert’s :wink:. Ber der Reihe nach.

Zunächst habe ich per wireshark nochmal geschaut, ob die EM Pakete auf port 9522 ankommen. Gestern habe ich wohl etwas oberflächlich geschaut. Mit filter (udp.port == 9522) sah ich Pakete, die mir aber nicht wirklich angeschaut habe. Es war die Kommunikation zwischen dem STP und HA. Mea culpa.

Aber weder mit wireshark noch mit tcpdump konnte ich Pakete vom Energymanager nachweisen. Da sich alle Geräte in der selben firewalld Zone befinden (home), muss ich nach meinem Verständnis keine Port-Freigaben machen. Ich habe dann aber doch den port 9522 hinzugefügt, aber es wurden immer noch keine EM Pakete angezeigt.

Dann habe ich mal tcpdump auf dem host meiner virtuellen HA Produktionsmaschine ausgeführt. Dort waren die Pakete im Sekundenabstand zu sehen. Also habe ich dann die Firewall auf meinem Arbeitsplatz-System mal ganz abgeschaltet, aber es gab immer noch keine Pakete vom EM. Und sowohl Produktionssystem als auch mein Arbeitsplatzsystem bekommen die Daten über die selben switches - einen unmanaged Netgear und meine Fritzbox.

Und da dämmerte es dann endlich mal so langsam :grin:. Ohne einen Listener auf 239.12.255.254 betreibt einer der beiden igmp spoofing, vermutlich die Fritzbox, an der beide Systeme parallel hängen. Deshalb erhielt mein System die Pakete nicht. Also habe ich Geräte suchen in pysmaplus ausgeführt und hatte nach Sekunden mein EM in den pysma-Geräten.

Jetzt habe ich die firewall wieder aktiviert, aiuch den port wieder aus der Liste der Erlaubten entfernt, und es läuft immer noch. Mal schauen, ob es einen Reboot übersteht.

Was ich aber immer noch nicht verstehe ist, warum es jetzt weiter läuft, aber vorher ix gefunden wurde. mdns hatte ich für die home Zone zugelassen. AFAIK müsste das doch reichen, um Multicast-Sender zu finden. Mal schauen, was noch kommt …

Leider hat pysmaplus den reboot des hosts nicht überlebt. Ich bekam das hier:

Da ich an dieser Stelle nicht wieder “starten” kann, habe ich ein “docker stop/start” auseführt. Mit diesem Ergebnis:

Nun tat’s der STP auch nicht mehr :frowning:.

Die udp Pakete des EM kommen aber noch an.

12:02:35.147905 IP `**`energy`**`meter1900201837.fritz.box.60247 > 239.12.255.254.sma-spw: UDP, length 600 
12:02:36.148092 IP `**`energy`**`meter1900201837.fritz.box.60247 > 239.12.255.254.sma-spw: UDP, length 600

Das Log fürs EM zeigt das hier:

Logger: homeassistant.config_entries
Quelle: config_entries.py:762
Erstmals aufgetreten: 11:57:13 (1 Vorkommnis)
Zuletzt protokolliert: 11:57:13

Error setting up entry SHM2/EM (em1900201837) for pysmaplus
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
    return await fut
           ^^^^^^^^^
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/pysmaplus/device_em.py", line 78, in new_session
    data = await self._get_next_values()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/pysmaplus/device_em.py", line 91, in _get_next_values
    await asyncio.wait_for(self._data_received, timeout=timeout)
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 506, in wait_for
    async with timeouts.timeout(timeout):
               ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 762, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/pysmaplus/__init__.py", line 103, in async_setup_entry
    sma = await getPysmaInstance(hass, entry.data)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/pysmaplus/__init__.py", line 96, in getPysmaInstance
    await sma.new_session()
  File "/usr/local/lib/python3.13/site-packages/pysmaplus/device_em.py", line 80, in new_session
    raise SmaConnectionException("No speedwire packet received!") from e
pysmaplus.exceptions.SmaConnectionException: No speedwire packet received!

Und die für den STP den schon oft gemeldeten stacktrace:

Logger: homeassistant.config_entries
Quelle: config_entries.py:762
Erstmals aufgetreten: 11:57:13 (1 Vorkommnis)
Zuletzt protokolliert: 11:57:13

Error setting up entry STP10.0SE (SUNNY TRIPOWER 10.0 SE) (sw3015605725) for pysmaplus
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 762, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/pysmaplus/__init__.py", line 103, in async_setup_entry
    sma = await getPysmaInstance(hass, entry.data)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/pysmaplus/__init__.py", line 96, in getPysmaInstance
    await sma.new_session()
  File "/usr/local/lib/python3.13/site-packages/pysmaplus/device_speedwire.py", line 484, in new_session
    await self.device_info()
  File "/usr/local/lib/python3.13/site-packages/pysmaplus/device_speedwire.py", line 493, in device_info
    ll = await self.device_list()
         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/pysmaplus/device_speedwire.py", line 504, in device_list
    await asyncio.wait_for(fut, timeout=self._protocol._overallTimeout)
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
    return await fut
           ^^^^^^^^^
pysmaplus.exceptions.SmaConnectionException: Login failed! No Response from Device!

Könnte da etwas mit dem timing nicht stimmen? Vielleicht etwas länger warten? Ist schon seltsam …

Inzwischen kamen keine EM Pakete mehr an, weil die EM Integration nicht lief.

Ich habe dann den ha container nochmal gestoppt, etwas länger gewartet (15s?) und dann wieder gestartet. Das Ergebnis war jetzt, dass die STP Integration wieder lief, die EM aber immer noch nicht. Kurz nachdem dem Starten kamen dann auch wieder die EM Pakete auf dem System an. Anscheinend hat die EM Integration nur nicht lange genug auf Pakete gewartet nach dem socket call.

Edit:

Deaktivieren, dann Aktivieren und HA neu starten haben beim EM nichts verbessert. ABer es kann sein, dass die STP Integration den Neustart von HA nicht überlebt :frowning: .

:crayon:by HarryP:
. Zusammenführung Mehrfachpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)
. Code-/Logzeilen formatiert (bitte immer in </> einbinden)
. s.a.: (Neues Update & Features - Hier in der Community 🫶)

  1. SHM
    ha-pysmaplus/docs/shm2_multicast.md at main · littleyoda/ha-pysmaplus · GitHub
    Hier könntest du mal probieren, von multicast auf unicast umstellen, wenn es in deinem Setup funktioniert.
  2. Wechselrichter
    Hast du mit beiden Interface “Speedwire” und “Speedwire V2” geteset?

zu 1. Für unicast habe ich schon zu viele Empfänger. Außerdem geht es ein wenig gegen die Ehre, die Ursache des EM 10 Problems nicht zu finden. pysmaplus hat auf meinem HA-Produktionssystem keine Probleme mit der EM 10 Integration. Da läuft das. Nur auf meinem Arbeitsplatzrechner mit der Testumgebung nicht. Bei der Topologie hatte ich übrigens einen Teil aus den Augen verloren. Ich nahm an, dass sowohl das Produktionssystem (Intel NUC mit Ubuntu und virtualbox für HA) und auch mein Arbeitsplatzrechner jeweils direkt mit einem 2 m Patchkabel an der Fritzbox hängen. Stimmte aber nicht - der Arbeitsplatzrechner war noch (unnötigerweise) über einen dummen 5-port D-Link verbunden, weil ich mal einen weiteren Netzwerkport benötigte.

Den habe ich nun entfernt und hatte die Hoffnung, dass das hinsichtlich EM 10 die Lösung bringen würde. War aber nicht so :frowning:. Ich bekomme beim Suchen nach dem EM immer noch (aktuell) das hier:

Wobei ich die Meldung eher irreführend finde, so als wollte die Integration eine unicast Verbindung aufbauen. Dabei sollte nach meiner naiven Sicht doch irgendwo einfach ein socket call auf die Multicast-Adresse des EM erfolgen um zu lauschen. Anyway, funktioniert immer noch nicht.

Zu 2. Daran konnte ich mich nicht mehr erinnern, deshalb habe ich es nochmal probiert: Gerät gelöscht, HA neu gestartet und dann mit der “normalen” Speedwire Suche gesucht - und gefunden. Dann kam die übliche “Einrichtungsfehler”-Meldung in hellbraun (s. o.). Diesmal habe ich mich aber nicht ins Bockshorn jagen lassen, sondern einfach HA noch einmal neu gestartet, und siehe da, der STP wird erkannt:

Mir kommt das mit dem EM 10 alles etwas spanisch vor, wie mein Vater zu sagen pflegte. Ich habe auch schon im code rumgegraben, um da timing Einstellungen zu finden, und habe damit etwas experimentiert, aber ohne Erfolg.

So abstrus es klingt, ich habe fast den Verdacht, das mein gut 10 Jahre alter Rechner für diese Sache etwas zu schnell ist. Ist immerhin ein i7 mit 24 G Speicher.

Ich werde aber nicht aufgeben und weitersuchen. Vielleicht könntest du mir ja einen Hinweis geben, an welchen Stellen ich im python code (in custom-components und den site-packages) für mein Problem potentiell relevante Einstellungen finden und damit experimentieren kann.

Danke einstweilen!

  1. Bezüglich der Meldung.
    Teste mal die Beta-Version v0.5.4. Dort sollte die Meldung besser sein.

  2. Wenn du Python installiert und etwas Ahnung von Python hast, kannst du es auch direkt mit der Library testen.
    pysma/doc/connection.md at master · littleyoda/pysma · GitHub

    Der entschiedene Socket wird hier geöffnet:
    pysma/pysma/device_em.py at 102a12e8cdcb2335abf1119d229d0cdebc2f9a0a · littleyoda/pysma · GitHub

  3. Am der Geschwindigkeit des Laptop wird es wohl nicht liegen. Bei mir geht es von einem Raspberry bis hin zu einem Laptop AMD Ryzen 7

Moin, herzlichen Dank für deine Hinweise!

gerade hatte ich schon mal eine Stunde getippt. Beim anklicken von Absenden ist das Traktat im Nexus verschwunden :frowning:. Damit ich nicht durchdrehe, nun eine 2., sehr verkürzte Version. Ist vielleicht auch besser so.

Punkt 1. habe ich nicht ausgeführt. Bin gleich bei 2. angefangen. pip install -e . lief nicht durch, weil die setuptools zu alt waren. Ich hatte python von 3.6 bis 3.11 auf dem Laptop. Nach einer Aufräumsession lief example.py mit 3.11:

venv) tz@joda:~/pysma> python3 example.py discovery --identify
Library version: 0.4
Discovery...

192.168.25.25:9522
192.168.25.64:9522

Trying to identify... (can take up to 30 seconds pre device)

192.168.25.25
   ERROR:       pysmaplus.device_ennexos:  Error requesting https://192.168.25.25/api/v1/system/info Cannot connect to host 192.168.25.25:443 ssl:default [Connect call failed ('192.168.25.25', 443)] [Timeout]
   ERROR:       pysmaplus.device_ennexos:  Error requesting http://192.168.25.25/api/v1/system/info 400, message="Invalid header token:\n\n  b'Bad Request'\n       ^", url='http://192.168.25.25/api/v1/system/info' [Timeout]
   ERROR: pysmaplus.device_speedwire2.speedwirev2:  Timeout in repeat 1/2
   ERROR: pysmaplus.device_speedwire2.speedwirev2:  Timeout in repeat 2/2
         Access              Remarks
        ennexos    failed    https
        ennexos    failed    http
   speedwireinv    failed    
     webconnect    failed    https://192.168.25.25
     webconnect    failed    http://192.168.25.25
    speedwireem    failed    no multicast packet received.
           shm2    failed    needs Installer Grid Guard Code. Usage not recommended.
 speedwireinvV2    failed    

192.168.25.64
   ERROR:       pysmaplus.device_ennexos:  Request to https://192.168.25.64/api/v1/system/info did not return a valid json. Code 400
   ERROR:       pysmaplus.device_ennexos:  Request to http://192.168.25.64/api/v1/system/info did not return a valid json. Code 400
   ERROR:    pysmaplus.device_webconnect:  Could not start session: Session ID expected [result.sid]
   ERROR:    pysmaplus.device_webconnect:  Could not start session: Login URL not found, try using HTTPS
         Access              Remarks
 speedwireinvV2     maybe    only unencrypted Speedwire is supported
        ennexos    failed    https
        ennexos    failed    http
   speedwireinv    failed    
     webconnect    failed    https://192.168.25.64
     webconnect    failed    http://192.168.25.64
    speedwireem    failed    no multicast packet received.
           shm2    failed    needs Installer Grid Guard Code. Usage not recommended.

Seltsam war

    speedwireem    failed    no multicast packet received.

tcpdump zeigte allerdings auch keine EM Pakete. Ich habe dann ein compose down/up mit dem HA container gemacht und dort versucht, das EM über speedwire/em hinzu zu fügen. Und das hat nun funktioniert!? Vielleicht, weil der pythom3 symlink auf dem Laptop nun auf 3.11 zeigt? Seltsam.

Nun zeigte tcpdump auch EM Pakete. Aber example.py immer noch “speedwireem failed”?

Ich habe dann auf NUC und auf Laptop nochmal das Hinzufügen des STP getestet. Auf dem Laptop klappt es mit speedwire, auf dem NUC nur mit speedwireV2.

Ich dachte dann an evtl unterschiedliche python Versionen. Der NUC host ist schon bei 3.12. ABer dann habe ich in die HA container geschaut. Aber die zeigen beide eine identische python Version:

tz@joda:/opt/homeassistant/config/custom_components/pysmaplus> docker exec -it homeassistant sh
/config # python --version
Python 3.13.11
/config # 
Use `ha` to access the Home Assistant CLI.
# docker exec -it homeassistant sh
/config # python --version
Python 3.13.11
/config # 

Daran kann das inkonsistente Verhalten hinsichtlich STP offensichtlich nicht liegen. Die Betriebssysteme sind natürlich deutlich unterschiedlich.

Ich werde mich mal dem example.py beschäftigen. Vielleicht bringe ich es ja dazu, EM-Pakete zu entdecken. Ich werde berichten.

Und auf diesem Weg mal eine herzlichen Dank für deine/eure Integration. Immrehin bin ich nun wieder einen Schritt weiter auf dem Weg weg von HAOS …

Edit:

Im discovery Modus funktioniert example.py für das EM nicht, aber mit dem Argument “energymeter” funktioniert es :slight_smile:. Bin im debugger mal durch das Programm “geschritten, war sehr interessant …

Danke nochmal!