gizmocuz wrote:Could you upload your script file ?
Shure. It's not a script but part of a Delphi program I wrote my own small home automation with:
Code: Select all
procedure TMain.SolarSocketWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('{FB;01;1E|64:KDY;KT0;PAC|0672}');
end;
procedure TMain.SolarSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var Data : string;
FUNCTION TMain.GetStrComponent(Comp : BYTE; Separator : CHAR; Line : STRING) : STRING;
VAR CharCount : BYTE;
Count : BYTE;
BEGIN
CharCount := 1;
WHILE (CharCount <= Length(Line)) AND (Comp > 1) DO
BEGIN
IF Line[CharCount] = Separator THEN
BEGIN
Dec(Comp);
END;
Inc(CharCount);
END;
Count := System.Pos(Separator, Copy(Line, CharCount, Length(Line)));
IF Count = 0 THEN
Count := Length(Line)
ELSE
Dec(Count);
GetStrComponent := Copy(Line, CharCount, Count);
END;
FUNCTION HexStrToInt(InStr : STRING) : Integer;
VAR Count : Integer;
Res : Integer;
BEGIN
Res := 0;
FOR Count := 0 TO Length(InStr)-1 DO
BEGIN
IF UpCase(InStr[Length(InStr)-Count]) IN ['A'..'F'] THEN
Res := Res + Round(Power(16, Count)) * (Ord(UpCase(InStr[Length(InStr)-Count]))-ORD('A')+10);
IF InStr[Length(InStr)-Count] IN ['0'..'9'] THEN
Res := Res + Round(Power(16, Count)) * (Ord(InStr[Length(InStr)-Count])-Ord('0'));
END;
HexStrToInt := Res;
END;
function GetValue(Ident, Data : string) : Integer;
begin
Data := Copy(Data, System.Pos(Ident, Data)+Length(Ident), Length(Data));
if System.Pos(';', Data) > 0 then
Data := Copy(Data, 1, System.Pos(';', Data)-1);
Result := HexStrToInt(Data);
end;
begin
Data := Socket.ReceiveText;
Data := GetStrComponent(2, '|', Data);
Data := GetStrComponent(2, ':', Data);
Data := GetStrComponent(1, '|', Data);
edPVPAC.Text := FloatToStrF(GetValue('PAC=', Data)/2, ffGeneral, 7, 1);
PVPACLast := edPVPAC.Text;
edPVDay.Text := FloatToStrF(GetValue('KDY=', Data)/10, ffGeneral, 7, 1);
PVYearLast := IntToStr(GetValue('KT0=', Data));
try
UpdateDomoticz(DOMOTICZ_URL+'type=command¶m=udevice&idx=10&nvalue=0&svalue='+edPVPAC.Text+';'+FloatToStrF(GetValue('KDY=', Data)*100, ffGeneral, 7, 1));
except
end;
if (edPVPACmax.text = '') or (edPVPACmax.text = '-') then
edPVPACmax.text := PVPACLast
else
if (edPVPACmax.text <> '') and (edPVPACmax.text <> '-') and (PVPACLast <> '') and (PVPACLast <> '-') then
if StrToFloat(edPVPACmax.text) < StrToFloat(PVPACLast) then
edPVPACmax.text := edPVPAC.Text;
edPVYear.Text := PVYearLast;
SolarSocket.Close;
end;
TMain.SolarSocketWrite is call periodically by a timer, TMain.SolarSocketRead is triggerd by the TClientSocket component if data arrives on that socket.