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.