Page 1 sur 1

[Bash] Changement aléatoire couleur led

Publié : 15 oct. 2015, 19:41
par kerherno
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:

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&param=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
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