[Bash] Changement aléatoire couleur led
Publié : 15 oct. 2015, 19:41
Bonjour,
Voici un petit script shell qui casse pas trois pattes à un canard mais qui me permet de faire varier aléatoirement la couleur de mon ruban led:
Toute modification, correction, amélioration est la bienvenue !
TODO list:
- Eviter qu'une commande off soit envoyée alors que les 2 autres sont aussi à off
- Gérer aléatoirement les niveaux d'intensité de chaque led pour multiplier le nombre de couleurs (aujourd'hui c'est tout ou rien)
AMELIORATION ULTIME : Détecter les BPM d'une musique (lue d'un serveur MPD of course) et changer la couleur à chaque pic
Voici un petit script shell qui casse pas trois pattes à un canard mais qui me permet de faire varier aléatoirement la couleur de mon ruban led:
Code : Tout sélectionner
#!/bin/bash
# on définit les IDX des 3 led (il faut avoir ajouté les 3 switch indépendants pour chaque couleur)
id_red=12
id_green=13
id_blue=14
# on définit l'IDX du switch pour le lancement du script
id_switch=24
# les mini maxi pour la fonction random
min_id=$id_red
max_id=$id_blue
# on définit l'état initial de l'interrupteur pour démarrer la boucle
sw_status=$(curl -s "http://192.168.1.2:8080/json.htm?type=devices&rid=$id_switch" | jq .result[].Status)
# on lance notre boucle
while test $sw_status == "\"On\""
do
# on définit aléatoire la led et son statut
rd_id=$[($RANDOM % (($max_id-$min_id)+1))+$min_id]
rd_status_bool=$(($RANDOM % 2))
# on transforme le statut en texte
if [ $rd_status_bool -eq 1 ]
then
rd_status="On"
else
rd_status="Off"
fi
# on vérifie le statut de la led que l'on va piloter pour ne pas lui envoyer une commande identique
led_status=$(curl -s "http://192.168.1.2:8080/json.htm?type=devices&rid=$rd_id" | jq .result[].Status)
if [ "\"$rd_status"\" == $led_status ]
then
continue
fi
# on lance la commande json correspondante
curl "http://192.168.1.2:8080/json.htm?type=command¶m=switchlight&idx=$rd_id&switchcmd=$rd_status&level=0&passcode="
# on attend 2s avant de recommencer la boucle (sinon c'est trop rapide et ça a tendance à bugguer)
sleep 2
# on vérifie l'état de l'interrupteur pour éventuellement arrêter la boucle
sw_status=$(curl -s "http://192.168.1.2:8080/json.htm?type=devices&rid=$id_switch" | jq .result[].Status)
done
TODO list:
- Eviter qu'une commande off soit envoyée alors que les 2 autres sont aussi à off
- Gérer aléatoirement les niveaux d'intensité de chaque led pour multiplier le nombre de couleurs (aujourd'hui c'est tout ou rien)
AMELIORATION ULTIME : Détecter les BPM d'une musique (lue d'un serveur MPD of course) et changer la couleur à chaque pic