Bonjour,
je cherche depuis longtemps comment obtenir cette info de présence via le wifi et ce script m'intéresse particulièrement. Peux tu publier ta dernière version fonctionnelle car je n'arrive pas à faire fonctionner ma version réalisée avec les différents posts et mes connaissance lua/json sont trop limites pour trouver le bug.
Merci.
Edit Keros : Début d'un autre sujet importée dans celui ci
Bonjour à tous,
Je viens de faire une très grosse migration de mon pi 3b avec Raspbian et Domoticz de 2017 ou tout fonctionné à merveille, vers un pi 3b+ et les dernières mises à jour dont Domoticz en stable. Mon problème est que mon script qui détecte les smartphones de la famille par un ping sur la bbox rencontre une erreur ci dessous....
Quelqu'un peut il m'aiguiller sachant que je ne fait que bidouiller ? Que veut dire cette erreur ?
Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_device_BboxPresence_v2.lua: ...i/domoticz/scripts/lua/script_device_BboxPresence_v2.lua:57: attempt to index a nil value (local 'jsonLocation')
Dernière modification par Keros le 26 août 2021, 12:47, modifié 1 fois.
Raison :Ajout info Edit
L'erreur indique que le script essaye de récupérer la valeur d'une variable mais celle-ci est nulle ou n'existe pas. Il semblerait que la variable en question soit : jsonLocation (voir à la ligne 57).
Ce serait plus facile de t'aider si tu pouvais nous mettre ton script complet.
--[[
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=true --false
local BBoxIP = "192.168.1.254"
local ping={}
--{Adresse IP, Name of Dunmmy Switch}
ping[1]={'192.168.1.75', 'Présence Smartphone Fabrice'}
ping[2]={'192.168.1.46', 'Présence Smartphone Isabelle'}
--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 = {}
if devicechanged['Temporisation x secondes'] then
print('script_time_BBoxPresence V2.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 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
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 > 300) 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
for ip = 2, #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 > 1500) 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
end
return commandArray
Il fallait bien le code, sinon on n'aurait pas pu t'aider plus.
Qu'est-ce que tu as lorsque tu rentres https://mabbox.bytel.fr/api/v1/hosts dans l'adresse d'un navigateur ? C'est là que ton script va chercher les infos Json pour en extraire les présences.
As-tu regarder le plugin System Alive Checker (Ping) ? Il est natif dans DomoticZ et, pour chaque IP renseignée, il y a un switch indiquant si l'IP répond au ping (équipement présent) ou pas (équipement absent). Cela me semble plus facile que d'aller interroger ta box via une API.