11-10-2016, 13:27:52
Wie sieht so eine Anfrage denn aus?
Wie nutzt man diese API?
Gesendet von meinem E5823 mit Tapatalk
Wie nutzt man diese API?
Gesendet von meinem E5823 mit Tapatalk
Aktoren über URL schalten
|
11-10-2016, 13:27:52
Wie sieht so eine Anfrage denn aus?
Wie nutzt man diese API? Gesendet von meinem E5823 mit Tapatalk
11-10-2016, 14:00:15
(Dieser Beitrag wurde zuletzt bearbeitet: 11-10-2016, 14:02:19 von Jecosti.)
Hallo,
nach dem zweistufigen Anmeldevorgang erhält man einen Token (Bearer). Dieser wird bei jeder Anfrage im Header angegeben. Die Anfrage geht an eine bestimmte URI (z.B. https://api.services-smarthome.de/api/1.0/action/) für Aktionen, wie Ein/Ausschalten. Man sendet (POST-Request) die gewünschte Aktion im JSON-Format. Dieses Prinizp lässt sich in verschiedenen Programmierumgebungen umsetzen. Die von mir geschriebene API ist in VB.NET. Man kann sie nutzen, indem man sie 1. z.B. in Visualstudio lädt und kompiliert. Im zweiten Schritt kann man die dll dann als Refernz für sein eigenes Projekt angeben und über den Code Aktionen ausführen. Falls dich die genaue Formatierung der Anfragen interessiert, empfehle ich dir die Dateien AuthentificationHandler.vb und InnogyRequestHandler.vb genauer anzusehen. Viele Grüße Jecosti
11-10-2016, 16:52:05
(11-10-2016, 14:00:15)Jecosti schrieb: ... Donnerschlag. Ich nehme alles zurück.
11-10-2016, 17:06:46
Für alle, die es interessiert: Die Daten, bzw. die Formatierungen der Anfragen kann man ohne Weiteres aus dem Browser auslesen. In meinem Fall Google Chrome. Einfach die Entwicklertools nebenbei aufmachen. In der "Network"-Ansicht lassen sich dann die einzelnen Requests dann nachvollziehen. (Filter XHR/Other)
Das einzige was mich noch stört ist, dass das PW im Klartext verarbeitet wird und dass ich noch nicht weiß, wie die App die Benutzerdaten ohne erneuten Login speichert. Ich vermute, das hat etwas mit dem "Refresh-Token" zu tun, den man gemeinsam mit dem Haupttoken erhält...
12-10-2016, 17:13:35
Habs gerade mal getestet - Debug-Msg gingen sofort raus ...
b0f441a410f8465fbede93a7363a4339 SHC Name Smart Home Controller b0f441a410f8465fbede93a7363a4339 SHC ProtocolId Virtual b0f441a410f8465fbede93a7363a4339 SHC HardwareVersion 00.02 b0f441a410f8465fbede93a7363a4339 SHC SoftwareVersion 2.0.436.11 b0f441a410f8465fbede93a7363a4339 SHC FirmwareVersion 1.913 b0f441a410f8465fbede93a7363a4339 SHC HostName SMARTHOME03 Ganz großes Kino - Dankeschön für die Arbeit! Ich hätte gedacht Login wäre nicht möglich - nur mit OAuth2-Token. Echt cool geworden bis hierher.
07-12-2016, 01:01:17
(11-10-2016, 14:00:15)Jecosti schrieb: Hallo, Erstmal großen Respekt für deine API Sie hat mir sehr geholfen, allerdings bekommen ich es nicht hin, eine Status-Änderung eines Gerätes zu erkennen und anzuzeigen. Wenn z.B. ein Zwischenstecker manuell per Tastendruck eingeschaltet wird zeigt die Innogy Website dies nach ca 2 Sec direkt an. Wie kann man diese Aktion mit deiner API erfassen, sodass man reagieren und die Änderung des Status anzeigen kann?
----------------------------------------
2 x Zentrale 13 x Heizkörperthermostat 1 x Raumthermostat 10 x Rauchmelder 2 x Wandsender 3 x Zwischenstecker 10 x Tür/Fenster Sensor 3 x UP Dimmer 3 x UP Lichtschalter 3 x Bewegungsmelder ---------------------------------------- BerniBox
09-12-2016, 18:34:27
(Dieser Beitrag wurde zuletzt bearbeitet: 09-12-2016, 18:46:54 von Jecosti.)
Hallo zusammen,
Innogy scheint diesen Sachverhalt über WebSockets realisiert zu haben (zumindest taucht der Begriff im Script auf): https://www.codeproject.com/articles/617...4-5-part-1 Die dazugehörige URL ist die: wss://api.services-smarthome.de/API/1.0/events?token=[deinAccessToken] Auf die Schnelle würde ich dir mit der gegebenen API empfehlen, den Status der Geräte regelmäßig (z.B. 1x pro Minute) abzufragen. Hierzu würde ich die folgende Methode zur Klasse "SmartHomeSession" hinzufügen: Public Sub RefreshStates() Dim reqH As New InnogyRequestHandler(auth.MyToken) _DeviceStates = reqH.Perform(RequestTyp.DeviceState) _CapabilityStates = reqH.Perform(RequestTyp.CapabilityState) End Sub Bei jedem Aufruf dieser Methode werden dann die aktuellen Status-Werte der Geräte und Funktionen abgefragt. Ich hoffe, ich konnte dir weiterhelfen. Viele Grüße Jecosti
10-12-2016, 17:07:03
Hallo zusammen,
ich konnte die Events nun ebenfalls implementieren. In der neuen Version, lassen sich somit auch "externe" Statusänderungen behandeln. (Hierzu wurde das Event "InnogyEvent" eingeführt) Zudem ist nun ebenfalls ein Login mit Hilfe des "Refresh_Tokens" möglich. Ich weiß allerdings nicht, wie lange dieser gültig ist. Falls er endlos gültig sein sollte, empfehle ich diesen Token nur verschlüsselt zu speichern. Ansonsten könnte man auch über diesen indirekt auf das SH-System zugreifen. Daneben gab es noch weitere Änderungen und es wurden zusätzliche Methoden implementiert. Die Kompatibilität mit meiner alten API kann allerdings nicht gewährleistet werden. Viele Grüße Jecosti
19-12-2016, 22:23:13
Hallo,
so, habe nun etwas Zeit gehabt, deine neue Version zu testen... Das lesen der Zustandsänderung klappt nun wirklich gut....musste nur vorher Kleinigkeiten anpassen. z. B. starte ich den Webdienst erst nachdem alle anderen Sachen bereits eingelesen wurden... Bei mir gab es immer Ausnahmen, da schon Änderungen für ein Gerät rein kamen bevor es selbst schon eingelesen war. Ansonsten habe die LOGOUT Procedure noch geändert, da ich mich immer nur einmal einloggen konnte, jeder zweite Versuch ohne SW-Neustart war ohne Erfolg... nun kann man sich so oft wie man will ein -und ausloggen... Ich benutze das derzeit um zwei Zentralen gleichzeitig anzusteuern, so kann ich Daten von einer zur anderen schicken... Klappt ohne Probleme.... Also noch mal vielen Dank für deine Mühe... und falls es ein Update gibt , nur her damit, ich teste gerne mal durch... Anbei die Änderungen und ein Bild von meiner GUI.
----------------------------------------
2 x Zentrale 13 x Heizkörperthermostat 1 x Raumthermostat 10 x Rauchmelder 2 x Wandsender 3 x Zwischenstecker 10 x Tür/Fenster Sensor 3 x UP Dimmer 3 x UP Lichtschalter 3 x Bewegungsmelder ---------------------------------------- BerniBox |
|