Neues Modul: 58_DaikinCloud.pm zur Einbindung von Daikin Klimageräten über Cloud

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

Vorheriges Thema - Nächstes Thema

FrankL

Hallo liebe FHEM-Gemeinde,

ich möchte an dieser Stelle das von mir geschriebene Modul 58_DaikinCloud.pm vorstellen. Es dient der Einbindung von Daikin-Klimageräten, die nur noch per Cloud über die Onecta-App erreichbar sind. Betroffen hiervon sind insbesondere die Innengeräte, die mit einem WLAN-Modul vom Typ BPR069C4X ausgestattet sind und über keine lokale API mehr verfügen (und damit nicht mehr über 58_HVAC_DaikinAC.pm integriert werden können).

Die von mir unter https://forum.fhem.de/index.php?topic=131647#msg1262314 beschriebene Zwischenlösung über weitere Java-Script-Programme hatte mich nicht zufrieden gestellt, da die Steuerung nicht permanant zuverlässig erfolgte bzw. auch verschiedenen Einschränkungen unterlag. Aus diesem Grund hatte ich mich entschlossen, ein Modul für FHEM zu schreiben, welches die Einbindung der Daikin-Cloud ohne externe Programme oder Scripte ermöglicht. Es ist mein erstes Modul. Daher bitte ich um Nachsicht, falls ich irgendwelche besonderen Regeln nicht eingehalten haben sollte ;-) .

Ich habe versucht, die Routinen so zu schreiben, dass sie für jedwede kompatible Innengeräte von Daikin verwendet werden können und jeweils nur die tatsächlich vorhandenen Funktionen des Innengerätes abbilden bzw. zulassen. An meiner Gerätekombination (3MXM40A2V1B mit 2x FTXM20R2V1B und 1x FTXM25R2V1B) habe ich das Modul ausgiebig und erfolgreich getestet. Ebenso habe ich positives Feedback zu weiteren Gerätekombinationen erhalten. Da es jedoch sehr viele verschiedene Geräte von Daikin mit unterschiedlichen Funktionsumfang gibt, kann ich nicht garantieren, dass alle Funktionen unterstützt werden bzw. alle Gerätekombinationen zu 100% funktionieren. Mein Produktivsystem läuft bereits mit meinem Modul, trotzdem würde ich das Modul noch als "beta" bezeichnen, bis genügend Feedback vorhanden ist, dass es auch mit anderen Gerätekombinationen von Daikin problemlos läuft.

Voraussetzungen
Damit die Klimageräte gesteuert werden können, ist es erforderlich, dass der Registrierungsprozess in der ONECTA-App abgeschlossen worden ist. Das heißt die Innengeräte sind mit dem Internet verbunden und in der Daikin-Cloud ersichtlich. Erst wenn dieser Punkt erfolgreich abgeschlossen worden ist, macht es auch erst Sinn, das Modul einzusetzen.

Verwendung
1. Die Datei "58_DaikinCloud.pm" muss zu den anderen Modulen in den Ordner fhem/FHEM kopiert und wie folgt in FHEM geladen werden:
reload 58_DaikinCloud.pm

2. In FHEM muss ein Master Device für die Kommunikation mit der Cloud angelegt werden, z.B.:
define Daikin_Master DaikinCloud

3. Den in der Onecta-App vergebenen Benutzernamen und Passwort speichern. Danach kann das tokenSet abgerufen werden:
set Daikin_Master username <your-email>
set Daikin_Master password <your-password>
get Daikin_Master tokenSet

4. Die Innengeräte werden standardmäßig beim Abruf der Daten aus der Cloud als Device in FHEM angelegt. Standardmäßig werden die Daten aus der Cloud alle 60 Sekunden abgerufen / aktualisiert.

5. Die Daten werden in den Readings der jeweiligen Innengeräte dargestellt. Die Innengeräte können über verschiedene "Set"-Befehle gesteuert werden. Die möglichen/zulässigen Befehle sind jeweils modellabhängig. Eine nähere Dokumentation hierzu ist im Modul selbst enthalten.

