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"
}