Script alarme Somfy Protexiom 600

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

Salut à tous,

Après des heures de recherche :shock: j'ai trouvé une solution avec Curl et Grep pour se connecter à l'alarme Somfy.

J'arrive à me connecter et à recupérer les états (Porte/Fenêtre ouverte, état des piles etc... etc...)

Tout ça dans un script Shell. Il faudrait mettre tout ça dans Domoticz avec ajout dans la crontab.
thom@s
Messages : 7
Inscription : 29 août 2016, 18:15

Re: Script alarme Somfy Protexiom 600

Message par thom@s »

Génial Seb13 ! Arrives tu également à activer / désactiver l'alarme ?
Je ne serais pas contre un petit partage et mode d'emploi :mrgreen:
S1eepy
Messages : 21
Inscription : 03 juil. 2016, 13:24

Re: Script alarme Somfy Protexiom 600

Message par S1eepy »

Seb13 a écrit :Bon... j'ai lu les retours, merci à tous... cependant, je ne suis pas dev Web :?
Donc, je n'ai pas les bases pour lancer le script... et je pense ne pas être le seul ;)

Pour lire un fichier PHP, il faut un serveur PHP ?

Si quelqu'un peut nous expliquer comment il lance le script.
Copie du fichier dans un répertoire ?
Des modifications à faire ?
etc... etc...

Merci d'avance
Salut, il te faut un interpreteur PHP oui, car c'est un langage interprété. Comme Python par exemple.
Je lance le script en faisant "php somfy.php" où somfy.php est le fichier que j'ai créé.
Le fichier pour le moment renvoie certaines valeurs qu'il faudrait mettre à jour dans domoticz, je n'ai pas encore attaqué ce point là.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

thom@s a écrit :Génial Seb13 ! Arrives tu également à activer / désactiver l'alarme ?
Je ne serais pas contre un petit partage et mode d'emploi :mrgreen:
Hello,

Je n'ai pas encore testé l'activation de l'alarme, mais je pense que c'est possible, elle doit s'activer avec une URL.

Dans un premier temps, je vais récupérer les valeurs (Ouverture porte, Etat des piles etc... etc...) que je vais afficher via un script shell.

Ensuite, il faudra envoyer tout ça dans Domoticz ;)

Pour finir, bien sur que je vais partager le script, laisse moi le temps de le mettre au propre car là, il est en mode dev... c'est le bordel.
Quand j'ai terminé une première version potable, je partage avec plaisir.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

S1eepy a écrit :
Seb13 a écrit :Bon... j'ai lu les retours, merci à tous... cependant, je ne suis pas dev Web :?
Donc, je n'ai pas les bases pour lancer le script... et je pense ne pas être le seul ;)

Pour lire un fichier PHP, il faut un serveur PHP ?

Si quelqu'un peut nous expliquer comment il lance le script.
Copie du fichier dans un répertoire ?
Des modifications à faire ?
etc... etc...

Merci d'avance
Salut, il te faut un interpreteur PHP oui, car c'est un langage interprété. Comme Python par exemple.
Je lance le script en faisant "php somfy.php" où somfy.php est le fichier que j'ai créé.
Le fichier pour le moment renvoie certaines valeurs qu'il faudrait mettre à jour dans domoticz, je n'ai pas encore attaqué ce point là.
Merci pour le retour, maintenant que j'ai trouvé un petit truc avec Shell+Curl+Grep+Sed ;) je continue dans ce sens.
Mais je testerai le script php pour voir la diff.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

Hello à tous,

Voici la première version du script Shell pour avoir les etats d'une alarme Somfy Protexiom 600.

Il faudra ajouter vos infos dans le script dans la Zone de Modification pour Carte & Adresse IP Serveur Somfy & Code Utilisateur1

Il faudra mettre une option -h pour l'aide, -v pour voir les etats de l'alarme, --AlarmeON et --AlarmeOFF pas encore fait :D

Exemple, si votre script est Somfy_check.sh, il faudra faire un :

Code : Tout sélectionner

./Somfy_check.sh -v 
Attention je ne suis pas un codeur :?
donc, je fais ce que je peux avec ce que je sais :roll:

Merci de me faire un retour si cela fonctionne ou pas.

