Api Yeelight

Forum dédié à l'intégration de la Gateway ZigBee Xiaomi dans DomoticZ.
Pour les questions concernant les objets ZigBee Xiaomi, merci d'utiliser le forum ZigBee au-dessus.
Micmacx
Messages : 21
Inscription : 18 oct. 2017, 17:32

Api Yeelight

Message par Micmacx »

Bonjour,
J'ai essayé de piloter mes yeelights comme indiqué ici : viewtopic.php?f=26&t=6038

Rien ne fonctionnait, domoticz est installé sur un synology chez moi, je me suis rendu compte que netcat n'était pas installé sur synology.

Je vous fournis les liens pour installer netcat car j'ai vraiment galéré pour les trouver et ça pourrait en aider d'autres : https://www.codebuilder.fr/blog/install ... y-dsm-5-6/

Netcat étant installé, j'essai de nouveau, toujours des messages d'erreur, j'essai sous putty et je me rend compte que la commande nc ne fonctionne pas, j'essai avec la commande netcat et là miracle, mon ampoule s'éteint et s'allume.

Je modifie le script :

Code : Tout sélectionner

commandArray = {}
    DomDevice = 'Yeelight';
    IP = '192.168.0.20'; --Ici mettre l'adresse IP Fixe de votre Lampe/Ampoule
    PORT = '55443'
 
    if devicechanged[DomDevice]=='Off' then -- turn off
        runcommandoff = "sudo echo -ne '{\"id\":1,\"method\":\"set_power\", \"params\":[\"off\", \"smooth\", 500]}\\r\\n' | netcat -w1 192.168.0.20 55443";
        os.execute(runcommandoff);
        print(runcommandoff) 
    elseif devicechanged[DomDevice]=='On' then -- turn off
        runcommandon = "sudo echo -ne '{\"id\":1,\"method\":\"set_power\", \"params\":[\"on\", \"smooth\", 500]}\\r\\n' | netcat -w1 192.168.0.20 55443";
        os.execute(runcommandon);
        print(runcommandon) 
         end
return commandArray
et ça ne fonctionne toujours pas. :(
Je vous rassure, je ne veux pas simplement allumer et éteindre mes ampoules, mais j'essai le plus simple d'abord puis je ferais évoluer mon script. ;)

Edit : Je précise que je n'ai aucun message d'erreur dans domoticz.

Si quelqu'un a une idée, je suis preneur.

Merci d'avance pour vos futurs réponses et à bientôt. ;)
aver59
Messages : 2
Inscription : 01 mars 2019, 13:25

Re: Api Yeelight

Message par aver59 »

Pour ma part j'ai installé ncat (et non pas netcat) à l''aide de OPKG

Code : Tout sélectionner

opkg update
opkg install ncat

Voici la commande LUA qui va bien :

Code : Tout sélectionner

local ncat = '/opt/bin/ncat' -- Path to ncat
local PORT = '55443' -- yeelight bulb PORT
local JSON = "{\"id\":1,\"method\":\"set_power\",\"params\":[\"on\", \"smooth\", 500]}"

local runcommand = "echo -ne '" .. JSON .. "\\r\\n' | " ..ncat.. " -w1 " ..IP.." " ..PORT..""
return os.execute(runcommand)
aver59
Messages : 2
Inscription : 01 mars 2019, 13:25

Re: Api Yeelight

Message par aver59 »

Si besoin j'ai fais du reverse sur les "ambiances" envoyées par l'application Yeelight.

Ci dessous une fonction qui les exploite :

function yeelight(IP,scene)
le 2ème paramètre est le nom de l'ambiance.

Code : Tout sélectionner

-- Fonction d'appel à l'API Yeelight
function yeelight(IP,scene)
    -- Source : https://www.domoticz.com/wiki/Yeelight
    -- Install opkg : https://www.skyminds.net/nas-synology-installer-entware-ipkg-applications/
    -- Install ncat
    local ncat = '/opt/bin/ncat' -- Path to ncat
    local PORT = '55443' -- yeelight bulb PORT
    local JSON
    
    if scene == "On" or scene == "on" then
        JSON = "{\"id\":1,\"method\":\"set_power\",\"params\":[\"on\", \"smooth\", 500]}"
    elseif scene == "Off" or scene == "off" then
        JSON = "{\"id\":1,\"method\":\"set_power\",\"params\":[\"off\", \"smooth\", 500]}" 
    elseif scene == "sunrise" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"cf\",3,1,\"50,1,16731392,1,360000,2,1700,10,540000,2,2700,100\"]}"
    elseif scene == "sunset" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"cf\",3,2,\"50,2,2700,10,180000,2,1700,5,420000,1,16731136,1\"]}"
    elseif scene == "romance" then 
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"cf\",0,1,\"4000,1,5838189,1,4000,1,6689834,1\"]}"
    elseif scene == "nightmode" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"color\",16750848,1]}"
    elseif scene == "home" then
        --JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"ct\",3200,80]}" -- Version original trop blanche.
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"ct\",2800,100]}"
    elseif scene == "datingnight" then
        --JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"color\",16737792,50]}" -- Version originale trop sombre
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"color\",16737792,80]}"
    elseif scene == "happybirthday" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"cf\",0,1,\"1996,1,14438425,80,1996,1,14448670,80,1996,1,11153940,80\"]}"
    elseif scene == "movie" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"color\",1315890,50]}"
    elseif scene == "candleflicker" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"cf\",0,0,\"800,2,2700,50,800,2,2700,30,1600,2,2700,80,800,2,2700,60,1200,2,2700,90,2400,2,2700,50,1200,2,2700,80,800,2,2700,60,400,2,2700,70\"]}"
    elseif scene == "flashnotify" then
        JSON = "{\"id\":1,\"method\":\"set_scene\",\"params\":[\"cf\",6,0,\"600,2,4000,70,400,2,4000,1\"]}" 
    else
        JSON = scene
    end
    
    local runcommand = "echo -ne '" .. JSON .. "\\r\\n' | " ..ncat.. " -w1 " ..IP.." " ..PORT..""
    --print(runcommand)
    return os.execute(runcommand)
end
Répondre