Page 1 sur 1

Script qui redémarre une camera IP

Publié : 19 mars 2016, 10:05
par Pyrrhus
Bonjour,
j'ai acquis récemment une camera ip trendnet tvip662 qui a tendance a planter: normalement, quand je tape l'adresse de la camera dans un navigateur, j'ai la video, les controle pour la tourner,...etc. Mais de temps en temps, j'ai droit à une belle page web toute simple avec écris en gros "Internal Server error" dont voici le code:

Code : Tout sélectionner

<head><link href="resource://jid1-mnnxcxisbpnsxq-at-jetpack/data/skin/socialwidgets.css" type="text/css" rel="stylesheet"></head>
<body>
<h1>Internal Server Error</h1>
We are sorried.
</body>
J'utilise domoticz sur mon RPi2 et il me reste une fibaro wall plug.
L'idée est de faire un script sh qui serait lancé toutes les 10 minutes avec cron. Si c'est la page d'erreur qui est détectée, la wall plug s'etteindrait et se rallumerait pour réinitialiser la caméra. Pour cette partie là du script, pas de probléme, j'utilise souvent

Code : Tout sélectionner

curl - s http://ip_rasp:port/json.htm?type=command&param=switchlight&idx=XX&switchcmd=On ou Off
Par contre je suis complétement perdu pour la première partie... Je sais qu'il y a un mélange de "curl" et de "grep" pour détecter le "Internal Server Error we are sorried"
Mais je ne sais pas du tout comment faire, quels paramètres utilisés...
L'idée est simple: si c'est la page d'erreur qui est détectée, la caméra redémarre via la wall plug. Si ce n'est pas la page d'erreur, on ne fait rien.
La page web de la camera est juste http://ip_cam
Pouvez vous m'aider ?

Re: Script qui redémarre une camera IP

Publié : 19 mars 2016, 11:58
par Chrominator
Perso je préfère bash.

Le script suivant devrait fonctionner (pas testé), tout exec renvoie un code retour pour identifier comment l'opération s'est terminée.
C'est ce qu'on teste ici.

Code : Tout sélectionner

#!/bin/bash
ip_rasp="192.168.x.x"
port="y"
wget --output-document="/var/tmp/camera_status" http://ip_cam
status=`cat /var/tmp/camera_status |grep 'Internal Server Error'`
if [ $? == 0 ]; then
  # En panne
  curl - s http://$ip_rasp:$port/json.htm?type=command&param=switchlight&idx=XX&switchcmd=Off
  sleep 5
  curl - s http://$ip_rasp:$port/json.htm?type=command&param=switchlight&idx=XX&switchcmd=On
fi
Je te laisse initialiser ip_rasp et port selon ta config.

Re: Script qui redémarre une camera IP

Publié : 19 mars 2016, 12:35
par Pyrrhus
Bonjour chrominator !
Merci de m'aider.
J'ai essayé ton script, ma camera étant justement plantée (là ça tombe bien !)
Le probleme c'est que le fichier camera_status généré est vide.
Par contre quand je fais dans le terminal :

Code : Tout sélectionner

wget --output-document="/var/tmp/camera_status" http://ip_cam
il me génère toujours un fichier camera_status vide mais on voit clairement dans le terminal :

Code : Tout sélectionner

--2016-03-19 14:25:40--  http://192.168.xx.xx/
Connexion vers 192.168.xx.xx:80...connecté.
requête HTTP transmise, en attente de la réponse...500 Internal Server Error
2016-03-19 14:25:40 ERREUR 500: Internal Server Error.
Comment récupérer ce "Internal Server Error" pour éteindre et rallumer la wall plug ?
Merci beaucoup

Re: Script qui redémarre une camera IP

Publié : 19 mars 2016, 12:52
par Chrominator
Bizarre.

Alors à ce moment là, redirige la sortie standard dans un fichier, du genre :

Code : Tout sélectionner

wget http://ip_cam > /var/tmp/camera_status
Le fichier /var/tmp/camera_status devrait contenir ce que tu lis à l'écran.

Ca marche ? :shock:

Re: Script qui redémarre une camera IP

Publié : 19 mars 2016, 16:42
par Pyrrhus
J'ai réussi !

Code : Tout sélectionner

#!/bin/bash

wget http://192.168.xx.xx/ &>/var/tmp/camstatus
if grep 'Internal Server Error' /var/tmp/camstatus ; then
 
  curl -s "http://ip_du rasp:port/json.htm?type=command&param=switchlight&idx=XX&switchcmd=Off"
  sleep 5
  curl -s "http://ip_du rasp:port/json.htm?type=command&param=switchlight&idx=XX&switchcmd=On"
else
echo "Camera is running"
fi
Je te remercie beaucoup de m'avoir mis sur la voie avec le wget ! J'ai du mettre un "&" sinon le script bloque...

Probleme résolu !