Je n'ai pas fait les tests sur les codes erreurs 0x0904 / 0x0902 / 0x1100 ni sur l'activation de l'alarme, prochaine version.
Je pense même aller plus loin avec la récupération des éléments de l'alarme, ouverture de porte ou fenêtre, badge etc... etc...
Cela va me servir de vérifier que les fenêtres sont fermées quand le chauffage est en fonction ou que si il y a personne à la maison de vérifier si fenêtre fermée et alarme ON etc... etc...

Voilà Voilà...

Code : Tout sélectionner

#----------------------------------------------------------------------------------------------------------------------------------
# Date : 13/11/2016
# Version : 1.5
# Description : Script Domoticz pour recuperer les etats des alarmes SOMFY PROTEXIUM 600 et Alarme ON/OFF
# Auteur : Seb13
# Merci au forum easydomoticz
#----------------------------------------------------------------------------------------------------------------------------------

declare -A CarteAuthentification
Debug=False

#----------------------------------------------------------------------------------------------------------------------------------
# ZONE DE MODIFICATION
#----------------------------------------------------------------------------------------------------------------------------------
# Carte d'authentification perso
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 du serveur Somfy
SrvSomfyIp="http://xxx.xxx.xxx.xxx/"

# Code Utilisateur1
CodeUtilisateur1=xxxx

#---------------------------------------------------------------------------------------------------------------------------------

# Menu Aide
Aide() {
echo -e "\tScript Domoticz Somfy Protexion 600"
echo -e "\t--help or -h\t\tMenu Aide"
echo -e "\t--view or -v\t\tVerification des etats"
echo -e "\t--AlarmeON \t\tMise en route de l'alarme sur Zone A B C"
echo -e "\t--AlarmeOFF \t\tArret de l'alarme sur Zone A B C"
}


# Menu des options du script
while [[ $1 == -* ]]; do
case "$1" in
--help|-h) Aide; exit 0;;
--view|-v) VerifEtat="1"; break;;
--AlarmeON) AlarmeON="1"; break;;
--AlarmeOFF) AlarmeOFF="1"; break;;
--*|-*) shift; break;;
esac
done

# Exection si option -v activee
if [ "$VerifEtat" = "1" ]; then

        # Declaration des URLs du site Somfy Mobile
        UrlMLogin=$SrvSomfyIp"m_login.htm"
        UrlMuEtat=$SrvSomfyIp"mu_etat.htm"
        UrlMLogout=$SrvSomfyIp"m_logout.htm"
        UrlMuPilotage=$SrvSomfyIp"mu_pilotage.htm"

        # Affichage des URLs
        if [ "$Debug" = "True" ]; then
                echo ""
                echo " ********************************* "
                echo " Liste des URLs"
                echo " ********************************* "
                echo " UrlMLogin = "$UrlMLogin
                echo " UrlMuEtat = "$UrlMuEtat
                echo " UrlMLogout = "$UrlMLogout
                echo " UrlMuPilotage = "$UrlMuPilotage
                echo ""
        fi


        # Recuperation du code d'acces apres lecture sur la page MLogin
        if [ "$Debug" = "True" ]; then
                echo ""
                CodeAcces="$(curl $SrvSomfyIp $UrlMLogin | grep -Eoi 'authentification <b>.*</b>')"
                CodeAcces="$(echo "${CodeAcces:20:2}")"
                echo "Code Acces = "$CodeAcces
                echo ""
        else
                        CodeAcces="$(curl -s $SrvSomfyIp $UrlMLogin | grep -Eoi 'authentification <b>.*</b>')"
                        CodeAcces="$(echo "${CodeAcces:20:2}")"
        fi


        # Recuperation du code d'authentification avec le code d'acces
        CodeAuthentification="${CarteAuthentification["$CodeAcces"]}"

        if [ "$Debug" = "True" ]; then
                        echo ""
                echo "Code Authentification = "$CodeAuthentification
                echo ""
        fi

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


        # Lecture de la page MuEtat pour recuperer les etats de l alarme
        if [ "$Debug" = "True" ]; then
                        echo ""
                curl -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8
                curl -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Porte.*fermée'
                curl -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Porte.*ouverte'
                curl -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Pile.*OK'
                curl -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Pile.*</td>'
                echo ""
        fi

        # Recuperation des etats dans les variables
        EtatPorte="$(curl -s -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Porte.*</td>')"
        EtatPorte="$(echo "${EtatPorte:0:24}" | sed s/\<//g)"
        EtatPiles="$(curl -s -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Pile.*</td>')"
        EtatPiles="$(echo "${EtatPiles:0:8}")"
        EtatRadio="$(curl -s -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Communication.*</td>')"
        EtatRadio="$(echo "${EtatRadio:0:22}")"
        EtatAlarme="$(curl -s -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Pas.*</td>')"
        EtatAlarme="$(echo "${EtatAlarme:0:12}")"
        EtatBoitier="$(curl -s -L --cookie cjar --cookie-jar cjar $UrlMuEtat | iconv -f iso8859-1 -t utf-8 | grep -Eoi 'Boîtier.*</td>')"
        EtatBoitier="$(echo "${EtatBoitier:0:10}")"

        # Affichage des etats
        echo "Etat Porte = "$EtatPorte
        echo "Etat Piles = "$EtatPiles
        echo "Etat Communication Radio = "$EtatRadio
        echo "Etat Alarme = "$EtatAlarme
        echo "Etat Boitier = "$EtatBoitier

        # Logout du site Somfy
        if [ "$Debug" = "True" ]; then
                        echo ""
                curl -L --cookie cjar --cookie-jar cjar $UrlMLogout | iconv -f iso8859-1 -t utf-8
                echo ""
        else
                echo ""
                curl -s -L --cookie cjar --cookie-jar cjar $UrlMLogout | iconv -f iso8859-1 -t utf-8 > /dev/null
                echo ""
        fi

fi

if [ "$AlarmeON" = "1" ]; then
        echo "Alarme en fonction - script à faire"
fi
if [ "$AlarmeOFF" = "1" ]; then
        echo "Alarme en arrêt - script à faire"
fi
thom@s
Messages : 7
Inscription : 29 août 2016, 18:15

Re: Script alarme Somfy Protexiom 600

Message par thom@s »

Top ! Je vais essayer de lancer ça :twisted:
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

Comme il n'y a rien à la TV ce soir :lol:

J'ai ajouté les états à Domoticz.

Donc, il faut créer 5 dispositifs sous Domoticz, je ne fais pas d'explication dessus.
Chez moi, j'ai créé 5 interrupteurs (On/Off), je vais voir plus tard si je change ou pas.

Alarme Somfy Boitier
Alarme Somfy Etat
Alarme Somfy Piles
Alarme Somfy Porte
Alarme Somfy Radio

Il faudra mettre les IDX dans le script au début, je laisse un peu de script avant et après pour retrouver dans le script plus haut.

Code : Tout sélectionner

declare -A CarteAuthentification
AlarmeSomfyPilesIDX=xxx
AlarmeSomfyBoitierIDX=xxx
AlarmeSomfyRadioIDX=xxx
AlarmeSomfyEtatIDX=xxx
AlarmeSomfyPorteIDX=xxx
Debug=False
Ensuite, il faut donner l'adresse IP et Port du serveur Domoticz

Code : Tout sélectionner

# Adresse IP du serveur Somfy
SrvSomfyIp="http://192.168.0.xxx/"
SrvDomoticzIp="192.168.0.xxx:xxxx"
# Code Utilisateur1
CodeUtilisateur1=xxxx
Pour finir, dans le script, il faut mettre le code suivant

Code : Tout sélectionner

        # Affichage des etats
        echo "Etat Porte = "$EtatPorte
        echo "Etat Piles = "$EtatPiles
        echo "Etat Communication Radio = "$EtatRadio
        echo "Etat Alarme = "$EtatAlarme
        echo "Etat Boitier = "$EtatBoitier

        # Envoi des etats a Domoticz
        # Etat des piles
        if [ "$Debug" = "True" ]; then
                if [ "$EtatPiles" = "Piles OK" ]; then
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPilesIDX&switchcmd=On"
                else
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPilesIDX&switchcmd=Off"
                fi
        else
                if [ "$EtatPiles" = "Piles OK" ]; then
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPilesIDX&switchcmd=On" > /dev/null
                else
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPilesIDX&switchcmd=Off" > /dev/null
                fi
        fi

        # Etat Boitier
        if [ "$Debug" = "True" ]; then
                if [ "$EtatBoitier" = "Boîtier OK" ]; then
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyBoitierIDX&switchcmd=On"
                else
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyBoitierIDX&switchcmd=Off"
                fi
        else
                if [ "$EtatBoitier" = "Boîtier OK" ]; then
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyBoitierIDX&switchcmd=On" > /dev/null
                else
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyBoitierIDX&switchcmd=Off" > /dev/null
                fi
        fi

        # Etat Communication Radio
        if [ "$Debug" = "True" ]; then
                if [ "$EtatRadio" = "Communication radio OK" ]; then
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyRadioIDX&switchcmd=On"
                else
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyRadioIDX&switchcmd=Off"
                fi
        else
                if [ "$EtatRadio" = "Communication radio OK" ]; then
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyRadioIDX&switchcmd=On" > /dev/null
                else
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyRadioIDX&switchcmd=Off" > /dev/null
                fi
        fi

        # Etat Alarme Somfy
        if [ "$Debug" = "True" ]; then
                if [ "$EtatAlarme" = "Pas d'alarme" ]; then
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyEtatIDX&switchcmd=Off"
                else
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyEtatIDX&switchcmd=On"
                fi
        else
                if [ "$EtatAlarme" = "Pas d'alarme" ]; then
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyEtatIDX&switchcmd=Off" > /dev/null
                else
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyEtatIDX&switchcmd=On" > /dev/null
                fi
        fi

        # Etat Porte
        if [ "$Debug" = "True" ]; then
                if [ "$EtatPorte" = "Porte ou fenêtre fermée" ]; then
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPorteIDX&switchcmd=Off"
                else
                        curl "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPorteIDX&switchcmd=On"
                fi
        else
                if [ "$EtatPorte" = "Porte ou fenêtre fermée" ]; then
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPorteIDX&switchcmd=Off" > /dev/null
                else
                        curl -s "http://$SrvDomoticzIp/json.htm?type=command&param=switchlight&idx=$AlarmeSomfyPorteIDX&switchcmd=On" > /dev/null
                fi
        fi



        # Logout du site Somfy
        if [ "$Debug" = "True" ]; then
                echo ""
                curl -L --cookie cjar --cookie-jar cjar $UrlMLogout | iconv -f iso8859-1 -t utf-8
                echo ""
        else
                echo ""
                curl -s -L --cookie cjar --cookie-jar cjar $UrlMLogout | iconv -f iso8859-1 -t utf-8 > /dev/null
                echo ""
        fi

fi
Voilà pour aujourd'hui, c'est pas mal non :P
Chez moi, cela fonctionne parfaitement... Putain depuis le temps que je voulais le mettre en place ce truc !!!

Il faut aussi ajouter le script dans la CronTab pour le lancer toutes les 10mn par exemple.

Code : Tout sélectionner

crontab -e (pour editer)
*/10 * * * * sudo /home/pi/domoticz/scripts/shell/EtatSomfy.sh -v
Prochaine version, je vais activer/desactiver l'alarme et je vais commencer à faire la liste des éléments afin de savoir quel élément à un problème.
Exemple, si j'ai porte ouverte, aujourd'hui je ne sais pas qu'elle porte ou fenêtre qui est ouverte, avec la liste des éléments je pourrai le savoir.

Allez dite moi si cela fonctionne chez vous aussi...
thom@s
Messages : 7
Inscription : 29 août 2016, 18:15

Re: Script alarme Somfy Protexiom 600

Message par thom@s »

Je n'ai pas eu beaucoup de temps, et comme je ne suis pas très doué :oops: je n'ai pas réussi à faire tourner ton script pour le moment.J'essayerai avec la v2 un soir de la semaine. Merci pour le partage !!!
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

thom@s a écrit :Je n'ai pas eu beaucoup de temps, et comme je ne suis pas très doué :oops: je n'ai pas réussi à faire tourner ton script pour le moment.J'essayerai avec la v2 un soir de la semaine. Merci pour le partage !!!
Je peux t'aider si tu me donnes le message d'erreur...
Répondre