am 01. Oktober 2024 22:20
Hallo zusammen,
ich versuche über einen ESP32 Mikrocontroller auf den BSH Controller II über die REST API zuzugreifen. Ich möchte gerne Zustände auslesen, um bei meiner Smarten Anzeige auf eine Ledvance-Platine verzichten zu können. Den ESP32 programmiere ich über die Arduino IDE.
Bisher habe ich folgendes erreicht:
- Abfrage der Public Information, Anlegen eines neuen Client und anschließende Abfrage z.B. des room arrays über Postman.
- Ich kann über den ESP32 über Port 8446 per GET die Public Information auslesen.
- Ich kann über den ESP32 über Port 8443 per POST einen neuen Client anlegen. Dieser erscheint auch in der Smart Home APP unter "Weitere Mobilgeräte".
So weit, so gut. Was jetzt aber nicht geht, ist anschließend über Port 8444 per GET z.B. das room array abzufragen. Die Verbindung kommt hier nicht zustande. Laut Postman muss ich doch im Header außer dem Host nichts mit senden, oder?
Ich habe schon viel rumprobiert und bin jetzt etwas ratlos. Hat jemand eine Idee, woran es liegen könnte?
VG tobo
am 06. Oktober 2024 18:28
Ein Update von mir: ich habe alles mögliche probiert, um die REST API auf meinem ESP32 zum laufen zubekommen, ohne Erfolg. Ich bin jetzt auf ein ESP8266 umgestiegen und hier geht es 🙂
Ich kann den ESP als Client anmelden und Geräte und die Zustände abfragen. Der Hammer! Das eröffnet echt viele Möglichkeiten. Ich werde als nächstes mein smarte Anzeige auf die REST API umstellen.
VG tobo
am 16. Oktober 2024 08:40
Hi @tobo123,
könntest du ein Beispiel Code hier reinposten? Ich bekomme ständig SSL Certificat Issues. Auch wenn ich requests.get(..., verify=False) mache (mit Python).
Danke
Ilja
am 16. Oktober 2024 12:11
import requests
import base64
import urllib3
# Suppress the InsecureRequestWarning related to verify=False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Variables (replace with actual values)
shc_api = "https://192.168.0.10:8444" # Replace with your actual SHC API URL
api_version = "3.13" # Replace with the actual API version you're using
system_password_base64 = base64.b64encode(b'testtest').decode('utf-8') # Replace with your password
# Endpoint for devices
url = f"{shc_api}/smarthome/devices" # Replace with the actual devices endpoint
# Path to client certificate and key files (replace with actual paths)
client_cert = ('/home/ilja/python-cert.pem', '/home/ilja/python-key.pem') # Update these paths
# Headers
headers = {
'Content-Type': 'application/json',
'User-Agent': 'PostmanRuntime/7.42.0',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Systempassword': system_password_base64,
'api-version': api_version,
'Host': '192.168.0.10:8444',
}
# No payload needed for GET request to /smarthome/devices
# Make the GET request with client certificate
response = requests.get(url, headers=headers, cert=client_cert, verify=False, timeout=120)
# Print the response
print(f"Status Code: {response.status_code}")
print(f"Response Body: {response.text}")
am 16. Oktober 2024 12:13
That code is working
am 16. Oktober 2024 18:58
Sehr gut, wenn es damit geht. Ich programmiere mit C++ / Arduino, weiß daher nicht, ob dir mein Code nützt. Den kannst du dir hier anschauen: https://github.com/tobo-123/smart-home-display.
Den Header kannst du kürzen. Das Passwort brauchst du z.B. nicht mitsenden.