[Bash] Script alarme Somfy Protexiom 5000

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

Bon j'ai encore essayé autre chose j'ai renommé le fichier alarme.sh par somfyv1.sh
et j'ai testé des commandes déjà réalisée dans le poste et j'ai des erreurs qui apparaissent mais je ne sais pas a quoi ça correspond

wil@Synology:/usr/local/domoticz/var/scripts$ ./somfyv1.sh --Status
./somfyv1.sh: line 148: iconv: command not found
(23) Failed writing body
./somfyv1.sh: line 285: iconv: command not found
(23) Failed writing body

Wil@Synology:/usr/local/domoticz/var/scripts$ ./somfyv1.sh --ZoneABCOn
./somfyv1.sh: line 137: CarteAuthentification: bad array subscript
./somfyv1.sh: line 148: iconv: command not found
(23) Failed writing body


une idée de la correspondance de cette erreur ?
Dernière modification par willyboy09 le 26 févr. 2017, 23:43, modifié 1 fois.
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

a priori cela doit provenir du fait que la commande iconv n'existe pas sur le syno.

J'ai essayé d''intégrer la librairie mais j'ai une erreur : Segmentation fault (core dumped)

une idée pour pouvoir utiliser le script sur syno ?
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

j'ai finalement réussi grâce à une personne du forum dédié au synology !

Il m'a dit d'essayer la commande uconv qui existe dans le syno contrairement à iconv qui n'existe pas

J'ai quand même eu ensuite un problème d'encodage mais sur Notepad++ en faisant édition -> convertir les sauts de ligne -> Convertir en Format Unix (LF) ça a corrigé le problème.

