Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Maschinenstatus via LED visualisieren

  Alt 5. Jun 2023, 20:18
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
Miniaturansicht angehängter Grafiken
20230604_004815_img_4445_edited.jpg  
Patrick

Geändert von Ykcim ( 5. Jun 2023 um 23:32 Uhr)
  Mit Zitat antworten Zitat