FlyingDomotic / domoticz-airsend-plugin

AirSend (https://devmel.com/) Domoticz plug-in/Plug-in Domoticz pour Airsend
GNU General Public License v3.0
2 stars 0 forks source link

New protocol not working #12

Closed rezzalex closed 1 year ago

rezzalex commented 1 year ago

Bonjour,

À ma demande, Airsend a intégré le protocole Came 866 (portail) j'ai pu cloner ma télécommande qui marche maintenant avec airsend cloud, et depuis la mise à jour récente, vec l'appli mobile Airsend locale.

J'ai réalisé l'export de la partie YAML depuis personne cloud pour la mettre dans le fichier de configuration du plugin, mais la télécommande ne fonctionne pas depuis DZ.

rezzalex commented 1 year ago

CONFIG Yaml :

  Portail:
      id: 26849
      type: 4096
      apiKey: 57dd139075b85e2977892f1b3211021fa93d136d31c9af91d8baaa8b6abd4300503c2ed18a4d187f3f518cfbe2d4f61475e39edeaff7b56e8ad245f3f235d647
      channel:
         id: 4897
         source: 2098788
      note:
         method: 1
         type: 1
         value: 3
    Portail piéton:
      id: 27110
      type: 4096
      apiKey: 57dd139075b85e2977892f1b3211021fa93d136d31c9af91d8baaa8b6abd4300503c2ed18a4d187f3f518cfbe2d4f61475e39edeaff7b56e8ad245f3f235d647
      channel:
         id: 4897
         source: 2098916
      note:
         method: 1
         type: 1
         value: 18

{"devices":[{"name":"Portail","localip":"fe80::dcf6:e5ff:fe8d:2e9a","type":4096,"pid":4897,"addr":2098788,"opt":3},{"name":"Portail piéton","localip":"fe80::dcf6:e5ff:fe8d:2e9a","type":4096,"pid":4897,"addr":2098916,"opt":18}]}

LOGS DZ :

2023-03-18 07:27:25.724 AirSend: 004/AirSend - Portail, 4897/2098788: Command: 'On', Level: 100, Color: 2023-03-18 07:27:25.724 AirSend: Sending notes method=1, type=0, value=18 to channel Id=4897, source=2098788 (standard) 2023-03-18 07:27:25.929 (AirSend - Portail) Updating device from 1:'100' to have values 1:'100'.

FlyingDomotic commented 1 year ago

Il semble que l'intégration de DevMel ne soit pas réalisée de façon standard avec un type de note = 0 (state), mais avec un type de note = 1 (data). Je regarde comment je peux intégrer cette différence. Stay tuned!

FlyingDomotic commented 1 year ago

Après analyse, il faudrait ajouter le code suivant dans le fichier AirSend.json :

    "settings": [
        {"Poussoir portail": {
                "deviceId": 4897, "deviceSource": 2098788,
                "type": 244, "subtype": 73, "switchtype": 9,
                "commands": [
                    {"Open": {"method":1, "type":1, "value": 3, "nValue": 1, "sValue": "100"}},
                ]
            },
        },
        {"Poussoir portail piéton ": {
                "deviceId": 4897, "deviceSource": 2098916,
                "type": 244, "subtype": 73, "switchtype": 9,
                "commands": [
                    {"Open": {"method":1, "type":1, "value": 18, "nValue": 1, "sValue": "100"}},
                ]
            },
        }
    ]

Avec ça, on devrait avoir une gestion correcte du push button.

Ceci dit, j'anticipe la prochaine remarque qui sera "oui, mais le bouton est toujours ON, même lorsque le portail est OFF", qui est valide et normal sur un bouton de type push button. En fait, il ne faut pas confondre la commande de type push button (à impulsion donc) et l'état de l'entité associée. D'un côté, on a le bouton poussoir, qui commande des bascules, de l'autre les entités commandées (ici le portail et le portail piéton).

Il faudra donc écrire un petit bout de code (script LUA ou dzVents) pour : 1) capter les appuis sur le bouton et mettre à jour l'état du portail (ouvert ou fermé), sachant qu'il est probable que le portail piéton soit seulement à impulsion, et qu'on ne puisse pas lui donner un état sur ouvert/fermé en fonction des appuis successifs, mais je peux me tromper). 2) si on le souhaite, capter les demandes de modification des entités commandées (ici le portail) pour générer un appui sur le bouton de commande.

Attention, comme dans tous les cas, l'envoi d'une commande ne signifie pas que sa réception a été effective, et même dans le cas d'une commande bi-directionnelle, que Domoticz ait été présent et en mesure de mettre à jour l'état de l'entité commandée (par exemple, si Domoticz est down lorsqu'on ouvre le portail, son état sera "fermé" alors que c'est faux. Une fois un changement raté, on est perpétuellement désynchronisé ...

Dans ce cas de commandes qui seraient jugées importantes, il est bon de déterminer l'état réel avec 1 ou contacteurs de fin de course, indiquant réellement dans quel état l'entité est.

Mais ce n'est ni spécifique à Domoticz, ni au plug-in AirSend ...

rezzalex commented 1 year ago

Je teste dimanche soir !

rezzalex commented 1 year ago

J'ai pu tester rapidement cela a fonctionné sur la première commande seulement et ensuite plus.

2023-03-19 08:44:01.371 AirSend: Worker thread started. 2023-03-19 08:47:25.763 AirSend: Worker thread started. 2023-03-19 08:47:27.063 AirSend: Wrote /var/www/html/airsend.php 2023-03-19 08:47:27.063 AirSend: Binding prototol 25455 to http://127.0.0.1:8080/airsend.php 2023-03-19 08:47:27.071 AirSend: {"duration": 0, "channel": {"id": 25455}, "callback": "http://127.0.0.1:8080/airsend.php"} returned Ok 2023-03-19 08:47:27.071 AirSend: Heartbeat interval set to: 60. 2023-03-19 08:49:23.517 AirSend: onDeviceModified 001/AirSend - AirSend event data 2023-03-19 08:49:23.517 AirSend: Received event {"type":3,"timestamp":"2023-03-19 07:49:23","reliability":7,"channel":{"id":14177,"source":1513505537,"mac":34647},"thingnotes":{"notes":[{"method":1,"type":1,"value":24025763840,"value_binsize":40}]},"original_timestamp":1679212163392,"localip":"FE80000000000000DCF6E5FFFE8D2E9A"} 2023-03-19 08:49:23.517 AirSend: Can't find 14177/1513505537 in YAML configuration file 2023-03-19 08:49:51.164 AirSend: onDeviceModified 001/AirSend - AirSend event data 2023-03-19 08:49:51.164 AirSend: Received event {"type":3,"timestamp":"2023-03-19 07:49:51","reliability":7,"channel":{"id":14177,"source":1513505537,"mac":34624},"thingnotes":{"notes":[{"method":2,"type":2,"value":291.95}]},"original_timestamp":1679212191032,"localip":"FE80000000000000DCF6E5FFFE8D2E9A"} 2023-03-19 08:49:51.165 AirSend: Can't find 14177/1513505537 in YAML configuration file 2023-03-19 08:52:01.668 AirSend: 007/Volet Sud, 25455/241767: Command: 'Close', Level: 0, Color: 2023-03-19 08:52:01.669 AirSend: Sending notes method=1, type=1, value=8 to channel Id=25455, source=241767 (settings) 2023-03-19 08:52:15.956 AirSend: 007/Volet Sud, 25455/241767: Command: 'Open', Level: 100, Color: 2023-03-19 08:52:15.956 AirSend: Sending notes method=1, type=1, value=2 to channel Id=25455, source=241767 (settings) 2023-03-19 08:53:15.486 AirSend: 004/AirSend - Portail, 4897/2098788: Command: 'On', Level: 100, Color: 2023-03-19 08:53:15.486 AirSend: Sending notes method=1, type=0, value=18 to channel Id=4897, source=2098788 (standard) 2023-03-19 08:53:16.702 (AirSend - Portail) Updating device from 1:'100' to have values 1:'100'. 2023-03-19 08:53:49.126 AirSend: 004/AirSend - Portail, 4897/2098788: Command: 'On', Level: 100, Color: 2023-03-19 08:53:49.126 AirSend: Sending notes method=1, type=0, value=18 to channel Id=4897, source=2098788 (standard) 2023-03-19 08:53:49.934 (AirSend - Portail) Updating device from 1:'100' to have values 1:'100'. 2023-03-19 08:54:49.310 AirSend: 021/AirSend - Portail piéton, 4897/2098916: Command: 'On', Level: 100, Color: 2023-03-19 08:54:49.310 AirSend: Sending notes method=1, type=0, value=18 to channel Id=4897, source=2098916 (standard) 2023-03-19 08:54:49.715 (AirSend - Portail piéton) Updating device from 1:'100' to have values 1:'100'. 2023-03-19 08:55:20.652 AirSend: 004/AirSend - Portail, 4897/2098788: Command: 'On', Level: 100, Color: 2023-03-19 08:55:20.652 AirSend: Sending notes method=1, type=0, value=18 to channel Id=4897, source=2098788 (standard)

2023-03-19 08:55:21.859 (AirSend - Portail) Updating device from 1:'100' to have values 1:'100'.

FlyingDomotic commented 1 year ago

Il semble qu'AirSend écoute le protocole 14177, il n'y aura donc pas de retour sur le protocole 4879.

Il semble ensuite que certains volets (14177/1513505537) ne soient pas connus.

Il semble enfin y avoir un imbroglio entre les volets et les portails. Est-il possible d'avoir les fichiers configuration.yaml et AirSend.json ? Éventuellement par mail si le contenu est "sensible".

rezzalex commented 1 year ago

Par mail, ou tchat ? Telegram ou autre ?

FlyingDomotic commented 1 year ago

Mail c'est bien

rezzalex commented 1 year ago

Ok, quel est votre email ? :-)

Le dim. 19 mars 2023, 13:11, Flying Domotic @.***> a écrit :

Mail c'est bien

— Reply to this email directly, view it on GitHub https://github.com/FlyingDomotic/domoticz-airsend-plugin/issues/12#issuecomment-1475233045, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIMCHN6BZIMN5MJVC7WGBGTW43ZXFANCNFSM6AAAAAAV7I4W4Q . You are receiving this because you authored the thread.Message ID: @.***>

FlyingDomotic commented 1 year ago

fd.github [a] gmail.com

rezzalex commented 1 year ago

Bien recu ?

FlyingDomotic commented 1 year ago

