[Modul] Panasonic Comfort Cloud

Danke, dass du sich da so reinkniest!

Variante 5 wäre noch: wie Variante 4, aber mit zusätzlicher readonly „targetTemperature“. Bedeutet aber, dass man in der Visualisierung eigentlich immer alle Variablen anzeigen müsste.

Ich meine 5 wäre etwas too much.

Ich halte auch Variante 1 für am besten. Könnte man ja bei Bedarf immer noch zu Variante 2 erweitern oder optional anbieten.

Ich habe es noch mal überprüft. es sieht so aus, als ob beim Lüften - egal ob oder mit nanoe - die Temperatur auf 27° eingestellt wird. Die App zeigt jedoch ‚–‘ an.

Das Gerät kennt nur den Betriebsmodus 4 aber mit Nano ein oder aus. Das lässt sich separat zu und abschalten. Die App kennt aber nur die Betriebsmodusauswahl „nanoX“ und schaltet dann auf 4 + nanox und zeigt auch den Text „nanoeX“ an.

Schaltet man nanoeX aus, dann wird die Betriebsmodusauswahl „nanoX“ grau und er zeigt „Fan“ an.

Ich habe mal die Betriebsmodi durchgeschaltet und im Dump kommentiert:
dump.txt (143,8 KB)

Nicht unbedingt. Man kann wenn das Gerät ausgeschaltet ist die Funktion zum Säubern aufrufen. Es geht dann in den „Inside Clean“ Modus.

TXT: 21.10.2023, 14:18:47 |         UpdateStatus | SendDataToParent(Array<LF>(<LF>    [DataID] => {34871A78-6B14-6BD4-3BE2-192BCB0B150D}<LF>    [CallerID] => 14103<LF>    [Function] => GetDeviceStatusNow<LF>    [Guid] => CS-Z20ZKEW+E064604643<LF>)<LF>)
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | jdata=Array<LF>(<LF>    [timestamp] => 1697890708735<LF>    [permission] => 3<LF>    [summerHouse] => 0<LF>    [iAutoX] => <LF>    [nanoe] => 1<LF>    [nanoeStandAlone] => 1<LF>    [autoMode] => 1<LF>    [heatMode] => 1<LF>    [fanMode] => <LF>    [dryMode] => 1<LF>    [coolMode] => 1<LF>    [ecoNavi] => <LF>    [powerfulMode] => 1<LF>    [quietMode] => 1<LF>    [airSwingLR] => 1<LF>    [autoSwingUD] => 1<LF>    [ecoFunction] => 0<LF>    [temperatureUnit] => 0<LF>    [modeAvlList] => Array<LF>        (<LF>            [autoMode] => 1<LF>        )<LF><LF>    [nanoeList] => Array<LF>        (<LF>            [visualizationShow] => 0<LF>        )<LF><LF>    [clothesDrying] => <LF>    [insideCleaning] => 1<LF>    [fireplace] => <LF>    [pairedFlg] => <LF>    [parameters] => Array<LF>        (<LF>            [operate] => 0<LF>            [operationMode] => 3<LF>            [temperatureSet] => 20<LF>            [fanSpeed] => 0<LF>            [fanAutoMode] => 0<LF>            [airSwingLR] => 2<LF>            [airSwingUD] => 2<LF>            [ecoMode] => 0<LF>            [ecoNavi] => 0<LF>            [nanoe] => 1<LF>            [lastSettingMode] => 0<LF>            [iAuto] => 0<LF>            [airDirection] => 0<LF>            [insideTemperature] => 28<LF>            [outTemperature] => 21<LF>            [airQuality] => 0<LF>            [ecoFunctionData] => 0<LF>            [insideCleaning] => 2<LF>            [fireplace] => 0<LF>        )<LF><LF>    [deviceNanoe] => 3<LF>)<LF>
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | options=Array<LF>(<LF>    [autoMode] => 1<LF>    [coolMode] => 1<LF>    [dryMode] => 1<LF>    [fanMode] => 1<LF>    [heatMode] => 1<LF>    [powerfulMode] => 1<LF>    [quietMode] => 1<LF>    [nanoe] => 1<LF>    [airSwingLR] => 1<LF>    [autoSwingUD] => 1<LF>    [fanDirectionMode] => <LF>    [fanSpeedMode] => <LF>    [nanoeStandAlone] => 1<LF>)<LF>
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... Operate (operate)=0
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... OperationMode (operationMode)=3
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... EcoMode (ecoMode)=0
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... fanAutoMode=0
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... FanSpeed (fanSpeed)=0
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... AirflowVertical (airSwingUD)=-1
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... AirflowHorizontal (airSwingLR)=-1
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... TargetTemperature (temperatureSet)=20
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... ActualTemperature (insideTemperature)=28
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... OutsideTemperature (outTemperature)=21
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | ... NanoeMode (nanoe)=1
TXT: 21.10.2023, 14:18:47 |         UpdateStatus | SendDataToParent(Array<LF>(<LF>    [DataID] => {34871A78-6B14-6BD4-3BE2-192BCB0B150D}<LF>    [CallerID] => 14103<LF>    [Function] => GetDeviceHistory<LF>    [Guid] => CS-Z20ZKEW+E064604643<LF>    [DataMode] => 0<LF>    [Timestamp] => 1697890727<LF>)<LF>)
TXT: 21.10.2023, 14:18:48 |         UpdateStatus | jdata=Array<LF>(<LF>    [energyConsumption] => 7.261<LF>    [deviceRegisterTime] => 20231008<LF>    [temperatureUnit] => 0<LF>    [historyDataList] => Array<LF>        (<LF>            [0] => Array<LF>                (<LF>                    [dataNumber] => 0<LF>                    [consumption] => 0.544<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 28.25<LF>                    [averageOutsideTemp] => 14.5<LF>                    [cost] => 0<LF>                )<LF><LF>            [1] => Array<LF>                (<LF>                    [dataNumber] => 1<LF>                    [consumption] => 0.614<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27<LF>                    [averageOutsideTemp] => 14.5<LF>                    [cost] => 0<LF>                )<LF><LF>            [2] => Array<LF>                (<LF>                    [dataNumber] => 2<LF>                    [consumption] => 0.507<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 26.75<LF>                    [averageOutsideTemp] => 14.25<LF>                    [cost] => 0<LF>                )<LF><LF>            [3] => Array<LF>                (<LF>                    [dataNumber] => 3<LF>                    [consumption] => 0.568<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27.5<LF>                    [averageOutsideTemp] => 14.5<LF>                    [cost] => 0<LF>                )<LF><LF>            [4] => Array<LF>                (<LF>                    [dataNumber] => 4<LF>                    [consumption] => 0.554<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27.75<LF>                    [averageOutsideTemp] => 15.5<LF>                    [cost] => 0<LF>                )<LF><LF>            [5] => Array<LF>                (<LF>                    [dataNumber] => 5<LF>                    [consumption] => 0.571<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27.75<LF>                    [averageOutsideTemp] => 15.5<LF>                    [cost] => 0<LF>                )<LF><LF>            [6] => Array<LF>                (<LF>                    [dataNumber] => 6<LF>                    [consumption] => 0.586<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 28.25<LF>                    [averageOutsideTemp] => 15.75<LF>                    [cost] => 0<LF>                )<LF><LF>            [7] => Array<LF>                (<LF>                    [dataNumber] => 7<LF>                    [consumption] => 0.577<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 28<LF>                    [averageOutsideTemp] => 15.25<LF>                    [cost] => 0<LF>                )<LF><LF>            [8] => Array<LF>                (<LF>                    [dataNumber] => 8<LF>                    [consumption] => 0.548<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27<LF>                    [averageOutsideTemp] => 14.75<LF>                    [cost] => 0<LF>                )<LF><LF>            [9] => Array<LF>                (<LF>                    [dataNumber] => 9<LF>                    [consumption] => 0.517<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27.25<LF>                    [averageOutsideTemp] => 16.75<LF>                    [cost] => 0<LF>                )<LF><LF>            [10] => Array<LF>                (<LF>                    [dataNumber] => 10<LF>                    [consumption] => 0.482<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 27.25<LF>                    [averageOutsideTemp] => 18.5<LF>                    [cost] => 0<LF>                )<LF><LF>            [11] => Array<LF>                (<LF>                    [dataNumber] => 11<LF>                    [consumption] => 0.454<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 30<LF>                    [averageOutsideTemp] => 19<LF>                    [cost] => 0<LF>                )<LF><LF>            [12] => Array<LF>                (<LF>                    [dataNumber] => 12<LF>                    [consumption] => 0.371<LF>                    [averageSettingTemp] => 27<LF>                    [averageInsideTemp] => 30<LF>                    [averageOutsideTemp] => 20.75<LF>                    [cost] => 0<LF>                )<LF><LF>            [13] => Array<LF>                (<LF>                    [dataNumber] => 13<LF>                    [consumption] => 0.368<LF>                    [averageSettingTemp] => 25.25<LF>                    [averageInsideTemp] => 29.5<LF>                    [averageOutsideTemp] => 21.25<LF>                    [cost] => 0<LF>                )<LF><LF>            [14] => Array<LF>                (<LF>                    [dataNumber] => 14<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [15] => Array<LF>                (<LF>                    [dataNumber] => 15<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [16] => Array<LF>                (<LF>                    [dataNumber] => 16<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [17] => Array<LF>                (<LF>                    [dataNumber] => 17<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [18] => Array<LF>                (<LF>                    [dataNumber] => 18<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [19] => Array<LF>                (<LF>                    [dataNumber] => 19<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [20] => Array<LF>                (<LF>                    [dataNumber] => 20<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [21] => Array<LF>                (<LF>                    [dataNumber] => 21<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [22] => Array<LF>                (<LF>                    [dataNumber] => 22<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>            [23] => Array<LF>                (<LF>                    [dataNumber] => 23<LF>                    [consumption] => -255<LF>                    [averageSettingTemp] => -255<LF>                    [averageInsideTemp] => -255<LF>                    [averageOutsideTemp] => -255<LF>                    [cost] => 0<LF>                )<LF><LF>        )<LF><LF>)<LF>
TXT: 21.10.2023, 14:18:48 |         UpdateStatus | ... energyConsumption=7.261
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(OperationMode, false)
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(EcoMode, false)
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(FanSpeed, false)
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(AirflowVertical, false)
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(AirflowHorizontal, false)
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(TargetTemperature, false)
TXT: 21.10.2023, 14:18:48 |         AdjustAction | MaintainAction(NanoeMode, false)
TXT: 21.10.2023, 14:18:48 |        MaintainTimer | timer=UpdateStatus(134), interval=-
TXT: 21.10.2023, 14:18:48 |       CommonDestruct | resource info (today): memory=1.54M (Ø 1.54M [1.54M...1.54M]), duration=1,030.00ms (Ø 1,290.99ms [3.00ms...4,387.00ms]), count=1561
TXT: 21.10.2023, 14:18:48 |       CommonDestruct | resource info (today): memory=1.54M (Ø 1.54M [1.54M...1.54M]), duration=4.18ms (Ø 1,290.16ms [3.00ms...4,387.00ms]), count=1562

Wie er genau funktioniert, weiß ich aber noch nicht.

ok

ok, dann mache ich diesbezüglich nicht. Muss man drüber nachdenken, ob man ggfs. gerne möchte, das bei „Lüften“ per Default „nanoe-x“ auch gesetzt wird.
Das ist im Prinzip die eine Hälfte der Änderungen, die ich auf Bitte von @phe eingeführt und mit neulich hinzugefügte Schalter (erstmal) wieder heraus genommen habe. Die andere Hätte der Änderung war, das man nanoe-x nicht zurücknehmen konnte, denn Betriebsmodus auf Lüften steht.

Ich weis nicht, wie häufig man Lüften ohne Luftreinigung macht. Alternativ wäre natürlich auch eine Fake-Betriebsart „Luftreinigung“ (also Lüften+nanoe-x => operationMode=4+nanoe=2) denkbar. Ist etwas basteln, aber denkbar.

Danke, interessant. Aufreden Fall sehe ich nix in den Daten, das die Betriebsart „nanoeX“ abbildet, ggfs. eine reine Implementierung in der App.

Ah, das ist dann schon interessant. Ich habe schon gefunden das Wert 1=aus, Wert 2=an ist. Und du startest diese Reinigung über die Panasonic-App und das geht nur, wenn das Gerät aus ist?
Das kann ich natürlich auch reinnehmen. Die Anzeige auf jeden Fall, ob die Aktivierung Sinn macht?

dann mache ich das so

Halte ich nicht für notwendig. Eindeutiger finde ich es, wenn man nanoeX zum Lüften zuschaltet oder eben nicht.

Sehe ich genauso.

So mein Eindruck. Habe das Gerät aber nur im Remote Zugriff.
Ich würde da erst mal gar nichts mit machen. Vielleicht kann ich es wenn ich mal vor Ort bin oder ein anderer mal genauer ausprobieren.

Zur Temperaturspeicherung: ich weiß noch nicht, was passiert, wenn man mit der Fernbedienung die Betriebsmodi umschaltet und die Temperaturen verändert. Die FB wird sich doch kaum die Temperaturen merken. Ich befürchte, das Gerät merkt sich die Temperaturen. Dann wäre es vielleicht schlecht, wenn sie in Symcon auch gemerkt würden.

ok, ist ja auch kein Problem das später nachzurüsten

ok

gerade mal getestet …
die Temperatur wird - egal ob über App oder FB eingestellt - vom Gerät an die Cloud übertragen, da rufe ich die ab und ändere die auch im IPS.
Und umgekehrt (also Temperaturänderung im IPS) geht an die Cloud → Gerät. Die App wird synchronisiert (u.U. muss man dort manuell refreschen). Nur die FB bleibt ungerührt, es gibt wohl keinen Weg zurück in die FB. Wenn man auf der FB was einstellt, die aber nicht auf die Klima richtet, ist das in der FB geändert, aber nicht im Gerät/Cloud

Ich dachte an den Fall, wenn man an der FB die Heiztemperatur auf 20 stellt und die Kühltenperatur auf 24.

Was passiert , wenn man dann in der Pana App zwischen den beiden Modi wechselt?

ich habe auf der FB zwischen den Modi geschaltet, er hat immer die Temperatur genommen, die ich in dem Modus vorher eingeschaltet hatte. Auch bei Einschalten ist er in den Modus gegangen, der vermutlich vorher aktiv war (Kühlen, die FB hatte ich nur genutzt bei der Einrichtung der Klima).

Die FB kriegt nix mit.
Ich sehe das so, das die FB mit IR funktioniert (man muss ja ziemlich genau zielen) und das ist dann ja (ohne besonderen Aufwand) nur unidirektional.

So gesehen kann man die FB nur als Krücke benutzen - habe ich auch nur aus dem Grund da liegen, wenn irgendwas mit IPS oder dem Internet nicht funzt.
Ich steuere die über IPS-App, eventuell mal die Panasonic-App und meistens sogar einfach über den HmIP-Lichtschalter ( Tastendruck kurz = Licht ein/aus, lang = Klima ein/aus)

Moin zusammen,

ihr kniet euch ja fleißig rein hier. :slight_smile:
Zum Lüften und meiner damaligen Änderung noch ein Hinweis: Bei meinen --XKEW Geräten kann ich weder mit der IR-Fernbedienung noch mit der App die Lüftung ohne NanoX einstellen!
Die Temperaturen der IR-Fernbedienung überschreiben immer die aus der App und einen Rückkanal vom Gerät an die IR-Fernbedienung gibt es nicht. Die Fernbedienung merkt sich aber tatsächlich für jeden Modus eine eigene Temperatur!

Viele Grüße
Philip

Gute Indo, dann ist ja der neue Schalter, der zwischen gekoppeltem und separatem Verhalten unterscheiden kann.
Bedeutet, das du nach einem Update des Moduls diesen Schalter aktivieren müsstest.

beides erledigt, im Modulstore/beta

Danke für das Modul, funktioniert bei mir mit 3*Z25ZKEW gut!
Seit gestern erzwingt die Panasonic-App leider ein 2FA für die Panasonic ID, wie soll danach die Authentifizierung seitens des Moduls weitergehen?

Ja, ich habe es gerade nachvollzogen. Da bin ich erstmal ratlos.
Noch scheint bei mir die Instanzen zu arbeiten, aber das funktioniert sicherlich nur, solange man einen gültigen Refresh-Token hat.
Das Problem ist hier (wie bei vielen APi’s), das es keinen offiziellen Zugang gib sondern nur per reverse engeneering „erraten“ wird, was zu tun ist.
ich werde mal im Internet stöbern, ob da schon mal jemand aktiv war

Moin & danke für die Nachricht! Ja, das kenne ich von ähnlich gelagerten Fällen. Obwohl ich im Cloudbereich arbeite, möchte man diese Abhängigkeit manchmal gerne herauswerfen, damit es „einfach nur zuverlässig funktioniert“, ohne dass man ständig nacharbeiten und anpassen muss. :roll_eyes:

Ich habe gerade an den Support für die P-Id geschrieben und gefragt, ob sie bitte für meine Id 2FA abschalten können; Ergebnis berichte ich hier.

2 „Gefällt mir“

Noch ein Hinweis: Meine Integration ist am 10. Januar früh morgens ausgefallen und mein Konto/Id gesperrt, scheinbar doch im Zusammenhang mit der Umstellung auf 2FA bzw weitere Authentizierungswege.

Auf New Panasonic Authentication · Issue #161 · sockless-coding/panasonic_cc · GitHub (Modul für HA) gibt es eine analoge Diskussion, die vielleicht weiter führt. Das behalte ich mal „im Auge“.

Versuch mal bitte die aktuelle v1.17 (Modulstore/Beta)

@god2010 : hast du schon testen können?

Leider noch nicht, noch funktioniert die Integration mit dem alten Token und ich wil den WAF nicht ruinieren.
Vor dem Test eine Frage: soll ich das Konto vorher von der App mit 2FA versehen lasseb oder es ohne 2FA lassen?

Gerade die Antwort vom Support bekommen, leider wie erwartet:


Dear Customer,

We apologize for the delayed response.
This is the support team for Panasonic ID.

You cannot disable MFA individually.
We apologize for any inconvenience, but we kindly request you to sign in
and complete the MFA setting procedure.

We apologize for any inconvenience caused.

Sincerely,

Panasonic ID Support
pcpf-support@gg.jp.panasonic.com

Hattest Du nicht geschrieben, das die Integration ausgefallen ist?

Wenn nicht, dann hast Du ja kein Problem. Die Änderung, die ich an der API gemacht habe wirkt bei mir im Testsystem, eine Anmeldung wird (wieder) korrekt durchgeführt.
Hätte ja sein können, das es bei Dir nicht funktioniert hat.

Für den Abruf aus IPS ist das irrelevant.

Hallo zusammen, hatte gestern voller Freude gesehen, dass es ein Panasonic Comfort Cloud Modul gibt. Allerdings sind bis Dato wohl nur Klimageräte damit zu bedienen. Da ich nicht der große Programmierer und Skripter bin die Frage ob sich das Modul nicht um die Wärmepumpen erweitern liese. Würde da auch gerne was spenden. Meine Geräte: IG: WH-SDC0709J3E5 und AG:WH-UD09JE5-1

Oder gibt es eine andere Idee zur Steuerung die nicht tiefe Programierkenntnisse erfordern?

Ich habe nämlich ein akutes Problem, da ich nicht die Panasonic Stellventilregelung nutze sondern die Heizkreissteuerung über LCN/IP-Symcon nutze habe ich immer wieder das Problem, das die Machine auf einen Fehler läuft und Stehen bleibt, da das Kommando zum Stoppen der WP über LCN/IP-Symcon zu lange dauert bzw. manchmal gar nicht durchkommt wenn alle Ventile geschlossen sind. Mit einer Direktanbindung könnte man das viel Eleganter lösen.

Viele Grüße Guido