Bonjour,
J'ai trouvé un script qui ne solutionne pas vraiment mon problème, mais en partie.
Il ping les adresses ip locales des esp8266 et passe le ou les interrupteurs virtuels de domotics qui ne répondent pas sur OFF:
Code : Tout sélectionner
commandArray = {}
--************************Ping des Esp8266 ****************************--
local ping={}
ping['192.168.0.32']='Cuisine' --Adresse ip locale de l'esp8266 et Cuisine est le nom de l'interrupteur
ping['192.168.0.33']='Salon'
ping['192.168.0.33']='port2'
for ip, switch in pairs(ping) do
ping_success=os.execute('ping -c1 -w1 '..ip)
if ping_success then --si le Périphérique est allumé
if(otherdevices[switch]=='Off') then --si le switch etait sur off
--commandArray[switch]='Off'
end
else --Si le périphérique est éteint
if(otherdevices[switch]=='On') then --si le switch etait sur On on l'eteind
commandArray[switch]='Off'
end
end
end
return commandArray
J'avais trouvé une autre piste qui coupe l'interrupteur virtuel de domoticz au boot de l'esp8266, mais je la préfère encore moins. J'y suis arrivé en capturant le MQTT domoticz/out # avec MQTTlens(une appli gratuite google)et j'ai juste changé le "nvalue" pour le réinjecter sur le MQTT domoticz/in. Je ne sais pas si c'est vraiment catholique de procéder de la sorte mais je n'ai pas d'erreur dans domotics, il faut créer une règle dans l'esp8266 (onglet Rules):
Code : Tout sélectionner
On System#Boot do
Publish domoticz/in,{ "Battery" : 255, "RSSI" : 12, "description" : "", "dtype" : "Light/Switch", "id" : "000141EB", "idx" : 411, "name" : "Cuisine", "nvalue" : 1, "stype" : "Switch", "svalue1" : "0", "switchType" : "On/Off", "unit" : 1 }
EndOn
J'aurais voulu une solution qui met les esp8266 sur ON dès qu'il se reconnectent au wifi.
EDIT:
Je viens de trouver une solution en déviant un peu le script de ping, on teste le ping, si l'esp8266 est connecté et que l'interrupteur virtuel de domoticz est sur ON on le force à ON :
Code : Tout sélectionner
commandArray = {}
--************************Ping des Esp8266 ****************************--
local ping={}
ping['192.168.0.32']='Cuisine' --Adresse ip locale de l'esp8266 et Cuisine est le nom de l'interrupteur
ping['192.168.0.33']='Salon'
ping['192.168.0.33']='port2'
for ip, switch in pairs(ping) do
ping_success=os.execute('ping -c1 -w1 '..ip)
if ping_success then --si le Périphérique est allumé
if(otherdevices[switch]=='On') then --si le switch etait sur off
--commandArray[switch]='On'
end
end
end
return commandArray
Ca ne doit pas être le top niveau script de forcer à ON ce qui est à ON mais c'est fonctionnel.
Si quelqu'un a une meilleur solution, je suis toujours preneur.
A bientôt...