[Modul] SwitchBot

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.

Hallo Attain

Kein Problem, ich weiss, dass ich da auf einer Gratwanderung bin :slightly_smiling_face:
Ich besitze auch einen Switchbot S10 Reinigungsroboter, auch da fehlt die Unterstützung im API (noch).
Ich habe die Instanz nochmals gelöscht und neu erzeugt. Bei „GETSTATUS“ wird kein Fehler mehr geworfen :+1: :pray:

Folgende Idents wurden erzeugt:
setState
setLock
doorState
battery
IsCalibrate
deviceType
version

Wieso Ident „setState“ erzeugt wird verstehe ich nicht.

Hier das Log der Instanz nach:

  1. „GETSTATUS“
  2. Lock Befehl ausgelöst durch drücken des Lock Knopfes am Schloss (WebHook Antwort)
  3. UnLock Befehl durch drücken des UnLock Knopfes am Schloss (WebHook Antwort)

dump.txt (3,1 KB)

Beide Webhook Antworten werfen einen Fehler in der Form

30/04/2024 07:57:25 | 22791 | ERROR | FlowHandler | Could not forward data to instance #22791:
Warning: Undefined array key „deviceType“ in C:\ProgramData\Symcon\modules.store\switchbot.attain.de\SwitchBot Device\module.php on line 153
RESULT:

setLock wird daher nicht korrekt gesetzt. Der Status bleibt immer „Unlocked“

Schicke ich einen Unlock Befehl via Webfront (Ident setLock) bekomme ich unterschiedliche Fehler im Debug:
dump.txt (1,4 KB)

Einmal „Internal server error“ oder „Task timed out after …“

Diese Errors erscheinen im Webfront:


2024-04-30 07_51_54-Webfront Big

Wenn ich den Lock Command als curl Befel schicke (nicht über Dein Modul" bekomme ich auch ein Timeout:

{„command“:„lock“,„parameter“:„default“,„commandType“:„command“}
{„errorMessage“:„2024-04-30T06:25:21.199Z ccf7e78e-df8b-4d76-b1d9-2174f80cabe0 Task timed out after 10.02 seconds“}stdClass Object
(
[errorMessage] => 2024-04-30T06:25:21.199Z ccf7e78e-df8b-4d76-b1d9-2174f80cabe0 Task timed out after 10.02 seconds
)

Ich hoffe das hilft :slightly_smiling_face: :pray:

Dank und Gruss!

Tom

PS: Die GitHub Anfrage „Expand Switchbot API for Lock Pro“ ist von mir.