Ankündigung

Einklappen
Keine Ankündigung bisher.

Logic Node: Miele - Connect all your Miele devices to KNX!

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

    X1 Logic Node: Miele - Connect all your Miele devices to KNX!

    Hello,

    As a follow up on my earlier developed Miele baustein for Homeserver (LBS 14360), I now present you the Miele X1/L1 Logic Node.
    t works on a Gira X1 as well as a Gira L1.
    I created this module because:
    1. There is now a complete Gira <---> Miele integration, wether you have an X1, L1, Homeserver or FacilityServer.
    2. The (HTTP) Web Request von Daniel Albuschat couldn't do any request to TLS websites (because he will probably want to wait for a X1 upgrade).
    3. Even if the HTTP Web Request module could do it in future, it's still easier to have all the Miele logic into 1 module so you don't need to care about Authentication and PUT or POST requests.
    screenshot_full_Miele_Building_Block.png


    See the following video for possibilties/beispiele:


    (yes, my girlfriend figures in this video again, but if you want to see me, look at the next one)



    See the following video for Step-by-Step instructions:





    Key features of the module:
    • Set your device type and the module show only the input/outputs valid for that device type.
    • Full TLS1.2 and TLS1.3 compatible. Works very fast! You can also simulate all functions in the GPA !
    • Simple functions can be done easily using standard defined inputs, however, you can also set advanced options/actions via JSON.
    • Important note: After contacting Miele, it's clear that you can only have 1 API clientid/secret per email address. So if you request a new clientid/secret, the old one doesn't work anymore.


    Now available in Gira AppShop for free!
    AppShop page in German
    AppShop page in English

    Direct download: https://www.roelbroersma.nl/media/do...Logic_Node.zip

    .
    Version History/Notes/Bugfixes
    0.1.2 Validation fixes and better error texts.
    0.1.1 Fixing a crash when getting the Status for devices like a dishwasher which give you feedback about Water and Energy usage (and estimate).
    0.1.0 Publicly available!
    0.0.000 - 0.0.9999 Hundreds of beta builds

    Other Examples you can do:
    • When leaving the house or before going to bed, switch off all Miele appliances with the "central off" button.
    • Connect Miele appliances to a voice assistant such as Google Assistant or Alexa using this logic and control them with voice commands: "Switch on the dishwasher" or "Switch on the cooker bonnet light".
    • Synchronise the lights of e.g. wine air conditioners and coffee machines and integrate them into light scenes.
    • Display the remaining running time of the dishwasher or washing machine on the Gira G1.
    • Put the refrigerator in holiday mode when you go on holiday.
    • Automatically switch on Sabbath mode for the oven, using the timers in the Gira X1/L1.

    Known behavior/issues:
    • When turning the machine ON while it's already ON, you will get a 400-Bad Request error, this is normal behavior ad the Miele API works like that. Same happens when you want to turn OFF the light while it's already OFF, etc..
    • Make sure to physically press the RemoteStart button when you want to start an Oven, Dishwasher, etc. When you want to start it a program, the correct order would be: 1.Make sure the RemoteStart button is on; 2.Do a Get_State (only the first time after a restart) to make sure it is authentication (it will internally get an auth token and secret); 3.Turn ON the Power by sending True to the Set_Power; 4.Send {"programId":3} (or any other program) to the Set_Programs (JSON); 5.Send START to the Set_ProcessAction. Do not do all these things at the same time but do it in a synchronous order.
    • Make sure that the Set_Program(JSON) and Set_JSON_Actions inputs are linked to an internal Text address, not a 14 byte text address. Otherwise is will cut of your JSON text to only a few characters.

    Let me know how it works!
    Angehängte Dateien
    Zuletzt geändert von Roeller; 12.10.2022, 19:59.

    #2
    Reserving first post for any updates

    Kommentar


      #3
      Just great , thanks.
      Regards Florian

      Kommentar


        #4
        Will it may work with Siemens an Neff too?

        Kommentar


          #5
          Nö, das ist homeconnect...

          Kommentar


            #6
            Roeller
            I really just stumbled across this post by chance. I think it would be great if you uploaded the module here in the download area. ​​​​​​
            https://service.knx-user-forum.de/?comm=download
            ​​​​​​​

            Kommentar


              #7
              Hello Roel,

              first of all thx for your work!

              I tested the module once over the weekend and noticed one bug?!

              If I query the status of my Miele devices directly via the developer website, I get the answer back correctly in German.
              But via the block I get an answer in English, the language is set correctly.

              Another question, which library did you use for the OAuth2 authentication?

              Best regards
              Fabian
              Zuletzt geändert von fabianfischer; 13.03.2022, 23:16.
              LEADS elektro
              LEADS elektro e.K. | Industrie- und Gebäudeautomatisierung |
              www.leads-elektro.de

              Kommentar


                #8
                Is it possible that your module does not send the country codes?
                Miele currently offers the following localizations: da, de, en, es, fr, it, nb, nl
                If my assumption is correct, I would be happy if you could make the country code to be sent selectable.
                LEADS elektro
                LEADS elektro e.K. | Industrie- und Gebäudeautomatisierung |
                www.leads-elektro.de

                Kommentar


                  #9
                  Zitat von fabianfischer Beitrag anzeigen
                  Is it possible that your module does not send the country codes?
                  Miele currently offers the following localizations: da, de, en, es, fr, it, nb, nl
                  If my assumption is correct, I would be happy if you could make the country code to be sent selectable.
                  You need to set the Country where your login/account is stored like: "de-de" or "nl-nl".
                  The language code which is send to Miele for getting the answer in the correct language is the first 2 letters of that, so "de" or "nl".
                  So when your account lives in "de-ch", it will send language code: "de" and the localised results will be in "de".

                  Kommentar


                    #10
                    Hi Roel,

                    thanks for providing this very nice Miele integration. I just tried using it for my Miele devices and face some issues.

                    My scenario is that I have a refridgerator and an ofen. As long as i just add one of them, everything works fine and the module returns values.

                    But as soon as i add the Miele module a second time to my logik (with same user, password, client ID, client secret) for the retrieving the parameters of the second device, the GPA completely crashes (either already when adding the module a second time or latest when going into simulation mode).

                    Any idea what am I doing wrong or potentially a bug?

                    Regards
                    Julian

                    Kommentar


                      #11
                      Hello Roel,

                      first of all thanks a lof for your work! Perphaps you can help me to get it running in my environent.
                      I can get an correct answer when I trigger "MieleGetAllDevices". But when i trigger get state nothing happens. Only the following debuglog entries were listed:

                      Code:
                      [SIZE=12px][FONT=Courier New][2022-08-25 03:41:36] Code successfully retrieved from Redirect:
                      [2022-08-25 03:41:37] Auth successfully retrieved:
                      [2022-08-25 03:42:02] This task could not run without a Device ID.
                      [2022-08-25 03:44:23] Newtonsoft.Json.JsonReaderException: Input string '10.0' is not a valid integer. Path 'ecoFeedback.currentWaterConsumption.value', line 1, position 1348.
                      bei Newtonsoft.Json.JsonTextReader.ParseReadNumber(Rea dType readType, Char firstChar, Int32 initialPosition)
                      bei Newtonsoft.Json.JsonTextReader.ReadNumberValue(Rea dType readType)
                      bei Newtonsoft.Json.JsonTextReader.ReadAsInt32()
                      bei Newtonsoft.Json.JsonReader.ReadForType(JsonContrac t contract, Boolean hasConverter)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                      bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
                      bei Newtonsoft.Json.JsonSerializer.DeserializeInternal (JsonReader reader, Type objectType)
                      bei Newtonsoft.Json.JsonConvert.DeserializeObject(Stri ng value, Type type, JsonSerializerSettings settings)
                      bei Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
                      bei roelbroersma_nl.Logic.Node1.Miele.<Get_State>d__34 0.MoveNext()[/FONT][/SIZE]
                      Did you have an Idea?

                      Thanks a lot.

                      image.png
                      Regards,
                      Michael
                      Angehängte Dateien

                      Kommentar


                        #12
                        Zitat von mgerth Beitrag anzeigen
                        Hello Roel,

                        first of all thanks a lof for your work! Perphaps you can help me to get it running in my environent.
                        I can get an correct answer when I trigger "MieleGetAllDevices". But when i trigger get state nothing happens. Only the following debuglog entries were listed:

                        Code:
                        [SIZE=12px][FONT=Courier New][2022-08-25 03:41:36] Code successfully retrieved from Redirect:
                        [2022-08-25 03:41:37] Auth successfully retrieved:
                        [2022-08-25 03:42:02] This task could not run without a Device ID.
                        [2022-08-25 03:44:23] Newtonsoft.Json.JsonReaderException: Input string '10.0' is not a valid integer. Path 'ecoFeedback.currentWaterConsumption.value', line 1, position 1348.
                        bei Newtonsoft.Json.JsonTextReader.ParseReadNumber(Rea dType readType, Char firstChar, Int32 initialPosition)
                        bei Newtonsoft.Json.JsonTextReader.ReadNumberValue(Rea dType readType)
                        bei Newtonsoft.Json.JsonTextReader.ReadAsInt32()
                        bei Newtonsoft.Json.JsonReader.ReadForType(JsonContrac t contract, Boolean hasConverter)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
                        bei Newtonsoft.Json.Serialization.JsonSerializerIntern alReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
                        bei Newtonsoft.Json.JsonSerializer.DeserializeInternal (JsonReader reader, Type objectType)
                        bei Newtonsoft.Json.JsonConvert.DeserializeObject(Stri ng value, Type type, JsonSerializerSettings settings)
                        bei Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
                        bei roelbroersma_nl.Logic.Node1.Miele.<Get_State>d__34 0.MoveNext()[/FONT][/SIZE]
                        Did you have an Idea?

                        Thanks a lot.

                        Regards,
                        Michael
                        I found a possible bug, so I made a v.0.1.1 which I've send you by PM. Please test it, then I will make it generally available.

                        Kommentar


                          #13
                          Zitat von xxljack Beitrag anzeigen
                          Hi Roel,

                          thanks for providing this very nice Miele integration. I just tried using it for my Miele devices and face some issues.

                          My scenario is that I have a refridgerator and an ofen. As long as i just add one of them, everything works fine and the module returns values.

                          But as soon as i add the Miele module a second time to my logik (with same user, password, client ID, client secret) for the retrieving the parameters of the second device, the GPA completely crashes (either already when adding the module a second time or latest when going into simulation mode).

                          Any idea what am I doing wrong or potentially a bug?

                          Regards
                          Julian
                          1. Which GPA version are you using?
                          2. Are you adding the logic to the same Logic Page or to a New logic Page? (does it crash in both cases?)
                          3. I am using GPA 4.7, adding it to a logic page (not entering any values,..) then adding the same logic again to the same page (and even tried another page) but it doesn't crash. Does it only crash when entering values or when simulating?
                          4. Can you send me the debug logs of the GPA? (menu -> Log information)

                          Kommentar


                            #14
                            I have updated to v1.1.0 which fixes the crash mgerth mentioned. This crash happened when getting device data for a device which give you information about power and water usage.
                            The module is also tested to run multiple instances (on the same page and on different pages) which is running fine in GPA v4.7.

                            Kommentar


                              #15
                              Zitat von Roeller Beitrag anzeigen

                              1. Which GPA version are you using? --> 4.7
                              2. Are you adding the logic to the same Logic Page or to a New logic Page? (does it crash in both cases?) --> Yes, seems like I just tried again adding it to the same logic page with the new version and it still crashes.
                              3. I am using GPA 4.7, adding it to a logic page (not entering any values,..) then adding the same logic again to the same page (and even tried another page) but it doesn't crash. Does it only crash when entering values or when simulating?
                              4. Can you send me the debug logs of the GPA? (menu -> Log information)
                              Hi Roel,

                              regarding your questions.

                              --> it already crashes right away when adding the the module a second time to the logic page. I have setup the module ones for my fridge and it works fine. Then i add it a second time and right after adding it GPA crashes.
                              --> I am using the latest GPA 4.7
                              --> Logs are available under following link --> https://1drv.ms/u/s!Agy066he3SENh7I8...wOGNg?e=nqqmNt

                              Regards,
                              Julian

                              Kommentar

                              Lädt...
                              X