Ankündigung

Einklappen
Keine Ankündigung bisher.

Miele @Home mit MQTT

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Hallo manhartm,

    kannst Du bitte direkt beim Neustart von shNG nochmal schauen ob Log-Einträge in der "warnings.log" sind.

    Kommentar


      #47
      Hier der Inhalt meiner "smarthome-warnings.log" auf meinem Test-System:

      Code:
      2023-03-23  19:48:09 NOTICE   lib.smarthome       --------------------   Init SmartHomeNG v1.9.4.1-c35554ee.develop   --------------------
      2023-03-23  19:48:09 NOTICE   lib.smarthome       Running in Python interpreter 'v3.9.2 final', from directory /usr/local/smarthome
      2023-03-23  19:48:09 NOTICE   lib.smarthome        - operating system 'Debian GNU/Linux 11 (bullseye)' (pid=6641)
      2023-03-23  19:48:09 NOTICE   lib.smarthome        - on 'Raspberry Pi (Rev. d03115)'
      2023-03-23  19:48:11 NOTICE   lib.smarthome        - Nutze Feiertage für Land 'CH', Provinz 'ZH', 1 benutzerdefinierte(r) Feiertag(e) definiert
      2023-03-23  19:48:13 NOTICE   lib.userfunctions   Imported userfunctions from 'mm' v0.1.0 - This Tools
      2023-03-23  19:48:26 NOTICE   lib.smarthome       --------------------   SmartHomeNG initialization finished   --------------------
      2023-03-23  19:49:26 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)
      2023-03-23  19:50:56 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)
      2023-03-23  19:52:26 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)
      2023-03-23  19:53:57 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)
      2023-03-23  19:55:27 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)
      2023-03-23  19:56:57 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)
      2023-03-23  19:58:27 WARNING  plugins.mieleathome mieleathome - connection canceled - waiting 30sec - retry to get new Event-Connection -  reason : Expecting value: line 1 column 1 (char 0)

      Kommentar


        #48
        Hi,

        im Moment hab ich auch keine weitere Idee, ich schau mir das übers Wochenende mal genauer an.

        VG
        Andre

        Kommentar


          #49
          Hallo manhartm, gklein

          bitte versucht mal im Web-IF des Excecutor-Plugins oder in einer Python-Console folgenden Code mit Euren Werten

          Code:
          import requests
          import json
          Url='https://api.mcs3.miele.com/v1'
          pwd           = 'xxxxxxxx'
          user          = 'xxxxxxxxxxxxxxxxxxxxxx'
          client_id     = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
          client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
          country       = 'de-DE'
          myHeaders = { "accept" : "application/json" }
                  
          payload =  {"grant_type": "password",
                      "password" :pwd,
                      "username" : user,
                      "client_id" : client_id,
                      "client_secret":client_secret,
                      "vg" :country
                     }
                  
          myResult = requests.post(Url[:-3]+'/thirdparty/token/',data=payload,headers=myHeaders)
          print (myResult.status_code)
          print (myResult.content.decode())
          Das Ergebnis sollte so aussehen. Ich vermute Du bekommst ein anderes Ergebnis sonst würde ja alles funktionieren.
          Code:
          200
          {"access_token":"DE_4326d8b2d7eec458a87a28xxxxxxxxx","refresh_token":"DE_5fdc23ad15205cd07d61xxxxxxxxxxxx","token_type":"Bearer","expires_in":2592000}​
          Viele Grüße
          Andre
          Zuletzt geändert von AndreK; 25.03.2023, 14:18.

          Kommentar


            #50
            Fehler gefunden. Ich lebe in der Schweiz und mein Account braucht somit den Code "de-CH". Das Python-Script oben zeigte mir diesen Fehler:

            Code:
            401
            {"message":"username/password is invalid"}
            Mit der Änderung auf 'de-CH' klappt nun alles und das Plugin läuft.
            Zuletzt geändert von manhartm; 25.03.2023, 18:30.

            Kommentar


              #51
              Hallo AndreK,

              nach der Gartenarbeit habe ich mal das Exceutor-Plaugin angeworfen und getestet. Die Response ist wie von Dir als Beispiel gezeigt:

              Code:
              200
              {"access_token":"DE_de9286fbbxxxxxxxxxxxxxxxxxx","refresh_token":"DE_3cbff8995d6a32cxxxxxxxxxxxxxxxxxxxx","token_type":"Bearer","expires_in":2592000}​
              Er zeigt mir in der Fehlermeldung im Log auch schon meine Geräte-ID an. Die scheint halt nur an der falschen Stelle zu stehen, so das beim Auswerten was schiefläuft.

              Hier noch ein Screenshot vom WebIF, da sieht es soweit auch gut aus.
              Screenshot_Miele.png

              Danke für Deine Unterstützung und einen schönen Abend
              Gunnar

              Kommentar


                #52
                Hi gklein,

                welche Geräte hast Du im Einsatz, bisher sind nur Waschmaschine, Gefrierschrank, Trockner im Plugin eingebaut. Ich vermute Du hast ein anderes Gerät im Einsatz (ich meine Du hast einen Dampfgarer erwähnt ?). Da diese Struktur aktuell nicht eingebaut ist wird es wohl zu Problemen kommen. Wenn Du mir die Gerätedaten der API zukommen lässt kann ich mir das gerne ansehen. (Sollte trotz Fehlern im Web-IF zu sehen sein)

                Der Thread war fast zwei Jahre tod, also kein riesiger Bedarf. Wenn nun wieder etwas Bewegung in den Thread kommt können wir gerne weitere Geräte einbauen.
                Da ich selbst (noch) keine Miele-Geräte habe bin ich auf Eure Unterstützung zur Weiterentwicklung angewisesen.

                Viele Grüße
                Andre

                Kommentar


                  #53
                  Zitat von AndreK Beitrag anzeigen
                  Hi gklein,
                  (ich meine Du hast einen Dampfgarer erwähnt ?). Da diese Struktur aktuell nicht eingebaut ist wird es wohl zu Problemen kommen. Wenn Du mir die Gerätedaten der API zukommen lässt kann ich mir das gerne ansehen.
                  Der Steamer steht bei mir. Was genau brauchst Du?

                  Kommentar


                    #54
                    Ich hätte einen Kaffee Vollautomaten beizusteuern.
                    ich werde mich in der kommenden Woche mal damit beschäftigen.
                    Viele Grüße
                    Martin

                    There is no cloud. It's only someone else's computer.

                    Kommentar


                      #55
                      Hallo,

                      ich benötige "nur" die Daten des Payloads die im Web-IF des Plugins unter Event-Informations angezeigt (beide Devcie-Event / Action-Event) werden. Gerne auch via PN oder mail.
                      Es muss dann die Struktur des "structs" entsprechend erweitetert werden. und eventuelle neue "Actions" ergänzt werden.
                      Das mit der Kaffee-Maschine wird sicherlich nochmal spannend - die kann warhscheinlich von Espresso über Late und Melange fast alles :-)

                      Viele Grüße
                      Andre

                      Kommentar


                        #56
                        Hi,

                        ich hab einen Geschirrspüler im Angebot.
                        Die Daten im WebIF sind bei mit leer. Wenn Du mir sagen kannst welcher API-Call das ist, kann ich das auch über die Miele-Seite runterladen.

                        Weiter vorn hatte ich schonmal das hier eingefügt. Evtl. ist das schon das Richtige?

                        Code:
                        { "fabNumber": "00010370....", "state": "In Betrieb", "type": "Geschirrspüler", "deviceName": "", "details": "https://api.mcs3.miele.com/v1/devices/00010370...." }
                        00010370xxxx ist meine Device-ID.

                        VG

                        Kommentar


                          #57
                          Ne, der Kurze JSON String sagt nicht viel aus.
                          Du hast im selben Post weiter oben aber schon den String gepostet, der im Webinterface unter Device-Event kommen müsste:

                          Code:
                          {
                            "00010370xxxx": {
                              "ident": {
                                "type": {
                                  "key_localized": "Gerätetyp",
                                  "value_raw": 7,
                                  "value_localized": "Geschirrspüler"
                                },
                                "deviceName": "",
                                "protocolVersion": 2,
                                "deviceIdentLabel": {
                                  "fabNumber": "00010370xxxx",
                                  "fabIndex": "64",
                                  "techType": "G6865",
                                  "matNumber": "10345030",
                                  "swids": [
                                    "3892",
                                    "20211",
                                    "20150"
                                  ]
                                },
                                "xkmIdentLabel": {
                                  "techType": "EK039W",
                                  "releaseVersion": "02.72"
                                }
                              },
                              "state": {
                                "ProgramID": {
                                  "value_raw": 28,
                                  "value_localized": "ECO",
                                  "key_localized": "Programmbezeichnung"
                                },
                                "status": {
                                  "value_raw": 5,
                                  "value_localized": "In Betrieb",
                                  "key_localized": "Status"
                                },
                                "programType": {
                                  "value_raw": 2,
                                  "value_localized": "Automatikprogramm",
                                  "key_localized": "Programmart"
                                },
                                "programPhase": {
                                  "value_raw": 1799,
                                  "value_localized": "Trocknen",
                                  "key_localized": "Programmphase"
                                },
                                "remainingTime": [
                                  1,
                                  19
                                ],
                                "startTime": [
                                  0,
                                  0
                                ],
                                "targetTemperature": [
                                  {
                                    "value_raw": -32768,
                                    "value_localized": null,
                                    "unit": "Celsius"
                                  }
                                ],
                                "coreTargetTemperature": [],
                                "temperature": [
                                  {
                                    "value_raw": -32768,
                                    "value_localized": null,
                                    "unit":"Celsius"
                                  },
                                  {
                                    "value_raw": -32768,
                                    "value_localized": null,
                                    "unit": "Celsius"
                                  },
                                  {
                                    "value_raw": -32768,
                                    "value_localized": null,
                                    "unit": "Celsius"
                                  }
                                ],
                                "coreTemperature": [],
                                "signalInfo": false,
                                "signalFailure": false,
                                "signalDoor": false,
                                "remoteEnable": {
                                  "fullRemoteControl": true,
                                  "smartGrid": false,
                                  "mobileStart": false
                                },
                                "ambientLight": null,
                                "light": null,
                                "elapsedTime": [
                                  1,
                                  57
                                ],
                                "spinningSpeed": {
                                  "unit": "U\/min",
                                  "value_raw": null,
                                  "value_localized": null,
                                  "key_localized": "Schleuderdrehzahl"
                                },
                                "dryingStep": {
                                  "value_raw": null,
                                  "value_localized": "",
                                  "key_localized": "Trockenstufe"
                                },
                                "ventilationStep": {
                                  "value_raw": null,
                                  "value_localized": "",
                                  "key_localized": "Lüfterstufe"
                                },
                                "plateStep": [],
                                "ecoFeedback": null,
                                "batteryLevel": null
                              }
                            }
                          }
                          
                          ​
                          Der sieht völlig normal aus. Ist fast identisch zu meinem Trockner und der Waschmaschine. Nur sind die möglichen Zustände noch nicht im Plugin implementiert.
                          Solange dieser String und die Events rechts daneben im Webinterface bei dir aber noch nicht auftauchen, ist irgendwo noch der Wurm drin.

                          Der Kühlschrank von manhartm dürfte sich kaum von meinem Gefrierschrank unterscheiden, was die Daten angeht.
                          Interessant werden der Dampfgarer und die Kaffeemaschine.

                          Kommentar


                            #58
                            Auf eine Fleißarbeit könnt ihr euch schon mal einstellen.
                            Alles was unter state steht, also:

                            Code:
                                "state": {
                                  "ProgramID": {
                                    "value_raw": 28,
                                    "value_localized": "ECO",
                                    "key_localized": "Programmbezeichnung"
                                  },
                                  "status": {
                                    "value_raw": 5,
                                    "value_localized": "In Betrieb",
                                    "key_localized": "Status"
                                  },
                                  "programType": {
                                    "value_raw": 2,
                                    "value_localized": "Automatikprogramm",
                                    "key_localized": "Programmart"
                                  },
                                  "programPhase": {
                                    "value_raw": 1799,
                                    "value_localized": "Trocknen",
                                    "key_localized": "Programmphase"
                                  },
                            ​
                            ist ja variabel und hängt vom Zustand ab. Da Miele nicht für alle Geräte ne schöne Liste aller raw Values und localized keys für jede Sprache anbietet, muss man das selber rausfinden. Also bei verschiedenen Programmen immer mal die Werte notieren, die dabei raus kommen. Vor allem für die Visu interessant. Das kann dauern. Ich hatte nach einem Jahr noch nen Zustand der sonst nie vorkam und ich für die Visu nachtragen musste.

                            Beispiel:

                            Code:
                            {{ basic.symbol('', 'MieleDevices.Dryer.state.status.value_localized', ['nicht verbunden', 'Aus', 'Bereit', 'Programm gewählt', 'In Betrieb', 'Ende', 'Pause', 'Fehler!', 'Start verzögert'], ['message_attention.svg', 'scene_clothes_dryer.svg', 'scene_clothes_dryer.svg', 'scene_clothes_dryer.svg', 'scene_clothes_dryer.svg', 'scene_clothes_dryer.svg', 'scene_clothes_dryer.svg', 'message_attention.svg', 'scene_clothes_dryer.svg'], ['nicht verbunden', 'Aus', 'Bereit', 'Programm gewählt', 'In Betrieb', 'Ende', 'Pause', 'Fehler!', 'Start verzögert'], '', ['#f00', 'icon0', 'icon1', 'icon1', 'icon1', 'icon0', 'icon1', '#f00', 'icon1']) }}

                            Kommentar


                              #59
                              Hier der Device-Event der beiden Geräte:

                              Code:
                              {
                                "007106053497": {
                                  "ident": {
                                    "type": {
                                      "key_localized": "Gerätetyp",
                                      "value_raw": 19,
                                      "value_localized": "Kühlschrank"
                                    },
                                    "deviceName": "",
                                    "protocolVersion": 1,
                                    "deviceIdentLabel": {
                                      "fabNumber": "007106053497",
                                      "fabIndex": "17",
                                      "techType": "K 37683 iDF",
                                      "matNumber": "09484990",
                                      "swids": [
                                        "3309",
                                        "0"
                                      ]
                                    },
                                    "xkmIdentLabel": {
                                      "techType": "",
                                      "releaseVersion": ""
                                    }
                                  },
                                  "state": {
                                    "ProgramID": {
                                      "value_raw": 2466250752,
                                      "value_localized": "",
                                      "key_localized": "Programmbezeichnung"
                                    },
                                    "status": {
                                      "value_raw": 5,
                                      "value_localized": "In Betrieb",
                                      "key_localized": "Status"
                                    },
                                    "programType": {
                                      "value_raw": 0,
                                      "value_localized": "Programm",
                                      "key_localized": "Programmart"
                                    },
                                    "programPhase": {
                                      "value_raw": 0,
                                      "value_localized": "",
                                      "key_localized": "Programmphase"
                                    },
                                    "remainingTime": [
                                      0,
                                      0
                                    ],
                                    "startTime": [
                                      0,
                                      0
                                    ],
                                    "targetTemperature": [
                                      {
                                        "value_raw": 600,
                                        "value_localized": 6,
                                        "unit": "Celsius"
                                      }
                                    ],
                                    "coreTargetTemperature": [],
                                    "temperature": [
                                      {
                                        "value_raw": 600,
                                        "value_localized": 6,
                                        "unit": "Celsius"
                                      }
                                    ],
                                    "coreTemperature": [],
                                    "signalInfo": false,
                                    "signalFailure": false,
                                    "signalDoor": false,
                                    "remoteEnable": {
                                      "fullRemoteControl": true,
                                      "smartGrid": false,
                                      "mobileStart": false
                                    },
                                    "ambientLight": null,
                                    "light": null,
                                    "elapsedTime": [],
                                    "spinningSpeed": {
                                      "unit": "U/min",
                                      "value_raw": null,
                                      "value_localized": null,
                                      "key_localized": "Schleuderdrehzahl"
                                    },
                                    "dryingStep": {
                                      "value_raw": null,
                                      "value_localized": "",
                                      "key_localized": "Trockenstufe"
                                    },
                                    "ventilationStep": {
                                      "value_raw": null,
                                      "value_localized": "",
                                      "key_localized": "Lüfterstufe"
                                    },
                                    "plateStep": [],
                                    "ecoFeedback": null,
                                    "batteryLevel": null
                                  }
                                },
                                "000127876311": {
                                  "ident": {
                                    "type": {
                                      "key_localized": "Gerätetyp",
                                      "value_raw": 31,
                                      "value_localized": "Combi-Dampfgarer"
                                    },
                                    "deviceName": "",
                                    "protocolVersion": 2,
                                    "deviceIdentLabel": {
                                      "fabNumber": "000127876311",
                                      "fabIndex": "10",
                                      "techType": "DGC6800   CH",
                                      "matNumber": "09453120",
                                      "swids": [
                                        "3401",
                                        "25003",
                                        "20146",
                                        "3384",
                                        "20251",
                                        "25086"
                                      ]
                                    },
                                    "xkmIdentLabel": {
                                      "techType": "XKM3000Z",
                                      "releaseVersion": "01.02"
                                    }
                                  },
                                  "state": {
                                    "ProgramID": {
                                      "value_raw": 0,
                                      "value_localized": "",
                                      "key_localized": "Programmbezeichnung"
                                    },
                                    "status": {
                                      "value_raw": 2,
                                      "value_localized": "Bereit",
                                      "key_localized": "Status"
                                    },
                                    "programType": {
                                      "value_raw": 0,
                                      "value_localized": "Programm",
                                      "key_localized": "Programmart"
                                    },
                                    "programPhase": {
                                      "value_raw": 7936,
                                      "value_localized": "",
                                      "key_localized": "Programmphase"
                                    },
                                    "remainingTime": [
                                      0,
                                      0
                                    ],
                                    "startTime": [
                                      0,
                                      0
                                    ],
                                    "targetTemperature": [
                                      {
                                        "value_raw": -32768,
                                        "value_localized": null,
                                        "unit": "Celsius"
                                      },
                                      {
                                        "value_raw": -32768,
                                        "value_localized": null,
                                        "unit": "Celsius"
                                      }
                                    ],
                                    "coreTargetTemperature": [],
                                    "temperature": [
                                      {
                                        "value_raw": -32768,
                                        "value_localized": null,
                                        "unit": "Celsius"
                                      },
                                      {
                                        "value_raw": -32768,
                                        "value_localized": null,
                                        "unit": "Celsius"
                                      }
                                    ],
                                    "coreTemperature": [],
                                    "signalInfo": false,
                                    "signalFailure": false,
                                    "signalDoor": false,
                                    "remoteEnable": {
                                      "fullRemoteControl": false,
                                      "smartGrid": false,
                                      "mobileStart": false
                                    },
                                    "ambientLight": 2,
                                    "light": null,
                                    "elapsedTime": [
                                      0,
                                      0
                                    ],
                                    "spinningSpeed": {
                                      "unit": "U/min",
                                      "value_raw": null,
                                      "value_localized": null,
                                      "key_localized": "Schleuderdrehzahl"
                                    },
                                    "dryingStep": {
                                      "value_raw": null,
                                      "value_localized": "",
                                      "key_localized": "Trockenstufe"
                                    },
                                    "ventilationStep": {
                                      "value_raw": null,
                                      "value_localized": "",
                                      "key_localized": "Lüfterstufe"
                                    },
                                    "plateStep": [],
                                    "ecoFeedback": null,
                                    "batteryLevel": null
                                  }
                                }
                              }​
                              Und der Action-Event:

                              Code:
                              {
                                "007106053497": {
                                  "processAction": [
                                    6
                                  ],
                                  "light": [],
                                  "ambientLight": [],
                                  "startTime": [],
                                  "ventilationStep": [],
                                  "programId": [],
                                  "targetTemperature": [
                                    {
                                      "zone": 1,
                                      "min": 1,
                                      "max": 9
                                    }
                                  ],
                                  "deviceName": true,
                                  "powerOn": false,
                                  "powerOff": false,
                                  "colors": [],
                                  "modes": []
                                },
                                "000127876311": {
                                  "processAction": [],
                                  "light": [],
                                  "ambientLight": [],
                                  "startTime": [],
                                  "ventilationStep": [],
                                  "programId": [],
                                  "targetTemperature": [],
                                  "deviceName": true,
                                  "powerOn": false,
                                  "powerOff": true,
                                  "colors": [],
                                  "modes": []
                                }
                              }​

                              Kommentar


                                #60
                                Sehr schön. Wie erwartet, die beiden Geräte sehen nicht außergewöhnlich aus.
                                Schalt die mal ein und beobachte vor allem die Events. Wenn die zuverlässig den Zustand zurückmelden (alle 20s sollte das aktuell sein), dann ist das schon die halbe Miete. Und überprüfe nochmal das Timeout, das sollte nicht 10s sein, weil die Miele Entwickler das Intervall von 5s auf 20 erhöht haben.
                                Auch ein Blick in die plugin.yaml im Miele Plugin Ordner ist sehr aufschlußreich. Vor allem, wie die Struct-/Itemdefinition aussieht.

                                Kommentar

                                Lädt...
                                X