Voila un problème de réglé et en voici un nouveau qui apparaît :-(

depuis domoticz, j'ai un problème avec le bouton push on d'une zone, ce dernier une fois activé tourne en rond et il réactive la fonction "On" s'en cesse. :

depuis domoticz j'ai ça dans le log:
2017-02-26 22:47:51.124 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-26 22:47:51.146 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-26 22:47:57.621 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-26 22:47:57.868 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-26 22:48:18.320 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-26 22:48:18.344 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-26 22:49:28.468 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-26 22:49:28.717 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-26 22:49:34.142 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-26 22:49:34.199 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
(j'en met qu'une partie mais ça continue ...)

et depuis l'alarme :

26/02/17 22h47 Mise ON (Zone C)
26/02/17 22h47 Mise ON (Zone C)
26/02/17 22h46 Mise ON (Zone C)
26/02/17 22h46 Mise ON (Zone C)
26/02/17 22h46 Mise ON (Zone C)
26/02/17 22h46 Mise ON (Zone C)
26/02/17 22h46 Mise ON (Zone C)

pour arrêter le massacre j'en l’enlevé une lettre du liens du script et ça recommence 2 fois et ça s’arrête :
2017-02-26 22:54:19.453 Error: SQLHelper: Error script not found '/usr/local/domoticz/scripts/shell/somfy.s'
2017-02-26 22:54:25.187 Error: SQLHelper: Error script not found '/usr/local/domoticz/scripts/shell/somfy.s'

C'est idem pour tous les boutons de mise en marche, je pense que j'ai du rater quelque chose dans la configuration du bouton ! avez-vous une idée ?
merci

William
Dernière modification par willyboy09 le 02 mars 2017, 11:55, modifié 1 fois.
jcjames_13009
Messages : 105
Inscription : 23 févr. 2015, 15:27
Localisation : Marseille
Contact :

Re: Script alarme Somfy Protexiom 5000

Message par jcjames_13009 »

Salut

Bonne nouvelle pour la solution de ton pb

Pour le push-on button j'ai cette config
Capture 12.JPG
Capture 12.JPG (31.26 Kio) Consulté 12101 fois
J'espère que ça peut aider

@+
JC
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

Bonsoir Jc,

Merci pour ton message, effectivement j'ai mis les infos dans action : ON
quel est la différence ?
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

Je viens de modifier avec tes parametres mais ça na rien changé :

2017-02-27 23:35:13.010 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-27 23:35:13.011 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:14.132 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:14.355 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-27 23:35:28.002 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-27 23:35:28.003 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:29.206 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:29.446 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-27 23:35:43.002 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-27 23:35:43.003 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:44.125 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:44.349 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh
2017-02-27 23:35:57.978 User: Admin initiated a switch command (96/Alarme Marche Zone C/On)
2017-02-27 23:35:57.978 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:59.101 (Periph virtuel) Light/Switch (Alarme Marche Zone C)
2017-02-27 23:35:59.324 Executing script: /usr/local/domoticz/scripts/shell/somfy.sh

Pour info je retrouve aussi la mise en marche dans la log du bouton comme si j'avais moi meme appuyer

Qu'est-ce que j'ai pu rater ?
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

Je n'ai pas réussi à résoudre mon problème mais j'ai trouvé une solution alternative qui me convient bien, j'ai protégé le bouton avec un mot de passe, cela règle le problème et la commande n'est envoyée qu'une seule fois.
l'inconvénient c'est que j'ai maintenant un MDP pour activer l'alarme mais finalement ça protège un peu mieux le système...

Je viens de repérer un problème déjà abordé ici, j'ai régulièrement des remontés erronées, ce qui ne m'arrange pas car, je voulais me servir de ces informations pour coupler à d'autres actions (fermeture ouverture des volets / mise en route des caméras / ...)

Avez-vous toujours ce problème ? comment faire pour rendre fiable cette information ?

Merci
jcjames_13009
Messages : 105
Inscription : 23 févr. 2015, 15:27
Localisation : Marseille
Contact :

Re: Script alarme Somfy Protexiom 5000

Message par jcjames_13009 »

Bonjour

le pb de remonté d'état erroné, j'avais rajouté des pauses (Sleep) dans le script en chaque envoie de trame à l'alarme. Ca marchait assez bien mais j'avais quand même de temps en temps des ratés.

viewtopic.php?f=17&t=2831&start=20#p26082

Comme écrit dans un autre post, j'ai commencé à modifier le script pour n'envoyer la commande qu'une seule fois et enregistrer les retours dans un fichier et trier ensuite les infos dans le fichier. Mais je n'ai pas encore pu le tester complètement n'ayant pas réinstallé mon alarme

J'ai utilisé une commande du type pour récupérer l'état de l’alarme et stocker l'info dans un fichier "status"

Code : Tout sélectionner

curl -L --cookie cjar --cookie-jar cjar $UrlEtat | iconv -f iso8859-1 -t utf-8 > status
Si quelqu'un a une autre idée welcome ;)

@+
JC
jcjames_13009
Messages : 105
Inscription : 23 févr. 2015, 15:27
Localisation : Marseille
Contact :

Re: Script alarme Somfy Protexiom 5000

Message par jcjames_13009 »

Je mets ici le script avec la modif pour n'envoyer qu'une seule commande et stocker l'info dans un fichier pour éviter les pertes de retour d'état de l'alarme entre chaque cde

Mais attention je ne l'ai pas encore complètement testé

Code : Tout sélectionner

#!/bin/bash
#----------------------------------------------------------------------------------------------------------------------
# Script alarme_Somfy.sh
# Date : 11/2016
# Version : 2.0
# Par : jcjames_13009 <jcjames_13009 at yahoo.fr>
# Description : Script de pilotage de l'alarme Somfy Protexiom 5000
# - Adapatation du script de Seb13 du forum easydomoticz.com pour Alarme Somfy Protexion 600 au modèle Protexion 5000
#   * Lecture des états du système et mise à jour dans Domoticz
#   * Mise en marche de l'alarme Zone A
#   * Mise en marche de l'alarme Zone B
#   * Mise en marche de l'alarme Zone C
#   * Mise en marche de l'alarme Zones A B C
#   * Arrêt de l'alarme Zones A B C
#   * Reset defauts piles, liaisons et alarmes
#	* Gestion liste des éléments et mise à jour dans Domoticz
#----------------------------------------------------------------------------------------------------------------------
# Appel du script
# - Mise à jour des états de l'alarme toutes les 15min via le crontab :
#   */15 * * * * sudo /home/pi/domoticz/scripts/shell/alarme_somfy.sh --Status
# - Pilotage de l'alarme à partir de DOMOTICZ :
#   Ex pour la mise en marche Zone A ajouter dans l'onglet "Action On" du capteur virtuel: 
#   script:///home/pi/domoticz/scripts/shell/alarme_somfy.sh --ZoneAOn 
#----------------------------------------------------------------------------------------------------------------------
# Version : 2.1
# Date : 25/11/2016
# - Ajout d'un "sleep 1" pour éviter les pertes de retour d'état de l'alarme entre chaque cde dans la lecture de l'état 
#	du système et de la liste des éléments
#----------------------------------------------------------------------------------------------------------------------
# Version : 2.2
# Date : 27/11/2016
# - Ajout cde reset defauts piles, liaisons et alarmes
#----------------------------------------------------------------------------------------------------------------------
# Version : 2.3
# Date : 10/12/2016
# - Gestion liste des éléments et mise à jour dans Domoticz
#----------------------------------------------------------------------------------------------------------------------
# Version : 2.4
# Date : 04/01/2017
# - Envoie d'une seule commande pour éviter les pertes de reotur d'état de l'alarme entre chaque cde dans la lecture de
#	l'état du système et de la liste des éléments
#----------------------------------------------------------------------------------------------------------------------

#Debug=True
Debug=False

#----------------------------------------------------------------------------------------------------------------------
# PARAMETRES ALARME
#----------------------------------------------------------------------------------------------------------------------
# Carte d'authentification perso
declare -A CarteAuthentification

#CarteAuthentification=( ["A1"]="xxxx" ["B1"]="xxxx" ["C1"]="xxxx" ["D1"]="xxxx" ["E1"]="xxxx" ["F1"]="xxxx" 
#						["A2"]="xxxx" ["B2"]="xxxx" ["C2"]="xxxx" ["D2"]="xxxx" ["E2"]="xxxx" ["F2"]="xxxx" 
#						["A3"]="xxxx" ["B3"]="xxxx" ["C3"]="xxxx" ["D3"]="xxxx" ["E3"]="xxxx" ["F3"]="xxxx" 
#						["A4"]="xxxx" ["B4"]="xxxx" ["C4"]="xxxx" ["D4"]="xxxx" ["E4"]="xxxx" ["F4"]="xxxx" 
#						["A5"]="xxxx" ["B5"]="xxxx" ["C5"]="xxxx" ["D5"]="xxxx" ["E5"]="xxxx" ["F5"]="xxxx" )

# Adresse IP alarme Somfy 
#SrvSomfyIp="http://IP.ALARME/"

# Code Utilisateur1
#CodeUtilisateur1=1234

# URLs alarme SOMFY PROTEXION 5000 GSM
UrlLogin=$SrvSomfyIp"fr/login.htm"				# Connexion à l'alarme
UrlLogout=$SrvSomfyIp"logout.htm"				# Déconnexion de l'alarme
UrlEtat=$SrvSomfyIp"status.xml"					# Etat du système
UrlPilotage=$SrvSomfyIp"fr/u_pilotage.htm"		# Pilotage alarme
UrlElements=$SrvSomfyIp"fr/u_listelmt.htm"		# Liste des éléments / Reset défauts

#----------------------------------------------------------------------------------------------------------------------
# PARAMETRES DOMOTICZ
#----------------------------------------------------------------------------------------------------------------------
# Capteurs virtuels Domoticz
AlarmeSomfyPilesIdx=xx
AlarmeSomfyRadioIdx=xx
AlarmeSomfyPorteIdx=xx
AlarmeSomfyAlarmeIdx=xx
AlarmeSomfyBoitierIdx=xx

AlarmeSomfyGSMIdx=xx
AlamreSomfySignalGSMIdx=xx
AlamreSomfyOperateurGSMIdx=xx

AlarmeSomfyCameraIdx=xx

AlamreSomfyZoneAIdx=xx
AlamreSomfyZoneBIdx=xx
AlamreSomfyZoneCIdx=xx

AlamreSomfyDOEntreeIdx=xx
AlamreSomfyDOAtelierIdx=xx

# Adresse IP et port du serveur Domoticz
#SrvDomoticzIp="IP.DOMOTICZ:PORT"

#----------------------------------------------------------------------------------------------------------------------
# FONCTIONS
#----------------------------------------------------------------------------------------------------------------------
# Fonction menu d'aide
Aide() {
	echo -e "\tScript Domoticz Alarme Somfy Protexion 5000"
	echo -e "\t--help or -h  \t\tMenu d'aide"
	echo -e "\t--Status      \t\tLecture de l'état du système"
	echo -e "\t--Elements    \t\tListe des éléments"
	echo -e "\t--ZoneAOn     \t\tMise en marche de l'alarme Zone A"
	echo -e "\t--ZoneBOn     \t\tMise en marche de l'alarme Zone B"
	echo -e "\t--ZoneCOn     \t\tMise en marche de l'alarme Zone C"
	echo -e "\t--ZonesABCOn   \t\tMise en marche de l'alarme Zones A B C"
	echo -e "\t--AlarmeOff   \t\tArrêt de l'alarme Zones A B C"
	echo -e "\t--RSTPiles    \t\tReset defauts piles"
	echo -e "\t--RSTAlarmes  \t\tReset defauts alarmes"
	echo -e "\t--RSTLiaisons \t\tReset defauts liaisons"
}

# Fonction connexion à l'alarme
login_alarme () {
	# Affichage des URLs
	if [ "$Debug" = "True" ]; then
		echo " ********************************* "
		echo " Liste des URLs"
		echo " ********************************* "
		echo " UrlLogin    = "$UrlLogin
		echo " UrlLogout   = "$UrlLogout
		echo " UrlEtat     = "$UrlEtat
		echo " UrlPilotage = "$UrlPilotage
		echo " UrlElements = "$UrlElements
	fi

	# Récupération du code d'acces
	if [ "$Debug" = "True" ]; then
		echo " Récuperation du code d'accès"
		CodeAcces="$(curl $SrvSomfyIp $UrlLogin | grep -Eoi 'authentification <b>.*</b>')"
		CodeAcces="$(echo "${CodeAcces:20:2}")"
		echo " Code d'accès = "$CodeAcces
	else
		CodeAcces="$(curl -s $SrvSomfyIp $UrlLogin | grep -Eoi 'authentification <b>.*</b>')"
		CodeAcces="$(echo "${CodeAcces:20:2}")"
	fi

	# Récupération du code d'authentification à partir du code d'accès
	CodeAuthentification="${CarteAuthentification["$CodeAcces"]}"
	if [ "$Debug" = "True" ]; then
		echo " Récuperation du code d'authentification"
		echo " Code d'authentification = "$CodeAuthentification
	fi

	# Envoi du code utilisateur1 et du code d'authentification dans l'url Login pour connexion
	if [ "$Debug" = "True" ]; then
		echo " Envoi du code utilisateur1 et du code d'authentification"
		curl -L --cookie cjar --cookie-jar cjar --data "password="$CodeUtilisateur1"&key="$CodeAuthentification"&btn_login=Connexion" $UrlLogin | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "password="$CodeUtilisateur1"&key="$CodeAuthentification"&btn_login=Connexion" $UrlLogin | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi
}

# Fonction déconnexion de l'alarme
logout_alarme () {
	if [ "$Debug" = "True" ]; then
		echo " Déconnexion de l'alarme"
		curl -L --cookie cjar --cookie-jar cjar $UrlLogout | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar $UrlLogout | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi
}

# Fonction mise à jour capteurs Domoticz
# Paramètres: $1 Nom du capteur / $2 On ou Off / $3 Idx du capteur
maj_capteur () {
	if [ "$Debug" = "True" ]; then
		echo " Etat "$1
		if [ "$2" = "On" ]; then
			curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$3&switchcmd=On"
		else
			curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$3&switchcmd=Off"
		fi
	else
		if [ "$2" = "On" ]; then
			curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$3&switchcmd=On" > /dev/null
		else
			curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$3&switchcmd=Off" > /dev/null
		fi
	fi
}

#----------------------------------------------------------------------------------------------------------------------
# Menu des options de lancement du script
#----------------------------------------------------------------------------------------------------------------------
while [[ $1 == -* ]]; do
	case "$1" in
		--help|-h) Aide; exit 0;;
		--Status) Status="1"; break;;
		--Elements) Elements="1"; break;;
		--ZoneAOn) ZoneAOn="1"; break;;
		--ZoneBOn) ZoneBOn="1"; break;;
		--ZoneCOn) ZoneCOn="1"; break;;
		--ZonesABCOn) ZonesABCOn="1"; break;;
		--AlarmeOff) AlarmeOff="1"; break;;
		--RSTPiles) RSTPiles="1"; break;;
		--RSTAlarmes) RSTAlarmes="1"; break;;
		--RSTLiaisons) RSTLiaisons="1"; break;;
		--*|-*) shift; break;;
	esac
