[Python] Valeur d'une variable envoyee par SMS FREE

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.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

[Python] Valeur d'une variable envoyee par SMS FREE

Message par patrice »

Bonjour,

Je poste ici un script python qui récupère une variable Domoticz et l'envoie par SMS via l'api de chez Free
Si votre opérateur n'est pas Free il faudra adapter le script suivant les spécifications.
Ce module nécessite la présente du module requests python (sudo pip install requests)

Plusieurs paramètres sont nécessaires , regardez le code du script il est assez explicite pour comprendre les valeurs a renseigner dans la partie haute
Un mode debug est prévu qui affiche les valeurs que l'on manipule dans ce script , passez à 1 pour voir puis à 0 quand ca marche
Copiez ce script, faites un chmod +x pour le rendre executable, lancez le par un ./lenomduscript
Lorsque cela fonctionne placez le dans un crontab, liez le à un switch domoticz ou comme bon vous semble


Pour que ce script fonctionne il faut l'IDX de la variable Domoticz
Pour l'obtenir un http://IP:port/json.htm?type=command&param=getuservariables affiche la liste de toutes les variables, trouvez la votre et l'idx associé que vous configurerez dans le script python à la ligne idx=???


Je poste le script ici

Code : Tout sélectionner

#!/usr/bin/python
# -*- coding: utf-8 -*-


# il faut le module requests 
# sudo pip install requests 

# on retire une varaible avec son idx
#et on envoie un sms via https de chez free

import os
import requests

############# Parametres ################################# 


#debug = 1 on affiche les chaines de caracteres recues
debug=1


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

domoticz_ip='192.168.1.81'
domoticz_port='8080'


# l'idx de la variable
# a recuperer avec un 
# http://IP:port/json.htm?type=command&param=getuservariables
# on trouve ainsi l'idx de la variable à utiliser ici

idx="3"

# les user et pass de free

free_user="xxxxxx"
free_pass="yyyyyyyyy"


# fin du parametrage #
###############  fin des parametres #############################

#le terme a rechercher dans le resultat JSON
terme="Value"

# l URL Domoticz pour recuperer la variable
json_url1='/json.htm?type=command&param=getuservariable&idx='
url_free1='curl -s -i -k "https://smsapi.free-mobile.fr/sendmsg?user='
url_free2="&pass="
url_free3="&msg=ma variable : "

#curl -s -i -k "https://smsapi.free-mobile.fr/sendmsg?user=xxxxx&pass=yyyyyyyyy&msg=$var !!"

requete='http://'+domoticz_ip+':'+domoticz_port+json_url1+idx
r=requests.get (requete).json()
valeur=str(r['result'][0][terme])

url_free=url_free1+free_user+url_free2+free_pass+url_free3+valeur+"\""

result=os.system(url_free)


#print valeur

# main #

    
if debug!=0:
    print "_______________________"
    print ("Requete : ",requete)
    print ("Valeur trouvee : ",valeur)
    print ("url_free",url_free)
    print ("resultat sms",result)
    print "_______________________"
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Biocef
Messages : 39
Inscription : 13 déc. 2014, 14:59

Re: Valeur d'une variable envoyee par SMS FREE

Message par Biocef »

Merci ça va mêtre très utile !

Par contre je rencontre des difficultés ...

Quand je fais un sudo pip install requests j'ai :
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local /lib/python2.7/dist-packages
Cleaning up...
Donc à priori c'est déjà installé.

Je fais un chmod +x sms.sh

Et quand je lance le script j'ai

Avec un ./sms.sh :
-bash: ./sms.sh: /usr/bin/python^M: bad interpreter: No such file or directory
Et avec un sh sms.sh j'ai :
: not foundsms.sh:
: not foundsms.sh:
: not foundsms.sh:
: not found sms.sh:
sms.sh: 11: sms.sh: import: not found
sms.sh: 12: sms.sh: import: not found
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
: not found sms.sh:
sms.sh: 57: sms.sh: Syntax error: "(" unexpected
Et tant que j'y suis, de ce que j'en comprends, il n'envoi que la valeur, à quel endroit peut-on personnaliser le texte envoyé ?
Et dans domoticz la valeur comporte beaucoup trop de décimales :
"Value" : "5.4000000953674"
Est-il possible ne recevoir que les 2 premières par exemple ?
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Valeur d'une variable envoyee par SMS FREE

