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

impossible de faire fonctionner un device en DZVENT #14

Closed rezzalex closed 2 months ago

rezzalex commented 2 months ago

Bonjour @FlyingDomotic ,

un nouveau protocole supporté chez DeveMel m'a permis d'ajouter ma commande de porte de garage au plugin.

je viens de découvrir que le device DZ fonctionne en action directe, mais pas en DZvent avec le commande .switchOn()

Voici les extraits de conf du plugin :

config.yaml :

Porte de Garage: id: 43966 type: 4096 apiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxx channel: id: 26864 source: 1404673 note: method: 1 type: 1 value: 18

je n'avais au début rien rajouter au fichier airsend.json, j'ai rajouté ca ce matin, dans la partie settings, puis redémarré le plugin, sans supprimer le device DZ déja "découvert" précédemment, sans plus de succès :

{"AirSend - Porte de Garage": { "deviceId": 26864, "deviceSource": 1404673, "type": 244, "subtype": 73, "switchtype": 9, "commands": [{"On": {"method":1, "type":1, "value":18, "nValue": 1, "sValue": "100"}} ] } }

FlyingDomotic commented 2 months ago

Bonsoir, A priori, je plaide non coupable ! Il semble que les dispositifs de type push button n'admettent pas de commandes en dehors d'un appui sur l'interface Web. J'ai testé avec un push button virtuel, et ils ne répondent ni à DZvents, ni à LUA "simple". Du coup, il faudrait, soit demander le support des changements de push button par script à Domoticz, soit utiliser un autre type qui supporte les commandes LUA/DZvents.

rezzalex commented 2 months ago

Merci d'avoir testé.

C'est étrange, car mon script fonctionnait avec le device précédent, à savoir un module zwave qui donnait un push-on Button coté DZ

J'essaierai de changer le type du device de pour un "light" classique...

FlyingDomotic commented 2 months ago

Est-ce que c'est bien exactement le même type dans les 2 cas ? J'ai fait le test avec 2 push buttons. Le premier ("Test") qui déclenche un script, pour modifier le second (push button). J'ai une version LUA et une DZvents. Les deux push buttons ont été créés à partir d'un hardware de type "virtual switch". Les codes sont en dessous.

commandArray = {}
for deviceName,deviceValue in pairs(devicechanged) do
    print ("Device based event fired on >"..deviceName.."<, value >"..tostring(deviceValue).."<");
    if (deviceName=="Test") then
            print("Feu !")
            commandArray["push button"] = "On"
    end
end
return commandArray
return {
    on = { devices = { 'Test' } },
    execute = function(domoticz, device)
        domoticz.device("push button").switchOn()
    end
}
rezzalex commented 2 months ago

@FlyingDomotic , je viens de trouver ca mais n'est pas pu le tester encore :

