Hallo Zusammen,
ich will man eine erste Erfolgsmeldung zurückgeben.
Ich habe mir die Shelly RGBW2 Steuerung beschafft, einen Mini-Traffo um von 230V auf 24V zu kommen und eine LED-Signal-Leuchte. Habe alles wie im Bild verkabelt.
ACHTUNG: ICH BIN KEIN ELEKTIKER UND KANN KEINE VERANTWORTUNG FÜR NACHBAUTEN ÜBERNEHMEN!
Ich habe mit der Shelly App die Steuerung ins WLAN gebracht und dann die ersten Verbindungsversuche vorgenommen.
Ich musste auf den Modus WHITE stellen, damit die Leuchte korrekt angesteuert wurde.
Über den Browser und der
IP-Adresse konnte ich auf ein vorhandenes Web-Interface zugreifen und die Leuchte an sich ausprobieren.
Die SupportSite von Shelly war wirklich hilfreich:
Mit
http://IP-Adresse/white/0?turn=on kann ich die oberste Leuchte einschalten
Mit
http://IP-Adresse/white/0?turn=off kann ich die oberste Leuchte wieder ausschalten
Mit
http://IP-Adresse/white/0?brightness= [1-100] kann die Helligkeit gesteuert werden
Bei jeder Aktion und bei der Abfrage
http://IP-Adresse/white/0 bekommt man einen String mit dem aktuellen Status von der Steuerung als Rückgabewert:
{"ison":false,"mode":"white","brightness":70,"power":1.26,"overpower":false}
Ich habe diesen bis jetzt ale ein String behandelt, geht aber mit Sicherheit charmanter:
Delphi-Quellcode:
function TForm1.MyStreamToString(aStream: TStream): string;
var SS: TStringStream;
begin
Result := '[';
if aStream <> nil then begin
SS := TStringStream.Create('');
try
SS.CopyFrom(aStream, 0);
Result := Result + SS.DataString;
Result := Result + ']';
finally
SS.Free;
end;
end else begin
Result := '';
end;
end;
Ich habe ein kleines Test-Programm geschrieben. Beim Start frage ich den Status der Einzelleuchten ab und tragen den ON/OFF Status und die Eingestellte Helligkeit in meine Maske ein.
Delphi-Quellcode:
procedure TForm1.Get_Status_JSON(LStream: TMemoryStream; Swtch: TToggleSwitch; edt_Brightness: TAdvEdit);
var ClientItem: TJSONValue;
ClientList: TJSONArray;
ResultString: string;
Status: boolean;
Brightness: integer;
I: integer;
begin
ClientList := TJSONArray.Create;
Try
ResultString := MyStreamToString(LStream);
ClientList := TJSONObject.ParseJSONValue(ResultString) as TJSONArray;
for ClientItem in ClientList do begin
if not ClientItem.TryGetValue<boolean>('ison', Status) then
ShowMessage('Fehler: Status nicht gefunden.');
if not ClientItem.TryGetValue<integer>('brightness', Brightness) then
ShowMessage('Fehler: Brightness nicht gefunden.');
end;
if Status then
Swtch.State := tssOn;
if not Status then
Swtch.State := tssOff;
edt_Brightness.Text := IntToStr(Brightness);
Finally
ClientList.Free;
End;
end;
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var ResultString: string;
LStream: TMemoryStream;
begin
LStream := TMemoryStream.Create;
Try
Client1.get(lbl_Basic_0.Caption + edt_Channel_0.Text, LStream);
Get_Status_JSON(LStream, Swtch_0, edt_Bright_0);
LStream.SetSize(0);
Client1.get(lbl_Basic_1.Caption + edt_Channel_1.Text, LStream);
Get_Status_JSON(LStream, Swtch_1, edt_Bright_1);
LStream.SetSize(0);
Client1.get(lbl_Basic_2.Caption + edt_Channel_2.Text, LStream);
Get_Status_JSON(LStream, Swtch_2, edt_Bright_2);
Finally
LStream.Free;
End;
end;
Aktuell prüfe ich noch, wie ich die Leuchte blinken lassen kann.
So viel zum jetztigen Zeitpunkt als Feedback.
Vielen Dank für Eure Anregungen und Unterstützung
Patrick