Feature Request: Switchbot Tastendrückroboter einbinden
Verfasst: Mi Feb 21, 2024 7:05 am
Hallo zusammen,
da IFTTT kürzlich die Webhooks kostenpflichtig gemacht hat, kann ich unseren Tastendrückroboter ("Switchbot Bot") nicht mehr automatisiert über die OpenWB steuern. Der Switchbot ist im Prinzip ein kleiner Kasten mit einem Hebel, welcher einen Knopf an unserer Wärmepumpe drückt, um die Warmwasserzubereitung einzuschalten, wenn genug Überschuss da ist. Steuerbar ist das Ganze über eine Cloud-App oder (bis vorgestern) über IFTTT-Webhooks. Bei letzterem ruft man eine URL auf und der Bot drückt den Knopf, perfekt um den Switchbot in SmartHome 2.0 einzubinden.
Nun verfügt der Switchbot aber auch über eine gut dokumentierte API mit Beispielcode usw. Findet sich vielleicht jemand, der den Switchbot direkt über Smarthome 2.0 steuerbar machen könnte? Also quasi um den den "Umweg" IFTTT zu umgehen?
Hier die API: https://github.com/OpenWonderLabs/SwitchBotAPI
Ich habe mich dort bereits ein wenig eingelesen, folgender Python 3-Code müsste, sofern ich das richtig verstanden habe, in Smarthome 2.0 integriert werden (und zusätzlich halt die Änderungen an der Einstellungsseite, damit man token und secret etc. eingeben kann):
Authentifizerung (token und secret kann ich (via PN) gerne mitteilen):
Einschalten des Bots - Request:
Einschalten des Bots - Response:
Ausschalten des Bots - Request (wird in meinem Szenario nicht benötigt, da sich die Warmwasserzubereitung automatisch abschaltet):
Ausschalten des Bots - Response (hier bin ich nicht ganz sicher, da die Doku keinen entsprechenden Beispielcode hat):
Ich nutze die OpenWB 2.0 und bin gerne bereit, zu testen, mitzuhelfen, Zugangsdaten zur Verfügung zu stellen usw., nur leider kann ich nicht programmieren und habe keine Erfahrung mit Github etc. Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte. Der Switchbot funktioniert sehr zuverlässig und ist eine gute Methode, auch andere "dumme" Geräte smart zu machen, da er im Prinzip jegliche Art von physischen Schaltern betätigen kann (auch Lichtschalter etc.). Ist also sicher auch für andere Smarthome-Nutzer von Vorteil.
da IFTTT kürzlich die Webhooks kostenpflichtig gemacht hat, kann ich unseren Tastendrückroboter ("Switchbot Bot") nicht mehr automatisiert über die OpenWB steuern. Der Switchbot ist im Prinzip ein kleiner Kasten mit einem Hebel, welcher einen Knopf an unserer Wärmepumpe drückt, um die Warmwasserzubereitung einzuschalten, wenn genug Überschuss da ist. Steuerbar ist das Ganze über eine Cloud-App oder (bis vorgestern) über IFTTT-Webhooks. Bei letzterem ruft man eine URL auf und der Bot drückt den Knopf, perfekt um den Switchbot in SmartHome 2.0 einzubinden.
Nun verfügt der Switchbot aber auch über eine gut dokumentierte API mit Beispielcode usw. Findet sich vielleicht jemand, der den Switchbot direkt über Smarthome 2.0 steuerbar machen könnte? Also quasi um den den "Umweg" IFTTT zu umgehen?
Hier die API: https://github.com/OpenWonderLabs/SwitchBotAPI
Ich habe mich dort bereits ein wenig eingelesen, folgender Python 3-Code müsste, sofern ich das richtig verstanden habe, in Smarthome 2.0 integriert werden (und zusätzlich halt die Änderungen an der Einstellungsseite, damit man token und secret etc. eingeben kann):
Authentifizerung (token und secret kann ich (via PN) gerne mitteilen):
Code: Alles auswählen
import json
import time
import hashlib
import hmac
import base64
import uuid
# Declare empty header dictionary
apiHeader = {}
# open token
token = '' # copy and paste from the SwitchBot app V6.14 or later
# secret key
secret = '' # copy and paste from the SwitchBot app V6.14 or later
nonce = uuid.uuid4()
t = int(round(time.time() * 1000))
string_to_sign = '{}{}{}'.format(token, t, nonce)
string_to_sign = bytes(string_to_sign, 'utf-8')
secret = bytes(secret, 'utf-8')
sign = base64.b64encode(hmac.new(secret, msg=string_to_sign, digestmod=hashlib.sha256).digest())
print ('Authorization: {}'.format(token))
print ('t: {}'.format(t))
print ('sign: {}'.format(str(sign, 'utf-8')))
print ('nonce: {}'.format(nonce))
#Build api header JSON
apiHeader['Authorization']=token
apiHeader['Content-Type']='application/json'
apiHeader['charset']='utf8'
apiHeader['t']=str(t)
apiHeader['sign']=str(sign, 'utf-8')
apiHeader['nonce']=str(nonce)
Code: Alles auswählen
POST https://api.switch-bot.com/v1.1/devices/210/commands
{
"command": "turnOn",
"parameter": "default",
"commandType": "command"
}
Code: Alles auswählen
{
"statusCode": 100,
"body": {},
"message": "success"
}
Ausschalten des Bots - Request (wird in meinem Szenario nicht benötigt, da sich die Warmwasserzubereitung automatisch abschaltet):
Code: Alles auswählen
POST https://api.switch-bot.com/v1.1/devices/210/commands
{
"command": "turnOff",
"parameter": "default",
"commandType": "command"
}
Code: Alles auswählen
{
"statusCode": 100,
"body": {},
"message": "success"
}