DarwinsBuddy / WienerNetzeSmartmeter

A home-assistant integration supporting WienerNetze Smartmeters as sensors
121 stars 12 forks source link

Keine Verbindung seit neuem Einspeisepunkt #232

Open gerhardL70 opened 1 month ago

gerhardL70 commented 1 month ago

Hallo liebe Community und danke für die bisherige Entwicklung der Integration!

Nachdem die Integration bei mir seit Februar recht gut funktioniert hat (manchmal kam an einem Tag gar nix, dann am nächsten Tag der Verbrauch von 2 Tagen), ging seit Freischaltung des Smartmeters für die Einspeisung der PV gar nichts mehr. Nur ein Rufzeichen bei beiden Entitäten. Ich hab dann manuell versucht die Skripts zu ändern, wie das hier beschrieben wurde. https://github.com/DarwinsBuddy/WienerNetzeSmartmeter/issues/227#issuecomment-2104269374
Die Rufzeichen waren weg, Werte kamen aber trotzdem keine. Ich hab die Integration nun entfernt, neu gestartet, neu bei HACS geladen, neu installiert. Ergebnis: Ich kann mich nicht mal mehr anmelden, er meint "Username/Pass invalid".

Kann das auch daran liegen, dass der Smartmeter selbst ein Problem hat? So funktioniert zb das IR-Auslesetool nicht (noch nie) und die 1/4-Stunden Ansicht im Webportal nur einige Tage, nachdem ich den Support bemüht habe. Dann wurde einige Tage nix im Tages- und 1/4Stunden-Modus angezeigt, bis es heute wieder ging.

Irgendwelche Ideen was ich noch ausprobieren kann?

tschoerk commented 1 month ago

Es kann gut sein, dass es Wartungsarbeiten beim Portal selbst gab am Wochenende, vor allem wenn Username/Pass nicht mal mehr funktioniert hat. Mit dem zweiten Zählerpunkt gibt es wohl noch einige Probleme, bei mir selbst sind auch einige aufgetreten, die ich versucht habe zu fixen (siehe #228 und #233).

Ein guter Startpunkt um Probleme herauszufinden, ist es die Debug-Protokollierung in der Integration einzuschalten:

  1. Lösche die Entitäten in der Integration
  2. Aktiviere die Debug-Protokollierung
  3. Füge mittels Eintrag hinzufügen, die Entitäten wieder hinzu
  4. Deaktiviere die Debug-Protokollierung - es sollte ein Log automatisch heruntergeladen werden
  5. Poste die relevanten Stellen, also Fehlermeldungen etc. hier rein bzw. eröffne konkrete issues mit den Fehlermeldungen. wnsm_integration
gerhardL70 commented 1 month ago

Danke für die schnelle Antwort! Das Login Problem war mein Fehler, wenn man keypass verwendet ist es keine Garantie, dass man nicht nach dem normalen Login zum Wien Login wechseln muss ;-) jedenfalls konnte ich die Integration wieder installieren, jetzt siehts so aus: image 2 Smartmeter mit einmal 2 Entitäten und einmal einer. Beim SM mit 2 Entitäten haben beide Entitäten ein Rufzeichen image bei dem mit einer Entität nicht image

Der Anfangsteil des Logs ab wo wnsm beginnt liest sich so:

