feat(light): Sync buzzers vers WLED et maj des defaults

- Modification de la couleur par défaut vers Magenta (#FF00FF)

- Ajout de la synchronisation directe : la couleur du buzzer est envoyée immédiatement au bandeau LED

- Désactivation des effets (rainbow, blink...) pour stabiliser l'affichage

- Abonnement au topic vulture/buzzer/pressed/#
This commit is contained in:
2026-02-08 16:18:18 +01:00
parent 36d07f313b
commit ab102ed1df

View File

@@ -2,7 +2,7 @@
const mqtt = require('mqtt'); const mqtt = require('mqtt');
// Configuration du broker MQTT et de WLED // Configuration du broker MQTT et de WLED
const brokerUrl = 'mqtt://nanomq'; // Change ce lien si nécessaire const brokerUrl = 'mqtt://192.168.1.201'; // Change ce lien si nécessaire
const clientId = 'light_manager_wled'; const clientId = 'light_manager_wled';
const wledTopicBase = 'wled/all'; // Le topic de base pour ton ruban WLED const wledTopicBase = 'wled/all'; // Le topic de base pour ton ruban WLED
const options = { const options = {
@@ -11,7 +11,7 @@ const options = {
}; };
// État des lumières // État des lumières
let currentColor = '#FFFFFF'; // Couleur par défaut (blanc) let currentColor = '#FF00FF'; // Couleur par défaut
let currentEffect = 'none'; // Pas d'effet par défaut let currentEffect = 'none'; // Pas d'effet par défaut
// Connexion au broker MQTT // Connexion au broker MQTT
@@ -25,6 +25,12 @@ client.on('connect', () => {
if (err) console.error('[ERROR] Subscription to light topics failed'); if (err) console.error('[ERROR] Subscription to light topics failed');
else console.log('[INFO] Successfully subscribed to light topics'); else console.log('[INFO] Successfully subscribed to light topics');
}); });
// Souscription aux topics des buzzers pour synchronisation directe
client.subscribe('vulture/buzzer/pressed/#', (err) => {
if (err) console.error('[ERROR] Subscription to buzzer topics failed');
else console.log('[INFO] Successfully subscribed to buzzer topics');
});
}); });
// Fonction pour envoyer un message au ruban WLED // Fonction pour envoyer un message au ruban WLED
@@ -65,9 +71,9 @@ function applyLightChange(color, effect, intensity) {
function getWLEDEffectId(effect) { function getWLEDEffectId(effect) {
const effectsMap = { const effectsMap = {
'none': 0, 'none': 0,
'blink': 1, // Effet de fondu 'blink': 0, // Effet de fondu
'fade': 12, // Clignotement 'fade': 0, // Clignotement
'rainbow': 9 // Effet arc-en-ciel 'rainbow': 0 // Effet arc-en-ciel
}; };
return effectsMap[effect] || 0; // Par défaut, aucun effet return effectsMap[effect] || 0; // Par défaut, aucun effet
} }
@@ -116,7 +122,7 @@ client.on('message', (topic, message) => {
} else if (topic === 'vulture/light/reset') { } else if (topic === 'vulture/light/reset') {
// Réinitialisation des lumières à la couleur et l'effet par défaut // Réinitialisation des lumières à la couleur et l'effet par défaut
console.log('[INFO] Resetting lights to default state'); console.log('[INFO] Resetting lights to default state');
applyLightChange('#FFFFFF', 'reset', 255); applyLightChange('#FF00FF', 'reset', 255);
} else if (topic === 'vulture/light/status/request') { } else if (topic === 'vulture/light/status/request') {
// Répondre à la requête de statut // Répondre à la requête de statut
@@ -125,6 +131,23 @@ client.on('message', (topic, message) => {
} else if (topic === 'vulture/light/status/response') { } else if (topic === 'vulture/light/status/response') {
// Répondre à la requête de statut // Répondre à la requête de statut
console.log('[INFO] Light status response received'); console.log('[INFO] Light status response received');
} else if (topic.startsWith('vulture/buzzer/pressed/')) {
// Synchronisation directe Buzzer -> WLED
const { color } = payload;
if (color && /^#[0-9A-F]{6}$/i.test(color)) {
console.log(`[INFO] Buzzer pressed, syncing WLED color to ${color}`);
// Envoi direct de la couleur (format hex avec #)
sendToWLED('col', color);
// Mise à jour de l'état interne
currentColor = color;
currentEffect = 'none'; // Reset effect on direct color set
} else {
console.warn(`[WARN] Invalid color in buzzer payload: ${color}`);
}
} else { } else {
console.error(`[ERROR] Unrecognized topic: ${topic}`); console.error(`[ERROR] Unrecognized topic: ${topic}`);
} }