[LUA] Présence sur BBox

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Sript Lua - Présence sur BBox

Message par Phebus06 »

YESSSSS j'ai trouvé tout seul comme un grand :D

Il faut remplacer la ligne :
local config=assert(io.popen('curl "http://'..BBoxIP..'/api/v1/hosts"'))
Par :
local config=assert(io.popen('curl "https://mabbox.bytel.fr/api/v1/hosts"'))
Et tout refonctionne

Ils font chier chez Bouygues quand même de changer l'accès à l'API comme ça...
Denis
Messages : 8
Inscription : 19 juin 2018, 11:32

Re: Sript Lua - Présence sur BBox

Message par Denis »

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.
nico.g2
Messages : 35
Inscription : 05 mai 2017, 23:30

Re: Script Lua - Présence sur BBox

Message par nico.g2 »

Bonjour Denis,

Je viens de mettre la script à jour dans le premier message.
Phebus06 a écrit : 22 nov. 2018, 18:39 YESSSSS j'ai trouvé tout seul comme un grand :D

Il faut remplacer la ligne :
local config=assert(io.popen('curl "http://'..BBoxIP..'/api/v1/hosts"'))
Par :
local config=assert(io.popen('curl "https://mabbox.bytel.fr/api/v1/hosts"'))
Et tout refonctionne

Ils font chier chez Bouygues quand même de changer l'accès à l'API comme ça...
Merci à @Phebus06 pour la solution
Denis
Messages : 8
Inscription : 19 juin 2018, 11:32

Re: Script Lua - Présence sur BBox

Message par Denis »

OK, merci ça fonctionne parfaitement.
Zoug
Messages : 25
Inscription : 16 oct. 2017, 10:10

Re: Script Lua - Présence sur BBox

Message par Zoug »

Bonsoir,
Merci pour ce script qui fonctionne à merveille.
Ne pas oublier cependant les utilisateur de NAS et ajouter cette ligne à leur attention :

json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For Syno

@+
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Code erreur

Message par Phebus06 »

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
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Code erreur

Message par Keros »

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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Code erreur

Message par Phebus06 »

Ok Super.

Je mets le script ce soir ;)
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Code erreur

Message par Phebus06 »

et voila le code en Lua :

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=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

Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Code erreur

Message par Keros »

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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre