Shelly i4 long pulse et double pulse

Bonjour à tous,
Je viens d’installer un Shelly i4 que j’utilise dans Jeedom avec le plugin jmqtt (merci @Bad et @Domochip ) pour ce super plugin.
Jmqtt détecte bien le on et le off des entrées mais comment identifier avec le plugin jmqtt les long pulse ou double pulses qui sont décrit dans la présentation du module sur le site shelly ?
je ne vois rien passer autre que on et off des input avec mqtt explorer, par exemple:
115-shellyplusi4-b8d61a8a7560/status/input:0 [state] : 0 ou 1

1 « J'aime »

Hello,

Mais de rien :blush:

Tu peux mettre plus d’infos de ce que tu reçois en MQTT au moment du long press ? Avec MQTT explorer ou en mode temps réel en souscription sur le topic 115-shellyplusi4-b8d61a8a7560/# ?

D’après la doc : MQTT | Shelly Technical Documentation
L’info devrait arriver dans un topic avec /status/ dedans.

Bad

Bonjour @Bad,
Electricité revenue donc internet et Jeedom aussi.
il n’y a aucune différence dans les topics (temps réel du plugin mais en mstt explorer c’est identique) entre un appui court et un long :
appui long (3 sec)
Mais la nuit de Cioran a porté ses fruits !! en fait il faut configurer le Shelly i4 en mode « bouton » et non « switch » et là dans le topic 115-shellyplusi4-b8d61a8a7560/events/rpc
le payload est (pour un short press)

{
  "src": "shellyplusi4-b8d61a8a7560",
  "dst": "115-shellyplusi4-b8d61a8a7560/events",
  "method": "NotifyEvent",
  "params": {
    "ts": 1698936023.11,
    "events": [
      {
        "component": "input:0",
        "id": 0,
        "event": "single_push",
        "ts": 1698936023.11
      }
    ]
  }
}

pour un double push

{
  "src": "shellyplusi4-b8d61a8a7560",
  "dst": "115-shellyplusi4-b8d61a8a7560/events",
  "method": "NotifyEvent",
  "params": {
    "ts": 1698936595.36,
    "events": [
      {
        "component": "input:0",
        "id": 0,
        "event": "double_push",
        "ts": 1698936595.36
      }
    ]
  }
}

pour un long push, il y a 3 payloads successives :

  1. « event »: « btn_down »
  2. « event »: « long_push »,
  3. « event »: « btn_up »
    logic mais pas mis en évidence par la doc donc configurer les entrées du i4 en bouton si on veut avoir les infos !!
    Par contre je rame un peu (beaucoup !!) pour configurer des entrées info séparéespour les 4 boutons dans Jmqtt sachant que le topic qui varie selon le bouton utilisé et l’action est le topic
    115-shellyplusi4-b8d61a8a7560/events/rpc
    avec comme valeur:
{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1698939983.63,"events":[{"component":"input:0", "id":0, "event":"single_push", "ts":1698939983.63}]}}

en double push

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1698940050.55,"events":[{"component":"input:0", "id":0, "event":"double_push", "ts":1698940050.55}]}}

en long push c’est plus compliqué:
3 valeurs successives d’abord

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1698940216.87,"events":[{"component":"input:0", "id":0, "event":"btn_down", "ts":1698940216.87}]}}

puis

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1698940217.87,"events":[{"component":"input:0", "id":0, "event":"long_push", "ts":1698940217.87}]}}

puis

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1698940219.15,"events":[{"component":"input:0", "id":0, "event":"btn_up", "ts":1698940219.15}]}}

pour le bouton 2 en single short press:

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1698940372.14,"events":[{"component":"input:1", "id":1, "event":"single_push", "ts":1698940372.14}]}}

la suite idem au bouton 0 seul l’input et l’id change (et l’event bien sur)
Que doije mettre en topic et en chemin json pour chaque bouton ?
merci beaucoup de tes lumières

En chemin JSON, pour le bouton 1, essaye un truc du genre:

$..events[?(@.id==0)].event

id 1 pour bouton 2, etc…

Merci @Jeandhom
essais entre deux coups de tronçonneuse
je reconnais que je suis un peu une bille avec les json.
essayé avec le topic:

115-shellyplusi4-b8d61a8a7560/events/rpc

et chemin json

$..events[?(@.id==2)].event

ça me donne toujours valeur 0
la cde info topic

115-shellyplusi4-b8d61a8a7560/events/rpc

chemin json vide donne (suivant l’action le « event » change:

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1699011749.19,"events":[{"component":"input:2", "id":2, "event":"btn_up", "ts":1699011749.19}]}}

j’ai bidouillé mais je suis certain de faire hurler les puristes :grinning:
j’ai créer une input info avec comme topic:
115-shellyplusi4-b8d61a8a7560/events/rpc
et chemin json
[params][events][0][event]
la valeur me retourne bien long_push etc etc.
je traite par scénario le résultat de input info suivante:
topic:

115-shellyplusi4-b8d61a8a7560/events/rpc

chemin json:

[params][events][0][id]

la valeur donne 0 à 3
suivant cette valeur et celle de

[params][events][0][event]

(single_push, double_push, long_push, button_down, button_up)
le scénario exécute une action spécifique avec une succession de blocs « SI, ALORS ». mais ça me semble très lourd.

Si personne ne passe te donner la bonne réponse, je regarderai un peu mieux lundi prochain.

Super merci , ça fonctionne actuellement (mais ce n’est pas beau donc ce n’est qu’une question d’esthétique donc aucune urgence)

1 « J'aime »

Hello,

Tu es sûr que ta commande info n’est en numérique ?
Car le testeur de jsonPath donne bien « btn_up » comme résultat :

Bad

je m’y recole…
Tu as raison dans le testeur de chemin Json (que tu me fais découvrir :cold_sweat:) j’ai bien la valeur « btn_up »
avec payload

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1699118605.48,"events":[{"component":"input:0", "id":0, "event":"single_push", "ts":1699118605.48}]}}

et chemin json

$…events[?(@.id==0)].event

résultat ok:

"single_push"

maintenant ce que je pige pas encore (j’ai fouillé la doc shelly MQTT mais je n’y comprends pas grand chose) c’est la syntaxe de la commande info que je dois créer pour le topic:

115-shellyplusi4-b8d61a8a7560/events/rpc

qui retourne comme valeur (pour l’entrée 0)

{"src":"shellyplusi4-b8d61a8a7560","dst":"115-shellyplusi4-b8d61a8a7560/events","method":"NotifyEvent","params":{"ts":1699118605.48,"events":[{"component":"input:0", "id":0, "event":"single_push", "ts":1699118605.48}]}}

afin d’obtenir ce fameux « single_push » (ou autre" en valeur ??
Merci du coup de main et du temps passé !!
(bon ça y est mon anémomètre recommence à s’emballer )
attends je crois avoir trouvé je teste …

bon avec tes indications j’ai résolu (en partie !! ) mon problème:
j’ai créer pour chaque entrée (4) une info « AUTRE » !!
topic

115-shellyplusi4-b8d61a8a7560/events/rpc

chemin json

$..events[?(@.id==0)].event

avec id==0 , id==1 etc
chaque entrée sollicitée me donne bien comme valeur single_push, doublr_push, btn_down, btn_up, log_push. et la commande info

115-shellyplusi4-b8d61a8a7560/events/rpc
[params][events][0][id]

change bien de valeur à chaque action d’un bouton et donne la valeur du bouton actionné ce qui va etre utilisé comme déclencheur de scénario
Merci a toi et @Jeandhom

2 « J'aime »

Ouais, alors, bon, j’ai peut-être un peu oublié de le documenter ce testeur de json path :sweat_smile:
J’ai fait ça en vitesse, par ce que j’en avait marre de créer des commandes de test pour les jsonPath.

Tu peux les passer en binaire et utiliser #value# == "single_push" en « Formule de calcul » (ou autre) si tu veux les avoir en binaire et les historiser (par ex).

Bad

Merci du complément d’info , mais pour e testeur de chemin Json, c’est moi qui mérite de se faire tapper sur les doigts pour ne pas avoir eu la curiosité de cliquer sur les icones qui me crevaient les yeux :grinning:
Par contre si tu as une idée où je pourrais trouver une explication de la syntaxe

$…events[?(@.id==0)].event

je suis preneur pour ne pas mourir idiot :headstone: :grinning:

Facile :
Cherche 'Le champ “Chemin JSON” ’ dans la doc : https://docs.bad.wf/fr_FR/jmqtt/stable/index#Onglet%20Commandes
La syntaxe « officielle » est ici : JSONPath - XPath for JSON
Sinon jMQTT utilise cette implementation : GitHub - Galbar/JsonPath-PHP: A JsonPath implementation in PHP

Pour le jsonPath $..events[?(@.id==0)].event, avec par exemple le 1er payload de ce message :

01: {
02:   "src": "shellyplusi4-b8d61a8a7560",
03:   "dst": "115-shellyplusi4-b8d61a8a7560/events",
04:   "method": "NotifyEvent",
05:   "params":
06:   {
07:     "ts": 1699118605.48,
08:     "events":
09:     [
10:       {
11:        "component": "input:0",
12:        "id": 0,
13:        "event": "single_push",
14:        "ts": 1699118605.48
15:       }
16:     ]
17:   }
18: }
  • $ : ancre la recherche au début du tableau, c’est obligatoire (on est à la ligne 1 du payload),
  • ..events : réalise une recherche recursive de la clé events (ligne 8 du payload),
    On pourrait remplacer ça par .params.events, c’est idem ici.
  • [?(@.id==0)] : filtre tous les sous-tableau dont la propriété id vaut 0 (ligne 10 du payload),
  • .event : récupère la valeur de la propriété event (ligne 13 du payload),

Hope it helps :wink:

super merci de ta réponse je vais passer mon dimanche à tester tout ça hé hé excellent motif pour dire que je suis TRÉS occupé :joy:

Super, je vois que @Bad a assuré la fin du SAV, merci à lui.

1 « J'aime »

Absolument génial !!
en partant de ta solution et des explications de @Bad je ressort tout ce que je veux !! Merci à vous deux

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.