📢 Diffuseur de messages sonores

Bonjour Ă  tous,

sur le forum, plusieurs fois j’ai retrouvĂ© la question « Comment Ă©mettre des messages sonores avec l’IPX800 ? Â».
Certains membres de la communauté ont opté pour des diffusions sur enceintes connectées, je vais vous présenter ici un moyen simple et autonome.

Introduction

Il existe un grand choix d’appareils ou de cartes ayant pour fonction de diffuser des messages pré-enregistrés en fonction de déclencheurs. Certains ont une mémoire flash de 2 à 16 MB, d’autres ont une carte SD. Souvent les cartes se comportent comme une clé USB qu’il suffit de brancher sur le PC afin d’y déposer ses propres fichiers MP3, WAVE ou OGG, en fonction des formats supportés.

DY-HV20T

A ma disposition, j’ai la carte DY-HV20T.
image

Cette carte possède un emplacement où insérer une carte Micro SD, 32 GB maximum.
Les fichiers stockés sur la carte SD doivent être nommés avec un préfixe sur 5 chiffres correspondant à la séquence du fichier.

Exemples de noms autorisés :

  • 00001.mp3 correspond au fichier sĂ©quence 1
  • 00008 annonce nouveau message.mp3 correspond Ă  la sĂ©quence 8.

Exemple de contenu :

Les modes de diffusion sont programmables par micro DIP.

Control Mode DIP 3 DIP 2 DIP 1
IO integrated Mode 0 0 0 0
IO integrated Mode 1 0 0 1
IO Independent Mode 0 0 1 0
IO Independent Mode 1 0 1 1
UART Mode 1 0 0

Principe général : les entées IO0 à IO7 sont à l’état HIGH (1) par défaut. Elles sont actives à l’état LOW (0).

Les 2 modes « IO Independent Â» permettent la diffusion de 8 fichiers diffĂ©rents, chacun correspondant Ă  une IO.
Les 2 modes 'IO Integrated" permettent la diffusion de 255 fichiers différents, en combinant les 8 IO (IO0 à IO7).
Exemples :

  • Si IO0 est passĂ©e Ă  l’état LOW, le fichier 1 (20) est jouĂ©
  • Si IO1 ET IO3 sont toutes 2 passĂ©es Ă  l’état bas simultanĂ©ment, le fichier numĂ©ro 10 (21 + 23)
  • Si les 8 IO sont reliĂ©es au GND, le fichier 255 (20 + 21 + 22 + 23 + 24 + 25 + 26 + 27) est lu

Dans ce tutoriel, nous utiliserons les Modes Independent IO et UART.
La programmation relative aux modes IO Integrated vous est présentée sous forme de diagramme dans un message plus bas.

Les modes avec IO indépendantes

Dans ces 2 modes, Il est possible de jouer 8 fichiers maximum.
Pour diffuser un message, il suffit de relier l’IO correspondante au GND pour la faire passer à l’état LOW (0).

IO Fichier lu
IO1 00001.mp3
IO2 00002.mp3
IO3 00003.mp3
IO4 00004.mp3
IO5 00005.mp3
IO6 00006.mp3
IO7 00007.mp3
IO8 00008.mp3

Exemple de connexion Ă  une extension X-8R

Sur l’IPX800 V4 ou V5, il suffit de fermer un relais pour que le fichier correspondant soit lu (l’IO du module passe à 0).
Sur le schéma, j’ai représenté une connexion sur un haut parleur. Ceci permet la construction d’appareils autonomes.
Pour les tests, j’ai connecté la sortie Jack sur l’entrée AUX d’un appareil audio.
Cela permet d’appliquer un volume sonore plus élevé à la diffusion.

IO Independant Mode 0

image

Ce mode permet de jouer un fichier dès que l’entrée correspondante passe à l’état bas.
Il suffit d’une impulsion pour lancer la lecture complète du fichier.
Le fichier est lu jusqu’à réception d’une autre impulsion. Dans ce cas, la lecture est interrompue et la diffusion du nouveau fichier commence.
Il est possible de jouer 8 fichiers maximum

Programmation sur IPX800 V4
pour lire un fichier audio, il suffit de fermer le relais correspondant, une impulsion suffit. Cependant, pour plus de facilité, nous maintiendrons le relais fermé toute la durée du MP3.

  • CrĂ©ez une sortie virtuelle « BUSY-MP3 Â» et une autre « BUSY-MP3a Â»

  • RĂ©glez le TB de chaque relais en fonction de la durĂ©e du fichier MP3 liĂ©

  • Écrivez ces 2 scĂ©narii qui dĂ©terminent si le lecteur est occupĂ©

    • Busy 1
      événement : RELAIS1OURELAIS2OURELAIS3OURELAIS4
      Action : ON/OFF
      RĂ©sultat : BUSY-MP3b
    • Busy 2
      événement : BUSY-MP3bOURELAIS5OURELAIS6OURELAIS7OURELAIS8
      Action : ON/OFF
      RĂ©sultat : BUSY-MP3
  • Écrivez un scĂ©nario pour chaque relais :

    • relais 1 sur condition 1
      Événement :NONBUSY-MP3ETCONDITION1
      Action : ON
      RĂ©sultat : RELAIS1
    • …
    • Relais 8 sur condition 8
      Événement :NONBUSY-MP3ETCONDITION8
      Action : ON
      RĂ©sultat : RELAIS8

Programmation sur IPX800 V5
Les relais sont pilotés via une impulsion.
Créez 8 objets impulsion avec TA=0 et TB=1, liez chaque impulsion à l’entrée CMD d’un relais.

Créez 8 scènes pour piloter les relais (remplacez CONDITIONx par l’événement que vous souhaitez)
CONDITION1 ON PULSE1.START
CONDITION2 ON PULSE2.START
CONDITION3 ON PULSE3.START
…
CONDITION8 ON PULSE8.START

Pour bloquer toute nouvelle diffusion pendant la lecture d’un fichier, vous pouvez vous reporter à l’exemple suivant concernant le Mode 1

IO Independant Mode 1

image

Ce mode permet de jouer un fichier tant que l’entrée correspondante passe à l’état bas.
Le fichier est lu en entier à moins qu’une autre commande soit reçue. Dans ce cas, la lecture est interrompue et la diffusion du nouveau fichier commence.
Il est possible de jouer 8 fichiers maximum.

Exemple de programmation sur IPX800 V4
Rappel : le fichier est lu tant que l’IO correspondante est maintenue à l’état bas, l’IPX800 doit donc fermer le relais pendant toute la durée du message sonore.

La programmation est identique à l’exemple précédent.

Exemple de programmation sur IPX800 V5

  • CrĂ©ez 8 temporisations nommĂ©es BUSY-MP3-1 Ă  BUSY-MP3-8 et rĂ©glez chaque TB Ă  la durĂ©e du fichier correspondant. Liez ces temporisations aux relais correspondants

  • CrĂ©ez ces règles (avec la clause rĂ©sultat vide) qui dĂ©terminent si le player est occupĂ©.
    → règle « OccupĂ©-MP3b Â»
    événement : [BUSY-MP3-1.Output]OU [BUSY-MP3-2.Output]OU [BUSY-MP3-3.Output]OU [BUSY-MP3-4.Output]
    ->règle « OccupĂ©-MP3 Â»
    événement : [règle Occupé-MP3b].resultOU [BUSY-MP3-5.Output]OU [BUSY-MP3-6.Output]OU [BUSY-MP3-7.Output]OU [BUSY-MP3-8.Output]

  • crĂ©ez ces 8 autres règles, chacune pilotant un relais au travers de la temporisation correspondante.
    Nous utiliserons la tuile correspondant à la règle précédente pôur inhiber toute action si le lecteur est occupé
    NON[règle Occupé-MP3].result ET CONDITION1 ON [BUSY-MP3-1.START]
    NON[règle Occupé-MP3].result ET CONDITION2 ON [BUSY-MP3-2.START]
    NON [règle Occupé-MP3].result ET CONDITION3 ON [BUSY-MP3-3.START]
    NON [règle Occupé-MP3].result ET CONDITION4 ON [BUSY-MP3-4.START]
    …
    NON[règle Occupé-MP3].result ET CONDITION8 ON [BUSY-MP3-8.START]

Remarque :
Pour répéter la lecture d’un fichier vocal ou obtenir le son d’une sirène sur une durée plus longue, il est possible d’associer un objet clignotant sur V4 comme sur V5.

Le mode UART

Le mode UART permet la lecture de 65535 fichiers sonores.

  • Avantage : ne consomme aucune EntrĂ©e/Sortie physique sur l’IPX, fonctionne par Push
  • InconvĂ©nient : cette mise en Ĺ“uvre nĂ©cessite l’usage d’une carte Ă  microprocesseur, telle que Rpi, Arduino, ESP32, ESP8266, …
    Nous étudierons ce mode de communication ultérieurement dans une seconde partie.

Autre carte

La carte Adafruit Audio FX permet de jouer 11 morceaux différent grâce à 11 IO, elle se pilote également par port série (UART).
Elle ne comporte pas de commutateur DIP, le mode de diffusion est programmable via un préfixe devant le nom de chaque fichier. Ainsi, chaque fichier peut être diffusé différemment (lecture en boucle, lecture simple, …). Elle prend en charge les fichiers OGG (compressés) et WAV (non compressé).
Voici un tutoriel pour ceux que cela intéresse .

12 « J'aime »

Bonjour,

bravo @fgtoul pour cette intégration.

Pour ceux qui ont une IPX V5, il y a aussi la possibilité d’utiliser les 4 sorties collecteurs ouverts qui permettront la lecture de 15 fichiers.

Bonne journée

aborder les sorties à collecteur ouvert, c’était prévu :wink:

1 « J'aime »

Les modes IO Integrated

Comme annoncé plus haut, les modes IO Integrated permettent de lire 255 fichiers audio en combinant les IO.

IO7 IO6 IO5 IO4 IO3 IO2 IO1 IO0 Fichier lu
1 1 1 1 1 1 1 0 00001.mp3
1 1 1 1 1 1 0 1 00002.mp3
1 1 1 1 1 1 0 0 00003.mp3
1 1 1 1 1 0 1 1 00004.mp3
1 1 1 1 1 0 1 0 00005.mp3
1 1 1 1 1 0 0 1 00006.mp3
1 1 1 1 1 0 0 0 00007.mp3
… … … … … … … … …
0 0 0 0 0 0 0 0 00255.mp3

L’algorithme permettant de déterminer le(s) relais à activer pour diffuser un fichier s’apparente à une conversion binaire sur 8 bits. Si un bit est égal à 1, le relais correspondant est activé.

La méthode pour convertir un nombre décimal en binaire consiste à regarder si chaque puissance de 2 est contenue dans le nombre.

Exemple avec la conversion de 125(décimal) en Binaire :

  • Dans 125 on a 0 fois 128 (128 = 27) → 0
  • Dans 125 on a 1 fois 64 (64 = 26) → 1
    • On retire 64 Ă  125, reste 61
  • Dans 61 on a 1 fois 32 (32 = 25) → 1
    • On retire 32 Ă  61, reste 29
  • Dans 29 on a 1 fois 16 (16 = 24) → 1
    • On retire 16 Ă  29, reste 13
  • Dans 13 on a 1 fois 8 (8 = 23) → 1
    • On retire 8, reste 5
  • Dans 5 on a 1 fois 4 (4 = 22) → 1
    • On retire 4, reste 1
  • Dans 1 on a 0 fois 2 (2 = 21) → 0
  • Dans 1 on a 1 fois 1 (1 = 20) → 1

Nous obtenons 01111101(binaire) en binaire représentant l’état de nos relais R8 à R1, nous activerons donc R7, R6, R5, R4, R3, R1 pour que le module diffuse le message n°125 (IO7, IO6, IO5, IO4, IO3 et IO1 actives à l’état LOW).

Pour ceux que ça intĂ©resse, voici un petit dĂ©codage binaire sur 8 bits pour IPX800 V5 qui permettra d’activer les relais en fonction du nombre (1 Ă  255) introduit dans la variable analogique « NUM MP3 Â».

Ce diagramme se lit du bas vers le haut :

$COMPx$ représente la variable constituée de l’ID de chaque sortie de comparateur.
Ceux qui veulent en savoir plus sur l’usage des variables dans les fonctions peuvent lire ce wiki.
Les flèches en pointillés ne sont représentées que pour aider à la compréhension.

Si le module DY-HV20T est connecté comme sur le schéma plus haut avec la X-8R, nous pouvons le configurer en mode IO Integrated.
En faisant un Set Val 125 dans la variable ANA8, les relais R7, R6, R5, R4, R3, R1 se ferment aussitĂ´t et le DY-HV20T diffuse le message 125.

5 « J'aime »

Bravo @fgtoul ! Redoutable avec des enceintes dédiées.

1 « J'aime »

IO Integrated sur Sorties Ă  collecteur ouvert

Nous avons 4 sorties Ă  collecteur ouvert, nous pouvons donc lire 15 (24 - 1 = 15) fichiers sonores.

Rappel de principe : toutes les entées sont à l’état HIGH par défaut. Elles sont actives à l’état LOW. En fermant une sortie à collecteur ouvert, l’IO correspondante du module est forcée à l’état LOW (0).

Rappel de combinaisons

IO3 IO2 IO1 IO0 Fichier lu
1 1 1 0 00001.mp3
1 1 0 1 00002.mp3
1 1 0 0 00003.mp3
1 0 1 1 00004.mp3
1 0 1 0 00005.mp3
1 0 0 1 00006.mp3
1 0 0 0 00007.mp3
0 1 1 1 00008.mp3
0 1 1 0 00009.mp3
0 1 0 1 00010.mp3
0 1 0 0 00011.mp3
0 0 1 1 00012.mp3
0 0 1 0 00013.mp3
0 0 0 1 00014.mp3
0 0 0 0 00015.mp3

Comme évoqué plus haut, il sera possible de diffuser 15 messages sonores différents en combinant les 4 sorties à collecteur ouvert.

Voici le diagramme des Liens à créer sur IPX800 V5.
En entrant une valeur (1 Ă  15) dans la variable ANA8 « NUM MP3 Â», l’ipx800 dĂ©termine automatiquement les sorties Ă  collecteur ouvert qui doivent ĂŞtre fermĂ©es pour que le module diffuse le message correspondant.

Pour l’utiliser, il suffit donc d’envoyer le numĂ©ro du fichier MP3 Ă  diffuser, par une commande SET VAL dans la variable analogique ANA8 « NUM MP3 Â». Le module dĂ©marre alors la diffusion du message attendu.
Dans les règles pilotant le module DY-HV20T, vous pouvez également empêcher l’interruption d’une diffusion en ne changeant la variable NUM MP3 que lorsque le module n’est pas occupé.

→ règle « OccupĂ©-MP3 Â»
événement :
[Collecteur1.state]OU [Collecteur2.state]OU [Collecteur3.state]OU Collecteur4.state]

Nous utiliserons la tuile de la règle pour conditionner le SET VAL sur « NUM MP3 Â».
Exemple pour un Ă©vĂ©nement « CONDITION1 Â»
Événement :NON[règle Occupé-MP3].result ET CONDITION1
RĂ©sultat : SET VAL valeur 1 ANA8 « NUM MP3 Â»

Configurez le module en mode « IO INTEGRATED MODE 0 Â» (mode impulsion) et ajoutez une tempo de xs pour remettre automatiquement les collecteurs Ă  l’état OFF et le tour est jouĂ©.
X sera égal à la durée du plus long fichier sonore.

4 « J'aime »

@fgtoul

Des images valant 1000 mots…
:pray: :+1: :clap:
Vivement le tuto UART !

Après le RF player, @GCE va t-il nous sortir le Audio Player ? :thinking: :rofl:

3 « J'aime »

GCE a développé un plugin pour quelques streamer.
Là je propose un lecteur de messages pré-enregistrés.
L’avantage dans les schémas présentés jusqu’ici, c’est que nous sommes en filaire, avec jusqu’à 15 fichiers possibles.

Avec l’UART, développement conséquent à faire et perte du 100% filaire.
Je vois si ce n’est pas trop lourd à faire, car il y a quelques points de vigilance tout de même ainsi que quelques routines spécifiques à développer pour un usage domotique.

1 « J'aime »

Bravo et merci @fgtoul. Je cherchais une telle solution depuis longtemps. J’ai une veille V3 que je vais ressortir et qui va reprendre vie pour l’associée à cette carte son !

1 « J'aime »

Bonjour fred,
avec une V3, vu qu’il n’y a pas de scĂ©nario, tu pourras utiliser les 8 relais mais pour avoir plus de 8 fichiers possibles en mode « IO Integrated Â», ce sera forcĂ©ment des commandes passĂ©es via l’API V3 pour l’activation simultanĂ©e de plusieurs relais.
Amuse toi bien :wink:

1 « J'aime »

effectivement, mais comme mon installation est déjà sur une V4, je pense envoyer des pushs de la V4 à la V3 pour activer les relais.
A+

Bonjour Ă  tous,
quelques remarques :

DĂ©pose des fichiers sur carte SD :

lorsque nous demandons la diffusion du fichier numéro 1 quel que soit le mode de communication, le module diffuse le fichier déposé en premier sur la carte, ce qui n’est pas forcément le fichier 0001.mp3.

Pour résoudre ce petit problème, faire le dépôt des fichiers en respectant cette procédure sur PC :

  • formatez la carte SD
  • sur PC, prĂ©parez d’abord les fichiers :
    • renommez les fichiers mp3 selon la règle de nommage imposĂ©e (prĂ©fixe numĂ©rique 5 digits)
    • triez les fichiers par nom
  • glissez/dĂ©posez les fichiers sur carte SD

