Philips Hue
Dieser Teil des Beispiels umfasst eine PUT-Anfrage an eine Philips Hue Bridge (Erforderliche TwinCAT-Version: 3.1.4024.10). Die REST-API der Bridge ermöglicht es dem TwinCAT-Benutzer, Philips Hue Geräte aus der SPS heraus zu steuern. Der Benutzer benötigt dazu eine Philips Hue Bridge, die in seinem Netzwerk verfügbar ist, und mindestens ein Gerät, das damit verbunden ist.
Im Grunde sendet der HTTP-Client, in diesem Fall TwinCAT, verschiedene Werte als JSON-Dokument an die Bridge (z. B. Sättigung, Helligkeit, Zustands- und Farbwert für eine Glühbirne). Die Bridge antwortet mit einem anderen JSON-Dokument, das zeigt, ob die Befehle erfolgreich waren.

Beim Setup-Prozess generiert die Philips Hue Bridge zufällig einen Benutzernamen für ein Gerät, das als HTTP-Client fungiert. Dieser Benutzername kann dann für die Kommunikation mit der Bridge verwendet werden.
Philips bietet hier ein Tutorial „Erste Schritte“, in dem erläutert wird, wie die Bridge in einem Netzwerk zu finden ist und wie eine Client-Anwendung implementiert wird: https://developers.meethue.com/develop/get-started-2/
Die API-Beschreibung ist auf derselben Website zu finden, hierfür ist eine Registrierung erforderlich.
Das folgende Beispiel implementiert zum einen eine einfache PUT-Anfrage und zum anderen eine toggelnde PUT-Anfrage, die für einen sogenannten „Blinkmodus“ verwendet wird. Dieser Modus veranlasst eine Philips Hue Go Lampe dazu, jedes Mal, wenn der Timer-Ausgang gesetzt wird, die Farbe zu wechseln (zwischen 0 und 65000).
PROGRAM MAIN
VAR
// trigger command execution for Philips Hue samples
bPutPhilipsHue : BOOL;
fbHttpClientPhilips Hue : FB_IotHttpClient :=(sHostName:='172.17.x.x',
bKeepAlive:=TRUE, tConnectionTimeout:=T#10S);
fbHttpPutPhilipsHue : FB_TestHTTP_Put_PhilipsHue;
bBlinkingMode : BOOL;
fbTimer : TON:=(PT:=T#500MS);
nColor : UINT;
END_VAR
//init client parameters at startup
IF NOT fbHttpClientPhilipsHue.bConfigured THEN
fbHttpClientPhilipsHue.nHostPort:= 80;
fbHttpClientPhilipsHue.stTLS.bNoServerCertCheck:= FALSE;
END_IF
IF fbHttpClientPhilipsHue.bConfigured THEN
fbHttpPutPhilipsHue(bSend:=bPutPhilipsHue, fbClient:=fbHttpClientPhilipsHue, nColor:=nColor);
END_IF
IF bBlinkingMode THEN
fbTimer(IN:=NOT fbTimer.Q);
IF fbTimer.Q THEN
nColor:=nColor+5000;
IF nColor=65000 THEN
nColor:=0;
END_IF
IF bPutPhilipsHue THEN
bPutPhilipsHue:=FALSE;
ELSE
bPutPhilipsHue:=TRUE;
END_IF
END_IF
END_IF
fbHttpClientPhilipsHue.Execute();