je me suis effectivement inspiré du travail fait sous jeedom ! (merci à eux)
N'ayant pas trouvé comment déclencher un script sur mon pi via une url à partir d'une autre machine je passe par ssh2.
Mon premier script sur le nas passe une commande de type ssh au pi.
Pour ça il faut installer la librairie libssh2 sur le pi
Code : Tout sélectionner
sudo apt-get install libssh2-1
Code : Tout sélectionner
sudo apt-get install php-ssh2
Dans Web Station, aller dans Paramètre PHP, sélectionner la ligne PHP, cliquer Modifier, puis dans Extensions cocher SSH2.
Sur le nas j'ai un script qui sera appelé par IFTTT (pour répondre à par exemple ok google quelle est la température de la salle de bain) qui déclenchera le script sur le pi....(faut suivre !!)
J'ai créé un user sur le nas qui n'a accès qu'à l’exécution de scripts dans un dossier sous www
script sur le nas :
Code : Tout sélectionner
<?php
$hostname = 'IP_RASPBERRY'; // adresse de la machine distante (adresse ip ou nom de domaine)
$known_host = 'xxxxxxxxxxxxxxxxxxxxxxxxx'; // fingerprint de la machine distante
$username = 'xxxxxxxxxxx'; // nom de l'utilisateur pour la machine distante
$password = 'xxxxxxxxxxx'; // mot de passe de l'utilisateur
$commande = '///home/pi/domoticz/scripts/sh/xxxxxxxxxxx.sh'; // commande shell à envoyer à la machine cible
// Etablissement de la connexion ssh2, port 22
if (false === $connection = ssh2_connect($hostname, 22)) {
echo 'pas de connexion<br />';
exit(); // sortie si erreur
}
else {
echo 'connexion établie<br />';
}
// Vérification du fingerprint
$fingerprint = ssh2_fingerprint($connection, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
if ($fingerprint != $known_host) {
echo "La clé hôte ne correspond pas !<br />";
echo "clé renvoyée: ".$fingerprint.'<br />';
exit(); // sortie si erreur
}
else {
echo "fingerprint conforme <br />";
}
//authentification utilisateur
if (false === ssh2_auth_password($connection, $username, $password)) {
echo 'Echec identification<br />';
exit(); // sortie si erreur
}
else {
echo 'Identification réussie !<br />';
}
//exécution command shell sur la machine destinataire
if (false === $stream = ssh2_exec($connection, $commande)) {
echo "erreur d'exécution commande shell<br />";
}
fclose($stderr);
fclose($stream);
?>
Ensuite la partie TTS (sur le raspberry) :
Il faut installer stream2chromecast, de mémoire j'ai installé également pico2wave, sox et un module MP3
Code : Tout sélectionner
sudo apt-get install sox
Code : Tout sélectionner
sudo apt-get install libsox-fmt-mp3
Code : Tout sélectionner
#!/bin/bash
function jsonValue() {
KEY=$1
num=$2
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}
DOMOTICZ=`curl -s --connect-timeout 2 --max-time 5 "http://IPDOMOTICZ:8080/json.htm?type=devices&rid=42"`
if [ -z "$DOMOTICZ" ]
then
exit 1
else
DATA=$(echo $DOMOTICZ | jsonValue Data 1)
#echo $DATA
DATACLEAN="$(sed 's/.* \([0-9.]\{1,\}\) .*/\1/g' <<< "${DATA}")" #enléve Watt après le résultat
#echo $DATACLEAN
DATACLEAN2=${DATACLEAN%%.*} #arrondi en nombre entier ex : 605.0 devient 605
#echo $DATACLEAN2
#DATACLEAN3="$(sed 's/\./\,/g' <<< "${DATACLEAN2}")" #remplace le point par la virgule
fi
sudo pico2wave -l fr-FR -w /tmp/MonMessage.wav "la consommation électrique instantanée est de $DATACLEAN2 watt"
# on récupère la variable texte et on la transforme en fichier wave
sudo sox /tmp/MonMessage.wav -r 48k /tmp/MonMessage.mp3
# on la passe en MP3 en débit 48 K pour réduire sa taille et on la stocke dans un répertoire temporaire - vous pouvez changer la valeur de 48 K
sudo python /home/pi/stream2chromecast/stream2chromecast.py -devicename 192.168.1.62 /tmp/MonMessage.mp3
# alors la on se trompe pas : /home/pi/stream2chromecast/stream2chromecast.py doit bien correspondre à votre répertoire
# -devicename 192.168.1.26 : remplacer l'IP google home par la votre .....
# sudo python : on exécute le code python avec les doits sudo
un coup de chmod +x nomduscript
et test pour voir...ou entendre si tout va bien !!
comme à chaque fois y a surement mieux mais ça fonctionne et sans laisser accessible tout domoticz sur le cloud...