Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON aus diesem Link - Ist das machbar ? MELCLOUD

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    JSON aus diesem Link - Ist das machbar ? MELCLOUD

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      meicker last edited by

      Hallo zusammen,

      ich würde gerne ein Javascript haben was mir Geräte aus Melcloud anzeigt und ich würde dann gerne die geräte ansprechen. Es gibt zwar einen Adapter für Homebridge der auch funktioniert, aber ich denke es wäre schöner wenn ich direkt Objekte hätte die ich ansprechen kann ...

      Ich habe noch nicht viel zu dem Thema aber es ist ein Anfang. Die Frage ist jetzt ob es überhaupt so machbar ist. Ich habe diese französische Dokument gefunden:

      http://mgeek.fr/blog/un-peu-de-reverse-engineering-sur-melcloud

      So wie es aussieht muss es da was geben. z.B für den Login:
      URL : https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin
      Méthode : POST
      Retour : JSON

      Paramètres :
      AppVersion: 1.7.1.0,
      Language: 7,
      CaptchaChallenge: null,
      CaptchaResponse: null,
      Persist: true,
      Email: votrelogin@email.com,
      Password: monmotdepasseenclair

      Wenn man aber den Login Link einfach nur so aufruft kommt man normal im web raus und bekommt eine Fehlermeldung das es die Seite nicht gibt.

      Interessanter sieht das hier aus, es handelt sich um die Abfrage der Geräte, warscheinlich nach dem Login:

      URL : https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices
      Méthode : GET
      Retour : JSON

      En-tête : X-MitsContextKey: XXXXXXXXXXXXXX

      Rufe ich die URL auf kommt reine Rückmeldung:
      { Success: false, ErrorMessage: ""}

      Da klappt schon mal was, aber es gibt kein JSON zurück.

      Wenn es möglich ist ein Java Script zu schreiben was die entsprechende JSON zurückliefert, wer kann dabei helfen ? Ich habe leider keine Ahnung ... 😞

      Kann jemand helfen ? Ich würde das gerne machen, hab keinen Plan, will aber was dadurch lernen ... 🙂 Also wer Lust und Zeit hat ... 🙂 Bitte - gerne 🙂

      Viele Grüße,
      Marc

      1 Reply Last reply Reply Quote 0
      • M
        meicker last edited by

        Ich habe folgendes noch gefunden - Aber das kann ich ja auch nicht auf dem IOBroker laufen lassen. Aber vielleicht hilft es weiter ?

        email = 'test@test.com'
        password = '123456'
        
        https = require('ssl.https')
        json = require('json')
        ltn12 = require('ltn12')
        
        function encodepost(t)
          local res = {}
          local esc = require('socket.url').escape
        
          for k, v in pairs(t) do
            res[ #res + 1 ] = esc(k) .. '=' .. esc(v)
          end
        
          return table.concat(res, '&')
        end
        
        function login(email, password)
          local url = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin'
          local data = encodepost({
            AppVersion = '1.9.3.0',
            Language = '7',
            CaptchaChallenge = '',
            CaptchaResponse = '',
            Persist = 'true',
            Email = email,
            Password = password,
          })
        
          local res, code = https.request(url, data)
        
          if res then
            resp = json.pdecode(res)
        
            if type(resp) ~= 'table' then
              return nil, 'failed to decode reply data'
            elseif resp.ErrorId ~= json.null then
              return nil, 'cloud login failed'
            else
              return resp.LoginData.ContextKey
            end
          else
            return nil, 'login request failed'
          end
        end
        
        function getdevices(key)
          local url = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices'
          local tbl = {}
        
          local res, code = https.request({
            url = url,
            headers = {
              ['X-MitsContextKey'] = key
            },
            sink = ltn12.sink.table(tbl),
          })
        
          if res then
            local data = table.concat(tbl)
            return json.pdecode(data)
          else
            return nil, 'get devices request failed'
          end
        end
        
        key, err = login(email, password)
        if key then
          items, err = getdevices(key)
        
          if items then
            for _, item in ipairs(items) do
              local devs = item.Structure.Devices
              for _, dev in ipairs(devs) do
                log(dev)
              end
            end
          else
            log(err)
          end
        else
          log(err)
        end
        
        1 Reply Last reply Reply Quote 0
        • M
          meicker last edited by

          Hallo zusammen,

          hat wirklich niemand eine Idee ? 😞

          @paul53 - Hey Paul, Du weißt doch so gut wie alles 🙂

          Viele Grüße,
          Marc

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @meicker last edited by paul53

            @meicker sagte:

            Paul, Du weißt doch so gut wie alles

            Danke für die Lorbeeren, aber so ist es leider nicht (französisch verstehe ich auch nicht). Ich kann Dich nur auf das bereits im Javascript-Adapter enthaltene Modul request verweisen. Du findest dazu auch einige Beispiele im Forum.

            P.S. Ich verwende grundsätzlich keine Lösungen auf Cloud-Basis, folglich kenne ich mich damit nicht aus.

            M 1 Reply Last reply Reply Quote 0
            • M
              meicker @paul53 last edited by

              @paul53
              🙂 Du bekommst gerne die Lorbeeren 🙂 Du hast mir bisher immer den richtigen Weg zeigen können 🙂 Request schaue ich mir mal an. Vielleicht hilft es ja. Danke 🙂

              Viele grüße,
              Marc

              M 1 Reply Last reply Reply Quote 0
              • M
                meicker @meicker last edited by

                @paul53
                Warum funktioniert eigentlich das script nicht was ich da oben gepostet habe ? Das wirft einen Fehler aus ... ist das nicht schon irgendwie ein Anfang der für iobroker umgestrickt werden müsste ?

                vg
                Marc

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @meicker last edited by

                  @meicker sagte:

                  Warum funktioniert eigentlich das script nicht was ich da oben gepostet habe ?

                  Weil das kein Javascript ist.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    meicker @paul53 last edited by

                    @paul53
                    Argument 🙂

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @meicker last edited by paul53

                      @meicker
                      Hier gibt es Javascript für Melcloud-Zugriff, allerdings nicht für ioBroker, sondern für Homebridge.

                      Lenny.CB 1 Reply Last reply Reply Quote 0
                      • Lenny.CB
                        Lenny.CB Most Active @paul53 last edited by Lenny.CB

                        @meicker kannste damit vielleicht was anfangen? response.body bleibt leer, da ich keine Geräte habe die in der App registriert werden können.

                        @paul53 siehst du auf Anhieb was, wie man das "Script" besser schreiben könnte? Bin ja auch noch am lernen.

                        LogIn();
                        
                        
                        function LogIn () {
                            var url = "https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin";
                        	var form = {
                        			AppVersion: "1.9.3.0",
                        			CaptchaChallenge: "",
                        			CaptchaResponse: "",
                        			Email: "hier deine email aus der Registrierung",
                        			Language: "4",  //hier kann man Zahlen für verschiedene Sprachen eingeben eingeben --> keine Übersicht gefunden
                        			Password: "hier dein Passwort",
                        			Persist: "true"
                        	};
                            var method = "post";
                            request({  
                                url: url,
                                form: form,
                                method: method
                            },
                                function (error, response) {
                                    if (!error && response.statusCode == 200) {
                                        log('Device_statusCode: ' + response.statusCode);
                                        let obj = JSON.parse(response.body);
                                        log('ContextKey: ' + obj.LoginData.ContextKey);
                                        let ContextKey = obj.LoginData.ContextKey;
                                        getDevices (ContextKey);
                                    } else {
                                        log('Geräteabfrage fehlgeschlagen ==> StatusCode: ' + response.statusCode);
                                        log('Geräteabfrage fehlgeschlagen ==> Error: ' + error);
                                    }
                                });    
                        }
                        
                        function getDevices(ContextKey) {
                            var url = "https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices";
                         	var method = "get";
                                request({
                                    url: url,
                                    method: method,
                                    headers: {"X-MitsContextKey" : ContextKey}
                                },
                                function(error, response) {
                         	        if (!error && response.statusCode == 200) {
                                        log('Device_statusCode: ' + response.statusCode);
                                        log('response: ' + JSON.stringify(response));
                         	        } else {
                                        log('Geräteabfrage fehlgeschlagen ==> StatusCode: ' + response.statusCode);
                                        log('Geräteabfrage fehlgeschlagen ==> Error: ' + error);
                         	        }
                         	    });
                        }
                        
                        paul53 2 Replies Last reply Reply Quote 0
                        • paul53
                          paul53 @Lenny.CB last edited by

                          @Lenny-CB sagte:

                          keine Übersicht gefunden

                          Übersicht

                          Lenny.CB 1 Reply Last reply Reply Quote 0
                          • Lenny.CB
                            Lenny.CB Most Active @paul53 last edited by

                            @paul53 sagte in JSON aus diesem Link - Ist das machbar ? MELCLOUD:

                            @Lenny-CB sagte:

                            keine Übersicht gefunden

                            Übersicht

                            👍
                            man man man, du hast deine Augen auch überall oder kannst einfach Google besser bedienen als ich. 😂

                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @Lenny.CB last edited by

                              @Lenny-CB sagte:

                                  function (error, response) {       
                              

                              an die Callback-Funktion von request() werden doch 3 Parameter übergeben ?

                              request(options, function (error, response, body) {
                              

                              wobei das gewünschte Ergebnis in body übergeben wird.

                              Lenny.CB 1 Reply Last reply Reply Quote 0
                              • Lenny.CB
                                Lenny.CB Most Active @paul53 last edited by

                                @paul53 sagte in JSON aus diesem Link - Ist das machbar ? MELCLOUD:

                                wobei das gewünschte Ergebnis in body übergeben wird.

                                stimmt, da habe ich mich wohl von deinem Homebridge-Link verleiten lassen. Das war die Grundlage meiner "Script-Schmiererei". 😁
                                Was wäre hier richtiger? Es aus dem body oder aus dem response zu nehmen? (steht ja in beidem drin)

                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Lenny.CB last edited by

                                  @Lenny-CB sagt:

                                  body oder aus dem response zu nehmen? (steht ja in beidem drin)

                                  Wenn das Ergebnis sowohl in body als auch in response.body übergeben wird, ist es egal, wie man es macht (die Variante mit response.body war mir nicht geläufig).

                                  Lenny.CB 1 Reply Last reply Reply Quote 0
                                  • Lenny.CB
                                    Lenny.CB Most Active @paul53 last edited by

                                    @paul53 naja sagen wir mal so, ich bin ja der letzte der sagen kann ob es eine Variante ist oder nicht. Bei response kam ein JSON raus in dem ein body mit dem gesuchten Ausdruck enthalten war. Dann habe ich das da "raus gefummelt" und nicht weiter im "richtigen" body geschaut.
                                    Mal schauen was @meicker draus macht.

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      meicker last edited by

                                      @Lenny-CB
                                      ich bin gar nicht so weit das ich bei euch mitreden könnte 🙂 Ich könnte aus einer fast funktionierenden Lösung was umbauen aber selber bekomme ich das leider nicht hin. Für Melcloud bin ich jetzt einen anderen Weg gegangen und habe mit die Daten über Openhab reingeholt. Schöner wäre es natürlich wenn man das mit Java hinbekommen würde und richtig schick wäre ein Adapter. Aber ich kann da, außer das ich die Hardware habe zum testen, nicht weiter helfen ... 😞 Leider ... Ich würde es so gerne können ...

                                      vg Marc

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      415
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      3
                                      17
                                      887
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo