A l'aide , mon script me rend dingue !

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 <\>.
herisson69
Messages : 16
Inscription : 23 mars 2020, 10:37

A l'aide , mon script me rend dingue !

Message par herisson69 »

Bonsoir. Bon le titre est racoleur !
En bref, j'ai installer une framboise avec Raspisms et tout qui va bien pour créer un serveur sms. Ca c'est ok ! (J'avais des trucs qui traînait dans mes tiroirs). J'ai une autre framboise avec domoticz qui tourne très bien.
Je suis pas un geek complet, juste un bidouilleur et j'ai monté tout ça pour que Domoticz m’envoie un sms lors d'un événements, en l’occurrence pour l'heure quand mon filtre bloqueur de pub perd les pédales. Pourquoi ? Car mon bloqueur de pub est un système maison à base de framboise (encore !) et de l’excellent Pihole, qui au passage me sert de serveur DNS et de serveur DHCP, donc si il a ces humeurs c'est toute ma maisonnée qui me tombe dessus; voilà le cadre est posé.
J'en arrive donc à imaginer un script dans Domoticz, déclenché par un blocky. Ce script ne fait que mettre en forme une requête HTTP avec l'API de Raspisms. Par l'exemple voilà :

Code : Tout sélectionner

curl -X POST "$url/api/scheduled/" -H "X-Api-Key: $Api_key" -d "text=$msg_sms" -d numbers=%2B$num  | jq '.error'
c'est la ligne principale de mon script bash. avec :

Code : Tout sélectionner

"$url/api/sheduled/"
une variable qui pointe sur mon serveur Raspisms

Code : Tout sélectionner

$Api_key
la variable qui est la clé de l'API générer dans mon serveur Raspisms

Code : Tout sélectionner

$msg_sms
la variable message à envoyer

Code : Tout sélectionner

$num
la variable numéro du téléphone à contacter par sms (le mien bien sur)
tout ça reprend la doc de Raspisms (https://documentation.raspisms.fr/devel ... rview.html) et ça fonctionne ! J'ai mon script qui s'execute et me retourne les variables sous format json, formater par jq. J'en suis encore tout surpris ! Je n'ai pas de connaissance suffisante à pondre un script bash mais voilà !
NON mon problème, et j'en appel à la communauté des féru de code, c'est le

Code : Tout sélectionner

| jq '.error'
.
Cette commande me retourne bien dans le terminal la valeur de l'erreur, 0, 1, 2 etc ... mais je bloque pour aller plus loin. CaD j'aimerais extraire la valeur de clé "error" ET aussi de la clé "message", assigner les valurs de ces 2 clefs à des variables pour pouvoir ensuite traiter le résultat.
Exemple : error = 0 => tout va bien pas d'erreur, error != 0 => à là il y a problème, retenter la commande curl et remonter la valeur de la clé "message" dans un log, qui serais accessible dans Domoticz.
Une première difficulté arrive quand la valeur de la clé "error" est 0; alors la clé "message est "null" et ça apparemment jq aime pas du tout ! Je me perd dans les manuels et les tuto sur jq sans rien comprendre du tout à la fin !

Voilà, je suis conscients qu'il doit exister une autre méthode pour réaliser cela, mais je voulais tester l'écriture de script (pour l'écriture d'un plugin en python, on verra plus tard !) et de plus avoir un serveur de sms maison à dispo m'intéresse beaucoup et me permet de me passer de serveur externe ou apk divers sur mon smartphone (tous payant en outre ! Le service se paye et c'est normal).

Je vais continuer à modifier mon script, je suis tenace mais bon, "taper du code bash" sans la moindre base de language (enfin presque j'ai goûté au Basic, assembleur et autre C++ mais c’était il y a plus de 25 ans !!! Une période ou on voulait nous apprendre la programmation informatique sur des ordinateurs antédiluvien et pourtant c'était à l'IUT en formation d'ingénieur ! que j'ai pas fini d'ailleurs fermé la parenthèse que j'ai pas ouverte).

Merci de votre attention, et si ça intéresse le serveur Raspisms est top, une framboise, un clé modem gsm et hop une passerelle sms en réseau pleine de promesse !
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: A l'aide , mon script me rend dingue !

Message par Chrominator »

Essaye

Code : Tout sélectionner

| jq '.error,  .message'
Ça ne devrait pas poser de problème même si message est null, pas planter en tout cas.
Tu récupèreras les deux valeurs.

Sache que la prochaine version de dz te permettra d'utiliser clickatell, une passerelle commerciale intégrée pour envoyer des sms.
Si tu n'as pas besoin de plus de 3 destinataires et leur n° de téléphone, l'usage est gratuit.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
herisson69
Messages : 16
Inscription : 23 mars 2020, 10:37

Re: A l'aide , mon script me rend dingue !

Message par herisson69 »

Merci pour la réponse ! Quand je vois que c'est si simple, juste une question de parenthèse mal placée !!! Bref faut vraiment que je me trouve un cours pour "débutant simplet" sur jq !

Pour clickatel, ok mais voilà tu as écris ce qui me coince : "une plateforme commercial". par choix je préfère le fait maison à la main !

Merci encore j'avance et c'est bien.

Bon juste comme ça sans vouloir abuser, maintenant que le terminal me retourne mes deux clefs, comment je fais moi pour attribuer leur valeur à une variable ?? Je vais faire des tests sur mon script mais une idée je suis preneur !

Merci
herisson69
Messages : 16
Inscription : 23 mars 2020, 10:37

Re: A l'aide , mon script me rend dingue !

Message par herisson69 »

Code : Tout sélectionner

#!/bin/bash
#Ce script est un essai pour automatisé  envoi de sms depuis domoticz
#simplement en appelant le script sur action on ou action off
#en utilisant un serveur Raspisms et en envoyant une requete à l'API de RAspisms

#renseigner les éléments ci-dessous
url="http://abc.def.ghi.jkl/raspisms" #url du serveur raspisms
Api_key="¤¤¤¤¤¤¤¤APIKEY¤¤¤¤¤¤¤¤¤¤¤¤¤¤" #api key générer par le serveur
msg_sms="pihole%20blocking%20is%20disable" #le message %20 est un espace
#numero de telephone avec l'indicatif international France33 sans le signe + ni le 0
num=33¤¤123456789¤¤

sms="SMS non envoyé ! Erreur ! Code erreur" #pour éviter de copier le texte à chaque boucle if

error=$(curl -s -X POST "$url/api/scheduled/" -H "X-Api-Key: $Api_key" -d "text=$msg_sms" -d numbers=%2B$num  | jq -r .error )

echo $error

#jq -r . $reponse

#echo $reponse
if [ $error = 0 ]
        then
        echo "Message envoyé"
elif [ $error = 1 ]
        then
        echo $sms $error " Identifiant invalide, Vérifier la cle API"
elif [ $error = 2 ]
        then
        echo $sms $error "Une donnée non valide a été trouvé dans la requête"
elif [ $error = 4 ]
        then
        echo $sms $error "Il manque un paramètre à la requête"
elif [ $error = 8 ]
        then
        echo $sms $error "Requête SMS impossible"
fi

Voilà ou j'en suis la variable $error est crée avec la requête curl d'envoi du sms

Code : Tout sélectionner

api/sheduled
.
Un ensemble de boucle if/elif/then renvoi au terminal le résultat de la requête.
C'est simple, bourrin mais ça fonctionne.

Il me reste une dernière chose à inscrire au script, transmètre le résultat dans un log accessible à domoticz pour voir dans l'interface web si il y a eu une erreur ou non. Je m'explique, dans le cas ou mon Pihole est out of curse, je devrais recevoir un SMS, si c'est le cas ok MAIS si c'est pas le cas il faut que je regarde par moi même dans le serveur RAspisms les échecs. Ou avec ma solution du log Domiticz, une ligne écrite dans le fichier log, et hop je sais tout de suite, partant que c'est en regardant l'état de Pihole dans domoticz qui m'indiquera un problème (état On ou OFF).
Je sais que l'on peut simplement écrire dans un fichier en bash par

Code : Tout sélectionner

> mon_fichier_log.txt
MAIS est-ce que Domoticz va comprendre que c'est un log ??? Je pense pas . Donc je cherche.

Merci.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: A l'aide , mon script me rend dingue !

Message par Keros »

Si tu veux envoyer du texte dans DomoticZ, tu peux créer un dispositif virtuel de type Texte et y envoyer le texte via une commande HTTP avec l'API : https://www.domoticz.com/wiki/Domoticz_ ... ext_sensor
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
herisson69
Messages : 16
Inscription : 23 mars 2020, 10:37

Re: A l'aide , mon script me rend dingue !

Message par herisson69 »

Merci Keros; la voilà la grande idée ..... enfin non !
Bon je coince au niveau syntaxe !
J'ai tester en envoyant la commande :

Code : Tout sélectionner

http://192.168.x.x:8080/json.htm?type=command&param=addlogmessage&message=PIhole disconnected send SMS Ok
Ca fonctionne j'ai un retour sous format json dans le navigateur et mon message dans les logs. oui précisons que j'ai lu les modèle de commande de l'API/Json et je suis tomber sur le "addlogmessage" pour essayer.
Oui mais voilà !
Dans mon script ça veux pas le faire !
j'ai ajouter dans le premier if :

Code : Tout sélectionner

curl 'http://192.168.x.x:8080/json.htm?type=command&param=addlogmessage&message=PIhole disconnected send SMS Ok'
retour dans le terminal :

Code : Tout sélectionner

0
Message envoyé
<html><head><title>Bad Request</title></head><body><h1>400 Bad Request</h1></body></html
Et bien sur pas de message dans le log ! D'après ce que je comprend il me retourne une erreur d'entête html ? Mais je comprends pas pourquoi !
herisson69
Messages : 16
Inscription : 23 mars 2020, 10:37

Re: A l'aide , mon script me rend dingue !

Message par herisson69 »

Allez hop je me répond !
dans la requête curl PAS D'ESPACE !
donc le message doit s'écrire

Code : Tout sélectionner

 .....message=PIHOLE%20disconnected%20send%20SMS%20OK
Je deviens presque intelligent !
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: A l'aide , mon script me rend dingue !

Message par Keros »

Les requêtes n'ont généralement pas d'espace, je pense que ton erreur vient de là.

Essaye peut-être en remplaçant les espaces par &nbsp; ou %20

Edit : Salut herisson69, on s'est croisé :)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
herisson69
Messages : 16
Inscription : 23 mars 2020, 10:37

Re: A l'aide , mon script me rend dingue !

Message par herisson69 »

Je remercie les personnes qui me s ont venues en aide.
Mon script est fini, ça fonctionne au poil.
Et je suis très content d'avoir soulever le voile de la programmation, même si ça peut paraître un poil prétentieux !
Je comprends mieux la logique du domoticz, et ça m'a permis de découvrir un monde d'infini possibilité, YES !

PS: Pour ceux que ça intéresse je peux mettre le script final !
Voilà !
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: A l'aide , mon script me rend dingue !

Message par Keros »

Mets-nous ton script, il pourra en aider d'autres à son tour ;)

Bonne découverte de ce monde de la domotique
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre