script présence non fiable
Re: script présence non fiable
Oui il me semble que la geoloc n'est dispo que dans la version payante.
Re: script présence non fiable
oui c'est exact la geoloc n'est dispo que dans l'appli payante ( bon c'est pas trop cher et ça aide un peu les developpeurs) sinon il y a geofence une appli gratuite qui fait le job mais ça rajoute une appli dans le tel.
Pi 2 / RFXtrx433E 251 / Stick Zwave Gen5 / Freebox Delta /Xiaomi gateway / Yeelight / Tablette android murale/ Google Home/RM3 mini / Domoticz V4....
Re: script présence non fiable
Pourrais tu m'en dire u peu plus? de quoi s'agit-il?papoo a écrit :j'ai trouvé mon bonheur via ma freebox. il y a certe un peu de latence mais c'est fiable. il me semble avoir vu un script similaire pour liveboxloops a écrit :.../...j'ai abandonné le gestion de présence par ping.
Merci!
Re: script présence non fiable
j'ai modifier un peu un code trouvé ici
Code : Tout sélectionner
--[[source : https://sites.google.com/site/au66bis/domoticz/scripts-lua/script_time_network_status ]]--
--Procédure pour obtenir APPTOKEN http://easydomoticz.com/forum/viewtopic.php?f=7&t=289&p=5042&hilit=freebox#p5042
--Créer une variable "freebox_mac_adress_smartphones" avec les MAC ADDRESS des Smartphones. Le séparateur est ";"
freebox_mac_adress_smartphones=uservariables["freebox_mac_adress_smartphones"]
--Créer une variable freebox_appid dans domoticz pour stocker le appid
freebox_appid = uservariables["freebox_appid"]
--Créer une variable freebox_apptoken dans domoticz pour stocker le apptoken
freebox_apptoken=uservariables["freebox_apptoken"]
apiFreeboxv4="http://mafreebox.freebox.fr/api/v4"
apiDomoticz="http://127.0.0.1:8080/json.htm?"
-- Session Token
session_token=""
--
local patternMacAdresses = string.format("([^%s]+)", ";")
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debugging) -- nécessite la variable local debugging
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 -- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
-- Fonction de lecture du contenu d'un fichier
-- @param : chemin vers le fichier
-- @return le contenu du fichier
function readAll(file)
local f = io.open(file, "rb")
if(f == nil) then
return ""
else
local content = f:read("*all")
f:close()
return content
end
end
-- Fonction de la connexion à la Freebox
-- Authentification pour récupérer le tokenDeSession
function connectToFreebox()
voir_les_logs("Connexion a la Freebox",debugging)
local TMPDIR_CHALLENGE = "/tmp/challenge.tmp"
local TMPDIR_APPTOKEN = "/tmp/apptoken.tmp"
local TMPDIR_SESSIONTOKEN = "/tmp/sessiontoken.tmp"
-- CHALLENGE : Appel de login pour charger le challenge
os.execute("curl -s " .. apiFreeboxv4 .. "/login > " .. TMPDIR_CHALLENGE)
local json_challenge = JSON:decode(readAll(TMPDIR_CHALLENGE))
local challenge = json_challenge.result.challenge
voir_les_logs(" Challenge : " .. challenge,debugging)
-- APP TOKEN : Calcul du mot de passe
voir_les_logs("Calcul HMAC SHA1",debugging)
voir_les_logs(" AppToken : " .. freebox_apptoken,debugging)
os.execute("echo -n " .. challenge .. " | openssl dgst -sha1 -hmac " .. freebox_apptoken .. " | cut -c10-200 > " .. TMPDIR_APPTOKEN)
local password = readAll(TMPDIR_APPTOKEN)
password=password:gsub("\n", "")
voir_les_logs(" Password : " .. password,debugging)
-- CONNEXION Session Connect
local table_app_session = {}
table_app_session["app_id"]=freebox_appid
table_app_session["password"]=password
local json_app_session = JSON:encode_pretty(table_app_session)
-- connexion à la session
os.execute("curl -s -H \"Content-Type: application/json\" -X POST -d '" .. json_app_session .. "' " .. apiFreeboxv4 .. "/login/session/ > " .. TMPDIR_SESSIONTOKEN)
local json_session_token = JSON:decode(readAll(TMPDIR_SESSIONTOKEN))
session_token=json_session_token.result.session_token
voir_les_logs(" Session Token : " .. session_token,debugging)
end
-- Fonction de la déconnexion à la Freebox
function disconnectToFreebox()
local TMPDIR_DISCONNECT = "/tmp/challenge.tmp"
os.execute("curl -m 5 -s -H \"X-Fbx-App-Auth: " .. session_token .. "\" -X POST " .. apiFreeboxv4 .. "/login/logout > " .. TMPDIR_DISCONNECT)
local disconnect = readAll(TMPDIR_DISCONNECT)
--voir_les_logs(" Deconnexion Freebox API : " .. disconnect)
end
-- Fonction de recherche des périphériques connectés
-- Connexion à lan/browser/pub/ pour lister les périphériques
-- @param session_token : token de session Freebox
-- @return périphériques connectés ?
function getPeripheriquesConnectes()
local TMP_PERIPHERIQUES = "/tmp/peripheriques.tmp"
-- Appel sur la liste des périphériques
voir_les_logs("Recherche des peripheriques connus de la Freebox",debugging)
local commandeurl="curl -s -H \"Content-Type: application/json\" -H \"X-Fbx-App-Auth: " .. session_token .. "\" -X GET " .. apiFreeboxv4 .. "/lan/browser/pub/"
os.execute(commandeurl .. " > " .. TMP_PERIPHERIQUES)
local json_peripheriques = JSON:decode(readAll(TMP_PERIPHERIQUES))
local etatSmartphone = false
-- Liste des périphériques
for index, peripherique in pairs(json_peripheriques.result) do
for mac in string.gmatch(freebox_mac_adress_smartphones, patternMacAdresses) do
local peripherique_mac_adress = "ether-" .. mac:lower()
if(peripherique_mac_adress == peripherique.id)
then
voir_les_logs("Statut du peripherique [" .. mac .. "] : actif:" .. tostring((peripherique.active and peripherique.reachable)),debugging)
if(peripherique.active and peripherique.reachable) then
etatSmartphone = true
commandArray [peripherique.primary_name]='On'
print ("[FREEBOX] Activation de : " .. peripherique.primary_name .. "")
else
commandArray [peripherique.primary_name]='Off'
print ("[FREEBOX] DesActivation de : " .. peripherique.primary_name .. "")
end
end
end
end
return etatSmartphone
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
time=os.date("*t")
if time.min ~= 0 then -- execution toutes les minutes sauf à xx:00
voir_les_logs("[FREEBOX] Statuts des peripheriques reseau Freebox",debugging)
-- Boucle principale
if( freebox_apptoken == nil or freebox_appid == nil or freebox_mac_adress_smartphones == nil ) then
error("[FREEBOX] Les variables {freebox_apptoken}, {freebox_appid}, {freebox_mac_adress_smartphones} ne sont pas définies dans Domoticz")
return 512
else
voir_les_logs("Test de presence des appareils d'adresses MAC (" .. freebox_mac_adress_smartphones .. ")",debugging)
voir_les_logs("Chargement de la librairie JSON",debugging)
JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- one-time load of the routines
-- Connexion à la Freebox
connectToFreebox()
-- Recherche des périphériques connectés
peripheriques_up = getPeripheriquesConnectes()
-- Recherche des périphériques connectés mais HORS ALARME
--getPeripheriquesConnectes2()
-- Mise à jour de l'alarme
-- On vérifie d'abord si l'alarme n'est pas en manuel :
--[[local Manuel = uservariables['AlarmManuel']
if (Manuel == '0') then
updateAlarmeStatus(peripheriques_up)
else
logAlarme("L'alarme est forcée, aucun changement depuis ce script")
end]]--
-- Déconnexion à la Freebox
disconnectToFreebox()
end
end --if time
return commandArrayRe: script présence non fiable
Merci bcp!
je vais chercher un équivalent pour Orange, à moins que tu ais une piste?
je vais chercher un équivalent pour Orange, à moins que tu ais une piste?
Re: script présence non fiable
Merci en test.
Ma freebox ne voyait déjà pas mon smartphone connecté !! Obligé de couper le wifi et réactiver, çà commence mal
PS : impossible de prendre mon freebox_apptoken par une variable, il contient un "+" et il 'ne veut pas ...
Ma freebox ne voyait déjà pas mon smartphone connecté !! Obligé de couper le wifi et réactiver, çà commence mal
PS : impossible de prendre mon freebox_apptoken par une variable, il contient un "+" et il 'ne veut pas ...
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Re: script présence non fiable
@jeff :
mets le en dur dans le script ou relance la procedure pour obtenir un autre app token
mets le en dur dans le script ou relance la procedure pour obtenir un autre app token
Re: script présence non fiable
C'est ce que j'avais faitpapoo a écrit :@jeff :
mets le en dur dans le script ou relance la procedure pour obtenir un autre app token
Par contre j'ai vu que ca buggait mes scripts du type "script_variable" quand je faisais des modifs, la seule solution que j'ai trouvé c'est supprimer le script et le remettre, plus erreur en faisant cela, très étrange !
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Re: script présence non fiable
Bonjour,
J'ai essayé d'intégrer ce script dans mon Domoticz.
Etant sous Windows 7, j'ai fais quelques adaptations pour le rendre compatible ...
Maintenant, j'arrive à obtenir le challenge mais le password ressort désespérément vide ... Il m'indique l'APP_TOKEN mais pas de création du fichier TEMP (Idem pour le SESSION_TOKEN) et j'obtiens le LOG Erreur suivant :
Error: EventSystem: in C:\Program Files\Domoticz\scripts\lua\script_time_NETWORK_STATUS.lua: ...iles\Domoticz\scripts\lua\script_time_NETWORK_STATUS.lua:77: attempt to index local 'json_session_token' (a nil value)
Je pense que le problème démarre aux lignes suivantes :
La dernière ligne correspond à la ligne 77
Certaines lignes du script sont elles incompatibles avec WINDOWS ? Auriez vous une piste à me proposer ?
Merci d'avance pour vos réponses
J'ai essayé d'intégrer ce script dans mon Domoticz.
Etant sous Windows 7, j'ai fais quelques adaptations pour le rendre compatible ...
Maintenant, j'arrive à obtenir le challenge mais le password ressort désespérément vide ... Il m'indique l'APP_TOKEN mais pas de création du fichier TEMP (Idem pour le SESSION_TOKEN) et j'obtiens le LOG Erreur suivant :
Error: EventSystem: in C:\Program Files\Domoticz\scripts\lua\script_time_NETWORK_STATUS.lua: ...iles\Domoticz\scripts\lua\script_time_NETWORK_STATUS.lua:77: attempt to index local 'json_session_token' (a nil value)
Je pense que le problème démarre aux lignes suivantes :
Code : Tout sélectionner
os.execute("echo -n " .. challenge .. " | openssl dgst -sha1 -hmac " .. freebox_apptoken .. " | cut -c10-200 > " .. TMPDIR_APPTOKEN)
local password = readAll(TMPDIR_APPTOKEN)
password=password:gsub("\n", "")
voir_les_logs(" Password : " .. password,debugging)
-- CONNEXION Session Connect
local table_app_session = {}
table_app_session["app_id"]=freebox_appid
table_app_session["password"]=password
local json_app_session = JSON:encode_pretty(table_app_session)
-- connexion à la session
os.execute("curl -s -H \"Content-Type: application/json\" -X POST -d '" .. json_app_session .. "' " .. apiFreeboxv4 .. "/login/session/ > " .. TMPDIR_SESSIONTOKEN)
local json_session_token = JSON:decode(readAll(TMPDIR_SESSIONTOKEN))
Certaines lignes du script sont elles incompatibles avec WINDOWS ? Auriez vous une piste à me proposer ?
Merci d'avance pour vos réponses