Non, mais c'est normal, je n'ai pas donné la bonne adresse ... Il faut envoyer à fd.github [a] yopmail.com (ce coup-ci, c'est la bonne ...)

rezzalex commented 1 year ago

Il semble enfin y avoir un imbroglio entre les volets et les portails. Est-il possible d'avoir les fichiers configuration.yaml et AirSend.json ? Éventuellement par mail si le contenu est "sensible".

Dans mes essais, j'ai également actionné des VR pour vérifier le bon fonctionnement global (comme un test de non régression), pour vérifier que le plug in fonctionnai tjrs. C'est peut être ce que vous avez vu dans les logs ?

FlyingDomotic commented 1 year ago

Pour les VR, c'est assez probable ...

Pour les portails, le souci vient de ce que Domoticz envoie une commande "On" (c'est un push-button de type On) et que la commande décrite dans le .json est "Open". A priori, si on remplace "Open" par "On" sur les portails, ça pourrait fonctionner :

    "settings": [
        {"Poussoir portail": {
                "deviceId": 4897, "deviceSource": 2098788,
                "type": 244, "subtype": 73, "switchtype": 9,
                "commands": [
                    {"On": {"method":1, "type":1, "value": 3, "nValue": 1, "sValue": "100"}},
                ]
            },
        },
        {"Poussoir portail piéton ": {
                "deviceId": 4897, "deviceSource": 2098916,
                "type": 244, "subtype": 73, "switchtype": 9,
                "commands": [
                    {"On": {"method":1, "type":1, "value": 18, "nValue": 1, "sValue": "100"}},
                ]
            },
        }
    ]
rezzalex commented 1 year ago

Non, ca ne fait rien du tout :

2023-03-19 19:03:27.476 AirSend: 004/AirSend - Portail, 4897/2098788: Command: 'On', Level: 100, Color: 2023-03-19 19:03:27.476 AirSend: Sending notes method=1, type=1, value=3 to channel Id=4897, source=2098788 (settings) 2023-03-19 19:03:27.682 (AirSend - Portail) Updating device from 1:'100' to have values 1:'100'. 2023-03-19 19:03:39.588 AirSend: 021/AirSend - Portail piéton, 4897/2098916: Command: 'On', Level: 100, Color: 2023-03-19 19:03:39.588 AirSend: Sending notes method=1, type=1, value=18 to channel Id=4897, source=2098916 (settings) 2023-03-19 19:03:40.194 (AirSend - Portail piéton) Updating device from 1:'100' to have values 1:'100'.

FlyingDomotic commented 1 year ago

Ben, à priori, quand on appuie sur le bouton, ça envoie un message avec method=1, type=1, value=3, ce qui est ce qui est demandé pour le portail, et method=1, type=1, value=18 pour le portail piéton, ce qui est aussi comme décrit dans le .json.

Après, il est possible que les paramètres à envoyer à AirSend ne soient pas ceux là, et que ça ne marche pas. Il faudrait demander à DevMel quoi envoyer, et l'ajuster le json pour que ça fonctionne ...

Pas de souci pour faire des modifs si le comportement du plug-in n'est pas le bon.

Par contre, n'ayant pas les dispositifs en cause, j'ai un peu de mal à chercher une solution/tester ...

rezzalex commented 1 year ago

Ticket envoyé a Devmel. Mais,

Est ce que nos possibles actions :

"On, Off, Open, Close and Stop"

Ne sont pas propres a DZ et Devmel ne saurait alors pas quoi indiqué ?

FlyingDomotic commented 1 year ago

En fait, DevMel ne connait que le format JSON qu'on lui envoie (et qu'il émet au travers du WebService).

Ce qui se passe, c'est que le message que le plug-in lui envoie (une zone note avec method=1, type=1, value=3 ou 18) ne provoque pas de réaction côté AirSend. Il est assez probable qu'il faille envoyer une séquence différente, que seul DevMel peut donner pour activer le basculement de l'état des portails.

En gros, il faut leur demander quelle trame (complète) ils souhaitent recevoir pour envoyer la séquence de basculement aux portails. Une fois ça connu, il suffit de donner les bons paramètres dans le .JSON.

Si la trame doit contenir des éléments différents de ceux utilisés habituellement (method, type et value), je ferais une modif pour supporter ce besoin.

Concernant les commandes DZ, le plug-in fait 2 choses : 1) récupérer les trames method/type/value et les convertir en nValue/sValue DZ pour récupérer un changement d'état remonté par AirSend 2) récupérer les commandes DZ et les convertir en method/type/value pour envoyer une demande d'émission à AirSend

Comme dit plus haut, coté DevMel, il suffit juste qu'ils expliquent quelle trame complète ils souhaitent recevoir pour envoyer un message radio au portail, on fera en sorte au niveau du JSON que les données envoyées soient correctes (et/ou on modifiera le code s'il faut des éléments spécifiques en dehors des habituels).

J'espère que c'est plus clair.

rezzalex commented 1 year ago

Merci, commentaire ajouté dans le ticket pour Devmel.

ne serait-ce pas coté DZ que nous ne savons pas quelle commande indiquée pour notre push on buton ?

image

FlyingDomotic commented 1 year ago

Non, sur le push button, l'état n'est pas important, vu qu'il ne change pas (un push button on est tout le temps on (sauf à sa création où il est off, mais passe on au premier appui), un push button off est tout le temps off).

De plus, on est dans le "sens inverse", c'est Domoticz qui envoie une commande "On" qui provoque l'envoi du JSON à AirSend. La mise à jour de l'état est propre à Domoticz, et ignorée avec ce type de bouton.

rezzalex commented 1 year ago

Bonjour,

Retour de Devemel : 1) Je dois vérifier que j'ai bien mis a jour le AirSendWebService, mais je crois que je l'ai déjà fait..

2) Voici les commandes Came que Devmel connait :

method: 1 type: 1

Portail Partiel : value:16 Portail Sequentiel: value:18 Portail Ouverture: value:19

Je vais tester ca dès que possible

rezzalex commented 1 year ago

Bonsoir, après la mise à jour du Airsendwebservice, les commandes fonctionnent (et plrs fois de suite) via DZ avec le pluginDZ , mais mes 2 télécommandes virtuelles font toutes les 2 de l'ouverture partielles, même en changeant la value de 3 à 19 .... je ne comprends pas...

{"AirSend - Portail": { "deviceId": 4897, "deviceSource": 2098788, "type": 244, "subtype": 73, "switchtype": 9, "commands": [ {"Open": {"method":1, "type":1, "value": 19, "nValue": 1, "sValue": "100"}} ] } }, {"AirSend - Portail piéton": { "deviceId": 4897, "deviceSource": 2098916, "type": 244, "subtype": 73, "switchtype": 9, "commands": [ {"Open": {"method":1, "type":1, "value": 18, "nValue": 1, "sValue": "100"}} ] }

FlyingDomotic commented 1 year ago

En fait, j'écrirais plutôt :

{
    "AirSend - Portail": {
        "deviceId": 4897, "deviceSource": 2098788,
        "type": 244, "subtype": 73, "switchtype": 9,
        "commands": [{"On": {"method":1, "type":1, "value": 18, "nValue": 1, "sValue": "100"}}]
    },
    "AirSend - Portail piéton": {
        "deviceId": 4897, "deviceSource": 2098916,
        "type": 244, "subtype": 73, "switchtype": 9,
        "commands": [{"On": {"method":1, "type":1, "value": 18, "nValue": 1, "sValue": "100"}}]
    }
}
rezzalex commented 1 year ago

Bonjour, avec ce code, les deux font toujours de l'ouverture partielle / piétonne ... SI on change la "value" du "portail" à 3, rien ne s'ouvre

avec le code 18 pour les 2 et la commande "open" ou lieu de "on", j'obtient les mêmes résultats

En enlevant tout le spécifique du AirSend.json, j'obtiens le même comportement également ....

FlyingDomotic commented 1 year ago

A priori, ill semble que le souci soit côté AirSend.

Pour trancher de façon certaine, il est possible de passer les commandes en direct au Web service. Ca se fait sur une machine qui a la commande curl installée (un RPi est un bon exemple, le RPi qui tourne le Web service est une très bonne idée, mais il est aussi possible d'utiliser cygwin sous Windows).

Le format de la commande est :

curl -X POST "http://aaaaaa/airsend/transfer" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"wait\": true, \"channel\": {\"id\":\"cccccc\",\"source\":\ssssss\"}, \"thingnotes\":{\"notes\":[{\"method\":mmm,\"type\":ttt,\"value\":vvv}]}}" -H "Authorization: Bearer bbbbbb"

avec :

De cette façon, on est certain de la commande envoyée (qu'on peut d'ailleurs copier/coller pour l'envoyer à DevMel), et être certain que le souci ne vient pas du plug-in, puisque Domoticz peut même être arrêté pendant la manip.

rezzalex commented 1 year ago

Merci, c'est une bonne méthode, je teste ca ce soir

rezzalex commented 1 year ago

J'ai pensé que la commande CURL est disponible, affichée dans AirsendCloud :

Voici donc celle du "PORTAIL", sans la partie bearer

curl -X POST "http://127.0.0.1:33863/airsend/transfer" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"wait\": true, \"channel\": {\"id\":\"4897\",\"source\":\"2098788\"}, \"thingnotes\":{\"notes\":[{\"method\":\"PUT\",\"type\":\"STATE\",\"value\":\"TOGGLE\"}]}}

et celle du Portail Piéton, il n'y a que la valeur "source" qui change.

J'ai essayé de mettre ces valeurs dans Airsend.Json.... sans succès

FlyingDomotic commented 1 year ago

En fait, la commande curl est à passer dans une fenêtre bash sur la machine où tourne Domoticz. Ne surtout rien modifier dans AirSend.json ! Et il faut ajouter la partie bearer, sinon le WebService ne fonctionnera pas.

rezzalex commented 1 year ago

J ai eu un pb de syntaxe pour la commande curl. Donc pas encore executée de mon côté Mais les détails de commandes viennent d Airsend cloud donc on doit pouvoir s'y fier''.

Le mer. 22 mars 2023, 19:10, Flying Domotic @.***> a écrit :

En fait, la commande curl est à passer dans une fenêtre bash sur la machine où tourne Domoticz. Ne surtout rien modifier dans AirSend.json ! Et il faut ajouter la partie bearer, sinon le WebService ne fonctionnera pas.

— Reply to this email directly, view it on GitHub https://github.com/FlyingDomotic/domoticz-airsend-plugin/issues/12#issuecomment-1480039477, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIMCHNZ2CV5G3JEZFYQ3FETW5M6CRANCNFSM6AAAAAAV7I4W4Q . You are receiving this because you authored the thread.Message ID: @.***>

rezzalex commented 1 year ago

Finalement, l'usage de la commande CURL indiquée dans Airsend Cloud ne fonctionne pas vraiment : cela ne fait que de l'ouverture du portail piéton ou rien du tout. Quand le portail est déjà totalement ouvert, la commande ne fait rien du tout.

curl -X POST "http://127.0.0.1:33863/airsend/transfer" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"wait\": true, \"channel\": {\"id\":\"4897\",\"source\":\"2098788\"}, \"thingnotes\":{\"notes\":[{\"method\":\"PUT\",\"type\":\"STATE\",\"value\":\"TOGGLE\"}]}}" -H "Authorization: Bearer sp://xxxxxxxxxxxxxxxx@[fe80::dcf6:e5ff:fe8d:2e9a]?gw=0"

j'ai essayé plusieurs variantes , seule la valeur 21 ( {"method":1, "type":1, "value":21,) actionne vraiment le portail "ouverture total", comme la télécommande répliquée sur Airsend le fait nqtive,ent viq airsend cloud ou app mobile . Les autres valeurs ne font que de l'ouverture piétonne.

du coup; tout fonctionne correctement.

Merci bcp !

Et aucun pb pour la gestion du retour d'état que je fais avec un autre matériel pour ce portail :-)

FlyingDomotic commented 1 year ago

Content que ça fonctionne. Je vais mettre cette façon de débugger dans la doc, c'est utile lorsque le souci vient du côté DevMel ;-)

Ceci dit, je me garde de leur jeter la première pierre, mon code est loin d'être exempt de bugs ;-)

Ceci dit encore, il peut être bon de leur envoyer la remarque, ils iront plus vite si quelqu'un d'autre a le même souci, voire pose la question en amont.

rezzalex commented 1 year ago

Oui je leur ai dit