versuch mal hier https://my.smartthings.com/advanced/devices
die Seite sollte funktionieren.
Ich bekomme für meine Geräte leider weder die Network ID noch den geheimen Schlüssel angezeigt und habe die direkte Einbindung in IPS aufgegeben.
Steuer die Anlage jetzt über Home-Assistant und per MQTT aus IPS heraus. Läuft für mich auch zufriedenstellend, auch wenn mir eine direkte Integration lieber wäre.
wofür brauchst du die Network-ID?
Der „geheime Schlüssel“ ist doch der Token. Der bezieht sich doch nicht auf das einzelne Gerät, sondern auf deinen Samsung-API-Zugriff.
gemäß der Anleitung von DigiHouse wird beides benötigt:
und die Daten finde ich leider nicht.
Wenn es anders geht und ich es im Thread überlesen habe, dann gerne zeigen wo, dann ziehe ich die Daten direkt in IPS um und spar mir das Gefrickel mit HomeAssistent ↔ IPS an der Ecke.
Hallo,
interessanter Weise habe ich mich die Woche auch an die Anbindung gemacht.
Den Token und die Geräte ID habe ich und kann auch die gewünschten Daten für meine Waschmaschiene auslesen. Dies funktioniert mit dem Script analog zu dem bereits geposteten.
Mein Problem ist, dass der Token genau nur einen Tag funktioniert und dann nicht mehr. Ich habe vorgestern dann den alten in meinem Account gelöscht und einen neuen erstellt. Dieser ging dann wieder bis heute morgen, dann wars wieder vorbei.
Weiss hier jemand weiter ?
Gruss
Diese 3 Codes müsste ich doch in das Script eintragen, oder?
Dann fehlt mir die Network ID und Secret. Wenn Secret der Token ist, was muss ich dann bei Token eintragen. Das gleiche?
Die Seite funktioniert. Hatte ich gestern auch schon mal geöffnet. Aber hier habe ich auch nur die Device ID.
Den Token hatte ich mir vorher generiert. Habe mittlerweile so einige Kombinationen ausprobiert, wie rum die Codes eingetragen werden müssen. Ne Lösung habe ich nciht gefunden.
Auf so eine formatierte Seite bin ich auch nicht gekommen. Ich habe einen Token erstellt und habe die Seite offen gelassen. Dann dies in einem neuen Broser Fenster eingeben: https://api.smartthings.com/v1/devices/list. Du erhälst im Browser Fenster unformatierten Text, den Du formatieren musst. Darin sollten die Geräte ID Deiner registrierten Geräte sein.
Damit habe ich glaube ich meine o.g Frage evtl. selbst beantwortet. Durch das Einloggen und Anlegens des Tokens ist der Zugang frei und kann ohne Header in der Anfrage abgefragt werden. Nach einiger Zeit ist dies nicht mehr möglich und es wird ein Header benötigt.
Ergo stimmt was mit meinem Header nicht… muss ich heute abend zu Hause prüfen
Schau mal hier ich habe diesen Threat als Grundlage genommen
Symcon Forum
Hier gabs diesen code
//******************************************************************************
// 17153
// Übersicht der Devices: https://graph-eu01-euwest1.api.smartthings.com/device/list
//******************************************************************************
$Access_Token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$Device_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$URL = 'https://api.smartthings.com/v1/devices/'.$Device_ID.'/status';
$batterie_id = 56109;
$status_id = 21042;
// Befehl zusammenstellen und per CURL absetzen
$Header = array(
'Authorization: Bearer ' . $Access_Token,
'Content-Type: application/json',
'Accept: application/json',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, $Header);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $Command);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = explode("\r\n\r\n", $response); // Header abtrennen
$daten = json_decode($data[1], true); // Array erstellen
$batterie = $daten['components']['main']['battery']['battery']['value'];
SetValueInteger($batterie_id, $batterie);
$status = $daten['components']['main']['healthCheck']['DeviceWatch-DeviceStatus']['value'];
SetValueString($status_id, $status);
dieser Code fragt auch SmartThings ab, aber in diesem Fall meinen NUKI-Stastus.
Für die Klimaanlage benutze ich diesen Code:
$Access_Token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$Device_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$URL = 'https://api.smartthings.com/v1/devices/'.$Device_ID.'/status';
//******************************************************************************
// Befehl zusammenstellen und per CURL absetzen
//******************************************************************************
$Header = array(
'Authorization: Bearer ' . $Access_Token,
'Content-Type: application/json',
'Accept: application/json',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, $Header);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $Command);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = explode("\r\n\r\n", $response); // Header abtrennen
$daten = json_decode($data[1], true); // Array erstellen
Ist genau das gleiche, also für alle Abfragen gleich.
Um Befehle zu senden, muss die Zeile
//curl_setopt($ch, CURLOPT_POSTFIELDS, $Command);
noch entsprechend aktiviert und $command gefüllt werden.
Hallo,
ja hatte ich oben nicht geschrieben, ich möchte auch nichts steuern sondern nur abfragen.
@pitty bzgl. des Zugriffs und des Tokens funktioniert bei die alles ? Du musst den auch nicht erneuern ? Seltsam habe doch das gleiche Skript. Gibt es eigentlich eine Beschränkung der Abfragehäufigkeit ?
ich frage die Innenmodule ab, wenn das Aussengerät läuft.
Bei mir funktioniert das seit anfang an und ohne Einschränkungen.
Hallo,
hier ist mein Skript. Es ist für mich im oberen Teil absolut identisch. Die Auswertung des Json Teils ist natürlich anders.
$Access_Token = 'axxxxxxxxxxxxxxx5';
$Device_ID = '5xxxxxxxxxxxxxxx8';
$URL = 'https://api.smartthings.com/v1/devices/'.$Device_ID.'/status';
$Temp_ID = 15372;
$Jobstate_ID = 47815;
$Operatingstate_ID = 49904;
$progress_ID = 19737;
$Restlaufzeit_ID = 35400;
$Restlaufzeitmin_ID = 27830;
// Befehl zusammenstellen und per CURL absetzen
$Header = array(
'Authorization: Bearer ' . $Access_Token,
'Content-Type: application/json',
'Accept: application/json',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, $Header);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $Command);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
curl_close($ch);
$content = explode("\r\n\r\n", $response); // Header abtrennen
$json = json_decode($content[1],true); // Array erstellen
$Temp = $json['components']['main']['custom.washerWaterTemperature']['washerWaterTemperature']['value'];
SetValue($Temp_ID, $Temp);
$Jobstate = $json['components']['main']['samsungce.washerOperatingState']['washerJobState']['value'];
SetValue($Jobstate_ID , $Jobstate);
$Operatingstate = $json['components']['main']['samsungce.washerOperatingState']['operatingState']['value'];
SetValue($Operatingstate_ID , $Operatingstate);
$progress = $json['components']['main']['samsungce.washerOperatingState']['progress']['value'];
SetValue($progress_ID , $progress);
$Restlaufzeit = $json['components']['main']['samsungce.washerOperatingState']['remainingTimeStr']['value'];
SetValue ($Restlaufzeit_ID , $Restlaufzeit);
//settype($Restlaufzeit,"Integer"); $Restlaufzeit_min = $Restlaufzeit;
//SetValueinteger ($Restlaufzeitmin_ID , $Restlaufzeit);
print_r($response);
Wenn ich mir die Rückmeldung mit dem alten Token von Vorgestern anschaue erhalte dies:
[0] => HTTP/1.1 401 Unauthorized
Mehr habe ich vorhin allerdings nicht gesichert. Habe jetzt wieder einen neuen Token erstellt und den alten gelöscht. Jetzt erhalte ich die Rückmeldung:
Array
(
[0] => HTTP/1.1 200 OK
Date: Mon, 17 Feb 2025 19:26:02 GMT
Content-Type: application/json
Content-Length: 22954
Connection: keep-alive
Server: openresty
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 10
X-RateLimit-Reset: 57108
Access-Control-Allow-Origin: *
Den eigentlichen content habe ich weg gelassen.
Morgen früh wird es dann vermutlich wieder nicht mehr funktionieren, versuche es aber ein weiteres mal und poste die Rückmeldung
Gruss Pentti
Hallo,
habe das gerade bei Smartthings gefunden:
Wenn ich das richtig verstehe gelten seit 01/25 die Tokens nur noch 24 Stunden und die alten bis 30.12.24 für 50 Jahre.
Habe noch etwas weiter geforscht, es scheint tatsächlich für neue Tokens noch keine Möglichkeit einer dauerhaften Einbindung/Abfrage zu geben. Das scheint auch für Home Assistant zu gelten wenn ichs richtig verstehe. Glücklich diejenigen, die inen 50 Jahre Token haben
https://community.smartthings.com/t/changes-to-personal-access-tokens-pat/292019
Das wird dann der Unterschied zu mir sein.
In einigen Modulen wird mit einem Refresh-Token gearbeitet und immer automatisch ein aktueller generiert. Wie genau das funktioniert weiss ich allerdings nicht. Evtl. mal die Suche beauftragen und einen Modul-Entwickler kontaktieren.
Ja, aber ich glaube das muss die API bzw Smartthings dann zulassen. Ich bin dort am suchen …
Wollen wir hoffen, dass die „alten“ Token den Du hast nicht auch umgestellt werden.
Hallo, habe ich das richtig verstanden, dass das Modul nicht steuern kann? Dann würde es für mich doch nicht hilfreich sein. Ich würde eine Ansteuerung benötigen, z.b. wenn über 25 Grad außentemperatur und genügend PV oder Speicherleistung anliegt, dass die Klimanalage selbstständig startet. Hat das jemand so laufen? VG
Ich denke ansteuern innerhalb der 24h Gültigkeit des Tokens geht, auch wenn ich es nicht versucht habe. Eine Möglichkeit den Token per skript zu verlängern oder neu zu generieren habe ich noch nicht gefunden. Insofern immer Einloggen und einen Token generieren ehe Du das Skript verwendest ist in meinen Augen unpraktikabel.
Hi, denke wenn das mit dem Token nicht funktioniert, kann man es besser mit dem IR Modul von TADO oder ähnlich realisieren. VG