Node Red : allumer / éteindre une lumière depuis un node Function vers un node Action

Bonjour à tous!

J’essaie de construire un flow node-red pour une simulation de présence.

Je ne vais pas entrer dans les détails mais j’utilise un node ‘function’ dans lequel je fais choisir depuis une liste d’entité une lumière au hazard:

const lights = [
  'light.switch_lumiere_cuisine_et_terrasse_2',
  'light.switch_couloir_salle_fetes_2',
  'light.switch_chambre_parents',
  'light.switch_wc_etage',
  'light.switch_wc_rdc'
];

// Choisir lumière au hasard
const index = Math.floor(Math.random() * lights.length);
const light_id = lights[index];

// Message pour allumer la lumière
const msg_on = {
  payload: {
    action: 'call-service',
    service: 'light.turn_on',
    service_data: { entity_id: light_id }
  }
};

// Message pour éteindre la lumière
const msg_off = {
  payload: {
    domain: 'homeassistant',
    service: 'turn_off',
    target: { entity_id: light_id }
  }
};

// Retourner les messages correctement formatés
return [msg_on, msg_off];

La première sortie de ce node ‘function’ (ayant 2 sorties) est lié directement à un node ‘action’ qui est supposé recevoir le payload du node ‘function’ et allumer … et la deuxieme sortie est lié à un node ‘delay’ (15 minutes) qui lui est ensuite aussi connecté à un node ‘action’ qui lui va donc éteindre la lumière.

Mais ce node ‘action’ ne fonctionne pas, c’est comme s’il ignorait le payload que j’envoie depuis le node ‘function’, ou alors mon payload n’est pas bien construit.

Besoin d’aide :slight_smile:

Merci !

Sébastien

Salut,
Voilà à quoi peut ressembler ton node action

Avec comme élément de sortie de ton node Function;
msg.light = light_id

msg.action= ligiht.turn_on ou light.turn_off suivant la sortie

le flow final serait:

1 « J'aime »

Salut!

Merci pour ta réponse rapide!

En fait j’ai trouvé la solution…

Voici mon flow:

C’était mon code dans le node ‘function’ qui était mal écrit, voici le code corrigé si ça peut servir:

const lights = [
  'light.switch_lumiere_cuisine_et_terrasse_2',
  'light.switch_couloir_salle_fetes_2',
  'light.switch_chambre_parents',
  'light.switch_wc_etage',
  'light.switch_wc_rdc'
];

// Choisir lumière au hasard
const index = Math.floor(Math.random() * lights.length);
const light_id = lights[index];

// Message pour allumer la lumière
const msg_on = {
  payload: {
    action: 'light.turn_on',
    target: { entity_id: light_id }
  }
};

// Message pour éteindre la lumière
const msg_off = {
  payload: {
    action: 'light.turn_off',
    target: { entity_id: light_id }
  }
};

// Retourner les messages correctement formatés
return [msg_on, msg_off];

Les nodes ‘action’ restent sans rien de spécifié (ils interprètent le payload du node ‘function’ … et ça fonctionne très bien :slight_smile:

Sébastien

Ce sujet a été automatiquement fermé après 2 jours. Aucune réponse n’est permise dorénavant.