Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Frage] Samsung Klimaanlage Adapter

    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

    [Frage] Samsung Klimaanlage Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bishop @stoepselinho last edited by

      @stoepselinho
      einfach bei dem Link den ich gepostet habe, bei 4. auf token klicken und sich mit dem SamsungAcc oder Smartthing Acc anmelden.Dann sollte man sich ein Token erstellen lassen können!

      1 Reply Last reply Reply Quote 0
      • S
        Schranzistor @bishop last edited by

        @bishop
        Hi bei mir lassen sich auch nicht alle Punkte steuern.... (vielleicht kommt da noch was)
        Oder du Fragst mal beim Entwickler nach.

        Aber für mich reicht der Ein/Aus Punkt "Daweil" vollkommen aus, da ich im Haus Externe Temperatur Sensoren habe,
        und ich damit recht gut reagieren kann.

        MFG

        K 1 Reply Last reply Reply Quote 0
        • K
          Koenigpils @Schranzistor last edited by

          @schranzistor

          Hallo iobroker

          Ich brauche Hilfe komme alleine nicht weiter.
          Homebridge mit plugin ist installiert aber ich kann unter Objekte keine Klimaanlage finden.
          Für Tipps währe ich sehr dankbar.
          2022-03-30 14:11:42.992 - error: javascript.0 (800) Alias subscription error. Please check your alias definitions: sourceId=system.adapter.ham.0.inputCount, sourceObj={"_id":"system.adapter.ham.0.inputCount","type":"state","common":{"name":"ham.0 events input counter","desc":"State's inputs in 15 seconds","type":"number","read":true,"write":false,"role":"state","unit":"events/15 seconds"},"native":{},"from":"system.adapter.ham.0","ts":1648624294193,"acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"user":"system.user.admin"}
          2022-03-30 16:02:27.453 - info: host.iobroker-pi "system.adapter.ham.0" enabled
          2022-03-30 16:02:27.727 - info: host.iobroker-pi instance system.adapter.ham.0 started with pid 11727
          2022-03-30 16:02:32.348 - info: ham.0 (11727) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v14.19.0, js-controller: 4.0.21
          2022-03-30 16:02:32.406 - info: ham.0 (11727) Need to install/update homebridge@1.3.4
          2022-03-30 16:02:32.409 - info: ham.0 (11727) npm install homebridge@1.3.4 --production --loglevel error (System call)
          2022-03-30 16:03:46.259 - info: ham.0 (11727) + homebridge@1.3.4
          added 291 packages from 163 contributors and audited 292 packages in 67.465s

          2022-03-30 16:03:47.664 - info: ham.0 (11727)
          50 packages are looking for funding
          run npm fund for details

          2022-03-30 16:03:47.668 - info: ham.0 (11727) found 0 vulnerabilities

          2022-03-30 16:03:47.737 - info: ham.0 (11727) Install/Update the following Libraries: homebridge-samsung-air-conditioner-smart-things
          2022-03-30 16:03:47.739 - info: ham.0 (11727) Install/Update homebridge-samsung-air-conditioner-smart-things
          2022-03-30 16:03:47.740 - info: ham.0 (11727) All Libraries installed/updated
          2022-03-30 16:13:59.632 - info: host.iobroker-pi stopInstance system.adapter.ham.0 (force=false, process=true)
          2022-03-30 16:13:59.648 - info: ham.0 (11727) Got terminate signal TERMINATE_YOURSELF
          2022-03-30 16:13:59.649 - info: host.iobroker-pi stopInstance system.adapter.ham.0 send kill signal
          2022-03-30 16:13:59.653 - info: ham.0 (11727) cleaned everything up...
          2022-03-30 16:13:59.668 - info: ham.0 (11727) terminating
          2022-03-30 16:13:59.671 - info: ham.0 (11727) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
          2022-03-30 16:14:00.315 - info: host.iobroker-pi instance system.adapter.ham.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION)
          2022-03-30 16:14:02.798 - info: host.iobroker-pi instance system.adapter.ham.0 started with pid 12639
          2022-03-30 16:14:08.197 - info: ham.0 (12639) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v14.19.0, js-controller: 4.0.21
          2022-03-30 16:14:08.286 - info: ham.0 (12639) Need to install/update homebridge@1.3.4
          2022-03-30 16:14:08.294 - info: ham.0 (12639) Install/Update the following Libraries: homebridge-samsung-air-conditioner-smart-things
          2022-03-30 16:14:08.296 - info: ham.0 (12639) Install/Update homebridge-samsung-air-conditioner-smart-things
          2022-03-30 16:14:08.299 - info: ham.0 (12639) All Libraries installed/updated
          2022-03-30 16:39:46.032 - info: info.0 (1204) Reading/updating systemdata.
          2022-03-30 16:39:47.517 - info: info.0 (1204) cpu Temp res = {"main":55.844,"cores":[],"max":55.844,"socket":[],"chipset":null}
          2022-03-30 16:47:50.887 - info: admin.0 (2425) Request actual repository...
          2022-03-30 16:4

          1 Reply Last reply Reply Quote 0
          • the-masterplan
            the-masterplan last edited by the-masterplan

            Bei mir hat das mit HomeBridge auch irgendwie nicht geklappt. Habe mir dann drei Javascripts mit entsprechenden Datenpunkten erstellt, um die WindFree Anlagen zu steuern. Nutze dafür die API von Samsung. Man muss sich einmal einen Token ("HIER_TOKEN_EINTRAGEN") generieren und zusammen mit der jeweiligen Geräte ID ("ID_DER_JEWEILIGEN_INNENEINHEIT") in den in den Skripten hinterlegen:
            Skript zum Abrufen von Daten:

            schedule('*/10 * * * * *',function(){
            	var request = require("request")
            	var settings = {
            	  "url": "https://api.smartthings.com/v1/devices/ID_DER_JEWEILIGEN_INNENEINHEIT/status",
            	  "method": "GET",
            	  "timeout": 0,
            	  "headers": {
            		"Authorization": "Bearer HIER_TOKEN_EINTRAGEN"
            	  }
            	};
            	request(settings, function(error, response, body){        
            		var jsonresult = JSON.parse(body);
            		var maincomp = jsonresult.components.main	
                       setState('0_userdata.0.Klimaanlagen.Gästezimmer.Temperatur', maincomp.temperatureMeasurement.temperature.value, true);
            		   setState('0_userdata.0.Klimaanlagen.Gästezimmer.relative_Luftfeuchtigkeit', maincomp.relativeHumidityMeasurement.humidity.value, true);
            		   setState('0_userdata.0.Klimaanlagen.Gästezimmer.Modus', maincomp.airConditionerMode.airConditionerMode.value, true);
                       setState('0_userdata.0.Klimaanlagen.Gästezimmer.Soll-Temperatur', maincomp.thermostatCoolingSetpoint.coolingSetpoint.value, true);
            		   setState('0_userdata.0.Klimaanlagen.Gästezimmer.Zusatz-Modus_(Windfree)', maincomp["custom.airConditionerOptionalMode"].acOptionalMode.value, true);
            		   setState('0_userdata.0.Klimaanlagen.Gästezimmer.Gebläsegeschwindigkeit', maincomp.airConditionerFanMode.fanMode.value, true);
            		   setState('0_userdata.0.Klimaanlagen.Gästezimmer.Gebläse-Oszillation', maincomp.fanOscillationMode.fanOscillationMode.value, true);
                       setState('0_userdata.0.Klimaanlagen.Gästezimmer.Switch', maincomp.switch.switch.value, true);
                });
            });
            

            Skript zum schreiben von Daten:

            on({id: new RegExp('0_userdata\\.0\\.Klimaanlagen\\.Gästezimmer\\.Gebläse-Oszillation' + "$|" + '0_userdata\\.0\\.Klimaanlagen\\.Gästezimmer\\.Gebläsegeschwindigkeit' + "$|" + '0_userdata\\.0\\.Klimaanlagen\\.Gästezimmer\\.Modus' + "$|" + '0_userdata\\.0\\.Klimaanlagen\\.Gästezimmer\\.Soll-Temperatur' + "$|" + '0_userdata\\.0\\.Klimaanlagen\\.Gästezimmer\\.Switch' + "$|" + '0_userdata\\.0\\.Klimaanlagen\\.Gästezimmer\\.Zusatz-Modus_\\(Windfree\\)' + "$"), change: "ne"}, async function (obj) {
            
            var https = require('follow-redirects').https;
            var fs = require('fs');
            
            var options = {
             'method': 'POST',
             'hostname': 'api.smartthings.com',
             'path': '/v1/devices/ID_DER_JEWEILIGEN_INNENEINHEIT/commands',
             'headers': {
               'Authorization': 'Bearer  HIER_TOKEN_EINTRAGEN',
               'Content-Type': 'application/json'
             },
             'maxRedirects': 20
            };
            
            var req = https.request(options, function (res) {
             var chunks = [];
            
             res.on("data", function (chunk) {
               chunks.push(chunk);
             });
            
             res.on("end", function (chunk) {
               var body = Buffer.concat(chunks);
             });
            
             res.on("error", function (error) {
               console.error(error);
             });
            });
            var postData = JSON.stringify({
             "commands": [
               {
                 "component": "main",
                 "capability": "thermostatCoolingSetpoint",
                 "command": "setCoolingSetpoint",
                 "arguments": [
                   getState("0_userdata.0.Klimaanlagen.Gästezimmer.Soll-Temperatur").val
                 ]
               },
                {
                 "component": "main",
                 "capability": "switch",
                 "command": getState("0_userdata.0.Klimaanlagen.Gästezimmer.Switch").val,
                 "arguments": [
                 ]
               },
                    {
                     "component": "main",
                     "capability": "airConditionerMode",
                     "command": "setAirConditionerMode",
                     "arguments": [
                          getState("0_userdata.0.Klimaanlagen.Gästezimmer.Modus").val
                       ]
                   },
               {
                     "component": "main",
                     "capability": "airConditionerFanMode",
                     "command": "setFanMode",
                     "arguments": [
                       getState("0_userdata.0.Klimaanlagen.Gästezimmer.Gebläsegeschwindigkeit").val
                     ]
                   },
                    {
                     "component": "main",
                     "capability": "custom.airConditionerOptionalMode",
                     "command": "setAcOptionalMode",
                     "arguments": [
                       getState("0_userdata.0.Klimaanlagen.Gästezimmer.Zusatz-Modus_(Windfree)").val
                     ]
                   },
                    {
                     "component": "main",
                     "capability": "fanOscillationMode",
                     "command": "setFanOscillationMode",
                     "arguments": [
                      getState("0_userdata.0.Klimaanlagen.Gästezimmer.Gebläse-Oszillation").val
                     ]
                   }
            
             ]
            });
            
            req.write(postData);
            
            req.end();});
            


            Skript zur automatischen Ausschalten des Displays der Inneneinheit:

            schedule('* * * * *',function(){
            var https = require('follow-redirects').https;
            var fs = require('fs');
            
            var options = {
             'method': 'POST',
             'hostname': 'api.smartthings.com',
             'path': '/v1/devices/ID_DER_JEWEILIGEN_INNENEINHEIT/commands',
             'headers': {
               'Authorization': 'Bearer HIER_TOKEN_EINTRAGEN',
               'Content-Type': 'application/json'
             },
             'maxRedirects': 20
            };
            
            var req = https.request(options, function (res) {
             var chunks = [];
            
             res.on("data", function (chunk) {
               chunks.push(chunk);
             });
            
             res.on("end", function (chunk) {
               var body = Buffer.concat(chunks);
             });
            
             res.on("error", function (error) {
               console.error(error);
             });
            });
            
            var postData = JSON.stringify({
             "commands": [
               {
                 "component": "main",
                 "capability": "execute",
                 "command": "execute",
                 "arguments": [
                   "mode/vs/0",
                   {
                     "x.com.samsung.da.options": [
                       "Light_On"
                                 ]
                   }
                 ]
               }
             ]
            });
            
            req.write(postData);
            
            req.end();
            });
            

            Ein Datenpunkt sieht dann z.B. so aus:

            {
             "_id": "0_userdata.0.Klimaanlagen.Gästezimmer.Gebläsegeschwindigkeit",
             "type": "state",
             "common": {
               "name": "Gebläsegeschwindigkeit",
               "role": "",
               "type": "string",
               "desc": "Manuell erzeugt",
               "states": "auto:Auto;low:langsam;medium:mittel;high:schnell;turbo:Turbo",
               "read": true,
               "write": true
             }
            

            Mann muss für jede Inneneinheit alle drei Skripte anlegen und laufen lassen und ebenso die Dtaenpunkte. Sicher nicht die eleganteste Lösung und mit etwas Arbeit für das Anlegen verbunden, aber es funktioniert bei mir seit 2 Jahren sehr zuverlässig. Vielleicht kann man auch einen Adapter draus machen, aber davon habe ich (noch) keine Ahnung.

            Die richtigen Bezeichnungen für die unterschiedlichen Modi kann ich bei Bedarf nachliefern, lassen sich aber auch über die Datenpunkte auslesen

            Zum Testen von weiteren Befehlen, die ich noch nicht drin habe, kann ich Postman empfehlen. Damit kann man (auch wenn man keine Ahnung von REST hat) recht einfach Befehle an die Anlagen schicken und Daten abrufen.

            B 2 Replies Last reply Reply Quote 0
            • B
              bishop @the-masterplan last edited by

              @maximilian-garbe

              hast du aktuell das Script noch am laufen? Ich versuche mich gerade daran, aber wenn ich dein Script zum abrufen der Daten starte bekomme ich ein:

              javascript.0
              2022-06-10 11:13:00.190	error	Error in request callback: SyntaxError: Unexpected end of JSON input
              
              schedule('*/10 * * * * *',function(){
              	var request = require("request")
              	var settings = {
              	  "url": "https://api.smartthings.com/v1/devices/8bfb8f48-6b2h-4235-a53c-ab5a58a8abgf/status",
              	  "method": "GET",
              	  "timeout": 0,
              	  "headers": {
              		"Authorization": "Bearer ad3ade5e-c833-4559-bc95-d85d4f14928d"
              	  }
              	};
              	request(settings, function(error, response, body){        
              		var jsonresult = JSON.parse(body);
              		var maincomp = jsonresult.components.main	
                         setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Temperatur', maincomp.temperatureMeasurement.temperature.value, true);
              		   setState('0_userdata.0.Klimaanlagen.Schlafzimmer.relative_Luftfeuchtigkeit', maincomp.relativeHumidityMeasurement.humidity.value, true);
              		   setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Modus', maincomp.airConditionerMode.airConditionerMode.value, true);
                         setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Soll-Temperatur', maincomp.thermostatCoolingSetpoint.coolingSetpoint.value, true);
              		   setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Zusatz-Modus_(Windfree)', maincomp["custom.airConditionerOptionalMode"].acOptionalMode.value, true);
              		   setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Gebläsegeschwindigkeit', maincomp.airConditionerFanMode.fanMode.value, true);
              		   setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Gebläse-Oszillation', maincomp.fanOscillationMode.fanOscillationMode.value, true);
                         setState('0_userdata.0.Klimaanlagen.Schlafzimmer.Switch', maincomp.switch.switch.value, true);
                  });
              });
              

              token und id sind geändert!

              Centurytt 0 1 Reply Last reply Reply Quote 0
              • B
                bishop @the-masterplan last edited by

                @the-masterplan

                kannst du mir bitte helfen mit deinem Schreiben Script!?!

                er reagiert auf keine änderung der Datenpunkte. Sie werden alle geschrieben und ändern sich auch.
                Aber wenn ich den Datenpunkt selber ändere tut sich nichts.

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

                  @schranzistor ich bekomme es leider nicht gebacken… HAM Adapter installiert, Plugin installiert, Token erstellt und alles aus der Sample Config in die Konfiguration (inkl. Token) kopiert.

                  Aber irgendwie wird die AC nicht angezeigt. Könntest du freundlicherweise Deine Config hier posten? Es ist schon die Config in den Einstellungen von Adapter oder?IMG_8727.jpeg IMG_8726.jpeg IMG_8725.jpeg IMG_8724.jpeg

                  1 Reply Last reply Reply Quote 0
                  • Centurytt 0
                    Centurytt 0 @bishop last edited by Centurytt 0

                    @bishop

                    Hast du den Fehler gefunden ? die Frage kann ich aber auch selber beantworten. Das hätte so nie geklappt.

                    Hier der Code der funktioniert:

                    const request = require("request");
                    
                    // Define your SmartThings API configuration
                    const smartThingsConfig = {
                      url: "https://api.smartthings.com/v1/devices/xxxxxx/status",
                      method: "GET",
                      timeout: 0,
                      headers: {
                        Authorization: "Bearer xxxxxxx",
                      },
                    };
                    
                    // Function to make the API request and set states
                    function fetchDataAndSetStates() {
                      let response; // Declare response variable here
                    
                      request(smartThingsConfig, function (error, res, body) {
                        response = res; // Assign the response to the variable
                    
                        if (error) {
                          console.error("Error making the request:", error);
                          return;
                        }
                    
                        const statusCode = response.statusCode;
                        if (statusCode === 401) {
                          console.error("Unauthorized access: Check your authorization token.");
                          // You might want to take additional actions here, such as obtaining a new token.
                        } else if (statusCode !== 200) {
                          console.error(`Received non-200 status code: ${statusCode}`);
                          // Handle other non-200 status codes as needed.
                          return;
                        }
                    
                        try {
                          const jsonResult = JSON.parse(body);
                          const mainComp = jsonResult.components.main;
                    
                          // Check if the expected properties exist before accessing them
                            
                         setState('0_userdata.0.Klimaanlage.Klima.Temperatur', mainComp.temperatureMeasurement.temperature.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.relative_Luftfeuchtigkeit', mainComp.relativeHumidityMeasurement.humidity.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.Modus', mainComp.airConditionerMode.airConditionerMode.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.Soll-Temperatur', mainComp.thermostatCoolingSetpoint.coolingSetpoint.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.Zusatz-Modus_(Windfree)', mainComp["custom.airConditionerOptionalMode"].acOptionalMode.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.Gebläsegeschwindigkeit', mainComp.airConditionerFanMode.fanMode.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.Gebläse-Oszillation', mainComp.fanOscillationMode.fanOscillationMode.value, true);
                         setState('0_userdata.0.Klimaanlage.Klima.Switch', mainComp.switch.switch.value, true);
                    
                      // Repeat the same checks for other properties...
                    
                        } catch (parseError) {
                          console.error("Error parsing API response as JSON:", parseError);
                          console.error("Response body:", body); // Log the response body for debugging
                        }
                      });
                    }
                    
                    // Schedule the fetchDataAndSetStates function to run every 10 seconds
                    setInterval(fetchDataAndSetStates, 10000);
                    
                    
                    T 1 Reply Last reply Reply Quote 0
                    • T
                      ToK @Centurytt 0 last edited by

                      Hi!
                      Möchte ebenso zwei Samsung Windfree Geräte visualisieren.
                      Diese sind im Smartthings hinterlegt und in der APP sichtbar und der Token ist angelegt.
                      Dann den HAM V5.3.1 installiert und nachfolgend unter Homebridge das Plugin samsung-air-conditioner-smart-things wie folgt konfiguriert und installiert.

                      {
                          "platform": "homebridge-smartthings.SmartThings",
                          "name": "homebridge-samsung-air-conditioner-smart-things",
                          "token": "hier steht der Doken",
                          "temperatureUnit": "C",
                          "showHumidity": true,
                          "windFreeSupported": true
                      }
                      

                      Im IOB bekomme ich keine zusätzlichen Objekte angezeigt.
                      Wo liegt da mein Fehler ??

                      1 Reply Last reply Reply Quote 0
                      • T
                        ToK last edited by ToK

                        Offensichtlich funktioniert der samsung-air-conditioner-smart-things seit August 2023 nicht mehr ->
                        https://github.com/teodoradima/homebridge-samsung-air-conditioner-smart-things/issues
                        Die Umstellung auf den JS Code von @Centurytt-0 bringt diese Fehlermeldungen im JS Log:
                        log.PNG
                        und im Protokoll:

                        Protokoll.PNG

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        818
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        17
                        36
                        5873
                        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