Je vous présente mon script présence qui fonctionne très bien sur BBox. Si d'autre personne on fait la même chose pour d'autre box, pourquoi ne pas ajouter un switch en variable afin de sélectionner le model de box.
Code : Tout sélectionner
--[[
auteur: nico.g2
version: 1.0
date : 21/10/2017
Principe: récupérer via l'API de la BBox de Bouygue Telecom si les périphériques sont présent ou pas.
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
debugging=false
local BBoxIP = "192.168.1.254"
local ping={}
--{Adresse IP, Name of Dunmmy Switch}
ping[1]={'192.168.1.20', 'Smartphone 1'}
ping[2]={'192.168.1.21', 'Smartphone 2'}
--ping[3]={'192.168.1.3', 'Device 3'}
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s)
if (debugging) then
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
print('script_time_BBoxPresence.lua')
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
--json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
local config=assert(io.popen('curl "http://'..BBoxIP..'/api/v1/hosts"'))
local location = config:read('*all')
config:close()
location = location:sub(2, -3)
local jsonLocation = json:decode(location)
for ip = 1, #ping do
for i, resultat in pairs (jsonLocation.hosts.list) do
if (resultat.ipaddress == ping[ip][1]) then
if ((resultat.lastseen == 0) and (otherdevices[ping[ip][2]]=='Off')) then
commandArray[ping[ip][2]]='On'
voir_les_logs(ping[ip][2]..':Switch ON')
elseif ((resultat.lastseen ~= 0) and (otherdevices[ping[ip][2]]=='On')) then
commandArray[ping[ip][2]]='Off'
voir_les_logs(ping[ip][2]..':Switch OFF')
end
break
end
end
end
return commandArrayCode : Tout sélectionner
--~/domoticz/scripts/lua/script_time_BBoxPresence.lua
--[[
auteur: nico.g2
version: 1.1
date : 23/11/2018
Principe: récupérer via l'API de la BBox de Bouygue Telecom si les périphériques sont présent.
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
debugging=false
local ping={}
--{Adresse IP, Name of Dunmmy Switch}
ping[2]={'192.168.x.x', 'Smartphone 1'}
ping[1]={'192.168.x.x', 'Smartphone 2'}
--ping[3]={'192.168.x.x', 'Device 3'}
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s)
if (debugging) then
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
print('script_time_BBoxPresence.lua')
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
--json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
local config=assert(io.popen('curl "https://mabbox.bytel.fr/api/v1/hosts"'))
local location = config:read('*all')
config:close()
location = location:sub(2, -3)
local jsonLocation = json:decode(location)
for ip = 1, #ping do
voir_les_logs('Pour le smartphone: '..ping[ip][2])
for i, resultat in pairs (jsonLocation.hosts.list) do
if (resultat.ipaddress == ping[ip][1]) then
voir_les_logs('Adresse IP: '..resultat.ipaddress..' => OK')
if ((resultat.lastseen == 0) and (otherdevices[ping[ip][2]]=='Off')) then
commandArray[ping[ip][2]]='On'
voir_les_logs(ping[ip][2]..':Switch ON')
elseif ((resultat.lastseen ~= 0) and (otherdevices[ping[ip][2]]=='On')) then
commandArray[ping[ip][2]]='Off'
voir_les_logs(ping[ip][2]..':Switch OFF')
end
break
else
voir_les_logs('Adresse IP: '..resultat.ipaddress..' => NOK')
end
end
end
return commandArray