(https://github.com/domoticz/domoticz/issues/5582#issuecomment-1416045115)

FlyingDomotic commented 2 months ago

Je viens de tester, et je n'y comprends plus grand chose ...

Il semblerait que le .switchOff().slient() débloque le switch, puisqu'on peut ensuite l'utiliser "normalement", avec LUA et avec DZvents.

Voilà les scripts utilisés, avec "Test "qui est le bouton déclencheur, et "PushOn" qui est un push button On.


return {
     on = {devices = {'Test'}},
     execute = function(domoticz, device)
         print("Avant switchOn : "..domoticz.devices("PushOn").state)
         domoticz.devices("PushOn").switchOn()
         print("Après switchOn : "..domoticz.devices("PushOn").state)
         domoticz.devices("PushOn").switchOff().silent()
         print("Après switchOff : "..domoticz.devices("PushOn").state)
     end
}

commandArray = {}
for deviceName,deviceValue in pairs(devicechanged) do
     if (deviceName=='Test') then
             print("Active PushOn")
             commandArray['PushOn'] = "On"
     end
end

return commandArray

Merci de me dire si ça a décoincé la situation ...

Le 24/04/2024 à 10:22, RezzA a écrit :

@FlyingDomotic , je viens de trouver ca mais n'est pas pu le tester encore :

(https://github.com/domoticz/domoticz/issues/5582#issuecomment-1416045115)

rezzalex commented 2 months ago

Je testerai dés que possible. Puisque la commande via DZ UI fonctionnait sans problème, puis-je donc enlever ma configuration pour ce device dans le fichier airsend.json ?

FlyingDomotic commented 2 months ago

Puis-je donc enlever ma configuration pour ce device dans le fichier airsend.json ?

Il n'y a pas d'obligation de tout déclarer au  plugin. On peut très bien ne gérer qu'une partie des équipements ...

Le 24/04/2024 à 11:16, RezzA a écrit :

Je testerai dés que possible. Puisque la commande via DZ UI fonctionnait sans problème. Puis-je donc enlever ma configuration pour ce device dans le fichier airsend.json ?

rezzalex commented 2 months ago

Puis-je donc enlever ma configuration pour ce device dans le fichier airsend.json ? Il n'y a pas d'obligation de tout déclarer au  plugin. On peut très bien ne gérer qu'une partie des équipements ... Le 24/04/2024 à 11:16, RezzA a écrit : Je testerai dés que possible. Puisque la commande via DZ UI fonctionnait sans problème. Puis-je donc enlever ma configuration pour ce device dans le fichier airsend.json ?

Pas entièrement de tout le plugin, juste de la partie Airsend.json. ?

rezzalex commented 2 months ago

Je viens de tester, et je n'y comprends plus grand chose ... Il semblerait que le .switchOff().slient() débloque le switch, puisqu'on peut ensuite l'utiliser "normalement", avec LUA et avec DZvents. Voilà les scripts utilisés, avec "Test "qui est le bouton déclencheur, et "PushOn" qui est un push button On. return {     on = {devices = {'Test'}},     execute = function(domoticz, device)         print("Avant switchOn : "..domoticz.devices("PushOn").state)         domoticz.devices("PushOn").switchOn()         print("Après switchOn : "..domoticz.devices("PushOn").state)         domoticz.devices("PushOn").switchOff().silent()         print("Après switchOff : "..domoticz.devices("PushOn").state)     end } commandArray = {} for deviceName,deviceValue in pairs(devicechanged) do     if (deviceName=='Test') then             print("Active PushOn")             commandArray['PushOn'] = "On"     end end return commandArray Merci de me dire si ça a décoincé la situation ... Le 24/04/2024 à 10:22, RezzA a écrit : @FlyingDomotic , je viens de trouver ca mais n'est pas pu le tester encore : (domoticz/domoticz#5582 (comment))

Non, aucun effet avec le .silent() ....

rezzalex commented 2 months ago

J'ai changé le type du device en "On/Off" ("lumière" classique) et le script ne permet tjrs pas de changer l'état... cela fonctionne parfaitement avec un autre device crée par le plugin ZwaveJsUI....

FlyingDomotic commented 2 months ago

Est-il possible de récupérer le log du plugin, notamment pour voir si on reçoit des commandes du genre Command: 'xxx', Level: xxx, Color: xxx ?

Le 24/04/2024 à 18:40, RezzA a écrit :

J'ai changé le type du device en "On/Off" ("lumière" classique) et le script ne permet tjrs pas de changer l'état...

rezzalex commented 2 months ago

aucun log /commande commande airsend n'est déclenchée quand je tente d'actionner le device par script... Peut être que le type de dz device créé par le plugin ne le permet pas ?

FlyingDomotic commented 2 months ago

On s'est peut-être mal compris ...

Pour essayer de voir si le souci vient du plugin ou de Domoticz, j'ai fait un test avec un dispositif Domoticz pur (un virtual device). Il est certain qu'il n'a pas d'action extérieure ,mais il est géré internement comme un "vrai".

Il est possible de reproduire les tests que j'ai réalisés, mais il ne faut pas s'attendre à ce que le plugin soit activé dans le cas d'un virtual device (il manque un peu de magie pour lier les deux).

Donc, une fois qu'on a un "truc" qui fonctionne avec un virtual device, on peut le reproduire avec un device AirSend, qui devrait fonctionner à ce moment là (du moins on l'espère).

Le 25/04/2024 à 10:12, RezzA a écrit :

image

https://www.domoticz.com/wiki/Dummy_for_virtual_Switches

rezzalex commented 2 months ago

Je viens de faire un test avec la création d'un second dumy switch en pushon, Avec mon script qui actionne le 2eme si on actionne le 1er, cela fonctionne parfaitement. Cela prouve à mon sens que cela vient du plugin, probablement dans la façon de créer le device. non ?

rezzalex commented 2 months ago

même test fait avec un AUTRE dispositif Airsend, ca a fonctionné tt de suite

FlyingDomotic commented 2 months ago

Je veux bien les parties correspondantes au plugin AirSend du log de Domoticz, histoire de voir ce qui se passe en interne. Il faut vérifier que le debug des "Verbose" ou "Extra verbose" avant la manip. Merci également d'indiquer les manips réalisées et d'ajouter le(s) script(s) correspondant(s). S'il y a des éléments "sensibles", ne pas hésiter à les remplacer par des xxx.

En ce qui concerne la façon de créer le device, elle est commune à l'ensemble des dispositifs AirSend, ligne 375  à 378. On utilise "type", "subtype" et "options", plus "switchtype" s'il est défini. Dit autrement, tout est dans le .json donné au plugin ;-)

Le 25/04/2024 à 10:52, RezzA a écrit :

Je viens de faire un test avec la création d'un second dumy switch en pushon, Avec mon script qui actionne le 2eme si on actionne le 1er, cela fonctionne parfaitement. Cela prouve à mon sens que cela vient du plugin, probablement dans la façon de créer le device. non ?

rezzalex commented 2 months ago

Résolu en supprimant le device et en retirant les lignes spécifiques au Device dans Airsend.json

Merci