Message par patrice »

Ah python et ses mystères ...

1 - En effet j'ai l'impression que requests est déja installé

1,5 - Comme le script est du python appelles le sms.py plutot que sms.sh (cp sms.sh sms.py suffira)

1,6 - il faut lancer le script par un ./sms.py

2 - Ouvre ton fichier et supprime la/lignes vides tout en haut du fichier .py , la 1ere ligne DOIT ETRE
#!/usr/bin/python et pas du blanc

3- En effet il n'y a que la valeur envoyée, pour mettre du texte retrouve la ligne url_free3="&msg="
et fais un truc comme

url_free3="&msg=mon texte que je veux envoyer"

la valeur de la variable se rajoute apres ca toute seule

4 - Oui en effet ça fait désordre
Dans le script trouve la ligne

Code : Tout sélectionner

valeur=str(r['result'][0][terme])
et ajoute en dessous

Code : Tout sélectionner

valeur=eval(valeur)
valeur= "{0:.2f}".format(valeur)
valeur=str(valeur)
tout ca au dessus de

Code : Tout sélectionner

url_free=url_free1+free_user+url_free2+free_pass+url_free3+valeur+"\""
au final on a

Code : Tout sélectionner

valeur=str(r['result'][0][terme])
valeur=eval(valeur)
valeur= "{0:.2f}".format(valeur)
valeur=str(valeur)
url_free=url_free1+free_user+url_free2+free_pass+url_free3+valeur+"\""
A noter que sur la ligne valeur= "{0:.2f}".format(valeur) le 2f donne le nombre de décimales souhaitées 0f affiche 0 chiffre apres la virgule

Ouf ...
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Biocef
Messages : 39
Inscription : 13 déc. 2014, 14:59

Re: Valeur d'une variable envoyee par SMS FREE

Message par Biocef »

Merci pour ton aide, j'apprends pleins de choses grâce à ce forum !

Un ./sms.py donne toujours l'erreur
-bash: ./sms.sh: /usr/bin/python^M: bad interpreter: No such file or directory
Il n'y a pas de ligne vide au début du script, il commence bien par #!/usr/bin/python, j'ai fait un chmod +x sms.py.

si je regarde dans le dossier /usr/bin je vois bien python (et un python2)
Doume
Messages : 550
Inscription : 28 déc. 2014, 10:27
Localisation : Nord (59)
Contact :

Re: Valeur d'une variable envoyee par SMS FREE

Message par Doume »

Attention : Ta 1ère ligne contient une fin de ligne DOS
le signe ^M est incorrect en Linux ! ! ! !

Il faut utiliser un éditeur Linux, pas Windows !
C'est pour cela qu'il ne sait pas lancer l'interpréteur
Biocef
Messages : 39
Inscription : 13 déc. 2014, 14:59

Re: Valeur d'une variable envoyee par SMS FREE

Message par Biocef »

Ça marche, je l'ai converti avec nano, effectivement il était en format dos ...

Merci beaucoup pour ton aide, j'ai réussi à tout bien mettre au point grâce à vous et j'ai appris plein de choses !

J'ai maintenant un réveil qui s'adapte pour me réveiller plus ou moins tôt en fonction de la température extérieure ainsi qu'une notification par sms de la température la plus basse de la nuit ce qui me permet de m'affranchir de toute application de notification sur mon smartphone. J'ai également pu mettre en place un thermostat pour faire fonctionner un chauffage d'appoint la nuit dans la chambre de mon bébé.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Valeur d'une variable envoyee par SMS FREE

Message par patrice »

Yeah, Super, Félicitations

Impeccable de recevoir un SMS pour éviter que le bébé ne gèle plus la nuit :oops:

Serait ce trop abuser que de te demander de reprendre le premier post et de le marquer avec la petite coche verte ci dessus pour le marquer réglé.

Et à bientôt pour de nouvelles expériences
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Répondre