En suivant cette procédure, les fichiers devraient généralement être déposés dans le bon ordre sur la carte, de cette manière, le fichier diffusé correspondra au fichier demandé.

Enregistrement des MP3

Pensez à enregistrer vos messages vocaux avec environ 1/2 à 1 seconde de silence au début.
En effet, lorsque les relais s’activent un à un pour créer la combinaison (mode IO Integrated), il se peut que le module commence à diffuser avant la fin de la commande puis s’interrompt brusquement, ceci parfois à répétition. Cela génére des bribes sonores.
Le silence d’une seconde en début d’enregistrement évitera les effets sonores désagréables.

oui, c’est bien ça.

Fais nous un retour dès que possible, quelle que soit la solution adoptée :slight_smile:

EDIT : sur la V3 il est possible de lier une entrée à plusieurs relais via les cases à cocher.
Ainsi, en liant une entrée virtuelle 1 à 32 (100 à 131 pour l’API) aux relais formant la combinaison, il est possible d’envoyer un seul push vers cette entrée virtuelle.
Cela permet donc de pouvoir diffuser jusqu’à 32 fichiers différents sans développement spécifique.

Ici l’entrée 24 permet la diffusion du mp3 n24 par combinaison des relais 3 et 4.

Les entrées n’ayant pas de TB, il faudra envoyer 2 push de la V4 vers la v3 (push on et push off). Pour l’exemple de l’entrée virtuelle 24 piloté par une SV de l’ipx v4 :
SV(Tb=1) ON/OFF PUSH(on:‹ /leds.cgi?led=123 â€ş; off:‹ /leds.cgi?led=123 â€ş)

Pour diffuser plus de 32 fichiers, je crois qu’il est impossible de chaîner plusieurs commandes séparées par des virgules afin de ne créer qu’un seul push,
il faudra donc soit chaîner plusieurs push pour créer la bonne combinaison , soit passer par un script externe qui fera du M2M avec la commande bitmask.

Dans tous les cas, le module devra alors ĂŞtre en mode « IO INTEGRATED MODE 0 Â» pour la prise en compte des impulsions

Voici le schéma pour diffuser jusqu’à 32 messages différents avec une IPX800 V3

Tableau des liens à créer entre les 32 entrées digitales / virtuelles et les sorties relais :


Entrée digitale
Num API R1
20
R2
21
R3
22
R4
23
R5
24
R6
25
R7
26
R8
27

MP3
1 100 x 00001.mp3
2 101 x 00002.mp3
3 102 x x 00003.mp3
4 103 x 00004.mp3
5 104 x x 00005.mp3
6 105 x x 00006.mp3
7 106 x x x 00007.mp3
8 107 x 00008.mp3
9 108 x x 00009.mp3
10 109 x x 00010.mp3
11 110 x x x 00011.mp3
12 111 x x 00012.mp3
13 112 x x x 00013.mp3
14 113 x x x 00014.mp3
15 114 x x x x 00015.mp3
16 115 x 00016.mp3
17 116 x x 00017.mp3
18 117 x x 00018.mp3
19 118 x x x 00019.mp3
20 119 x x 00020.mp3
21 120 x x 00021.mp3
22 121 x x x 00022.mp3
23 122 x x x x 00023.mp3
24 123 x x 00024.mp3
25 124 x x x 00025.mp3
26 125 x x x 00026.mp3
27 126 x x x x 00027.mp3
28 127 x x x 00028.mp3
29 128 x x x x 00029.mp3
30 129 x x x x 00030.mp3
31 130 x x x x x 00031.mp3
32 131 x 00032.mp3

De 1 à 8 (en gras), ce sont les entrées digitales physiques. de 9 à 32, les entrées virtuelles.

Exemple de scénario sur V4 pour diffuser le message audio 15 (00015.mp3) :

SV(Tb=1) ON/OFF PUSH(on:‹ /leds.cgi?led=114 â€ş; off:‹ /leds.cgi?led=114 â€ş)

1 « J'aime »

voici un petit récap des associations que l’on peut faire très facilement avec les extensions GCE et un lecteur MP3

1 « J'aime »

Bonjour,

Intéressant cette solution.
Peux t on trouver des annonces types, à télécharger, pour la domotique sur internet ?

Cdlt

bonjour,
il suffit de s’enregistrer avec un micro.
De nombreux logiciels le permettent.