Page 1 sur 1

Sonoff synchronisé au boot en MQTT. [Résolu]

Publié : 29 août 2018, 00:26
par Micmacx
Bonjour,

Depuis mes derniers messages j'ai fait un peu de chemin :
_Installé easy esp correctement sur les Sonoff.
_installé domoticz correctement.
_Installé Mosquito(MQTT) correctement.

Je pensais qu'avec mosquito tout se synchroniserai correctement mais ce n'est pas le cas.
Quand je coupe l'alim d'un sonoff, le relais du sonoff passe à zero et dans domoticz l'interrupteur virtuel créé est toujours sur ON ce qui est normal.
Je réalimente le sonoff, le sonoff boot et le relais est toujours à zéro alors que dans domoticz l'interrupteur est toujours sur ON.
Ce qui m'intéresserai, c'est qu'après le boot du sonoff, une synchronisation soit faite entre les deux.
je me suis dit, je vais demander l'état de l'interrupteur via une commande de l'api JSON au boot du sonoff.

J'ai créé une règle dans le sonoff :

Code : Tout sélectionner

On System#Boot do
SendToHTTP 192.168.0.8,8084,/json.htm?type=devices&rid=411
EndOn
PS:Je précise que le sonoff est piloté par MQTT, il n'y a pas de lien http dans l'interrupteur de domoticz et que tout fonctionne normalement quand je clique pour changer l'état du relais.

Merci d'avance pour vos futures réponses et à bientot.

Re: Sonoff synchronisé au boot en MQTT.

Publié : 03 sept. 2018, 00:19
par Micmacx
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...