Page 1 sur 2

[Tuto] Gérer la configuration d'une Foscam sous Domoticz

Publié : 26 oct. 2016, 14:15
par T0ny Oh
Bonjour,

Je partage avec vous la méthode que j'utilise pour modifier la configuration d'une Foscam C1 à la volée depuis l'interface de Domoticz.

Vous trouverez les documents relatifs aux caméras de la marque Fosam, permettant d'utiliser de simple requêtes HTTP. J'utilise un modèle C1 mais d'autres sont pris en charge.
cf. cette documentation trouvée sur Github :
Dans mon cas j'ai choisi de créer un sélecteur me permettant de contrôler plusieurs états de la détection de mouvement.

Un mode désactivé :
  • Pas de détection de mouvement
Un mode silencieux :
  • Détection de mouvement
  • Upload des clichés sur un FTP
Un mode sentinelle :
  • Détection de mouvement
  • Upload des clichés sur un FTP
  • Joue un son d'alerte
Note
Sachez que vous pouvez très bien commander d'autres options de votre caméra (réglages divers, prise d'image, etc.). Pour savoir comment faire référez-vous aux documents github postés plus haut - bon courage.
Je considère que vous avez déjà une Foscam C1 (fonctionne aussi pour les autres modèles) bien configuré avec une IP fixe de préférence (via réservation DHCP par exemple). Si nécessaire un serveur mails et/ou FTP de configuré.

Ouvrez un onglet dans votre navigateur et copiez/collez et adaptez le lien suivant en remplaçant les valeurs IP_DE_LA_CAMERA, NOM_UTILISATEUR, VOTREPASS :
http://IP_DE_LA_CAMERA:88/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=NOM_UTILISATEUR&pwd=VOTREPASS
la variable cmd affecté avec getMotionDetectConfig permet d'envoyer une requête de consultation de la configuration actuelle(gardez ce lien de coté on s'en sert jusqu'à la fin).

Vous aurez une réponse du genre :

Code : Tout sélectionner

<CGI_Result>
    <result>0</result>
    <isEnable>0</isEnable>
    <linkage>0</linkage>
    <snapInterval>0</snapInterval>
    <sensitivity>0</sensitivity>
    <triggerInterval>0</triggerInterval>
    <isMovAlarmEnable>1</isMovAlarmEnable>
    <isPirAlarmEnable>1</isPirAlarmEnable>
    <schedule0>0</schedule0>
    <schedule1>0</schedule1>
    <schedule2>0</schedule2>
    <schedule3>0</schedule3>
    <schedule4>0</schedule4>
    <schedule5>0</schedule5>
    <schedule6>0</schedule6>
    <area0>0</area0>
    <area1>0</area1>
    <area2>0</area2>
    <area3>0</area3>
    <area4>0</area4>
    <area5>0</area5>
    <area6>0</area6>
    <area7>0</area7>
    <area8>0</area8>
    <area9>0</area9>
</CGI_Result>
Dans le cas présent tout est à zéro puisque la détection est désactivée.

Créer un lien de configuration

Nous allons maintenant réaliser un lien HTTP de configuration. On va passer par l'interface web de la caméra pour paramétrer la détection de mouvement comme on le souhaite. Ensuite, on utilisera le lien de consultation pour récupérer les paramètres sous forme de texte que nous convertirons sous forme de lien, qui nous servira à paramétrer la caméra via une simple URL.

A partir de maintenant on se rend dans la configuration de la détection de mouvement.
Note :
Il est impératif de configurer rigoureusement chaque élément. Car nous allons ensuite convertir cette configuration en lien http.
Voici les paramètres qui correspondent mon mode "silencieux".

Image

Il faut prendre soin de bien paramétrer la zone de détection (très important).

Le planning d'activation doit être également configuré (très important).

Image

On enregistre et on va à nouveau appeler le lien de consultation précédent, à savoir :
http://IP_DE_LA_CAMERA:88/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=NOM_UTILISATEUR&pwd=VOTREPASS
Dans mon cas cela me donne le résultat suivant :

Code : Tout sélectionner

<CGI_Result>
    <result>0</result>
    <isEnable>1</isEnable>
    <linkage>4</linkage>
    <snapInterval>5</snapInterval>
    <sensitivity>0</sensitivity>
    <triggerInterval>10</triggerInterval>
    <isMovAlarmEnable>1</isMovAlarmEnable>
    <isPirAlarmEnable>1</isPirAlarmEnable>
    <schedule0>281474976710655</schedule0>
    <schedule1>281474976710655</schedule1>
    <schedule2>281474976710655</schedule2>
    <schedule3>281474976710655</schedule3>
    <schedule4>281474976710655</schedule4>
    <schedule5>281474976710655</schedule5>
    <schedule6>281474976710655</schedule6>
    <area0>252</area0>
    <area1>252</area1>
    <area2>252</area2>
    <area3>192</area3>
    <area4>192</area4>
    <area5>992</area5>
    <area6>992</area6>
    <area7>992</area7>
    <area8>1008</area8>
    <area9>1008</area9>
</CGI_Result>
Il faut maintenant convertir ce texte afin d'en faire une URL. Pour cela on supprime tous ce qui est inutile et on modifie les balises. Chez moi ça donne ça (ne pas inclure la balise result) :

Code : Tout sélectionner

    &isEnable=1
    &linkage=4
    &snapInterval=5
    &sensitivity=0
    &triggerInterval=10
    &isMovAlarmEnable=1
    &isPirAlarmEnable=1
    &schedule0=281474976710655
    &schedule1=281474976710655
    &schedule2=281474976710655
    &schedule3=281474976710655
    &schedule4=281474976710655
    &schedule5=281474976710655
    &schedule6=281474976710655
    &area0=252
    &area1=252
    &area2=252
    &area3=192
    &area4=192
    &area5=992
    &area6=992
    &area7=992
    &area8=1008
    &area9=1008
Ensuite on met tout sur une seule ligne en y ajoutant le lien permettant d’effectuer la configuration (en prenant soin de modifier les valeurs les valeurs IP_DE_LA_CAMERA, NOM_UTILISATEUR et VOTREPASS), cela donne ça :
http://IP_DE_LA_CAMERA:88/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&usr=NOM_UTILISATEUR&pwd=VOTREPASS&isEnable=1&linkage=4&snapInterval=5&sensitivity=0&triggerInterval=10&isMovAlarmEnable=1&isPirAlarmEnable=1&schedule0=281474976710655&schedule1=281474976710655&schedule2=281474976710655&schedule3=281474976710655&schedule4=281474976710655&schedule5=281474976710655&schedule6=281474976710655&area0=252&area1=252&area2=252&area3=192&area4=192&area5=992&area6=992&area7=992&area8=1008&area9=1008
Là vous vous demandez surement pourquoi envoyer toute la configuration et pas uniquement certaines variables. Tous simplement parce que quand je désactive la détection, mes paramètres reviennent tous à zéro. D'où l’intérêt de ce long et imbuvable lien.

Passons aux tests, pour cela on envoie une requête qui désactive la détection de mouvement, comme ceci :
http://IP_DE_LA_CAMERA:88/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&usr=NOM_UTILISATEUR&pwd=VOTREPASS&isEnable=0
Utilisez le lien de consultation ou rendez-vous dans l'interface et constatez la désactivation.

Envoyez maintenant le long lien généré précédemment et idem, vérifier la prise en compte.

A partir de la vous avez un aperçu de la manière dont fonctionne les caméras via des liens http Foscam. La documentation donnée précédemment est vraiment ultra complète et offre un tas de possibilités. Je n'ai pas lu toute la documentation, mais je pense qu'il est possible de tout configurer, comme les paramètres d'envoie de mails ou d'envoie de fichiers via FTP par exemple.

Intégration dans domoticz

Maintenant que nous avons nos URL bien paramétrées, on va les intégrer dans Domoticz.

Pour cela, on commence par créer un capteur virtuel de type "interrupteur selecteur".

Image

Nommez-le à votre convenance.

Image

Vous le retrouverez dans la catégorie interrupteurs.

Image

On va maintenant éditer sa configuration pour lui donner trois état différents (vous pouvez en faire bien plus - il suffira d'adapter le script).

Image

On peu éventuellement utiliser une icone plus sexy.

Image

Image

Vous pouvez la télécharger ici :
foscam_icon.zip
(7.94 Kio) Téléchargé 602 fois
Il est normalement possible de paramétrer ici les liens que nous avons créé, cependant chez moi ça ne passe pas. Je soupçonne une taille limite. Personnellement ça ne me dérange en rien car en général je préfère gérer via des scripts.

Donc on applique et on créé un nouveau script lua via le menu Événements. Donnez-lui un nom et collez-ci, que vous adapterez en fonction de votre configuration :

Code : Tout sélectionner

commandArray = {}

FoscamIP = "IP_FOSCAM:88"
FoscamUser = "UTILISATEUR"
FoscamPass = "MOT DE PASSE"
Device = "NOM DU DEVICE"

-- niveaux du switch
State00 = "Off"
State10 = "Silencieux"
State20 = "Sentinelle"

-- commandes foscam
Cmd00 = "&isEnable=0 etc ...."
Cmd10 = "&isEnable=0 etc ...."
Cmd20 = "&isEnable=1 etc ...."

-- A modifier uniquement si nécessaire
curlcmd = "curl 'http://" .. FoscamIP .. "/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&usr=" .. FoscamUser .. "&pwd=" .. FoscamPass

if (devicechanged[Device] == State00) then
    os.execute( curlcmd .. Cmd00 .. "' 2>/dev/null")
    print(Device .. " - " .. State00)
elseif (devicechanged[Device] == State10) then 
    os.execute( curlcmd .. Cmd10 .. "' 2>/dev/null")
    print(Device .. " - " .. State10)
elseif (devicechanged[Device] == State20) then 
    os.execute( curlcmd .. Cmd20 .. "' 2>/dev/null")
    print(Device .. " - " .. State20)
end

return commandArray
On enregistre le script. Retournez dans la vue des interrupteurs et jouez avec le switch. Dans un autre onglet ouvrez les logs et vérifiez le bon fonctionnement :

Image

Conclusion

De base la Foscam C1 est un rapport/qualité prix avec globalement de bon avis. Même si l'interface est laide à souhait et plutôt pauvre en configuration (les 80% des paramètres proposé dans l'interface ne serons jamais utilisés par le commun des mortels), il n'en reste pas moi qu'on peut tout de même interagir via les requetes HTTP et c'est presque parfait. Oui, presque, car j'aurai souhaité que cela ce fasse avec plus de sécurité, car les mots de passes en clair dans le lien me dérange un peu. Mais dans mon cas comme ça reste en local ça va encore.

