Tu pourras peut-être t'inspirer de celui-là.
Je m'en sers tous les matins pour me réveiller avec la radio depuis plus de 2 ans.
J'ai un interrupteur dans DZ avec un planning.

- Screenshot_2020-02-15 Domoticz.png (21.18 Kio) Consulté 5507 fois
exec.sh c'est simplement ça dans domoticz/scripts
Code : Tout sélectionner
#!/bin/sh
/home/pi/domoticz/scripts/$1 $2 $3 $4 $5 $6 $7 $8 $9> /dev/null 2>&1 &
Le script pour piloter les soundtouch :
Code : Tout sélectionner
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''-------------------------------------------------------------------------------------------------
Script permettant de créer une zone multiroom Bose avec toutes les enceintes
Auteur : Chrominator
Version 0.1
Changes :
2017-11-26 : Version initiale
Principe : Récupère les paramètres enceinte maîtresse, volume du son, présélection
et crée une zone multiroom avec toutes les enceintes trouvées.
les paramètres sont --volume <volume_level> -master <master_device> -preset <# preset> -s <switch on or off>
Le switch on crée la zone multiroom, off la supprime et éteint les enceintes.
exemples : bose_all.py --master bureau --volume 10 --preset 6 -s on
bose_all.py -s off
-------------------------------------------------------------------------------------------------'''
import sys, getopt
import os
import urllib
import requests
import libsoundtouch # https://github.com/CharlesBlonde/libsoundtouch
from libsoundtouch import discover_devices
from libsoundtouch import soundtouch_device
from libsoundtouch.utils import Source, Type
from libsoundtouch.device import NoSlavesException, NoExistingZoneException, \
Preset, Config, SoundTouchDevice, SoundtouchInvalidUrlException
from urllib.request import urlopen
URL_DOMOTICZ = 'http://127.0.0.1:8080/json.htm?type='
def DomoticzData(cmd, get=False):
url = URL_DOMOTICZ + cmd
result = requests.get(url)
def SendMessage(msg, colour="SaddleBrown", bg="LemonChiffon"):
data = urllib.parse.quote('<COLOR="' + colour + '" style="BACKGROUND-COLOR: ' + bg + '">' + os.path.basename(__file__) + ' : ' + msg + '</font>')
cmd = "command¶m=addlogmessage&message=" + data
DomoticzData(cmd)
print(os.path.basename(__file__) + ' : ' + msg)
def main(argv):
volume = '' # Niveau de volume initial pour la création du groupe multiroom, de 1 à 100.
masterdev = '' # Nom de l'enceinte qui commandera le groupe multiroom.
master = ''
chaine = '' # Preset à sélectionner pour le multiroom : de 1 à 6, correspondent aux boutons de la télécommande.
switch = '' # Spécifie si on crée le multiroom ou si on le supprime : ON ou OFF.
try:
opts, args = getopt.getopt(argv,"hv:m:p:s:",["volume=","master=","preset=","switch="])
except getopt.GetoptError:
SendMessage (os.path.basename(__file__) + ' -v <volume_level> -m <master_device> -p <preset> -s <switch on or off>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
SendMessage (os.path.basename(__file__) + ' -v <volume_level> -m <master_device> -p <preset> -s <switch on or off>')
sys.exit()
elif opt in ("-v", "--volume"):
volume = arg
elif opt in ("-p", "--preset"):
chaine = arg
elif opt in ("-s", "--switch"):
switch = arg
elif opt in ("-m", "--master"):
masterdev = arg
if switch.upper() not in ("ON", "OFF"):
SendMessage('--switch : Le switch doit être ON ou OFF')
sys.exit(2)
devices = discover_devices(timeout=5)
for device in devices:
SendMessage ("Enceinte " + device.config.name + " mise hors fonction.")
device.power_off()
if switch.upper() != "ON":
SendMessage ("Arrêt du multiroom.")
sys.exit(2)
if masterdev == '':
SendMessage ('Aucune enceinte maître définie : Arrêt du programme')
sys.exit(2)
if chaine == '':
chaine = '0'
SendMessage ('Présélection sélectionnée par défaut')
elif not chaine.isnumeric():
SendMessage ('Présélection ' + chaine + ' invalide. Valeurs autorisées de 1 à 6')
sys.exit(2)
elif int(chaine) not in range(1, 7):
SendMessage ('Préselection ' + chaine + ' invalide. Valeurs autorisées de 1 à 6')
sys.exit(2)
if volume == '':
volume = '20'
SendMessage ('Volume sélectionné par défaut.')
elif not volume.isnumeric():
SendMessage ('Le volume doit être compris entre 1 et 100.')
sys.exit(2)
elif int(volume) not in range(1, 101):
SendMessage ('Le volume doit être compris entre 1 et 100.')
sys.exit(2)
SendMessage ('Preset is set to ' + chaine)
SendMessage ('Volume is set to ' + volume)
SendMessage ('Master device is set to ' + masterdev)
#Noms des enceintes et types
for device in devices:
if device.config.name.upper() == masterdev.upper():
device.create_zone(devices)
master = device
device.set_volume(int(volume))
SendMessage ('Device trouvé: ' + device.config.name + " - " + device.config.type + " - volume forcé à " + str(device.volume().actual))
if master == '':
SendMessage ("L'enceinte " + masterdev + " n'existe pas. Arrêt du programme.")
else:
# Nombre d'enceintes en multiroom
SendMessage ('Multiroom activé sur ' + str(len(devices)) + ' enceintes.')
#ici on récupere les presets
presets = master.presets()
index = int(chaine)-1
SendMessage ('Préselection n°' + chaine + ' choisie : ' + presets[index].name + ' ' + presets[index].source)
master.select_preset(presets[index]) # 6 presets de 0 à 5
if __name__ == "__main__":
main(sys.argv[1:])
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