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

      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

                                    411
                                    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