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:
@@ -2,7 +2,7 @@
|
||||
const mqtt = require('mqtt');
|
||||
|
||||
// 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 wledTopicBase = 'wled/all'; // Le topic de base pour ton ruban WLED
|
||||
const options = {
|
||||
@@ -11,7 +11,7 @@ const options = {
|
||||
};
|
||||
|
||||
// É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
|
||||
|
||||
// Connexion au broker MQTT
|
||||
@@ -25,6 +25,12 @@ client.on('connect', () => {
|
||||
if (err) console.error('[ERROR] Subscription to light topics failed');
|
||||
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
|
||||
@@ -65,9 +71,9 @@ function applyLightChange(color, effect, intensity) {
|
||||
function getWLEDEffectId(effect) {
|
||||
const effectsMap = {
|
||||
'none': 0,
|
||||
'blink': 1, // Effet de fondu
|
||||
'fade': 12, // Clignotement
|
||||
'rainbow': 9 // Effet arc-en-ciel
|
||||
'blink': 0, // Effet de fondu
|
||||
'fade': 0, // Clignotement
|
||||
'rainbow': 0 // Effet arc-en-ciel
|
||||
};
|
||||
return effectsMap[effect] || 0; // Par défaut, aucun effet
|
||||
}
|
||||
@@ -116,7 +122,7 @@ client.on('message', (topic, message) => {
|
||||
} else if (topic === 'vulture/light/reset') {
|
||||
// Réinitialisation des lumières à la couleur et l'effet par défaut
|
||||
console.log('[INFO] Resetting lights to default state');
|
||||
applyLightChange('#FFFFFF', 'reset', 255);
|
||||
applyLightChange('#FF00FF', 'reset', 255);
|
||||
|
||||
} else if (topic === 'vulture/light/status/request') {
|
||||
// Répondre à la requête de statut
|
||||
@@ -125,6 +131,23 @@ client.on('message', (topic, message) => {
|
||||
} else if (topic === 'vulture/light/status/response') {
|
||||
// Répondre à la requête de statut
|
||||
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 {
|
||||
console.error(`[ERROR] Unrecognized topic: ${topic}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user