2024-05-21 23:32:29.106 WARNING (ImportExecutor_0) [homeassistant.helpers.typing] HomeAssistantType was used from wnsm, this is a deprecated alias which will be removed in HA Core 2025.5. Use homeassistant.core.HomeAssistant instead, please report it to the author of the 'wnsm' custom integration 2024-05-21 23:32:29.165 DEBUG (MainThread) [custom_components.wnsm.statistics_sensor] Last inserted stat: {} 2024-05-21 23:32:29.201 DEBUG (MainThread) [custom_components.wnsm.statistics_sensor] Last inserted stat: defaultdict(<class 'list'>, {'sensor.at0010000000000000001000005875907_statistics': [{'start': 1710936000.0, 'end': 1710939600.0, 'state': 0.0, 'sum': 0.0}]}) 2024-05-21 23:32:30.345 DEBUG (SyncWorker_2) [custom_components.wnsm.api.client] Access Token valid until 2024-05-21 23:37:30.345401 2024-05-21 23:32:31.172 ERROR (MainThread) [homeassistant.components.sensor] wnsm: Error on device update! Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 707, in _async_add_entity await entity.async_device_update(warning=False) File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1293, in async_device_update await self.async_update() File "/config/custom_components/wnsm/live_sensor.py", line 28, in async_update await self.hass.async_add_executor_job(smartmeter.login) File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, *self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/wnsm/api/client.py", line 127, in login code = self.credentials_login(url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/wnsm/api/client.py", line 77, in credentials_login raise SmartmeterLoginError("Login failed. Check username/password.") custom_components.wnsm.api.errors.SmartmeterLoginError: Login failed. Check username/password. 2024-05-21 23:32:31.594 DEBUG (SyncWorker_1) [custom_components.wnsm.api.client] Access Token valid until 2024-05-21 23:37:31.594000 2024-05-21 23:32:31.769 ERROR (MainThread) [homeassistant.components.sensor] wnsm: Error on device update! Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 707, in _async_add_entity await entity.async_device_update(warning=False) File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1293, in async_device_update await self.async_update() File "/config/custom_components/wnsm/statistics_sensor.py", line 109, in async_update await self.hass.async_add_executor_job(smartmeter.login) File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run result = self.fn(self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/wnsm/api/client.py", line 127, in login code = self.credentials_login(url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/wnsm/api/client.py", line 77, in credentials_login raise SmartmeterLoginError("Login failed. Check username/password.") custom_components.wnsm.api.errors.SmartmeterLoginError: Login failed. Check username/password. 2024-05-21 23:32:34.017 DEBUG (SyncWorker_6) [custom_components.wnsm.api.client] API Request: https://api.wstw.at/gateway/WN_SMART_METER_PORTAL_API_B2C/1.0/zaehlpunkte

Danach folgen meine persönlichen Daten mit dem Vertragsdatum des Starts der Einspeisung. Dann - mit anderer Kundennummer - die Daten des Strombezugvertrages

Das ganze wiederholt sich 4 mal.

Mir ist aufgefallen: Webhook not registered - https and port 443 is required to register the webhook das hab ich mal probiert, bin aber gescheitert. ist das wichtig?

Ich werde mich morgen noch etwas rumspielen und berichten.

tschoerk commented 1 month ago

Mhh er schreit ständig Error Login Failed (SmartmeterLoginError("Login failed. Check username/password.")). Welchen Login verwendest du? Anmeldung über Google, Apple oder ID-Austria ist aktuell nicht möglich.

Siehe auch FAQ #19: Why does my login not work?

Please use the login credentials you're usually using at https://smartmeter-web.wienernetze.at/ (which should be the same as for your log.wien login) Other oauth providers are not supported yet (e.g. google, etc.)

gerhardL70 commented 1 month ago

Danke fürs Durchschauen des Logs!! Ich verwende das Wien Login, also nix exotisches. Vielleicht habe ich aber das debugging auch schon bei den Login-versuchen laufen lassen, wo ich die alten credentials eingegeben hatte, die dann zu Fehlermeldungen geführt haben. Ich werde es daher bald nochmals probieren und dann gleich die richtigen Zugangsdaten verwenden.

Im Ergebnis hat sich aber nix geändert, im Energiedashboard sind auch seit gestern abend keine Daten gekommen. bei der Konfiguration des Energiedashboards steht "Entität nicht verfügbar" sensor.at001....907_statistics (unavailable)"

gerhardL70 commented 1 month ago

Mhh er schreit ständig Error Login Failed (SmartmeterLoginError("Login failed. Check username/password.")). Welchen Login verwendest du? Anmeldung über Google, Apple oder ID-Austria ist aktuell nicht möglich.

Siehe auch FAQ #19: Why does my login not work?

Please use the login credentials you're usually using at https://smartmeter-web.wienernetze.at/ (which should be the same as for your log.wien login) Other oauth providers are not supported yet (e.g. google, etc.)

Kann ich dir @tschoerk das aktuelle Log irgendwohin schicken?

tschoerk commented 1 month ago

Du kannst die Datei hier direkt hochladen beim Button unten (Paste, drop, or click to add files), dann musst du nicht den ganzen Inhalt hier reinkopieren. Schau den Log kurz durch, ob deine Adresse, etc. irgendwo angeführt ist und ersetze die durch ein X oder sowas.

W-M-B commented 1 month ago

Hallo, ich hatte eine funktionerende Version laufen, seit Freitag kommen keine Daten mehr an (1 Verbrauchs zp).. Im Logfile steht jetzt custom_components.wnsm.api.errors.SmartmeterLoginError: Login failed. Check username/password. Ich habe gleichzeitig Energielieferant gewechselt, da solle aber keine Rolle spielen, oder? Login funktioniert über das bestehende End user Portal mit unverändertem Benutzer/Passwort. bin etwas ratlos was ich außer löschen und neuinstallation machen könnte. lg Wolfram

tschoerk commented 1 month ago

Interessant, vielleicht wird gerade laufend ein Update eingespielt, welcher schrittweise den Loginweg ändert. Bei mir ist es jedenfalls noch der alte, mal schauen ob sich das ändert in den nächsten Tagen.

Wie der Loginweg funktionieren sollte ist, dass die Loginseite aufgerufen wird, die Logindaten übergeben werden und dann anhand des Headers von der Antwort, die entsprechenden Tokens geladen werden. Im Header der Antwort befindet sich eine URL im Attribut "Location". Wenn "Location" nicht vorhanden ist, wirft es die Fehlermeldung, welche ihr beide habt.

Falls ihr Pythonskripte ausführen könnt, könnt ihr mit diesem Skript den Header mal in Ruhe anschauen, ohne beim Home Assistant herumzufummeln, welcher das debuggen doch etwas langwieriger macht. Für die Variablen username und password entsprechend eure Zugangsdaten zwischen die Anführungsstriche setzen.

from urllib import parse
import requests
from lxml import html

username = ''
password = ''

AUTH_URL = "https://log.wien/auth/realms/logwien/protocol/openid-connect/"
REDIRECT_URI = "https://smartmeter-web.wienernetze.at/"
LOGIN_ARGS = {
    "client_id": "wn-smartmeter",
    "redirect_uri": REDIRECT_URI,
    "response_mode": "fragment",
    "response_type": "code",
    "scope": "openid",
    "nonce": "",
}
login_url = AUTH_URL + "auth?" + parse.urlencode(LOGIN_ARGS)
session = requests.Session()
result = session.get(login_url)
tree = html.fromstring(result.content)
action = tree.xpath("(//form/@action)")[0]
result = session.post(
    action,
    data={
        "username": username,
        "password": password,
    },
    allow_redirects=False,
)
print(result.headers)

Wie gesagt es sollte im Header ein URL vorkommen, gesetzt im Attribut "Location", welches folgende Form hat: https://smartmeter-web.wienernetze.at/#session_state=XXX&iss=XXX&code=XXX

Wichtig für das weitere Funktionieren ist der Wert hinter code, ohne dem können die nötigen Token nicht geladen werden. Eventuell befindet sich die URL oder der code woanders im Header. Dann könnte man den Code entsprechend anpassen, dass ihr euch einloggen könnt.

W-M-B commented 1 month ago

so ich hab mal nochmal ins portal geschaut: seit 17.5. gibt es im Portal nur mehr Tageswerte und keine stunden oder viertel stunden werte bei meinem ZP. also da hats was bei den Wiener Netzen. ist ja auch Wartungsfenster angesagt. und da ist vermutlich ein größeres update geplant inklusive reduced services vor dem Wartungsfenster. also abwarten und tee trinken

gerhardL70 commented 1 month ago

Bei mir geht das Portal wieder, aber erst seit einer Woche. Ich hab davor mit der Smartmeter-Hotline telefoniert. Die Dame wusste, dass das passieren kann und hat das zum neu initialisieren/updaten oder so weitergegeben, 2 Tage später hatte ich dann wieder 1/4 Stunden Werte, die ich heuer überhaupt noch nicht im Portal angezeigt bekam. Es gab dann noch ein kleines hick-up, bei dem 2-3 Tage wieder die Viertelstunden weg waren. Jetzt sehe ich aber aktuell alles, auch die Werte, aus Perioden, wo ich früher nix gesehen hab. Die Werte müssen also irgendwo sein. @W-M-B Vielleicht kann dir also der Smartmeter-Support helfen die Daten wieder zu sehen?

Leider nicht bei mir im HA.

Ich hab versucht 2 Einträge zu bekommen, das hat auch geklappt, allerdings hab ich nur eine Entität bekommen. image Diese hatte Status - , ich glaub sie war deaktiviert, habs jetzt aktiviert, Status bleibt -. Energiedashboard schreibt, dass es auf Daten wartet. Mal schauen.

@tschoerk kannst du dir vielleicht das Log ansehen. ich hab meinen Namen und Kundennummer 22x gefunden! Das Log (193 kb) ist viel grösser als beim letzten mal (35 kb), auch schon bevor ichs mit Word bearbeitet hab. Dankeschön! PS: leider fang ich persönlich nix mit dem phyton skript an, aber ich kenn wen, der kann das, von dem will ich eh HA Nachhilfe und werde ihn bei Gelegenheit fragen wie das geht. PPS: Kann ich dich irgendwie unterstützen, dass deine update-Vorschläge zu einer neuen Version führen? Bin leider nicht so github kundig und versteh nicht im Detail, wer die wie was an Codevorschlägen reviewen kann/darf.

tschoerk commented 1 month ago

Danke für die Info, scheint einige Probleme zu geben. Ich schaue mir das noch im Detail an. Entferne das Log aus deinem Post, da doch noch an vielen Stellen deine persönliche Daten zu sehen sind, sowas muss nicht öffentlich im Internet stehen. Oben rechts auf die drei Punkte und auf Edit Post und den Link zum Log entfernen. Zusätzlich solltest du dann noch die alten Versionen deines Beitrages entfernen. Rechts neben deinem Namen steht "edited", da drauf klicken und die alten Versionen, wo der Link vorhanden ist aufrufen. Oben rechts auf Options und Delete Revision from history. grafik

gerhardL70 commented 1 month ago

Danke, Log gelöscht

tschoerk commented 1 month ago

So bin jetzt dazugekommen mir das genau anzuschauen. Einerseits existiert der Loginfehler, den ich ohne genauere Daten (siehe Pythonskript oben) nicht genau analysieren kann. Das komische ist nämlich, dass es dann dennoch die Daten versucht zu updaten und auch eine Antwort erhält, also wirst du eigentlich erfolgreich eingeloggt. Eventuell liegt es an den mehreren Einträgen, den man sollte nur einen Eintrag haben mit dann insgesamt 4 Entitäten, wenn alles klappt (jeweils 2 für Einspeisung und 2 für Bezug). Andererseits sind die anderen Fehler verantwortlich, dass keine Daten vorhanden sind. Diese sind bei mir auch aufgetreten und habe entsprechende Fixes rausgebracht.

Ich würde mal folgende Schritte probieren, welches alles vollständig zurücksetzt und neu einholt (vergleiche auch #19 How can I start over with a fresh data import?):

  1. Navigiere zur Energiekonfiguration und entferne die Sensoren bei Netzverbrauch und Netzspeisung grafik
  2. Entferne die statistischen Daten der Sensoren
    • Navigiere zu Entwicklerwerkzeuge -> Dienste -> Recorder: Entitäten bereinigen
    • Alle Sensoren auswählen (fangen mit AT001 an)
    • Deaktivere Zu entfernende Domänen und Zu entfernende Entitäts-Globs
    • Wähle Aufzubewahrende Tage und wähle 0
    • Klicke auf Dienst Ausführen grafik
  3. Entferne die Integration
    • Navigiere zu Integrationen und zum Eintrag von WienerNetzeSmartmeter
    • Wähle bei ALLEN Einträgen die 3 Punkte aus und klicke Löschen grafik
  4. Navigiere zu Entwicklerwerkzeuge -> Statistik ([Statistik]) (https://my.home-assistant.io/redirect/developer_statistics/)
    • Gib in der Suche oben AT001 ein
    • Für jeden Eintrag sollte rechts ein Button auftauchen "Probleme mit dieser Integration"
    • Auf diesen klicken und löschen auswählen
  5. Lade die Integration von meinem Branch develop runter, wo alle aktuellen Fixes zusammengetragen wurden hier
  6. Via SSH navigiere auf deiner HomeAssistant Instanz zu config/custom_components/. Lösche dort den wnsm Ordner und schiebe den neu heruntergeladenen wnsm Ordner ein.
  7. Starte HomeAssistant neu
  8. Füge die Integration WienerNetzeSmartmeter neu hinzu

Nun sollten 4 Entitäten gefunden werden, zwei "normale" und zwei "statistics". Bei der Energiekonfiguration können die statistics Sensoren nun wieder eingefügt werden für Netzverbrauch und Netzeinspeisung, damit am Energiedashboard alles schön zu sehen ist. Falls wieder Probleme auftreten, schreib kurz hier rein, erstelle wieder ein Log und lasse es mir diesmal gerne per Mail zukommen (siehe mein Profil).

gerhardL70 commented 3 weeks ago

Vielen Dank tschoerk für deine Hilfe! An alle anderen: Ich habe 2 Kundennummern, je eine für Bezug und eine für Einspeisung. Darauf ist die Integration (noch) nicht ausgelegt. Deshalb hat es bei mir nicht funktioniert.

salzrat commented 3 days ago

Hi! wie sieht es mit den 4 offenen PRs aus? Ich habe auch einen neuen Einspeisezählpunkt unter einer neuen Kundennummer bekommen, und seitdem geht nichts mehr. Kann ich die PRs händisch hineinmergen oder kommt das update eh bald?