Je n'ai que la C1, mais normalement ces commandes sont valables avec d'autres modèles de la marque.

Maintenant, je me répète, mais en mettant le nez dans la doc on trouve plusieurs commandes intéressantes comme celle-ci :
  • Active l'infrarouge :
    • http://IP_DE_LA_CAMERA:88/cgi-bin/CGIProxy.fcgi?cmd=openInfraLed&usr=NOM_UTILISATEUR&pwd=VOTREPASS
  • Désactive l'infrarouge :
    • http://IP_DE_LA_CAMERA:88/cgi-bin/CGIProxy.fcgi?cmd=closeInfraLed&usr=NOM_UTILISATEUR&pwd=VOTREPASS
Faites-moi signe si vous souhaitez des points à éclaircir ou des suggestions, j'ai peut être omis quelques détails.

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 26 oct. 2016, 16:57
par deennoo
Super tuto !

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 26 oct. 2016, 17:35
par vrolland
beau boulot merci

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 26 oct. 2016, 19:03
par Hamtaro06
Cool merci pour ce tuto, ca tombe bien j'ai aussi un C1 :)

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 26 oct. 2016, 19:48
par itcitc77
super tuto merci

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 28 oct. 2016, 08:30
par T0ny Oh
Content que ça plaise :geek: .

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 07 nov. 2016, 15:45
par n1c0l45
Genial! Merci pour ce tuto!
J'ai une C1 que je n'avais pas encore eu le temps d'intégrer a domoticz... Merci!

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 08 févr. 2017, 21:03
par FREDOMIERS
Bonsoir est merci pour ce tuto, j'ai réussi a mettre en place ma foscam avec un switch qui me permer de couper la detection de mouvement
et de l'enclencher pour que la camera surveille, mais j'aimerais pouvoir recevoir un sms par http quand un mouvement est détecter.
pouvez vous m'aider

merci

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 16 févr. 2017, 06:12
par sebnatl
Bonjour j ai repris des morceaux du script pour rajouter des boutons de rotation mais j ai un probleme :

Code : Tout sélectionner

commandArray = {}

CamIP = "http://192.168.1.xx:9090"
CamIPUser = "xxxxxx"
CamIPPass = "xxxxxx"
Device = "CamIP"

curlcmd = "curl 'http://" .. CamIP .. "/decoder_control.cgi?command=4&usr=" .. CamIPUser .. "&pwd=" .. CamIPPass

curlcmd2 = "curl 'http://" .. CamIP .. "/decoder_control.cgi?command=1&usr=" .. CamIPUser .. "&pwd=" .. CamIPPass

if (devicechanged[Device] == On) then
    os.execute( curlcmd "' /dev/null")
    print(Device .. " - " .. Rotation )
else (devicechanged[Device] == Off) then
    os.execute( curlcmd2 "' /dev/null" )
    print(Device .. " - " .. Stop )
end
end

return commandArray
il me fait une erreur ligne 17

Code : Tout sélectionner

2017-02-16 06:02:43.822 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_device_CamipIP.lua: /home/pi/domoticz/scripts/lua/script_device_CamipIP.lua:17: syntax error near 'then'
une idee!!
merci

Re: Gérer la configuration d'une Foscam sous Domoticz

Publié : 03 mars 2018, 15:06
par Unlix
Bonjour,

Merci pour ce tuto qui est très intéressant mais j'ai une erreur avec le script :

Code : Tout sélectionner

Error: EventSystem: in FoscamScript: [string "commandArray = {}..."]:21: attempt to index global 'devicechanged' (a nil value)
Pourtant il y a bien les actions de faite sur ma Foscam.

Pouvez-vous me dire quel est le problème ?

Merci par avance