Neues Modul: 58_DaikinCloud.pm zur Einbindung von DAIKIN Geräten über Cloud (ONECTA)

Begonnen von FrankL, 05 April 2023, 20:48:40

Vorheriges Thema - Nächstes Thema

Burny4600

Ich habe wieder versucht Daikin in FHEM nach langer Zeit wieder funktionsfähig einzubinden, nach der Beschreibung https://forum.fhem.de/index.php?.topic=133044.0

Nur ich scheitere an dem https://my.home-assistant.io/redirect/oauth/?code=xxxxxxxxxxxx Link. Wie bekomme ich diesen benötigten Code?
Kann es sein das https://my.home-assistant.io/redirect/oauth/?code gar nicht stimmt?
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

Gisbert

Hallo Bunny4600,

schau dir mal Post #170 an: https://forum.fhem.de/index.php?topic=133044.msg1317498#msg1317498
Ich hab's auf jeden Fall so gelöst und es funktioniert.
Gelegentlich kommt es vor, dass man die Autorisierung erneuern muss, dann sind es tatsächlich nur 2 Mausklicks.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

FrankL

Ich gehe davon aus, dass du deine eigene App auf dem Daikin Developer Portal erstellt hast und dort als REDIRECT_URI die Adresse "https://my.home-assistant.io/redirect/oauth" angegeben hast?

Wichtig ist das du dieselbe REDIRECT_URI bei der Definition des FHEM-Devices verwendest also ..

defmod <NAME Master-Device> DaikinCloud <CLIENT_ID> <CLIENT_SECRET> https://my.home-assistant.io/redirect/oauth
.. wobei <NAME Master-Device>, <CLIENT_ID> und <CLIENT_SECRET> noch durch deine individuellen Definitionen bzw. die Angaben aus dem Daikin Developer Portal zu ersetzen sind.

Wenn du das gemacht hast, klickst du auf den AUTHORIZATION_LINK (unter Internals des Master-Devices), meldest dich bei Daikin an, erteilst die Zustimmung und wirst im Anschluss auf die REDIRECT_URI geleitet. In deiner Adressleiste im Browser steht dann sowas wie https://my.home-assistant.io/redirect/oauth/?code=xxxxxx...

Diesen kompletten Link aus der Adressleiste kopierst du in die Zwischenablage und führst

set <NAME Master-Device> AuthCode <kompletter Link der Rückgabe-URL> aus, um Access- und Refresh-Token zu bekommen.

Falls du nicht weiterkommst, müsstest du mal nähere Informationen mitteilen (also was du konkret gemacht hast, wie deine DEFs aussehen, welche Fehlermeldungen kamen bzw. was im Log stand).

Falls du nicht die REDIRECT_URI von Home Assistant nutzen kannst, hatte ich hier im Post #170 alternative Möglichkeiten dargestellt.

MfG Frank

Burny4600

Ich habe den Fehler gefunden.
Es lag am AUTHORIZATION_LINK den ich nicht richtig verwendet habe.
Nun hat die Anmeldung funktioniert.
Danke für den Tipp.
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

toron_go

Hallo,

Ich arbeite seit dem Herbst letzten Jahres in meiner Multisplit über die APP mit dem Bedarfssteuerung, damit wenn die PV 1000 Watt liefert die Klima auch nur die ca. 1000 Watt verbraucht .....
(Ja ich weiß die Anlage läuft dann nicht so effektiv, aber bei PV Strom bin ich da nicht so ...)

Der FHEM Adapter gibt das aber nicht her ? Oder habe ich da was übersehen ?

Vorschlag/ Idee : Vielleicht könnte man das Polling Intervall auch verkürzen (ich weiß max 200) wenn man eine Art "Pollig Time Window" einführt, ich benutze meine Klima nur Tagsüber 9 bis 18 Uhr ...
Mir ist klar das ich das selbst mit AT machen könnte aber die Intervall ist halt min 900 ;-)


VG Toron




FrankL

Bedarfsteuerung (demand control) ist über die neue Open API von Daikin nicht verfügbar. Siehe auch die Issues bei Github zur Home-Assistant-Integration hier und hier. Es gibt auch noch weitere Datenpunkte, die unter der alten API zur Verfügung standen und in der neuen Open API von Daikin nicht bereit gestellt werden. Ich gehe auch nicht davon aus, dass sich da kurzfristig was ändern wird.

Damit kann die Bedarfsteuerung aktuell ausschließlich über die Onecta-App eingestellt werden.

Man kann sich nur an den Daikin-Support vom Developer-Portal wenden mit der Bitte, die Bedarfsteuerung auch über die neue API zur Verfügung zustellen. Allerdings mache ich da wenig Hoffnung auf eine entsprechende Realisierung. So zumindest aus dem Feedback der oben genannten Issues zu entnehmen.

MfG Frank

FrankL

Die "Beschränkung" des min. Pollinginterval kann ich auch herabsetzen. Ich hatte das im Endeffekt mehr zum "Selbstschutz" eingebaut, damit nicht gleich jeder die Folgen des Request-Limits zu spüren bekommt. Welcher Mindestwert wäre für dich denn brauchbar?

MfG Frank

FrankL

Ich hab eine aktuelle Version (v2.1.16) auf Github bereitgestellt, die im Master-Device das neue Attribut "allow-short-intervals" zur Verfügung stellt. Die aktuelle Version kann mit folgendem FHEM-Befehl geladen werden:
update all https://raw.githubusercontent.com/frank-lie/DaikinCloud/main/controls_DaikinCloud.txtNach dem Update ist ein
shutdown restarterforderlich, damit das neue Attribut zur Verfügung steht. Mit
attr <Name-Master-Device> allow-short-intervals 1können dann auch kürzere Polling-Intervalle als 900 Sekunden definiert werden. Mithilfe von AT könnte damit das Abrufintervall in bestimmten Zeiträumen der Geräte individuell angepasst werden, damit in den Zeiten der eigentlichen Nutzung die Werte schneller/öfters aktualisert werden. Wenn z.B. die Geräte hauptsächlich zwischen 9 und 18 Uhr betrieben werden, könnte das interval wie folgt individualisiert werden:
define Daikin_Cloud_Interval_Tag AT *09:00:00 attr <Name-Master-Device> interval 300
define Daikin_Cloud_Interval_Nacht AT *18:00:00 attr <Name-Master-Device> interval 3600
Bedenkt aber immer, dass das Request-Limit pro Tag (inklusive sämtlicher Set-Befehle) bei 200 pro Tag liegt. In dem dargestellten Beispiel würden im Zeitraum von 9 bis 18 Uhr bereits 108 Requests und im Zeitraum 18 Uhr bis 9 Uhr weitere 15 Requests verbraucht, so dass dem entsprechend wendiger Requests für set-Befehle verbleiben.

MfG Frank

toron_go

Zitat von: FrankL am 06 Januar 2025, 14:25:49Man kann sich nur an den Daikin-Support vom Developer-Portal wenden mit der Bitte, die Bedarfsteuerung auch über die neue API zur Verfügung zustellen. Allerdings mache ich da wenig Hoffnung auf eine entsprechende Realisierung. So zumindest aus dem Feedback der oben genannten Issues zu entnehmen.


OK Danke ich mache trotzdem ein Ticket auf, die sind einfach nur SOOOOOO langsam in der Entwicklung ....

toron_go

Zitat von: FrankL am 06 Januar 2025, 20:08:23Bedenkt aber immer, dass das Request-Limit pro Tag (inklusive sämtlicher Set-Befehle) bei 200 pro Tag liegt. In dem dargestellten Beispiel würden im Zeitraum von 9 bis 18 Uhr bereits 108 Requests und im Zeitraum 18 Uhr bis 9 Uhr weitere 15 Requests verbraucht, so dass dem entsprechend wendiger Requests für set-Befehle verbleiben.

Hallo Frank,
andere Entwickler die es dann noch in der Freizeit machen sind einfach nur super und schnell.

Danke.

VG Toron

Burny4600

Es ist wirklich ärgerlich das bei mir die Daikin Verbindung immer wieder ausfällt.
Bei einer Kontrolle ist mir aufgefallen, dass die Verbindung seit 10.01. wieder ausgefallen, un dich weis nicht woran es immer wieder liegt.

list Daikin_Master
Internals:
   AUTHORIZATION_LINK <html><b><a href="https://idp.onecta.daikineurope.com/v1/oidc/authorize?response_type=code&client_id=UeCyTBq96BuCjPrHP25DdMrZ&redirect_uri=https%3A%2F%2Fmy%2Ehome%2Dassistant%2Eio%2Fredirect%2Foauth&scope=openid%20onecta%3Abasic.integration&state=kWW.........................................." target="_blank">Daikin Cloud Login (OAuth2)</a></b> </html>
   CLIENT_ID  UeCy.....................
   CLIENT_SECRET 58hZa.................................................................................
   DEF        UeCy..................... 58hZa................................................................................. https://my.home-assistant.io/redirect/oauth
   FUUID      669e7f9c-f33f-f4d2-3314-ba...................
   INTERVAL   900
   NAME       Daikin_Master
   NR         4920
   REDIRECT_URI https://my.home-assistant.io/redirect/oauth
   STATE      polling inactiv
   TYPE       DaikinCloud
   VERSION    v2.1.16 - 06.01.2025
   eventCount 12
   READINGS:
     2025-01-10 16:54:00   0c62e0bd-722f-4e03-.................. 0c62e0bd-722f-4e03-..................
     2025-01-10 16:54:00   RateLimit-Limit-day 200
     2025-01-10 16:54:00   RateLimit-Limit-minute 20
     2025-01-10 16:54:00   RateLimit-Remaining-day 136
     2025-01-10 16:54:00   RateLimit-Remaining-minute 19
     2025-01-10 16:54:00   RateLimit-Reset 60
     2025-01-10 16:08:58   expires_in      3600
     2025-01-19 12:11:02   state           polling inactiv
     2025-01-19 12:10:39   token_status    DaikinCloud (CallbackGetToken) failed: HTTP-Status-Code=400 Response: {"error":"invalid_grant","error_description":"The provided authorization code or refresh token is invalid."}
     2025-01-19 12:10:39   token_type      invalid
     2025-01-10 16:54:00   update_response successful
   helper:
     secret_state kWW..........................................