Ich würde mich über Feedback freuen. Sowohl wenn alles super funktioniert, als auch wenn es Problem geben sollte.

MfG Frank

Edit: angehangene 58_DaikinCloud.pm auf Version v.1.3.6 aktualisiert

Starkstrombastler

Hallo Frank,

das sind großartige Neuigkeiten! Das Modul funktioniert auf Anhieb so wie von dir beschrieben. Echt Super!

Meine Installation umfasst ein Multisplitgerät mit drei Inneneinheiten und ein Single-Split-System. Alle Einheiten wurden in kurzer Zeit gefunden und als Geräte in fhem angelegt. Zahlreiche Readings sind vorhanden, und mit Daten gefüllt (Ausnahme: "errorCode_gateway").

Die Steuerung der Geräte via fhem funktioniert, ebenso wie das Polling der Cloud.

Noch zur Info meine Daikin-Hardware:
Multisplit
   Außeneinheit:    3MXM68N2V1B9 
   Inneneinheiten:  FTXM42R2V1B und 2x FTXM20R2V1B   mit WLAN-Modul BRP069C4x
Singlesplit
   Außeneinheit:    RXM25N9
   Inneneinheit:    FTXM25N     mit WLAN-Modul BRP069B4x


Herzlichen Dank und Grüße
Bernhard
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

JoergBo

Hi,

ich habe hier eine sehr ähnliche Konfiguration:

Ein Außengerät 3MXM40A, drei Innengeräte, 2x FTXM20R 1x FTXM25R (Wlan BRP069C4x)

Installation des Moduls 5 min. incl. download, alle Geräte erkannt.
Einstellungen und Istwerte werden gelesen.

PERFEKT!

Lg, Jörg
RasPI4, S5-95U, Hue, Volkszaehler, 1wireTemp, HMLan, sduino, Wlan-IR-Gateway, TelegramBot, Alexa, ...

FrankL

Zitat von: Starkstrombastler am 06 April 2023, 09:46:35Zahlreiche Readings sind vorhanden, und mit Daten gefüllt (Ausnahme: "errorCode_gateway").

Das Reading errorCode_gateway hat auch bei mir keinen Wert. Das stimmt auch so mit den JSON-Rohdaten aus der Daikin-Cloud überein, ist also kein Fehler. Dort hat dieser Key ebenfalls den Wert "" (leer). Ich gehe davon aus, dass der Wert erst dann gefüllt wird, wenn tatsächlich mal ein Fehler vorliegen sollte. Ob man dann mit den Fehlercodes tatsächlich was anfangen kann, ist natürlich eine andere Frage.

Auf jeden Fall schön zu hören, dass es auch mit anderen Kombinationen, also sowohl mit anderen Multi-Split-Kombis als auch mit Single-Split-Installationen problemlos läuft.

MfG Frank

Gisbert

Hallo Frank,

ich hab dir eine PM geschrieben - hab erst danach gesehen, dass du einen neuen Thread aufgemacht hast.
Ich hab die bisher einzige Fehlermeldung dort gepostet. Vielleicht kannst du damit etwas anfangen.

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

Starkstrombastler

Ich habe mir die energy-Readings angeschaut - und musste erstmal etwas knobeln um da durchzusteigen.

Der Vergleich mit den Daten in der App liefert folgende Erkenntnis:

Die d-Readings beziehen sich auf 2-Stunden-Zeitscheiben gestern (d1..d12) und heute (d13...d24).

Die w-Readings beziehen sich auf ganze Tage (Mo...So) der letzten Woche (w1...w7) und aktuelle Woche (w8...w14).

die m-Readings beziehen sich auf ganze Monate (Jan...Dez) im letzten Jahr (m1...m12) und aktuelles Jahr (m13...m24).

Einige Readings liegen in der Zukunft und sind naturgemäß mit Null gefüllt.

