[Modul] SwitchBot

Lösche bitte nochmal die Geräte Instanz.
Im Konfigurator muss dann das Gerät als Typ „Curtain“ enthalten sein.
Erstelle dann nochmal im Konfigurator die Geräte Instanz und probier ob sich das Gerät dann auch im Webfront bedienen lässt.

Ja, das funktioniert. Die Werte werden übermittelt, nur der Status ist invertiert.
Aber sonst, funktioniert es top!
Danke nochmal.

1 „Gefällt mir“

Grüsse, ich bin gerade hoch erfreut auf das Modul gestossen und habe mir deshalb Switchbot gekauft :). Leider habe ich ein Problem bei der Einrichtung. Ich kopiere am Handy Token und Secret, aber der Splitter zeigt mir immer falsche Zugangsdaten. Gab es hier evtl ein Update so das es nicht funktioniert?

Danke für eine Antwort schon im Voraus.

Servus,

Auch ich hatte am Anfang damit Probleme. Auf dem IPhone konnte ich die Zugangsdaten nicht komplett herauskopieren. Mit einem Android Tablet hat es dann funktioniert.

Also ich verzweifel daran langsam. Habe es jetzt auch mit einem Samsung Galaxy Tab probiert…keine Chance. Token und Geheimnis mehrmals zurückgesetzt, wieder in den Splitter kopiert… Nichts…immer Fehlerhafte Zugangsdaten :frowning:

Hallo Attain

Ich habe das gleiche Problem.
Es muss an der Implementation im Splitter liegen.
Mit curl kann man z.B. die Devices abfragen.
Mit demselben Token und Secret im Splitter bekomme ich auch „Authentication failed“

<?php

$token = ‚XXXXXXXXXXXXXXXXXXX‘;
$secret = ‚YYYYYYYYYYY‘;
$nonce = guidv4();
$t = time() * 1000;
$data = utf8_encode($token . $t . $nonce);
$sign = hash_hmac(‚sha256‘, $data, $secret,true);
$sign = strtoupper(base64_encode($sign));

$url = „https://api.switch-bot.com/v1.1/devices“;

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$headers = array(
„Content-Type:application/json“,
„Authorization:“ . $token,
„sign:“ . $sign,
„nonce:“ . $nonce,
„t:“ . $t
);

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
curl_close($curl);

$devices =json_decode($response);
print_r($devices);

function guidv4($data = null) {
// Generate 16 bytes (128 bits) of random data or use the data passed into the function.
$data = $data ?? random_bytes(16);
assert(strlen($data) == 16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);

// Output the 36 character UUID.
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));

}

Gruss Tom

Hallo Ihr beiden,

tut mir echt leid, aber ich kann das Problem nicht nachvollziehen.
Bei mir funktioniert es mit Symcon 6.4 aber auch mit 7.1.
Bitte mal ein Debug vom Splitter machen.
Das müsste dann in etwa so aussehen.

Bei mir siehts so aus:

dump.txt (576 Bytes)

Gruss Tom

OK, es ist nicht {„message“:„Unauthorized“}. Somit sind die Zugangsdaten wohl korrekt, aber da kommt ein anderer status zurück als ich erwarte.
grafik

Ich habe dementsprechend eine Änderung gemacht.

Bitte mal die neue Beta Version laden, testen und feedback geben.

Die Zugangsdaten funktionieren jetzt!! Super Danke vielmals für den Aufwand!

Allerdings legt der Konfigurator meine Temperatur/Hygrosensoren, weswegen ich mir SwitchBot eigentlich geholt habe, als Switch an. Ist das ein Fehler oder werden die noch gar nicht unterstützt?

Sehr schön ein Schritt weiter.

Kannst Du mal in der angelegten Geräteinstanz den „Debug“ aktivieren und auf „GETSTATUS“ klicken.
Dann schau ich mal.
grafik

Hab ich gemacht. Hier der Debug.
dump(1).txt (1,0 KB)

Ja, der „Outdoor Meter“ war noch nicht integriert.
Neue Version V2.1.4 als Beta verfügbar.

Bitte die Geräteinstanz nochmal löschen und über den Konfigurator neu anlegen.

Bitte um Rückmeldung.

Hallo, ja super jetzt funzt alles :slight_smile: Nochmals Danke für deine Mühe!

1 „Gefällt mir“

Ich habe neu eine Smart Lock Pro.
dump.txt (1,3 KB)
Im API wird das Gerät jedoch noch nicht korrekt unterstützt.

Dank und Gruss!
Tom

Hallo Tom,

probier mal ob es mit der Beta geht.

Hallol Attain

Leider kein Erfolg. Debug des Geräts:

dump.txt (740 Bytes)

Bei RequestAction(„setStateID-variable“,true) bekomme ich folgenden Fehler aus Deinem Modul:

Warning:
Warning: Undefined array key „items“ in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 286

Warning: Trying to access array offset on value of type null in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 286

Warning: Trying to access array offset on value of type null in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 286

Warning: foreach() argument must be of type array|object, null given in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 305
in C:\ProgramData\Symcon\scripts\15238.ips.php on line 3

Dank und Gruss!
Tom

Hattest Du die Geräte Instanz mal gelöscht und neu anlegen lassen?
Wenn nein, dann mach das bitte nochmal.

Ich habe die Geräte Instanz gelöscht und über den Konfigurator wieder erzeugt.
Danach habe ich die INstanz geäffnet und „GETSTATUS“ ausgeführt. Dabei bekomme ich folgende Fehlermeldungen:

Undefined variable $receivedData in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 330

Warning: Trying to access array offset on value of type null in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 330

Warning: Trying to access array offset on value of type null in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 330

Es werden trotz Fehlern folgende Idents erzeugt:
setState
setLock
doorState
battery
IsCalibrate
deviceType
lockState
version

Debug der Instanz:
dump.txt (1,3 KB)

Dank und Gruss!
Tom

Hallo Tom Danke für Deine Geduld.
Leider ist das Gerät noch nicht mal in der API beschrieben und alles ist etwas try & error.

Bitte probier mal die Beta.
setState und
lockState gibt es nicht mehr. Bitte die Variablen löschen. Die sollten eigentlich auch nicht mehr automatisch angelegt werden.

Über setLock kannst Du schalten.