samedi 12 octobre 2019

Domotique: Démarrer la caméra d'un PC à distance


Attention: Ce n'est pas pour vous apprendre à hacker la webcam de quelqu'un, je préfère le préciser ;-)

En fait mon besoin est de démarrer une caméra d'un PC à distance mais je ne veux pas lancer la caméra de ce PC de manière continu (juste qu'en je veux consulter en fait). Je veux le faire à partir du Raspbian qui héberge mon Jeedom et l'utiliser avec le plug-in caméra ;-)

Côté PC, j'ai installé YAWCAM, une application simple qui peut marcher en service. Sauf que j'ai mis le service en manuel sur mon PC pour empêcher qu'il se lance tout seul ;-) :


Coté Raspberry Pi, il va falloir installer des choses aussi :

$ sudo apt-get install samba-common-bin

Et voici la commande pour lister les services, il faudra l'IP et login/password admin du PC :

$ net rpc service list -I 192.168.0.1 -U lesv2
Enter lesv2's password:
Failed to open Service Control Manager. [WERR_ACCESS_DENIED]

Mais en fait, on a cette erreur et c'est normal par défaut, parce que le PC par défaut ne va pas autoriser de commander des services à distance !

Il faut autoriser dans la base de registre avec une commande à partir de la console Windows en mode "administrateur":



Microsoft Windows [version 10.0.18362.418]
(c) 2019 Microsoft Corporation. Tous droits réservés.

C:\WINDOWS\system32>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
L’opération a réussi.

C:\WINDOWS\system32>

et on peut vérifier aussi avec la commande "regedit" :



Ensuite on refait la même commande et on peut voir la liste des services maintenant (j'ai pas tout mis ;-):


$ net rpc service list -I 192.168.0.4 -U lesv2
Enter lesv2's password:
AppIDSvc                "Identité de l’application"
Appinfo                 "Informations d’application"
Apple Mobile Device Service    "Apple Mobile Device Service"
...

Maintenant on va essayer d'arrêter ou démarrer le service de YAWCAM:

Pour arrêter :
$ net rpc service stop Yawcam -I 192.168.0.4 -U lesv2
Enter lesv2's password:
..............................
Yawcam service is stop pending.

Pour démarrer :
$ net rpc service start Yawcam -I 192.168.0.4 -U lesv2
Enter lesv2's password:
..............................
Failed to start service: Yawcam [WERR_OK]

Et oui, il y a une erreur dans mon cas mais le service a bien démarré, je soupçonne que c'est juste qu'il a était trop long pour ce lancer ?!

Et peut aussi connaitre le status du service :


$ net rpc service status Yawcam -I 192.168.0.4 -U lesv2
Enter lesv2's password:
Yawcam service is stopped.
Configuration details:
        Controls Accepted    = 0x0
        Service Type         = 0x10
        Start Type           = 0x2
        Error Control        = 0x1
        Tag ID               = 0x0
        Executable Path      = C:\Program Files (x86)\Yawcam\Yawcam_Service.exe
        Load Order Group     = someorder
        Dependencies         = /
        Start Name           = LocalSystem
        Display Name         = Yawcam

Et maintenant dans Jeedom :
Le challenge: il falloir rentrer le mot de passe de manière automatique ;-)

En fait, c'etait simple mais j'ai galéré à trouver, dans les docs, on parle de faire -U username%password mais ce n'était pas suffisant dans mon cas :-(
J'ai cherché longtemps, 2 à 3 heures peut être :-(
et en fait.... J'avais des caractères spéciaux dans mon mot de passe donc il faut mettre des guillemets et faire ainsi finalement dans la commande si on veut la mettre dans un script : -U username%"password"

Exemple de commande avec le mot de passe :
net rpc service start Yawcam -I 192.168.0.4 -U lesv2%"password;1234"

Donc voici ce que j'ai fait dans jeedom, un script avec start, stop et status pour avoir ce widget :


Et voici ce que j'ai mis dans les scripts, j'ai fait cela en un seul commande shell donc je n'ai même pas fait de script bash pour cela.

Même pour le "status" où j'ai utilisé dans la commande ci-après le  "if" et "grep" pour avoir un résultat binaire ;-) :


if echo $(net rpc service status Yawcam -I 192.168.0.4 -U lesv2%"password") | grep -q "running"; then echo "1";  else echo "0"; fi

Et voici dans Jeedom (j'ai mis le user "lesv2" & le password "test;1234" juste pour exemple)


Et pour la camera, cela fonctionne comment ?!

J'ai donc une camera configurée ainsi :




Et en fait, le service sera démarré que lors du visionnage de celle-ci dans le dashboard et donc j'ai renseigner les commandes ON/OFF ainsi dans l'onglet approprié :

Et voilà, maintenant j'ai une caméra  d'un "PC" que je peux dont je peux piloter l'allumage à distance à partir de ma domotique quand je le souhaite ;-) et avoir le résultat suivant :

on a un nouveau bouton à gauche pour allumer ou éteindre 




Enjoy !



Aucun commentaire :

Enregistrer un commentaire