Erkenntnis:
- das kleinste sinnvolle Polling-Intervall für die energy-Readings ist 7200 sek.
- der besseren Lesbarkeit wegen bietet sich ein Mapping der Reading-Namen an, so dass die jeweiligen Zeitintervalle besser erkennbar sind.

Allerdings bilden diese Daten nur einen begrenzten Zeithorizont ab und sind in fhem nicht so einfach grafisch (SVG) darzustellen. Daher folgende Idee: Es wird nur für den zuletz aktualisierten Wert einer Gruppe (heating|cooling_d|w|m) ein Reading erzeugt und in der Standardansicht (attr ConsumptenData 0) dargestellt. Die Anzahl der energy-Readings schrumpft damit von 124 auf 6. Mit fhem-Bordmitteln können diese einfach archiviert und grafisch aufbereitet werden.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

FrankL

Hallo Bernhard,

ich hatte die energy-Readings optional mit eingebaut, aber der Auswertung noch keine große Beachtung geschenkt, weil sie nicht "live" aufgezeichnet/aktualisiert werden, sondern nur im 2-Stunden-Takt und auch die Genauigkeit (kleinste Einheit 100 Wh) und der tatsächliche Verbrauch von meinen gemessenen "realen" Werten gewissene Abweichungen hat. Ich messe bei mir den Verbrauch mit einem Tasmota-Gerät (SONOFF ‎POWR316D), der mir das ganze besser darstellt/aufzeichnet.

Die Daten habe ich bisher stumpf aus den JSON-Werten, die aus der Cloud kommen, extrahiert. Damit sind sie natürlich genauso schön (oder eben auch häßlich), wie sie auch in der ONECTA-App zu sehen sind. Ich gebe dir Recht, dass die Bezeichnungen der energy-Readings nicht gerade selbsterklärend sind.

Nun zu deiner Idee: Ein separates Polling-Intervall für die energy-Readings von 7200 lässt sich nur bedingt umsetzen. Die Abfrage der Clouddaten bzw. die Antwort von der Cloud enthält immer alle Daten, erst bei der Verarbeitung der JSON-Daten kann ich entscheiden, gewisse Daten nicht zu verarbeiten, um Rechenressourcen zu sparen.

Standardmäßig habe ich den erstellten Indoor-Unit-Devices in FHEM das Attribut "event-on-change-reading" spendiert, d.h. es werden nur Events getriggert, bei denen ein geänderter Wert empfangen worden ist. Ich hätte jetzt gedacht, dass das fürs loggen der energy-Readings brauchbar wäre. Ein Mapping der Reading-Namen wäre aber tatsächlich sinnvoll.

Mein Problem ist eher folgendes: Ich wollte das Modul sehr universell für jedwede Geräte von Daikin halten und habe daher versucht, auf eine individuelle Veränderung/Verarbeitung der Cloud-Daten zu verzichten, da ich nicht weiß, ob die Daten von den verschiedenen Geräten jeweils identisch sind. Das fängt halt schon beim unterschiedlichen Funktionsumfang der verschiedenen Innengeräte an. Von daher weiß ich nicht, ob die consumptionData bei allen Geräten 100% identisch gestrickt ist.

Zur Not hilft es vielleicht auch erstmal vorübergehend, sich ein eigenes userReadings-Attribut anzulegen, was zur Verarbeitung/Loggen der Werte dient. Ich werde bei mir die energy-Readings mal mit loggen und schauen, was für Erkenntnisse ich daraus gewinnen kann.

MfG Frank


FrankL

Ich hab mir jetzt mal eine simple Lösung überlegt, mit der der fortlaufende Jahresverbrauch in einem Reading ermittelt und dann geloggt werden könnte. Ich hab es bei mir aber zum Testen erstmal nur als userReadings angelegt. Wenn sich das so bewähren sollte, würde ich es mit ins Modul übernehmen.

