Filtrer avec regexp sur mqtt/json, est ce possible?

bonjour

je voudrais implementer un filtrage plus fin sur les topics mqtt en utilisant des regexp.

je recois de HA mqtt Statestream des topics du genre :
homeassistant/device1_parametreX/state
homeassistant/device2_parametreY/state

si je veux recuperer seulement les parametres du device1 je dois filtrer plus finement sur le deuxieme troncon de la sequence JSON,

quelque chose comme ceci,

homeassistant/device1_.*/state

mais peut on filtrer avec regexp ?

l’ideal serait de recevoir des topics de ce genre plus facile a filtrer, mais je n’ai pas trouvé comment faire sur HA statestream :

homeassistant/device1/parametreX/state
homeassistant/device2/parametreY/state

Merci

Salut

Je comprends pas le besoin personnellement.
Vous n’avez pas un dispositif par topic?

Hello @t0urista,

Si je comprend bien, tu voudrais des wildcards dans le topic d’une commande, pour que topic/parametreX/state et topic/parametreY/state nourrisse la même commande ?

Ce n’est pas possible pour le moment, mais je suis en train de regarder comment me passer des topics de souscription au niveau équipement.
Une fois que chaque commande sera souscrite individuellement, ce sera plus ou moins possible avec le topic topic/+/state (mais jamais avec topic/parametre+/state car c’est une souscription MQTT invalide).

Bad

je me suis sans doute mal exprimé.
le probleme est que les topics envoyés par HA Statestream contiennent dans la deuxieme partie du chemin JSON une concatenation du device name et de l’entity. Exemple :

  • homeassistant/mower_battery/state
  • homeassistant/fridge_temperature/state

donc sur Jeedom si je veux n’importer que les entities de la tondeuse (mower) je devrais filtrer en regexp sur le deuxieme morceau du chemin JSON, quelque chose comme ceci :

  • homeassistant/mower(.*)/#

Je ne suis toujours pas sur de comprendre…
Les chemins JSON (JsonPath) n’ont pas de rapport avec le topic (juste le payload).

Je peux avoir des captures d’écrans ?

Si c’est juste pour la création des commandes, alors passe en Temps réel et ne crée les commandes que pour ce qui t’intéresse.


voila un screenshot des messages mqtt recus de home assistant HA statestream

les topics ont tous la meme structure en 4 segments JSON,

  • commencant par homeassistant_1,
  • puis le type d’info ha (sensor, binary_sensor, switch, …)
  • puis la concatenation du nom du device et de la valeur mesuree : marguerite_mowing_speed
  • puis state

homeassistant_1/sensor/conso_puissance_apparente_instantanee_soutiree/state
homeassistant_1/sensor/conso_p3_tension_efficace/state
homeassistant_1/sensor/marguerite_mowing_speed/state
homeassistant_1/sensor/security_rssi_motion_2/state
homeassistant_1/sensor/marguerite_wi_fi_rssi/state

marguerite c’est ma tondeuse mammotion, je voudrais importer automatiquement dans un device jmqtt toutes les infos contenant marguerite dans le topic, et ignorer automatiquement toutes les autres info mqtt ne contenant pas marguerite dans le topic

un filtre du genre contenant du regexp pourrait fonctionner

homeassistant_1/sensor/marguerite(.*)/#

mais n’est pas supporté je pense , comment faire ?

et au niveau de MQTT Statestream, tu peux pas utiliser
Include avec entity_globs ?

si, mais je dois definir un filtre pour chaque entity (sensor, binary_sensor, …) et si je veux exporter les donnees de plusieurs devices (mower, fridge,…) j’ai a nouvau le meme probleme cote Jeedom où je recois toutes les donnees de plusieurs devices sur le meme topic de base, donc la creation automoatique des donnes infos en fonction du topic recu genere beaucoup d’info inutiles.