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');
|
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}`);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user