Wenn jemand ebenfalls mit testen möchte, kann er bei sich unter dem attribut userReadings der jeweiligen Indoor-Devices folgenden Code speichern:

energy_heating_year:energy_heating_m.* { my $kWh=0; for (my $i=13; $i<25; $i++) {$kWh += ReadingsNum($name,'energy_heating_m_'.$i,0)}; $kWh},
energy_cooling_year:energy_cooling_m.* { my $kWh=0; for (my $i=13; $i<25; $i++) {$kWh += ReadingsNum($name,'energy_cooling_m_'.$i,0)}; $kWh}

Voraussetzung ist, dass das attribut consumptionData im Cloud-Device und in dem jeweiligen Indoor-Device auf 1 gesetzt ist.

Damit wird jeweils der aufsummierte Jahresverbrauch des aktuellen Jahres für heating und cooling als entsprechendes Reading angelegt. Wenn diese beiden Readings geloggt werden, lässt sich damit dann auch eine weitere grafische Auswertung (SVG) gut realisieren.

Als kleiner Nachteil: Zum 01.01. eines jeden Jahres würde der Jahreszähler wieder bei 0 beginnen.

Ich denke, dass dann ein seperater Tagessummen- oder Wochensummenzähler nicht erforderlich ist. Er könnte aber nach dem gleichen System realisiert werden.

MfG Frank

Starkstrombastler

Hallo Frank,
für ein genaues Monitoren sind die Energy Readings eher ungeeignet. Wird aber kein separater Zähler eingesetzt sind damit zumindest tendenzielle Aussagen möglich. Daher halte ich es auf jeden Fall für sinnvoll, die Werte in ein paar wenigen Readings zu aggregieren.

Auf jeden Fall werde ich die vorgeschlagenen User-Readings ausprobieren.

MfG
Bernhard
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

FrankL

#9
Hallo Bernhard,

ich hab deine Idee umgesetzt und eine geänderte 58_DaikinCloud.pm hochgeladen (aktuelle Datei jeweils im ersten Post hier). Die Umsetzung habe ich wie folgt vorgenommen:

Sobald im Master-Device das attribut consumptionData auf 1 gesetzt wird, werden in den Indoor-Units jeweils readings für kumulierte Tages-, Wochen- und Jahreswerte für heating und cooling erzeugt (beginnend jeweils mit "kWh_.."). Wobei es reichen dürfte, den Jahreswert zu loggen. Damit kann man auch zur grafischen Aufbereitung was anfangen. Wenn man im SVG die "delta-d" Funktion verwendet, bekommt man aus den kumulierten Jahreswerten auch die Tageswerte schön angezeigt.

Wenn zusätzlich in der Indoor-Unit das attribut consumptionData auf 1 gesetzt wird, werden in der jeweiligen Indoor-Unit die "Roh-Daten" wie bisher mit angezeigt. Auf ein weiteres Mapping habe ich verzichtet, weil mir das zu aufwendig war bzw. ich aufgrund des o.g. kumulierten Jahreszählers keine Notwendigkeit mehr sehe.

Darüber hinaus habe ich die Fehlermeldung von Gisbert zum Anlass genommen, noch eine Plausi-Prüfung einzuführen: Ein Set-Befehl für eine Indoor-Unit kann grundsätzlich nur erfolgreich abgesetzt werden, wenn die Indoor-Unit auch aktuell mit der Cloud verbunden ist (reading isCloudConnectionUp == true). Dies ist zu beachten, falls z.B. die Geräte per Relais zeitweise (z.B. über Nacht) komplett stromlos gemacht werden. Dann sollte bei automatisierten Abläufen darauf geachtet werden, dass nach dem Einschalten des Stromes ca. 2 Minuten (d.h. ca. 1 Minute bis das Gerät "hochgefahren" ist und sich mit dem Internet/der Cloud verbunden hat + 1 weitere Minute für das erste erfolgreiche Polling mit "isCloudConnectionUp == true") gewartet wird, bis Set-Befehle automatisiert an die Indoor-Unit gesendet werden. Bei mir ist Klimaanlage sonst immer in StandBy, daher war mir diese Problematik bislang nicht aufgefallen.

Für eine Aktualisierung die 58_DaikinCloud.pm herunterladen und in den Ordner fhem/FHEM kopieren. Danach das
reload 58_DaikinCloud.pm
nicht vergessen. Die kWh-Werte kommen dann automatisch beim nächsten Polling, wenn im Master-Device consumptionData auf 1 gesetzt ist.

MfG Frank

Gisbert

Hallo Frank,

vielen Dank für dein Update.
Ich versuche (verzweifelt) dein Modul downzuloaden. Beim Antippen öffnet sich ein neues Fenster mit dem Inhalt des Moduls, auch der Download-Zähler geht eins nach oben, aber die Datei wurde nicht runtergeladen.
Liegt das an der neuen Forums-Software oder an deiner Datei?

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

FrankL

Hallo Gisbert,

das wird wohl an den Einstellungen deines Browsers liegen, wenn er die pm-Dateien standardmäßig anzeigen will, statt herunterzuladen. Du kannst aber auch einfach einen Rechtsklick auf die Datei/Link machen und wählen "Ziel speichern unter ..."

Ich hab den aktuellen Stand auch immer im github unter https://github.com/frank-lie/DaikinCloud abgelegt.

MfG Frank

Gisbert

Hallo Frank,

beim reload 58_DaikinCloud.pm erhalte ich folgende Antwort:
Excessively long <> operator at .//FHEM/58_DaikinCloud.pm line 27.
Ist das so beabsichtigt?

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

FrankL

Ich schau heute Abend nochmal genau drüber, aber so ein Fehler klingt nicht normal und kam bei mir auch nicht.

Wie und wo hast du denn die 58_DaikinCloud.pm runtergeladen (hier im Forum oder Github)? Oder hast du mit copy und paste selbst die Datei erstellt oder editiert?

Da in Zeile 27 nur die Anweisung "use strict;" steht, kann ich deine Fehlermeldung auch nicht wirklich einordnen.

MfG Frank

FrankL

Hallo Gisbert,

ich hab nochmal das Modul gecheckt. Da ist alles in Ordnung. Beim Reload der "58_DaikinCloud.pm" dürften nur die Perl Warnings im Log kommen, dass diverse Subroutinen redefined worden sind. Das wäre so auch vollkommen richtig.

Ich glaube aber zu wissen, wo bei dir der Fehler liegt. Du hast bestimmt im Github versucht, die Datei "58_DaikinCloud.pm" mit Rechtsklick und "Ziel speichern unter ..." runterzuladen, oder? Das funktioniert im Github so nicht. Wahrscheinlich ist deine runtergeladene Datei auch über 800 kB groß und enthält nur html-Zeug.

Daher zur Lösung folgende Varianten:

a) Hier aus dem Forum die "58_DaikinCloud.pm" mit Rechtsklick und "Ziel speichern unter ..." lokal speichern und nach FHEM kopieren.

oder

b) Im Github unter https://github.com/frank-lie/DaikinCloud den grünen Button "Code" anklicken und Download Zip auswählen. Die darin enthaltene "58_DaikinCloud.pm" entpacken und nach FHEM kopieren.

oder

c) Wenn bei dir FHEM auf Linux läuft, kannst du dort in der Shell auch einfach die Datei direkt ins FHEM Verzeichnis runterladen lassen (Option -P <Verzeichnis deiner FHEM-Installation> ggf. anpassen):
sudo wget https://raw.githubusercontent.com/frank-lie/DaikinCloud/main/58_DaikinCloud.pm -O 58_DaikinCloud.pm -P /opt/fhem/FHEM

Egal für welche Variante du dich entscheidest. Danach das
reload 58_DaikinCloud.pm
nicht vergessen.

Sag Bescheid, ob jetzt alles geklappt hat.

MfG Frank