done

#----------------------------------------------------------------------------------------------------------------------
# Lecture de l'état du système
#----------------------------------------------------------------------------------------------------------------------
if [ "$Status" = "1" ]; then
	# Connexion à l'alarme
	login_alarme
	
	# Lecture de l'état du système et récupération dans les variables
	# Envoie URL http://IPAlarme/status.xml
	# Retour:
	#	<zone0>off</zone0>					-> Zone A
	#	<zone1>off</zone1>					-> Zone B
	#	<zone2>off</zone2>					-> Zone C
	#
	#	<defaut0>ok</defaut0>				-> Piles
	#	<defaut1>ok</defaut1>				-> Radio
	#	<defaut2>ok</defaut2>				-> Porte/Fenêtre
	#	<defaut3>ok</defaut3>				-> Alarme
	#	<defaut4>ok</defaut4>				-> Boitier
	#
	#	<gsm>GSM connecté au réseau</gsm> 	-> GSM
	#	<recgsm>4</recgsm>					-> Signal GSM
	#	<opegsm>"Orange</opegsm>			-> Opérateur GSM
	#	<camera>disabled</camera>			-> Caméra

	# Lecture de l'état du système et stockage dans fichier temporaire
	if [ "$Debug" = "True" ]; then
		echo " Lecture de l'état du système"
		curl -L --cookie cjar --cookie-jar cjar $UrlEtat | iconv -f iso8859-1 -t utf-8 > status
	else
		curl -s -L --cookie cjar --cookie-jar cjar $UrlEtat | iconv -f iso8859-1 -t utf-8 > status
	fi

	# Déconnexion de l'alarme
	logout_alarme
	
	# Récupération dans les variables
	EtatZoneA="$(grep -Eoi '<zone0>.*' status)"
	EtatZoneA="$(echo "${EtatZoneA:7:-9}")"
	EtatZoneB="$(grep -Eoi '<zone1>.*' status)"
	EtatZoneB="$(echo "${EtatZoneB:7:-9}")"
	EtatZoneC="$(grep -Eoi '<zone2>.*' status)"
	EtatZoneC="$(echo "${EtatZoneC:7:-9}")"

	EtatPiles="$(grep -Eoi '<defaut0>.*' status)"
	EtatPiles="$(echo "${EtatPiles:9:-11}")"
	EtatRadio="$(grep -Eoi '<defaut1>.*' status)"
	EtatRadio="$(echo "${EtatRadio:9:-11}")"
	EtatPorte="$(grep -Eoi '<defaut2>.*' status)"
	EtatPorte="$(echo "${EtatPorte:9:-11}")"
	EtatAlarme="$(grep -Eoi '<defaut3>.*' status)"
	EtatAlarme="$(echo "${EtatAlarme:9:-11}")"
	EtatBoitier="$(grep -Eoi '<defaut4>.*' status)"
	EtatBoitier="$(echo "${EtatBoitier:9:-11}")"

	EtatGSM="$(grep -Eoi '<gsm>.*' status)"
	EtatGSM="$(echo "${EtatGSM:5:-7}")"
	SignalGSM="$(grep -Eoi '<recgsm>.*' status)"
	SignalGSM="$(echo "${SignalGSM:8:-10}")"
	OperateurGSM="$(grep -Eoi '<opegsm>.*' status)"
	OperateurGSM="$(echo "${OperateurGSM:9:-10}")"
		
	EtatCamera="$(grep -Eoi '<camera>.*' status)"
	EtatCamera="$(echo "${EtatCamera:8:-10}")"
	
	if [ "$Debug" = "True" ]; then
		# Affichage des états
		echo " ******************************************* "
		echo "  Etat du système"
		echo " ******************************************* "
		echo " Zone A                   = "$EtatZoneA
		echo " Zone B                   = "$EtatZoneB
		echo " Zone C                   = "$EtatZoneC
		echo ""
		echo " Etat Piles               = "$EtatPiles
		echo " Etat Communication Radio = "$EtatRadio
		echo " Etat Porte/Fenêtre       = "$EtatPorte
		echo " Etat Alarme              = "$EtatAlarme
		echo " Etat Boitier             = "$EtatBoitier
		echo ""
		echo " Etat GSM                 = "$EtatGSM
		echo " Signal GSM               = "$SignalGSM
		echo " Opérateur GSM            = "$OperateurGSM
		echo ""
		echo " Etat caméra              = "$EtatCamera
	fi
	
	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi

	# Zone A
	if [ "$EtatZoneA" = "off" ]; then
		maj_capteur ZoneA Off $AlamreSomfyZoneAIdx
	else
		maj_capteur ZoneA On $AlamreSomfyZoneAIdx
	fi

	# Zone B
	if [ "$EtatZoneB" = "off" ]; then
		maj_capteur ZoneB Off $AlamreSomfyZoneBIdx
	else
		maj_capteur ZoneB On $AlamreSomfyZoneBIdx
	fi

	# Zone C
	if [ "$EtatZoneC" = "off" ]; then
		maj_capteur ZoneC Off $AlamreSomfyZoneCIdx
	else
		maj_capteur ZoneC On $AlamreSomfyZoneCIdx
	fi

	# Etat Piles
	if [ "$EtatPiles" = "ok" ]; then
		maj_capteur Piles On $AlarmeSomfyPilesIdx
	else
		maj_capteur Piles Off $AlarmeSomfyPilesIdx
	fi

	# Communication Radio
	if [ "$EtatRadio" = "ok" ]; then
		maj_capteur Radio On $AlarmeSomfyRadioIdx
	else
		maj_capteur Radio Off $AlarmeSomfyRadioIdx
	fi

	# Porte/Fenêtre
	if [ "$EtatPorte" = "ok" ]; then
		maj_capteur Porte/Fenetre Off $AlarmeSomfyPorteIdx
	else
		maj_capteur Porte/Fenetre On $AlarmeSomfyPorteIdx
	fi

	# Alarme
	if [ "$EtatAlarme" = "ok" ]; then
		maj_capteur Alarme Off $AlarmeSomfyAlarmeIdx
	else
		maj_capteur Alarme On $AlarmeSomfyAlarmeIdx
	fi

	# Boitier
	if [ "$EtatBoitier" = "ok" ]; then
		maj_capteur Boitier Off $AlarmeSomfyBoitierIdx
	else
		maj_capteur Boitier On $AlarmeSomfyBoitierIdx
	fi

	# GSM
	if [ "$EtatGSM" = "GSM connecté au réseau" ]; then
		maj_capteur GSM On $AlarmeSomfyGSMIdx
	else
		maj_capteur GSM Off $AlarmeSomfyGSMIdx
	fi
	
	# Niveau Signal GSM
	if [ "$Debug" = "True" ]; then
		echo " Niveau Signal GSM"
		curl "http://$SrvDomoticzIp/json.htm?type=command&param=udevice&idx=$AlamreSomfySignalGSMIdx&nvalue=0&svalue=$SignalGSM"
	else
		curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=udevice&idx=$AlamreSomfySignalGSMIdx&nvalue=0&svalue=$SignalGSM" > /dev/null
	fi
		
	# Opérateur GSM
	if [ "$Debug" = "True" ]; then
		echo " Opérateur GSM"
		curl "http://$SrvDomoticzIp/json.htm?type=command&param=udevice&idx=$AlamreSomfyOperateurGSMIdx&nvalue=0&svalue=$OperateurGSM"
	else
		curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=udevice&idx=$AlamreSomfyOperateurGSMIdx&nvalue=0&svalue=$OperateurGSM" > /dev/null
	fi	

	# Caméra
	if [ "$EtatCamera" = "disabled" ]; then
		maj_capteur Camera Off $AlarmeSomfyCameraIdx
	else
		maj_capteur Camera On $AlarmeSomfyCameraIdx
	fi
	
