Node-red les fonctions logiques

Mon problème

*bonjour, un problème avec une fonction:
le but rechercher : quand l’interrupteur virtuel « A » dans lovelace est « true » et que le détecteur de mouvement est « true » je m’est la prise sur « on » dans les autres cas à « off » *
Mais rien ne sort de la fonction?
pouvez-vous m’aider?


Ma configuration

Santé du système

Version core-2022.2.5
Type d’installation Home Assistant OS
Développement false
Supervisor true
Docker true
Utilisateur root
Environnement virtuel false
Version de Python 3.9.7
Famille du système d’exploitation Linux
Version du système d’exploitation 5.10.92-v8
Architecture du processeur aarch64
Fuseau horaire Europe/Brussels

Salut,

ça n marchera pas je pense là.
Car tu as 2 event state. Qui vont se déclencher que quand un des 2 change d’état.

Si j’ai bien compris ce que tu veux faire, il te faut:

  • 1 Event State qui se déclenchera quand tu détecte un mouvement.
  • puis sur la sortie du noeud d’avant « on ». Tu ajoute un « current state » qui regarde si ton interrupteur est on.
  • A la sortie de ce dernier tu fait ton action.

Pas besoin de fonction ou d’autres noeuds.

1 « J'aime »

ha oui ok je regarde cela demain.
Merci

bonjour,
en fait c’est pas tout à fait ça.
il faut que si l’interrupteur est à « on » il regarde si un mouvement est détecté
si « on » = alarme à « on » , si « off » = alarme à « off » et si je mets l’interrupteur sur « off » alarme passe à « off » même si mouvement détecté.
Mais pour l’instant mon soucis c’est de faire fonctionner ma prise (=alarme) qui est une prise Ikea fonctionnant sur zigbee2mqtt tout comme le détecteur de mouvement.
elle fonctionne normalement quand j’utilise dans lovelace le bouton nommé PRISE_1

Salut,
Ce que je t’ai montré ça fait exactement ça. Mis à part que la logique est inverse… le détecteur de mouvement fonctionne tout le temps, mais les actions suivantes ne sont faites que quand l’interrupteur est à « on ».
Mais le résultat est le même… tu ne peux pas te baser sur le status de l’interrupteur pour activer ou non la détection du mouvement… il te faut un event.
(techniquement ce serait possible is tu arrivais à dire à Z2M de ne pas fwd les mouvements quand l’interrupteur est à on… mais je ne vois pas trop l’intéret.)

Qu’est ce qui ne marche pas?
Pour allumer ou éteindre une prise comme ça, avec une entité de type « switch », il faut simplement appeler le service « switch.toggle », « switch.turn_on » ou « switch.turn_off ».
Ton bouton dans lovelace par exemple lui appelle « switch.toggle » quand tu appuies dessus, comme tu as mis l’action « Permuter »

Il y a effectivement plusieurs solutions qui arriveront au même résultat.

@pilou8830 Quand je vois le code de ton node function, je me pose des questions : tu testes un valeur TRUE ou FALSE, alors que la charge du payload est ON ou OFF

C’est clair que c’est une confusion récurrente. Cela dit comme il y a des noeuds « change » avant, tout est possible…

@AlexHass quand on regarde la colonne debug, la charge semble être ON ou OFF. Effectivement avec un peu plus de détails on pourrait être certain :wink:

@pilou8830 pourrait nous transmettre le flow complet, histoire d’être éclairé.

@AlexHass ta méthode semble tellement simple qu’il serait bête de s’en priver 3 nodes contre presque 7… :crazy_face:

Pour aller dans le sens de @AlexHass,
Voici ce que j’utilise chez moi:
sur HA, j’ai crée un input_boolean (couloir auto)
Avec un détecteur de présence et une light
Lorsque « couloir auto » est sur ON, si je passe devant le détecteur, la lumière du couloir s’allume.
Lorsque le détecteur ne me voit plus, la lumière s’éteint.
Si « couloir auto » est sur OFF, que je soit détecté ou non, la lumière reste éteinte.
image

[{"id":"c81331c42738dc5b","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"0d385e916e7ec2f3","type":"comment","z":"c81331c42738dc5b","name":"Lumière auto dans couloir","info":"","x":230,"y":100,"wires":[]},{"id":"a689d104db172ae9","type":"api-current-state","z":"c81331c42738dc5b","name":"Couloir AUTO","server":"df03acce.f940b","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.couloir_auto","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":420,"y":160,"wires":[["f2004d49ddba149d"],[]]},{"id":"1981e082630a0b11","type":"server-state-changed","z":"c81331c42738dc5b","name":"presence couloir","server":"df03acce.f940b","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.presence_couloir_occupancy","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":200,"y":160,"wires":[["a689d104db172ae9"],["0bf3580db0246ef6"]]},{"id":"f2004d49ddba149d","type":"api-call-service","z":"c81331c42738dc5b","name":"Couloir ON","server":"df03acce.f940b","version":4,"debugenabled":false,"domain":"light","service":"turn_on","target":{"areaId":[],"deviceId":[],"entityId":["light.couloir"]},"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":160,"wires":[[]]},{"id":"0bf3580db0246ef6","type":"api-call-service","z":"c81331c42738dc5b","name":"Couloir OFF","server":"df03acce.f940b","version":4,"debugenabled":false,"domain":"light","service":"turn_off","target":{"entityId":["light.couloir"],"areaId":[],"deviceId":[]},"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":410,"y":220,"wires":[[]]},{"id":"df03acce.f940b","type":"server","name":"Home Assistant","version":2,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]
1 « J'aime »

Merci à tous j’ai hâte d’essayer tout ça.
Mais je rentre tard ce sera pour demain matin. Je vous tiens au courant bien sûr

dommage je n’ai pas pu tester car j’avais zigbee2mqtt en 502 bad gateway
je viens seulement de tout réinstaller et cela refonctionne mais j’ai la tête près à exploser :scream:
je vois ça donc demain. merci de patienter encore

je n’arrive pas à trouver se qui ne va pas (depuis la réinstallation)
j’ai toujours le message d’erreur : Home Assistant base URL needs to be set

j’ai installé node red home assistant comme palette supplémentaire mais ça ne change rien

De plus la prise ne fonctionne pas sauf si j’utilise le bouton sur lovelace PRISE_1


:sob:

De plus la prise ne fonctionne pas en mqtt

remarque : quand j’ai voulu créer un serveur mqtt ça ne se présentait plus de la même façon je ne suis pas sûr qu’il soit bien installé. comment je peux vérifier cela?

Salut,

tu as ‹ tout › réinstallé du début?
« 502 Bad Gateway » c’est généralement lié au fait qu’un add-on n’est pas démarré, et il faut aller voir le journal de cet add-on après avoir essayé de le redémarrer…

Par créer un server MQTT, tu veux dire installer l’add-on Mosquitto?
Pour vérifier que MQTT marche, tu peux soit aller dans l’intégration MQTT et cliquer sur configuer, puis écouter le topic « # »

Est-ce que tu as installé node-red par l’add-on?
Si oui dans node red, vérifier la config de HA en allant ici (clic sur la roue dentée puis double clic sur « home assistant »:

salut, merci de m’aider

tu as ‹ tout › réinstallé du début?
oui
voila ce que j’ai constaté :


j’ai cliqué sur configurer mais toujours le même problème
côté mqtt l’intégration des 2 éléments (détecteur de mouvement et la prise sur zigbee2mqtt) fonctionnent correctement sur lovelace.

Par créer un server MQTT, tu veux dire installer l’add-on Mosquitto?
non je parlais côté node-red .
Dans node-red dans la colonne gauche à « network » le node « mqtt-in » il lui faut bien un serveur mqtt?? non?

Est-ce que tu as installé node-red par l’add-on?
oui.
Mais moi j’ai ça pour le serveur mqtt:


et pour Home Assistant :

Est-ce normal d’avoir plusieurs serveurs Home Assistant?

Pour MQTT, pas certain que juste mettre « mqtt » en adresse soit suffisant… met plutôt l’adresse IP de ton HA (si Mosquitto est installé dessus)

Et sinon, pas certain que ce soit normal d’avoir plusieurs intégrations HA…
C’est surement de là que vient le message d’erreur qui dit qu’il manque l’adresse.
En ajoutant des noeuds HA, as-tu plusieurs fois fait « add new server » ?
J’en supprimerais 2 des 3. Et els noeuds HA créés, il faut le faire pointer vers celui que tu montres.

c’est corrigé avec effectivement l’adresse du HA mais avec un autre nom que Home Assistant (ici Mqtt_jp.
Pour la prise ikea qui est compatible zigbee2mqtt, je mets un « mqtt out » normalement.

cela progresse :

maintenant je constate que le changement d’état du bouton virtuel ne se répercute pas dans node-red.
il reste toujours sur off.

Normalement le « current state » devrait récupérer l’état de l’interrupteur comme il est dans HA.
Tu es sûr que dans HA il est sur ‹ on ›?

Sinon, tu n’a pas besoin de fait un appel MQTT pour contrôler la prise. Tu peux aussi utiliser un service HA input_boolean.turn_on ou turn_off. Pas besoin de s’embêter avec le format de MQTT.

oui je le fais sur l’appli sur mon Smarphone

Tu peux aussi utiliser un service HA input_boolean.turn_on ou turn_off

ok je vais essayer ça

Tu peux aussi utiliser un service HA input_boolean.turn_on ou turn_off

j’ai utilisé un switch turn on et off et cela fonctionne très (voir ci-dessous)

Par contre info sur l’état de mon bouton virtuel reste toujours sur off voici ce que je fais :

il manque quelque chose?