Bon après multiple et diverse recherche, j'ai maintenant un truc fonctionnel dans un script LUA :
En suivant ce forum :
http://foscam.us/forum/a-how-to-sound-d ... t8084.html, on peut actionner la détection sonore même si elle n'a pas été développée sur la page web de la caméra Foscam (apparemment fonctionne sur toute les Foscam en video H264) :
Code : Tout sélectionner
http://192.168.1.XX:XX/cgi-bin/CGIProxy.fcgi?cmd=setAudioAlarmConfig&isEnable=1&sensitivity=4&linkage=14&triggerInterval=10&schedule0=281474976710655&schedule1=281474976710655&schedule2=281474976710655&schedule3=281474976710655&schedule4=281474976710655&schedule5=281474976710655&schedule6=281474976710655&usr=XXXXX&pwd=XXXXX
XX et XXXXX a changer suivant ip et pass.
pour la sensibilité audio : sensitivity=0 à 4 (5 niveaux),
0 : sensibilité sonore la plus élevée, l'alarme se déclenche avec un faible niveau sonore détecté
4 : sensibilité sonore la moins élevée, l'alarme se déclenche avec un plus haut niveau sonore détecté
Dans son script LUA (fait sur un synology, chemin du dossier "/volume1/@..." a adapter suivant sa config :
Code : Tout sélectionner
os.execute('curl "http://192.168.1.XX:XX/cgi-bin/CGIProxy.fcgi?cmd=getDevState&usr=XXXXX&pwd=XXXXX" > /volume1/@appstore/domoticz/foscam.txt')
le getDevState va envoyer la réponse de la cam dans le fichier foscam.txt.
avec la fonction readall a ajouter en début de script :
Code : Tout sélectionner
-- Function Read an entire file.
function readall(filename)
local fh = assert(io.open(filename, "r")) --"rb" pour binary
local contents = assert(fh:read("*a")) -- "a" in Lua 5.3; "*a" in Lua 5.1 and 5.2 ("print(_VERSION)" pour afficher la version, domoticz v4.9700 à LUA 5.2)
fh:close()
return contents
end
lit le fichier foscam.txt
Code : Tout sélectionner
local rech_d,rech_f,rech_alarm=string.find(rech,"<soundAlarm>(.)") -- recherche le chiffre entre (.)
recherche la ligne "<soundAlarm>" et stocke le chiffre suivant dans la variable rech_alarm.
rech_alarm = 1 : pas d'alarme, = 2 : alarme sonore, = 0 : détection alarme sonore désactivée
On pourrais aussi utiliser <motionDetectAlarm> pour la détection de mouvement, ou <humanDetectAlarmState> pour detection de personne (a tester ?)
Il suffit de faire un :
Dans son script pour déclencher ce que l'on souhaite dans le if.
Il faut cependant que ce script s’exécute toutes les 5 secondes.
Pour cela j'utilise cette commande qui englobe tout le script :
Code : Tout sélectionner
if (devicechanged['foscam']=='Off') -- excécute le script toutes les 5 secondes suivant le réglage du délais d'extinction du switch virtuel
then
commandArray['foscam']='On'
...
...
end
créer un switch virtuel 'foscam' et mettre son délais d'extinction à 5 secondes.
Et enregistrer le script en "device"
Tout fonctionne parfaitement, mais 2 choses m'embête et je ne vois pas comment faire autrement :
- le fichier "foscam.txt" va être enregistrer toutes les 5 secondes sur le disque (ou une carte mémoire SD), il ne fait que 1Ko, mais il aurait été préférable de le stocker directement dans une variable au lieux de ... > /volume1/@appstore/domoticz/foscam.txt') , mais si j’assaille une variable a la place ça ne fonctionne pas ... Même en testant plusieurs syntaxe différente.
- Le fait que le switch virtuel 'foscam' change d'état toute les 5 secondes va créer un log énorme, mais je n'ais pas trouver comment exécuter un script comme cela autrement ...
Si vous avez des idées sur ces 2 points, ce serais alors parfait

Domoticz Stable V4.9700 sur Synology DSM 6.2 / 2 x RFlink V48.4 - 433.92MHz(Dio/Chacon) & 433.42MHz(RTS) / Script en LUA & Blocky