fi	

#----------------------------------------------------------------------------------------------------------------------
# Mise en marche de l'alarme Zones A B C
#----------------------------------------------------------------------------------------------------------------------
if [ "$ZonesABCOn" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Mise en marche de l'alarme Zones A B C
	if [ "$Debug" = "True" ]; then
		echo "Mise en marche de l'alarme Zones A B C"
		curl -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_ABC=Marche A B C" $UrlPilotage | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_ABC=Marche A B C" $UrlPilotage | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme

	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi
	maj_capteur ZoneA On $AlamreSomfyZoneAIdx
	maj_capteur ZoneB On $AlamreSomfyZoneBIdx
	maj_capteur ZoneC On $AlamreSomfyZoneCIdx
fi

#----------------------------------------------------------------------------------------------------------------------
# Mise en marche de l'alarme Zone A
#----------------------------------------------------------------------------------------------------------------------
if [ "$ZoneAOn" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Mise en marche de l'alarme Zone A
	if [ "$Debug" = "True" ]; then
		echo "Mise en marche de l'alarme Zone A"
		curl -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_A=Marche A" $UrlPilotage | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_A=Marche A" $UrlPilotage | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme

	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi
	maj_capteur ZoneA On $AlamreSomfyZoneAIdx
fi

#----------------------------------------------------------------------------------------------------------------------
# Mise en marche de l'alarme Zone B
#----------------------------------------------------------------------------------------------------------------------
if [ "$ZoneBOn" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Mise en marche de l'alarme Zone B
	if [ "$Debug" = "True" ]; then
		echo "Mise en marche de l'alarme Zone B"
		curl -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_B=Marche B" $UrlPilotage | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_B=Marche B" $UrlPilotage | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme

	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi
	maj_capteur ZoneB On $AlamreSomfyZoneBIdx
fi

#----------------------------------------------------------------------------------------------------------------------
# Mise en marche de l'alarme Zone C
#----------------------------------------------------------------------------------------------------------------------
if [ "$ZoneCOn" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Mise en marche de l'alarme Zone C
	if [ "$Debug" = "True" ]; then
		echo "Mise en marche de l'alarme Zone C"
		curl -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_C=Marche C" $UrlPilotage | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&hidden=hidden&btn_zone_on_C=Marche C" $UrlPilotage | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme

	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi
	maj_capteur ZoneC On $AlamreSomfyZoneCIdx
fi

#----------------------------------------------------------------------------------------------------------------------
# Arrêt de l'alarme Zones A B C
#----------------------------------------------------------------------------------------------------------------------
if [ "$AlarmeOff" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Arrêt de l'alarme Zones A B C
	if [ "$Debug" = "True" ]; then
		echo "Arret de l'alarme Zones A B C"
		curl -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&btn_zone_off_ABC=Arrêt A B C" $UrlPilotage | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "hidden=hidden&btn_zone_off_ABC=Arrêt A B C" $UrlPilotage | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme
	
	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi
	maj_capteur ZoneA Off $AlamreSomfyZoneAIdx
	maj_capteur ZoneB Off $AlamreSomfyZoneBIdx
	maj_capteur ZoneC Off $AlamreSomfyZoneCIdx
fi

#----------------------------------------------------------------------------------------------------------------------
# Reset defauts piles
#----------------------------------------------------------------------------------------------------------------------
if [ "$RSTPiles" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Reset defauts piles
	if [ "$Debug" = "True" ]; then
		echo "Reset defauts piles"
		curl -L --cookie cjar --cookie-jar cjar --data "btn_del_pil=Piles" $UrlElements | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "btn_del_pil=Piles" $UrlElements | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme
fi

#----------------------------------------------------------------------------------------------------------------------
# Reset defauts alarmes
#----------------------------------------------------------------------------------------------------------------------
if [ "$RSTAlarmes" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Reset defauts alarmes
	if [ "$Debug" = "True" ]; then
		echo "Reset defauts alarmes"
		curl -L --cookie cjar --cookie-jar cjar --data "btn_del_alm=Alarmes" $UrlElements | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "btn_del_alm=Alarmes" $UrlElements | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme
fi

#----------------------------------------------------------------------------------------------------------------------
# Reset defauts liaisons
#----------------------------------------------------------------------------------------------------------------------
if [ "$RSTLiaisons" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Reset defauts liaisons
	if [ "$Debug" = "True" ]; then
		echo "Reset defauts liaisons"
		curl -L --cookie cjar --cookie-jar cjar --data "btn_del_lia=Liaisons" $UrlElements | iconv -f iso8859-1 -t utf-8
	else
		curl -s -L --cookie cjar --cookie-jar cjar --data "btn_del_lia=Liaisons" $UrlElements | iconv -f iso8859-1 -t utf-8 > /dev/null
	fi

	# Déconnexion de l'alarme
	logout_alarme
fi

#----------------------------------------------------------------------------------------------------------------------
# Gestion de la liste des éléments
#----------------------------------------------------------------------------------------------------------------------
if [ "$Elements" = "1" ]; then
	# Connexion à l'alarme
	login_alarme

	# Lecture de la liste des éléments et stockage dans fichier temporaire
	if [ "$Debug" = "True" ]; then
		echo "Gestion liste des éléments"
		curl -L --cookie cjar --cookie-jar cjar $UrlElements | iconv -f iso8859-1 -t utf-8 > elements
	else
		curl -s -L --cookie cjar --cookie-jar cjar $UrlElements | iconv -f iso8859-1 -t utf-8 > elements
	fi

	# Déconnexion de l'alarme
	logout_alarme
	
	# Récupération dans les variables
	TypeElements="$(grep -Eoi 'var item_label.*' elements)"
	NomElements="$(grep -Eoi 'var elt_name.*' elements)"
	EtatElements="$(grep -Eoi 'var item_pause.*' elements)"
	EtatPiles="$(grep -Eoi 'var elt_pile.*' elements)"
	EtatLiaison="$(grep -Eoi 'var elt_onde.*' elements)"
	EtatPortes="$(grep -Eoi 'var elt_porte.*' elements)"
	EtatBoitiers="$(grep -Eoi 'var elt_as.*' elements)"
	EtatAlarme="$(grep -Eoi 'var elt_maison.*' elements)"

	# Affichage des éléments
	if [ "$Debug" = "True" ]; then
		echo " Type des éléments"
		echo $TypeElements
		echo " Nom des éléments"
		echo $NomElements
		echo " Etat des éléments"
		echo $EtatElements
		echo " Etat des piles"
		echo $EtatPiles
		echo " Etat liaison radio"
		echo $EtatLiaison
		echo " Etat détecteurs ouverture"
		echo $EtatPortes
		echo " Etat ouverture boitiers"
		echo $EtatBoitiers
		echo " Etat alarme"
		echo $EtatAlarme
	fi
		
	# Formatage du type des éléments	
	# Suppression des 21 1er caractères et 2 derniers
#	TypeElements="$(echo "${TypeElements:21:-2}")"
#	# Suppression des "
#	TypeElements="$(echo "$TypeElements" | sed s/\"//g)"
#	# Suppression des espaces entre les ,
#	TypeElements="$(echo "$TypeElements" | sed s/\,\ /\,/g)"
#	# Déclaration , comme séparateur
#	IFS=","
#	# Stockage dans le tableau
#	TabTypeElements=($TypeElements)

	# Formatage des noms des éléments
	# Suppression des 21 1er caractères et 2 derniers
	NomElements="$(echo "${NomElements:21:-2}")"
	# Suppression des "
	NomElements="$(echo "$NomElements" | sed s/\"//g)"
	# Suppression des espaces entre les ,
	NomElements="$(echo "$NomElements" | sed s/\,\ /\,/g)"
	# Déclaration , comme séparateur
	IFS=","
	# Stockage dans le tableau
	TabNomElements=($NomElements)
		
	# Formatage état des éléments
	# Suppression des 21 1er caractères et 2 derniers
#	EtatElements="$(echo "${EtatElements:21:-2}")"
#	# Suppression des "
#	EtatElements="$(echo "$EtatElements" | sed s/\"//g)"
#	# Suppression des espaces entre les ,
#	EtatElements="$(echo "$EtatElements" | sed s/\,\ /\,/g)"
#	# Déclaration , comme séparateur
#	IFS=","
#	# Stockage dans le tableau
#	TabEtatElements=($EtatElements)
#	# Modification valeurs tableau
#	TailleTab=${#TabEtatElements[@]}
#	for (( i=0; i<$TailleTab; i++ ))
#	do
#		if [ ${TabEtatElements["$i"]} = "running" ]; then TabEtatElements["$i"]="Activé"
#		else
#			TabEtatElements["$i"]="Désactivé"
#		fi
#	done

	# Formatage état des piles
	# Suppression des 21 1er caractères et 2 derniers
#	EtatPiles="$(echo "${EtatPiles:21:-2}")"
#	# Suppression des "
#	EtatPiles="$(echo "$EtatPiles" | sed s/\"//g)"
#	# Suppression des espaces entre les ,
#	EtatPiles="$(echo "$EtatPiles" | sed s/\,\ /\,/g)"
#	# Déclaration , comme séparateur
#	IFS=","
#	# Stockage dans le tableau
#	TabEtatPiles=($EtatPiles)
#	# Modification des valeurs du tableau
#	TailleTab=${#TabEtatPiles[@]}
#	for (( i=0; i<$TailleTab; i++ ))
#	do
#		if [ ${TabEtatPiles["$i"]} = "itemhidden" ]; then TabEtatPiles["$i"]="NA"
#		else
#			if [ ${TabEtatPiles["$i"]} = "itembattok" ]; then TabEtatPiles["$i"]="OK"
#			else
#				TabEtatPiles["$i"]="NOK"
#			fi
#		fi
#	done

	# Formatage état liaison radio
	# Suppression des 21 1er caractères et 2 derniers
#	EtatLiaison="$(echo "${EtatLiaison:21:-2}")"
#	# Suppression des "
#	EtatLiaison="$(echo "$EtatLiaison" | sed s/\"//g)"
#	# Suppression des espaces entre les ,
#	EtatLiaison="$(echo "$EtatLiaison" | sed s/\,\ /\,/g)"
#	# Déclaration , comme séparateur
#	IFS=","
#	# Stockage dans le tableau
#	TabEtatLiaison=($EtatLiaison)
#	# Modification des valeurs du tableau
#	TailleTab=${#TabEtatLiaison[@]}
#	for (( i=0; i<$TailleTab; i++ ))
#	do
#		if [ ${TabEtatLiaison["$i"]} = "itemhidden" ]; then TabEtatLiaison["$i"]="NA"
#		else
#			if [ ${TabEtatLiaison["$i"]} = "itemcomok" ]; then TabEtatLiaison["$i"]="OK"
#			else
#				TabEtatLiaison["$i"]="NOK"
#			fi
#		fi
#	done
		
	# Récup état détecteurs ouverture
	# Suppression des 21 1er caractères et 2 derniers
	EtatPortes="$(echo "${EtatPortes:21:-2}")"
	# Suppression des "
	EtatPortes="$(echo "$EtatPortes" | sed s/\"//g)"
	# Suppression des espaces entre les ,
	EtatPortes="$(echo "$EtatPortes" | sed s/\,\ /\,/g)"
	# Déclaration , comme séparateur
	IFS=","
	# Stockage dans le tableau
	TabEtatPortes=($EtatPortes)
	# Modification des valeurs du tableau
	TailleTab=${#TabEtatPortes[@]}
	for (( i=0; i<$TailleTab; i++ ))
	do
		if [ ${TabEtatPortes["$i"]} = "itemhidden" ]; then TabEtatPortes["$i"]="NA"
		else
			if [ ${TabEtatPortes["$i"]} = "itemdoorok" ]; then TabEtatPortes["$i"]="Fermée"
			else
				TabEtatPortes["$i"]="Ouverte"
			fi
		fi
	done
		
	# Récup état ouverture boitiers
	# Suppression des 21 1er caractères et 2 derniers
#	EtatBoitiers="$(echo "${EtatBoitiers:21:-2}")"
#	# Suppression des "
#	EtatBoitiers="$(echo "$EtatBoitiers" | sed s/\"//g)"
#	# Suppression des espaces entre les ,
#	EtatBoitiers="$(echo "$EtatBoitiers" | sed s/\,\ /\,/g)"
#	# Déclaration , comme séparateur
#	IFS=","
#	# Stockage dans le tableau
#	TabEtatBoitiers=($EtatBoitiers)
#	# Modification des valeurs du tableau
#	TailleTab=${#TabEtatBoitiers[@]}
#	for (( i=0; i<$TailleTab; i++ ))
#	do
#		if [ ${TabEtatBoitiers["$i"]} = "itemhidden" ]; then TabEtatBoitiers["$i"]="NA"
#		else
#			if [ ${TabEtatBoitiers["$i"]} = "itemboxok" ]; then TabEtatBoitiers["$i"]="Fermé"
#			else
#				TabEtatBoitiers["$i"]="Ouvert"
#			fi
#		fi
#	done
		
	# Récup état alarme
	# Suppression des 21 1er caractères et 2 derniers
#	EtatAlarme="$(echo "${EtatAlarme:21:-2}")"
#	# Suppression des "
#	EtatAlarme="$(echo "$EtatAlarme" | sed s/\"//g)"
#	# Suppression des espaces entre les ,
#	EtatAlarme="$(echo "$EtatAlarme" | sed s/\,\ /\,/g)"
#	# Déclaration , comme séparateur
#	IFS=","
#	# Stockage dans le tableau
#	TabEtatAlarme=($EtatAlarme)
#	# Modification des valeurs du tableau
#	TailleTab=${#TabEtatAlarme[@]}
#	for (( i=0; i<$TailleTab; i++ ))
#	do
#		if [ ${TabEtatAlarme["$i"]} = "itemhouseok" ]; then TabEtatAlarme["$i"]="Pas d'alarme"
#		else
#			TabEtatAlarme["$i"]="Alarme"
#		fi
#	done
		
	# Affichage de la liste des éléments
	if [ "$Debug" = "True" ]; then
		echo " Liste des éléments"
		TailleTab=${#TabNomElements[@]}
		for (( i=0; i<$TailleTab; i++ ))
		do
			echo " Type : "${TabTypeElements["$i"]} "/ Nom : "${TabNomElements["$i"]} "/ Etat : "${TabEtatElements["$i"]} "/ Etat piles : "${TabEtatPiles["$i"]} "/ Etat liaison : "${TabEtatLiaison["$i"]} "/ Etat portes : "${TabEtatPortes["$i"]} "/ Etat boitiers : "${TabEtatBoitiers["$i"]} "/ Etat alarme : "${TabEtatAlarme["$i"]}
		done	
	fi
	
	# Mise à jour capteurs Domoticz
	if [ "$Debug" = "True" ]; then
		echo " Mise à jour capteurs Domoticz"
	fi

	# DO Entré
	TailleTab=${#TabNomElements[@]}
	for (( i=0; i<$TailleTab; i++ ))
	do
		if [ ${TabNomElements["$i"]} = "DO Entree" ]; then PosElement=$i
		fi
	done
	if [ ${TabEtatPortes["$PosElement"]} = "Fermée" ]; then
		maj_capteur DOEntrée Off $AlamreSomfyDOEntreeIdx
	else
		maj_capteur DOEntrée On $AlamreSomfyDOEntreeIdx
	fi
	
	# DO Atelier
	for (( i=0; i<$TailleTab; i++ ))
	do
		if [ ${TabNomElements["$i"]} = "DO Atelier" ]; then PosElement=$i
		fi
	done
	if [ ${TabEtatPortes["$PosElement"]} = "Fermée" ]; then
		maj_capteur DOAtelier Off $AlamreSomfyDOAtelierIdx
	else
		maj_capteur DOAtelier On $AlamreSomfyDOAtelierIdx
	fi
	
fi

exit 0
@+

JC
willyboy09
Messages : 27
Inscription : 27 janv. 2017, 23:32

Re: Script alarme Somfy Protexiom 5000

Message par willyboy09 »

j'ai testé hier soir le script modifié et ce matin j'avais toujours autant d'erreur dans les résultats. je vais regarder de mon côté si je trouve une solution.

en tous cas merci pour ton travail !
Répondre