Urządzenie wirtualne pokazujące mój komputerek z mozliwościa PING
--[[
%% properties
%% globals
--]]
local virtualId = fibaro:getSelfId();
local iconIdON = 1016;
local iconIdOFF = 1015;
local _deviceIp = fibaro:getValue(virtualId, 'IPAddress');
local _devicePort = fibaro:getValue(virtualId, 'TCPPort')
local _maxRetryProcess = 5;
local currentICON;
if tostring(fibaro:getGlobalValue('glComputerState')) == "1" then
fibaro:call(virtualId, "setProperty", "currentIcon", iconIdON);
elseif tostring(fibaro:getGlobalValue('glComputerState')) == "0" then
fibaro:call(virtualId, "setProperty", "currentIcon", iconIdOFF);
end;
fibaro:log("Start process");
local function _ping(retry)
retry = retry or 0;
local tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort);
tcpSocket:setReadTimeout(250);
fibaro:log("Search on the local network, try #" .. retry .. " please wait...");
fibaro:sleep(250);
--send packet
local bytes, errorCode = tcpSocket:write("ping");
--check for error
if errorCode == 0 then
return true;
else
if retry < _maxRetryProcess then
fibaro:call(virtualId, "setProperty", "currentIcon", iconIdOFF);
fibaro:log("Retry process, please wait...");
fibaro:sleep(1000);
return _ping(retry + 1);
end
return false;
end
end
local f, result = pcall(_ping);
if (f) then
if (result == true) then
fibaro:log("Server has been found, is awake and listening.");
fibaro:call(virtualId, "setProperty", "currentIcon", iconIdON);
fibaro:setGlobal('glComputerState', "1")
else
fibaro:log("Server was not found!");
fibaro:call(virtualId, "setProperty", "currentIcon", iconIdOFF);
fibaro:setGlobal('glComputerState', "0")
end
else
fibaro:log("Error: " .. f);
fibaro:call(virtualId, "setProperty", "currentIcon", iconIdOFF);
end