Modul 48_SST zum Einbinden von Samsung SmartThings

Begonnen von pasp, 25 August 2020, 19:39:47

Vorheriges Thema - Nächstes Thema

bmr

Zitat von: bmr am 01 Februar 2024, 21:30:26Hi,

seit heute lässt das Module mein FHEM abstürzen :'(  :

2024.02.01 21:05:46 3: SST (SamsungSmartThingsConnector): define - CONNECTOR defined as SamsungSmartThingsConnector
Can't use an undefined value as an ARRAY reference at ./FHEM/48_SST.pm line 594.

Hat Samsung irgendwas geändert?

Heute geht es wieder.

Dr. Ulfi

#196
Es handelt sich hierbei um ein Heizungsthermostat mit Hub (mts150) von Meross, das in SST eingebunden wurde, aber in FHEM nicht erkannt wurde.
------ send below text to developer ------

$VAR1 = {
  "_links" => {},
  "items" => [
    {
      "allowed" => [],
      "components" => [
        {
          "capabilities" => [
            {
              "id" => "switch",
              "version" => 1
            },
            {
              "id" => "refresh",
              "version" => 1
            },
            {
              "id" => "healthCheck",
              "version" => 1
            }
          ],
          "categories" => [
            {
              "categoryType" => "manufacturer",
              "name" => "Switch"
            }
          ],
          "id" => "main",
          "label" => "main"
        }
      ],
      "createTime" => "2020-10-31T07:02:52Z",
      "deviceId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "deviceManufacturerCode" => "meross",
      "executionContext" => "CLOUD",
      "label" => "Velux KLF200",
      "locationId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "manufacturerName" => "SmartThings",
      "name" => "c2c-switch",
      "ownerId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "presentationId" => "SmartThings-smartthings-c2c-switch",
      "profile" => {
        "id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "restrictionTier" => 0,
      "roomId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type" => "VIPER",
      "viper" => {
        "endpointAppId" => "viper_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "manufacturerName" => "meross",
        "modelName" => "mss310",
        "uniqueIdentifier" => "1912240022025225188148e1e9146a71"
      }
    },
    {
      "allowed" => [],
      "components" => [
        {
          "capabilities" => [
            {
              "id" => "switch",
              "version" => 1
            },
            {
              "id" => "refresh",
              "version" => 1
            },
            {
              "id" => "healthCheck",
              "version" => 1
            }
          ],
          "categories" => [
            {
              "categoryType" => "manufacturer",
              "name" => "Switch"
            }
          ],
          "id" => "main",
          "label" => "main"
        }
      ],
      "createTime" => "2020-10-26T15:43:45Z",
      "deviceId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "deviceManufacturerCode" => "meross",
      "executionContext" => "CLOUD",
      "label" => "Keller Luftentfeuchter",
      "locationId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "manufacturerName" => "SmartThings",
      "name" => "c2c-switch",
      "ownerId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "presentationId" => "SmartThings-smartthings-c2c-switch",
      "profile" => {
        "id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "restrictionTier" => 0,
      "roomId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type" => "VIPER",
      "viper" => {
        "endpointAppId" => "viper_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "manufacturerName" => "meross",
        "modelName" => "mss310",
        "uniqueIdentifier" => "1912241474197525188148e1e9147d99"
      }
    },
    {
      "allowed" => [],
      "components" => [
        {
          "capabilities" => [
            {
              "id" => "switch",
              "version" => 1
            },
            {
              "id" => "refresh",
              "version" => 1
            },
            {
              "id" => "healthCheck",
              "version" => 1
            }
          ],
          "categories" => [
            {
              "categoryType" => "manufacturer",
              "name" => "Switch"
            }
          ],
          "id" => "main",
          "label" => "main"
        }
      ],
      "createTime" => "2020-10-26T15:43:45Z",
      "deviceId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "deviceManufacturerCode" => "meross",
      "executionContext" => "CLOUD",
      "label" => "Meross Solar",
      "locationId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "manufacturerName" => "SmartThings",
      "name" => "c2c-switch",
      "ownerId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "presentationId" => "SmartThings-smartthings-c2c-switch",
      "profile" => {
        "id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "restrictionTier" => 0,
      "roomId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type" => "VIPER",
      "viper" => {
        "endpointAppId" => "viper_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "manufacturerName" => "meross",
        "modelName" => "mss310",
        "uniqueIdentifier" => "1912240337206125188148e1e9146821"
      }
    },
    {
      "allowed" => [],
      "components" => [
        {
          "capabilities" => [
            {
              "id" => "switch",
              "version" => 1
            },
            {
              "id" => "refresh",
              "version" => 1
            },
            {
              "id" => "healthCheck",
              "version" => 1
            }
          ],
          "categories" => [
            {
              "categoryType" => "manufacturer",
              "name" => "Switch"
            }
          ],
          "id" => "main",
          "label" => "main"
        }
      ],
      "createTime" => "2020-11-25T16:23:59Z",
      "deviceId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "deviceManufacturerCode" => "meross",
      "executionContext" => "CLOUD",
      "label" => "Heizung",
      "locationId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "manufacturerName" => "SmartThings",
      "name" => "c2c-switch",
      "ownerId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "presentationId" => "SmartThings-smartthings-c2c-switch",
      "profile" => {
        "id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "restrictionTier" => 0,
      "roomId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type" => "VIPER",
      "viper" => {
        "endpointAppId" => "viper_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "manufacturerName" => "meross",
        "modelName" => "mss310",
        "uniqueIdentifier" => "1912240681192525188148e1e9147736"
      }
    },
    {
      "allowed" => [],
      "components" => [
        {
          "capabilities" => [
            {
              "id" => "switch",
              "version" => 1
            },
            {
              "id" => "healthCheck",
              "version" => 1
            },
            {
              "id" => "refresh",
              "version" => 1
            },
            {
              "id" => "temperatureMeasurement",
              "version" => 1
            },
            {
              "id" => "thermostatHeatingSetpoint",
              "version" => 1
            },
            {
              "id" => "thermostatMode",
              "version" => 1
            }
          ],
          "categories" => [
            {
              "categoryType" => "manufacturer",
              "name" => "Thermostat"
            }
          ],
          "id" => "main",
          "label" => "main"
        }
      ],
      "createTime" => "2024-03-26T17:04:49.705Z",
      "deviceId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "deviceManufacturerCode" => "meross",
      "executionContext" => "CLOUD",
      "label" => "Heizk\x{f6}rper Meross",
      "locationId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "manufacturerName" => "0AB1",
      "name" => "meross-thermostat-heat",
      "ownerId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "presentationId" => "ST_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "profile" => {
        "id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "restrictionTier" => 0,
      "roomId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type" => "VIPER",
      "viper" => {
        "endpointAppId" => "viper_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "manufacturerName" => "meross",
        "modelName" => "mts150",
        "uniqueIdentifier" => "2306289587653262080148e1e9cc1e17-0300C6E5"
      }
    },
    {
      "allowed" => [],
      "components" => [
        {
          "capabilities" => [
            {
              "id" => "switch",
              "version" => 1
            },
            {
              "id" => "switchLevel",
              "version" => 1
            },
            {
              "id" => "colorControl",
              "version" => 1
            },
            {
              "id" => "refresh",
              "version" => 1
            },
            {
              "id" => "healthCheck",
              "version" => 1
            },
            {
              "id" => "synthetic.lightingEffectFade",
              "version" => 1
            }
          ],
          "categories" => [
            {
              "categoryType" => "manufacturer",
              "name" => "Light"
            }
          ],
          "id" => "main",
          "label" => "main"
        }
      ],
      "createTime" => "2021-03-30T18:57:08.637Z",
      "deviceId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "deviceManufacturerCode" => "Magic Home",
      "executionContext" => "CLOUD",
      "label" => "LED Streifen Wz",
      "locationId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "manufacturerName" => "SmartThings",
      "name" => "c2c-rgb-color-bulb",
      "ownerId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "presentationId" => "SmartThings-smartthings-c2c-rgb-color-bulb",
      "profile" => {
        "id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "restrictionTier" => 0,
      "roomId" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type" => "VIPER",
      "viper" => {
        "endpointAppId" => "viper_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "hwVersion" => 8,
        "manufacturerName" => "Magic Home",
        "modelName" => 51,
        "swVersion" => "AK001-ZJ2101",
        "uniqueIdentifier" => "D8F15BF6A7C6"
      }
    }
  ]
};

------ send above text to developer ------

Device-ID - Name - Autocreation Status

11ec5c2e-c81b-4468-b610-adeb20dfa9ac - c2c-switch - already known: no creation

ec19898f-0555-46e6-9ed9-f19576816933 - c2c-switch - already known: no creation

f57480b2-1d83-4ec4-8c75-eb6d6ce5af39 - c2c-switch - already known: no creation

53e1904a-dcee-4249-8871-f919252ec31a - c2c-switch - already known: no creation

0a64e1ec-5fd8-4c76-a35e-de542b38ce61 - meross-thermostat-heat - already known: no creation

82481f1f-57c4-4ef8-83e6-0dd04d140294 - c2c-rgb-color-bulb - already known: no creation

get SST_de542b38ce61 status:

2024-09-14 12:42:18 SST SST_de542b38ce61 setList_hint: main_thermostatMode:heat,auto,off
2024-09-14 12:42:18 SST SST_de542b38ce61 checkInterval: 60
2024-09-14 12:42:18 SST SST_de542b38ce61 DeviceWatch-DeviceStatus: online
2024-09-14 12:42:18 SST SST_de542b38ce61 thermostatMode: heat
2024-09-14 12:42:18 SST SST_de542b38ce61 temperature: 0
2024-09-14 12:42:18 SST SST_de542b38ce61 switch: on
2024-09-14 12:42:18 SST SST_de542b38ce61 heatingSetpoint: 19
Raspi
CUBE/CUNO a-culfw, Signalduino 433Mhz, Sonoff/Tasmota, EnOceanPI, Meross Smart Plug (IFTTT), ESP8266 Projekte,
MAX!-Heizungssteuerung, Intertechno IT-1500-Steckdosen, Velux KLF200 mit Somfy io

fred_feuerstein

Habe seit dem letzten Wochenende eine Samsung Klimaanlage (Windfree Comfort).
Konnte über das SST Modul die Anlage einbinden. Über den Connector und anschliessend das erstellte Device.
Steuerung klappt soweit - Prima !

Nun zu dem Problem:
Scheinbar ist es so, dass seit Januar 2025 nach 24 Stunden der Access-Token deaktiviert wird. Somit braucht man alle 24 Stunden einen neuen Access-Token. Sonst geht das SST Device auf "Cloud connection error". Auch der Connector bekommt diesen Status, wenn man die Device-List aktualisieren möchte.

Wer also vor dem 30.12.2024 seinen Token erstellt hat, kann wie gehabt zugreifen, da dieser NICHT abläuft. Nur die nach dem 30.12.2024 erstellten Token sind nur noch 24 Stunden gültig.

Alle neuen User (wie ich) brauchen eine andere Authorisierung.
Samsung hat hier umgestellt auf OAuth 2.0 Authorization Code flow.


siehe:
https://developer.smartthings.com/docs/connected-services/oauth-integrations

Hier noch der Grund für die Änderung:
https://community.smartthings.com/t/changes-to-personal-access-tokens-pat/292019

D.h. die Authentifizierung des SST Moduls müsste umgebaut werden, bzw. eine Art Timer eingebaut werden, welcher nach 24 Stunden einen neuen Token holt. Das übersteigt leider meinen Kenntnisstand.

Ich habe mir erstmal wie folgt geholfen:

Erklärung wie man den Token erstmal auf die neue Art generiert gibt es hier:
https://levelup.gitconnected.com/smartthings-api-taming-the-oauth-2-0-beast-5d735ecc6b24

Dieser Anleitung bin ich gefolgt für den ersten Token. Bis zu dem Schritt, an dem ein python-Script dann die täglichen Updates macht und den Token auf einem Server bereitstellt. Da ich python zwar etwas lesen aber nicht programmieren kann und auch die Bereitstellung auf einem webserver nicht benötige, habe ich mir ein Shell-Script erstellt, was über cron jeden Tag um 23.50 Uhr ausgeführt wird.

Das Script macht nun folgendes. Es holt über curl den neuen Access Token (dafür wird der ebenfalls tägliche refresh-token verwendet). Es schreibt dann den neuen und alten Token erstmal sicherheitshalber in ein Reading in fhem (einfach zur Kontrolle in fhem). Und sendet eine silentmsg über telegrambot an mein Handy mit altem und neuem AccessToken.
Danach wird vom Script der SST Connector gelöscht und mit neuem Accesstoken erstellt und wieder über attr dem passenden Raum zugewiesen.
Am Ende wird noch der save Befehl ausgeführt, um die config von fhem zu speichern.

Was ich noch nicht in meinem Script habe wäre auf Fehler zu reagieren, wenn bspw. keine Verbindung möglich oder was auch immer. Aber das werde ich in Angriff nehmen, wenn mal ein Problem auftritt.

Das klappt nun schon den 2. Tag so. Denke damit kann ich erstmal das Thema abhaken, bis ggfs. das SST Modul ein Update bekommt.

Vielleicht ist ja der ursprüngliche Entwickler noch aktiv oder ein anderer Entwickler hat Zeit und Lust, sich das mal anzuschauen.




Gruß, Fred

NEU: FHEM auf Raspberry PI 5, OS: Bookworm, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art
ALT: FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp)