Page 1 sur 1

Cherche solution script robot Piscine

Publié : 22 oct. 2016, 11:30
par berut77
Bonjour,

Je viens d’installé un domoticz sur mon NAS afin de pouvoir contrôler un IPX800v3.

Je voudrait passer mon robot de piscine en automatique en gérant directement les moteurs.

je cherche un script permettant ceci :

si Bouton_marche_robot est "on" (interrupteur virtuel)
=> le relais_robot_1 => fonctionne exemple 2 heures à partir d'une variable heure_debut_nettoyage = 8:00 jusqu'à heure_fin_nettoyage
=> le relais_robot_2 => "on" 3 minutes puis "off" 3 minutes puis "on" 3 minutes etc ... pendant 2h ou heure_fin_nettoyage

et à la fin heure_fin_nettoyage on passe tout à "Off"

j'ai essayer du blocky et du lua mais je sois je n'est pas la bonne logique soit je suis nul => je n'arrive pas à reproduire le ON/OFF/ON/OFF en boucle

merci d'avance
Gabriel

Re: Cherche solution script robot Piscine

Publié : 23 oct. 2016, 17:29
par ganq
Bonjour et bienvenue sur le forum.
Donne nous le code que tu as fait et ce qui se passe. IL sera plus facile de répondre..

A+

Re: Cherche solution script robot Piscine

Publié : 25 oct. 2016, 11:29
par berut77
Bonjour,

Voici ce que intégré dans un script lua mais incrémentation de mon compteur et aléatoire selon les événements du log, donc le on/off/on n'est pas du tout régulier .
je l'ai testé en script_time et script_device et le fonctionnement aléatoire est identique.

Code : Tout sélectionner

-- script_time_Robot.lua
--
-- récupération du saint du jour dans un capteur texte

local Robot_Marche = 35   -- idx interrupteur Marche
local Robot_Chenille = 36   -- idx interrupteur Chenille
local Robot_on  = 57   -- idx interrupteur Robot_mis dans l'eau
local indexArray=0
function os.capture(cmd)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  return s
end

function timedifference (s)
  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 16)
  seconds = string.sub(s, 18, 19)
  t1 = os.time()
  t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
  difference = os.difftime (t1, t2)
  return difference
end

commandArray = {}


time = os.date("*t")


if (time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin']) and (otherdevices['Robot_on'] == 'On' and ( uservariables["compteur"] == 0)) then
    commandArray['Robot_Marche']='On'
    print ('if1 Robot_Marche = on')
    commandArray['Variable:compteur']= tostring(uservariables["compteur"] +1)
end 

if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin']) and (otherdevices['Robot_on'] == 'On') and (uservariables["compteur"] == 1)) then
    commandArray['Robot_Chenille']='On'
    print ('if2 chenille = on')
    commandArray['Variable:compteur']= tostring(uservariables["compteur"] +1)
end

if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin']) and (otherdevices['Robot_on'] == 'On') and ((uservariables["compteur"] > 1) and ( uservariables["compteur"] < 50))) then
    commandArray['Variable:compteur']= tostring(uservariables["compteur"] +1)
end

if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin']) and (otherdevices['Robot_on'] == 'On') and ( uservariables["compteur"] == 50)) then
    commandArray['Robot_Chenille']='Off'
    print ('if3 chenille = off')
    commandArray['Variable:compteur']= tostring(uservariables["compteur"] +1)
end

if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin']) and (otherdevices['Robot_on'] == 'On') and ((uservariables["compteur"] > 50) and ( uservariables["compteur"] < 100))) then
    commandArray['Variable:compteur']= tostring(uservariables["compteur"] +1)
end

if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin']) and (otherdevices['Robot_on'] == 'On') and ( uservariables["compteur"] == 100)) then
    commandArray['Variable:compteur']= tostring(0)
end

if ((otherdevices['Robot_on'] == 'Off') and ((otherdevices['Robot_Marche'] == 'On') or (otherdevices['Robot_Chenille'] == 'On') or ( uservariables["compteur"] ~= 0))) then
    commandArray['Variable:compteur']= tostring(0)
    commandArray['Robot_Chenille']='Off'  
    commandArray['Robot_Marche']='Off'
    print ('tout est eteint Robot_on = Off')
end

if (((time.hour < uservariables['Robot_heure_debut']) or (time.hour >= uservariables['Robot_heure_fin'])) and ((otherdevices['Robot_Chenille'] == 'On') or (otherdevices['Robot_Marche'] == 'On') or (uservariables["compteur"] ~= 0))) then
    commandArray['Variable:compteur']= tostring(0)
    commandArray['Robot_Chenille']='Off'  
    commandArray['Robot_Marche']='Off'
    print ('tout est eteint Plage horraire Off')
end

return commandArray

Je n'ai pas reussi à mettre une notion de temps à 3min ou 600 sec

merci d'avance
Gabriel

Re: Cherche solution script robot Piscine / / (RESOLU)

Publié : 27 oct. 2016, 15:47
par berut77
Bon finalement j'ai trouvé une solution, ce n'est pas du grand scripting mais au moins cela fonctionne sans trop surchargé les logs, par contre la commande local debuging = true en début de script ne m'a pas permis le debug ???? erreur de syntax ou de placement surement.

ci dessous ma solution : qui est stable depuis la mise en service :

Code : Tout sélectionner

-- script_time_Robot.lua
--
-- Le relais Robot_Marche comandera l'alimentaionn globale du robot et la mise en route de la turbine d'aspiration d'eau via
--      => commande le relais 1 de l'ipx800  http://192.168.0.50/preset.htm?led1=X    X=0 relais Off /  X=1 relais on  
--      => relais Off  robot en fonctionnement
--
-- le relais Robot_Chenille comandera l'alimentation du moteur de chanille du robot pour avancer et reculer via inversion de polaritées du moteur
--      => => commande le relais 1 de l'ipx800  http://192.168.0.50/preset.htm?led2=X    X=0 relais Avance /  X=1 relais reculer
-- 
-- l'interupteur Marche_on est mis sur "On" losque que le robot est dans la piscine
-- lors du nettoyage ou mis hors de l'eau manuellement sur "Off"
--
-- Robot_heure_debut est uune variable de type entier exprimant l'heure de debut de cycle de fonctionnement dans mon cas "09" pour 9h
-- Robot_heure_fin est uune variable de type entier exprimant l'heure de fin de cycle  de fonctionnement dans mon cas "11" pour 11h
-- 
-- t0 etant une variable permettant d'avoir les minutes sur 2 digit de l'heure en cours
 
local debug = true     -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir


local Robot_Marche = 35     -- idx interrupteur Robot_Marche 
local Robot_Chenille = 36   -- idx interrupteur Robot_Chenille
local Robot_on  = 59        -- idx interrupteur Robot_on
local indexArray=0
local t0 = os.date("%M")    -- t0 minutes actuelles
function os.capture(cmd)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  return s
end

commandArray = {}

-- print ("t0 : " ..t0 )   -- affiche dans les logs la valeur de t0
 
-- Trigger at 08:00 
time = os.date("*t")

if (time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin'])   -- on est dans le cycle Heure de debut et heure de fin
    and ((otherdevices['Robot_Marche'] == 'Off') and (otherdevices['Robot_on'] == 'On'))                -- Roboot sur Off et Robot dans la piscine
        then    commandArray['Robot_Marche']='On'                                                       -- on met le robot en marche
                print ('Robot_Marche = on')                                                             -- On log que le robot est sur On
end
if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin'])  -- on est dans le cycle Heure de debut et heure de fin
    and (otherdevices['Robot_on'] == 'On')                                                              -- Robot dans la piscine
    and (otherdevices['Robot_Chenille'] == 'Off')                                                       -- Chenille sur Off (il avance) evite la polution de log et evite le passage à Off quand il est déja à Off
    and (t0 == '00' or t0 == '06' or t0 == '12' or t0 == '18' or t0 == '24' or t0 == '30' or t0 == '36' or t0 == '42' or t0 == '48' or t0 == '54'))    -- delta de 6 minutes pair
        then    commandArray['Robot_Chenille']='On'                                                     -- chenille sur On (il recule) 
                print ('Robot_chenille = on')                                                           -- on log que le robot_chenille on => recule
end
if ((time.hour >= uservariables['Robot_heure_debut'] and time.hour < uservariables['Robot_heure_fin'])  -- on est dans le cycle Heure de debut et heure de fin
    and (otherdevices['Robot_on'] == 'On')                                                              -- Robot dans la piscine
    and (otherdevices['Robot_Chenille'] == 'On')                                                        -- Chenille sur Off (il avance) evite la polution de loget evite le passage à On quand il est déja à On
    and (t0 == '03' or t0 == '09' or t0 == '15' or t0 == '21' or t0 == '27' or t0 == '33' or t0 == '39' or t0 == '45' or t0 == '51' or t0 == '57'))     -- delta de 6 minutes impaire
        then    commandArray['Robot_Chenille']='Off'                                                    -- chenille sur Off (il avance)
                print ('if3 chenille = off')                                                            -- on log que le robot_chenille off => avance
end
if ((otherdevices['Robot_on'] == 'Off')                                                                 -- Robot hors de l'eau (manuel)
    and ((otherdevices['Robot_Marche'] == 'On') or (otherdevices['Robot_Chenille'] == 'On')))           -- et relais robot_marche sur On ou Relais Robot_Chenille sur on            
        then    commandArray['Robot_Chenille']='Off'                                                    -- on passe Robot_Chenille = Off
                commandArray['Robot_Marche']='Off'                                                      -- on passe Robot_Marche = Off
                print ('Robot Piscine arreté => Robot hors de l eau')                                   -- on log robot arreté => Robot hors de l'eau
end

if (((time.hour < uservariables['Robot_heure_debut']) or (time.hour >= uservariables['Robot_heure_fin']))   -- on est hors du cycle Heure de debut et heure de fin
    and ((otherdevices['Robot_Chenille'] == 'On') or (otherdevices['Robot_Marche'] == 'On')))           -- et relais robot_marche sur On ou Relais Robot_Chenille sur on  
        then    commandArray['Robot_Chenille']='Off'                                                    -- on passe Robot_Chenille = Off
                commandArray['Robot_Marche']='Off'                                                      -- on passe Robot_Marche = Off
                print ('Robot Piscine arreté => Cycle terminé')                                         -- on log => Robot Piscine arreté => Cycle terminé
end
return commandArray

Re: Cherche solution script robot Piscine

Publié : 27 oct. 2016, 18:24
par thier
local debuging = true est utilisé pour afficher les log dans domoticz si tu le mets en condition de tes prints : if (debuging == 'true') then ...
Toi tu fais des prints sans condition donc il s'affiche tous dans les log.
Quand on dit que c'est pour débugger, c'est que tu peux mettre plein de print dans ton code pour baliser son exécution. Tu met debugging à true comme ça l'affichage des logs te permet de contrôler l'exécution de ton script. Ensuite quand le script est au point, tu remets a false comme ça tu ne surcharge pas la page de log. S évite d'utiliser les -- comme tu fais pour ne pas afficher de log.