Attributes:
   alias      Daikin Master Cloud Verbindung
   allow-short-intervals 1
   autocreate 1
   consumptionData 1
   devStateIcon /polling activ:lan_rs485@0CFB0C/
   devStateStyle style="text-align:left;;font-weight:bold;;"
   group      Daikin Cloud
   icon       sani_heating_heatpump
   interval   900
   room       _Daikin,_RxTx

Ich musste wieder AUTHORIZATION_LINK Daikin Cloud Login (OAuth2) ausführen damit eine Verbindung hergestellt wird.
Muss der AUTHORIZATION_LINK immer wieder neu ausgeführt werden?
Ist das ein Daikin Problem, oder woran liegt es?
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

FrankL

Hallo,

bis auf den "General Server Error" am 20.11.2024 läuft es bei mir ohne Probleme. Allerdings finde ich die Refresh-Routine von Daikin mit der neuen Api nicht wirklich optimal gestaltet. Früher in der alten Api war es so, dass der Access-Token eine Gültigkeit von einer Stunde hatte, der Refresh-Token aber unbegrenzt gültig war bzw. immer wieder für die Erneuerung des Access-Token eingesetzt wurde. Selbst wenn einmal die Erneuerung des Access-Tokens nicht erfolgreich war, so wurde die Erneuerung einfach beim nächsten Mal mit demselben Refresh-Token nachgeholt. Mit der neuen Api hat das Daikin allerdings anders gelöst:

Am Anfang bekommst du einen Access-Token und einen Refresh-Token. Der Access-Token ist für eine Stunde gültig und muss danach erneuert werden. Beim Einsatz des Refresh-Tokens für die Erneuerung bekommst du einen neuen Access-Token und einen neuen Refresh-Token. Der alte Refresh-Token wird mit dieser Anfrage ungültig, d.h. er kann nur einmal verwendet werden. Wenn nun bei diesem Erneuerungsprozess der Refresh-Token eingesetzt und damit ungültig wird, du aber keine Antwort (z.B. wegen Timeout, Server-Error, etc.) bekommst, hast du nichts gültiges mehr, was du für eine Erneuerung des Access-Tokens einsetzen könntest. In diesem Fall bleibt dir nicht anderes übrig, als wieder den AUTHORIZATION_LINK zu klicken, um neue Tokens zu bekommen.

Interessant wäre allerdings, was bei dir am 10.01.2025 passiert ist. Ist da irgendwas im Log vermerkt (z.B. Server-Fehler, Timeout, instabile Routerverbindung, etc) ? Also ich meine den Log-Eintrag, bevor dann wahrscheinlich immer: HTTP-Status-Code=400 Response: {"error":"invalid_grant","error_description":"The provided authorization code or refresh token is revoked."} geloggt worden ist.

Im Endeffekt kann man nur schauen, was den Fehler verursacht hat und versucht dort anzusetzen. Wie gesagt, ich finde die Erneuerungsroutine der neuen Api nicht optimal, kann da aber nicht wirklich was dran ändern. Das einzige was bleibt wäre einen Watch-Dog anzulegen, der einen sofort benachrichtigt, wenn eine DaikinCloud-Anmeldung über den AUTHORIZATION_LINK erforderlich ist, z.B. so:

define WatchDog_DaikinCloud DOIF ([DaikinCloud:token_type] eq 'invalid') (set Telebot message DaikinCloud-Anmeldung erforderlich.)
Zur Erläuterung: Mein Daikin-Master-Device heißt DaikinCloud. Sobald im Master-Device das Reading token_type auf invalid gesetzt wird, soll eine Nachricht per Telegram gesendet werden. So kann man zumindest zeitnah den AUTHORIZATION_LINK anklicken, um wieder neue Zugangsdaten zu bekommen.

MfG Frank

Burny4600

@FrankL
Danke für den Hinweis.
Leider war das Log vom 10.01. schon gelöscht. Ich hatte den Verbindungsausfall leider übersehen.
Künftig werde ich vor dem Löschen der Logs die Daikin-Verbindung ansehen um den Verbindungsabbruch verifizieren zu können.

Ich werde auch für Daikin einen Watchdog einrichten, wie ich es teilweise für andere externe Verbindungen schon eingerichtet habe.
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2