Domotique Piscine

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Jerboy
Messages : 7
Enregistré le : 18 mai 2020, 21:30

Re: Domotique Piscine

Message par Jerboy »

denis_brasseur
Re: Domotique Piscine
Message 19 mai 2020, 05:53

Jerboy a écrit : ↑

qui correspond a la ligne
CODE : TOUT SÉLECTIONNER

--Met à jour un device numérique Domotica
commandArray[CmdIdx] = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)}
De plus, des que j'ai eux cette erreur, mon capteur texte, qui affiche le bilan de la filtration soit le début de la filtration, la fin de filtration, la filtration effectuée et le temps restant à éffectuer, ne s'est plus mis à jour... (en ligne 277 du programme)

L'affichage des valeurs des variables devrait te permettre de trouver l'anomalie :
CODE : TOUT SÉLECTIONNER

print('Bil_Filt='..Bil_Filt)
print('HDebFilt='..HDebFilt)
print('HFinFilt='..HFinFilt)
print('PpeFait='..PpeFait)
print('PpeDuree='..PpeDuree)
print('PpeRestH='..PpeRestH)
à placer avant la ligne
CODE : TOUT SÉLECTIONNER

-- Capteur texte pour afficher le bilan de la filtration soit le début de la filtration, la fin de filtration, la filtration effectuée et le temps restant à éffectuer.
---------------------
je viens de rajouter la ligne mais rien ne s'affiche... Voici mon log

Code : Tout sélectionner

2020-05-19 15:10:00.210 Status: LUA: Script Piscine : Gestion de la filtration
2020-05-19 15:10:00.248 Status: LUA: Déjà effectué: 910.0 minutes sur 475.0
2020-05-19 15:10:00.249 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:108: attempt to concatenate a nil value (field '?')
2020-05-19 15:11:00.220 Status: LUA: Script Piscine : Gestion de la filtration
2020-05-19 15:11:00.259 Status: LUA: Déjà effectué: 915.0 minutes sur 475.0
2020-05-19 15:11:00.260 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:108: attempt to concatenate a nil value (field '?')
2020-05-19 15:11:26.966 MQTT: Topic: domoticz/in, Message: {"idx":10,"nvalue":0,"svalue":"27.6","Battery":100,"RSSI":5}
2020-05-19 15:11:26.976 Status: LUA: Script Piscine : Gestion de la filtration
2020-05-19 15:11:27.014 Status: LUA: Déjà effectué: 915.0 minutes sur 475.0
2020-05-19 15:11:27.015 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:108: attempt to concatenate a nil value (field '?')
de plus rien ne s'affiche à partir de la ligne 240 appelant la fonction Updatedev situé dans la fonction ChjFiltration()

Code : Tout sélectionner

            -- Calcul de la durée de fonctionnement de la pompe aujourd'hui
            -- Basé sur le compteur de puissance piscine
            today = os.date("%Y-%m-%d")
            PpeFait=os.capture('sqlite3 '..dbPath..' "select sum(value3) from multimeter where devicerowid='..otherdevices_idx[dev_cptFl]..' and Date(date)=\''..today..'\'"')*5/cst_PpeFl_W
            print("Déjà effectué: "..PpeFait.." minutes sur "..PpeDuree)
           UpdateDev('Filtration effectuée', 0, PpeFait.." minutes sur "..PpeDuree) -- test
par contre comme indiqué dans mon poste précédent, la fonction CalcFiltration() possédant UpdateDev fonctionne.

Code : Tout sélectionner

    -- dureeFiltration=round(60*math.max(0,cst_Adj*cst_Pisc_V/cst_PpeFl_Qn*(val_TEau-10)),0) -- Résultat en minutes ici init le 0 indique min 0 minutes
    dureeFiltration=round(60*math.max(3,math.min(12,cst_Adj*cst_Pisc_V/cst_PpeFl_Qn*(val_TEau-10))),0) -- resultat en minutes avec min 3h et max 12h
   dureeFiltrationH=os.date("%H:%M", dureeFiltration*60-3600)
    print("Durée de filtration : "..dureeFiltration.." min")
UpdateDev(tps_Fl, 0, "De "..dureeFiltration.." minutes soit "..dureeFiltrationH.."\n Température moyenne de l'eau hier : "..val_TEau.." °C")  -- affiche durée fitration en heures et minutes + temperature moyenne bassin

Jerboy
Messages : 7
Enregistré le : 18 mai 2020, 21:30

Re: Domotique Piscine

Message par Jerboy »

c'est bon j'ai finalement trouvé.
Comme j'avais supprimer des capteurs textes le fait de faires des updatesDev sans capteur ca fait planter la fonction. Du coup je les ai mi en commentaires

Code : Tout sélectionner

--UpdateDev('Filtration effectuée', 0, PpeFait.." minutes sur "..PpeDuree)

Code : Tout sélectionner

--UpdateDev('Restant filtration', 0, PpeRestH.." heures ")

Code : Tout sélectionner

--UpdateDev('Restant filtration', 0, 'Arrêtée')

par contre cela m'as permi de voir un probleme dans la fonction gst_HorsGel()

Code : Tout sélectionner

if gst_HorsGel then
                --[[ La température de l'eau est <12°C : on utilise la température 
                Démarrage si température d'eau <= 0.8
                Arrêt si température d'air >= 1.5 et température eau >= 1
                --]]               
                val_Tair = tonumber(otherdevices_svalues[dev_TAir])
                if (val_TEau <= 0.8) and val_PpeFl == "Off" then
                    print("Filtration piscine : Démarrage par température")
                    UpdateSw(dev_PpeFl,'On')
                elseif (val_Tair >= 1.5) and (val_TEau>=1) and val_PpeFl == "On" then
                    print("Filtration piscine : Arrêt par température")
                    UpdateSw(dev_PpeFl,'Off')
                end                
            end
Quand je fait un :
print ('dev_TAir='dev_TAir)
print ('val_Tair='val_Tair)
juste apres > val_Tair = tonumber(otherdevices_svalues[dev_TAir])
j'ai cette erreur

Code : Tout sélectionner

2020-05-19 16:06:00.303 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:284: ')' expected near 'dev_TAir
sachant que dev_TAir = "Température Exterieur" et que le capteur température est un capteur Netatmo exterieur, qui me retourne la température et le % d'humidité.

encore merci pour vos aides.

Jerboy
Messages : 7
Enregistré le : 18 mai 2020, 21:30

Re: Domotique Piscine

Message par Jerboy »

Un autre probleme :
voici ce que me donne mes capteurs...
Completement erronée
Bilan filtration Piscine
Début filtration: 09:32
Fin Filtration: 17:27
fitration éffectuée: 960.0 sur: 475.0
Temps restant de filtration: 15:55
et
pourtant la duréé de filtration piscine indiqué par le capteur texte donne
De 475.0 minutes soit 07:55
Température moyenne de l'eau hier : 26.3 °C
ou peux être l'erreur??? :evil:

je remets mon code complet :

Code : Tout sélectionner

--[[ Script de gestion de la piscine page 15 avec normalement toutes les modifications...
https://easydomoticz.com/forum/viewtopic.php?f=10&t=3935&hilit=domotique+piscine&start=250
OK le 19/05/2020 

Fonctions :

1. Gestion de la filtration
1.1 Calculer la durée et la période optimale de filtration
1.2 Démarrer / arrêter la filtration
     Si température eau > 12°C, selon planning calculé au dessus
     Sinon,cas de l'hivernage 
     Démarrage si température d'eau <= 0.8
     Arrêt si température d'air >= 1.5 et température eau >= 1
     
     Viltration minimum 3h et maxi 12h
    
1/ Les devices :
- dev_Tair et dev_Teau de type thermomètres, ras
- dev_PpeFl : le switch qui commande la pompe de filtration , de type On/Off
- dev_ModeFl : un interrupteur selecteur pour le mode de filtration. Doit contenir 4 niveaux :
* Off (Caché)
* Manu (Level 10) Dans ce mode, le script fait seulement les calculs de durée et de début, mais ne gère pas la pompe
* Auto HC (Level 20) pour filtration en heures creuses
* Auto HP (Level 30) pour filtration en journée 
- dev_HC : Un switch on/off avec planning pour indiquer les heures pleines ou creuses (On=HC, Off=HP)
- dev_cptFl : Un P1 smart counter pour comptabiliser la consommation électrique de la pompe

Le script a été conçu pour qu'on puisse à tout moment prendre la pompe en manuel (pour passer l'aspirateur, nettoyer les filtres, etc) et faire ce qu'on veut (arrêter, démarrer comme on veut) et, lorsqu'on repasse en mode automatique, il reprends la filtration là où elle avait élé laissée. Il faut donc un compteur qui stocke le temps de filtration effectué chaque jour pour pouvoir le comparer au temps calculé à minuit. La version la plus simple aurait été d'accumuler des minutes dans une variable. Mais finalement, la gestion qui consiste plutôt à accumuler des kWh dans un compteur n'est pas beaucoup plus compliquée, et elle donne l'avantage d'avoir un historique de la filtration ainsi que les rapports de coûts de celle-ci. C'est pour ça que j'ai choisi un compteur électrique plutôt qu'un compteur de minutes. En divisant les kWh par la puissance de la pompe, on retrouve la durée de filtration effectuée.

2/ Les variables :
2 variables à définir :
- var_PPStart, de type "Heure" stocke l'heure de début de filtration calculée à minuit
- var_PPDuree, de type "Entier" stocke la durée de filtration calculée, en minutes

3/ Les constantes
Elles servent à calculer la durée de filtration en fonction des caractéristiques du bassin et de la pompe :
- cst_PpeFl_Q Le débit nominal de la pompe de filtration en m3/h
- cst_Pisc_V Le volume du bassin, en m3
- cst_PpeFl_W La puissance électrique de la pompe piscine, pour pouvoir calculer la durée de filtration quotidienne ainsi que la consommation électrique correspondante
- cst_Adj Un coefficient à ajuster en + ou en - pour filtrer plus ou moins longtemps
    
    
--]]

-- Paramètres
local dbPath      = "/home/pi/domoticz/domoticz.db"
local gst_HorsGel = true                   -- gestion ou non du mode hors gel

local dev_TAir    = "Température Exterieur"           --"Température Extérieure"  idx 46 -- Température extérieure (nécessaire seulement pour le mode hors gel)
local dev_TEau    = "Temperature Piscine"            --"Température piscine"     idx 106-- Température eau piscine
local dev_PpeFl   = "Filtration piscine (Sonoff POW)"                 --"Filtration piscine"      idx 110-- Interrupteur de commande de la pompe
local dev_ModeFl  = "Mode filtration piscine"            --"Mode filtration piscine" idx 104-- Selecteur du mode de la pompe (Manu/Auto HC/AutoHP)
local dev_cptFl   = "Consommation Piscine"         --"Consommation Piscine"    idx 109-- Compteur de consommation électrique piscine
local dev_HC      = "Heures creuses EDF"             --"Heures creuses EDF" 

local tps_Fl      = "Durée filtration Piscine"      -- Capteur texte pour afficher le temps de filtration en minutes
local Bil_Filt    = "Bilan filtration Piscine"  -- Capteur texte pour afficher le bilan de la filtration soit le début de la filtration, la fin de filtration, la filtration effectuée et le temps restant à éffectuer.

local var_PPStart = "PpePiscStart"  -- Variable contenant l'heure de départ de la filtration
local var_PPDuree = "PpePiscDuree"  -- Variable contenant la durée de la filtration

-- Réglages du temps de filtration
local cst_PpeFl_Qn=18      -- Débit nominal de la pompe de filtration en m3/h
local cst_Pisc_V  =50     -- volume du bassin, en m3
local cst_Adj     =0.175  -- Coefficient à ajuster en + ou en - pour filtrer plus ou moins longtemps
local cst_PpeFl_W =400    -- Puissance électrique de la pompe piscine

-- -------------------------------
-- Bibliothèque de fonctions
-- -------------------------------
local CmdIdx=1
local debug=1

function round(num, dec)
    if num == 0 then
        return 0
    else
        local mult = 10^(dec or 0)
        return math.floor(num * mult + 0.5) / mult
    end
end

function os.capture(cmd, raw)
    local f = assert(io.popen(cmd, 'r'))
    local s = assert(f:read('*a'))
    f:close()
    if raw then return s end
    s = string.gsub(s, '^%s+', '')
    s = string.gsub(s, '%s+$', '')
    s = string.gsub(s, '[\n\r]+', ' ')
    return s
end
   
function UpdateSw(device,commande)
    --Update un switch Domoticz
    commandArray[CmdIdx] = {[device] = commande}
    CmdIdx=CmdIdx+1
end

function UpdateVar(variable,valeur)
    --Update une variable Domoticz
    commandArray[CmdIdx] = {['Variable:'..variable] = tostring(valeur)}
    CmdIdx=CmdIdx+1
end

function UpdateDev(device,nvalue,svalues)
    --Met à jour un device numérique Domotica
    commandArray[CmdIdx] = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)}
    CmdIdx=CmdIdx+1

end

function UpdateP1(device,HC,conso,prod,freq)
    -- Met à jour un P1 smart counter
    -- device : nom du compteur
    -- HC     : "On" si heures creuses, "Off" si heures pleines
    -- conso  : consommation instantannée
    -- prod   : production instantannée
    -- freq   : frequence d'exécution du script (en minutes) 
    
    local u1, u2, p1, p2
    local dbg=0
    
    u1, u2, p1, p2 = string.match(otherdevices_svalues[device],"(.-);(.-);(.-);(.-);.*")
    
    -- Utile pour les compteurs nouvellement crées
    u1=u1 or 0
    u2=u2 or 0
    p1=p1 or 0
    p2=p2 or 0

    if dbg == 1 then
        print("Mise à jour de "..tostring(device))
        print("u1 "..tostring(u1))
        print("u2 "..tostring(u2))
        print("p1 "..tostring(p1))
        print("p2 "..tostring(p2))
        print("conso "..tostring(conso))
        print("prod "..tostring(prod))
    end

    if otherdevices[HC] == 'Off' then
        -- svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD
        commandArray[CmdIdx] = {['UpdateDevice'] = otherdevices_idx[device]..'|0|'..tostring(u1+conso*freq/60)..';'..tostring(u2)..';'..tostring(p1+prod*freq/60)..';'..tostring(p2)..';'..tostring(conso)..';'..tostring(prod)}
        CmdIdx=CmdIdx+1
    else
        commandArray[CmdIdx] = {['UpdateDevice'] = otherdevices_idx[device]..'|0|'..tostring(u1)..';'..tostring(u2+conso*freq/60)..';'..tostring(p1)..';'..tostring(p2+prod*freq/60)..';'..tostring(conso)..';'..tostring(prod)}
        CmdIdx=CmdIdx+1
    end
end

function ConsoDev(switch,ConsoMarche,ConsoVeille)
    -- Retourne la consommation d'un appareil commandé
    -- selon qu'il est en marche ou en veille
    if otherdevices[switch] == 'On' then
        return ConsoMarche
    else
        return ConsoVeille
    end
end

function CalcFiltration()
    --[[ Calcule 
    * La durée optimale de filtration en fonction de la Température
    de l'eau, du débit de la pompe et du volume du bassin
    * L'heure de début de la filtration selon qu'on veut filtrer en heure creuses ou pleines

    Utilise les variables globales suivantes
    dev_Teau    : device du thermomètre d'eau
    dev_ModeFl  : le sélecteur de mode de filtration
    cst_PpeFl_Qn: débit nominal de la pompe en m3/h
    cst_Pisc_V : Volume du bassin en m3
    cst_Adj     : Coefficient d'ajustement
    var_PPStart : Nom de la variable qui va stocker l'heure de départ de la filtration
    var_PPDuree : Nom de la vatiable qui va stocker la durée de filtration
    --]]
    
    local val_TEau, MidiSol, DebutFiltration, dureeFiltration, HDebFilt, dev_TAir, dureeFiltrationH
    
    print("Script Piscine : Calcul de la filtration")
    val_TEau=os.capture('sqlite3 '..dbPath..' "select temp_avg from temperature_calendar where devicerowid='..otherdevices_idx[dev_TEau]..' order by date desc limit 1"')
    val_TEau=round(val_TEau,1)
    print("Température moyenne hier : "..val_TEau.." °C")

    -- dureeFiltration=round(60*math.max(0,cst_Adj*cst_Pisc_V/cst_PpeFl_Qn*(val_TEau-10)),0) -- Résultat en minutes ici init le 0 indique min 0 minutes
    dureeFiltration=round(60*math.max(3,math.min(12,cst_Adj*cst_Pisc_V/cst_PpeFl_Qn*(val_TEau-10))),0) -- resultat en minutes avec min 3h et max 12h
   dureeFiltrationH=os.date("%H:%M", dureeFiltration*60-3600)
    print("Durée de filtration : "..dureeFiltration.." min")
UpdateDev(tps_Fl, 0, "De "..dureeFiltration.." minutes soit "..dureeFiltrationH.."\n Température moyenne de l'eau hier : "..val_TEau.." °C")  -- affiche durée fitration en heures et minutes + temperature moyenne bassin
    --UpdateDev(tps_Fl,0,dureeFiltration) -- affiche seul en minutes duree de filtration
    --UpdateDev(tps_Flh,0,dureeFiltrationH) -- affiche seul en Heures duree de filtration

    if otherdevices[dev_ModeFl] == "Auto HC" then
        -- Mode Auto Heures Creuses
        -- On filtre jusqu'à 7h30 si possible (=450 min), et on déborde si nécessaire
        DebutFiltration=math.max(10,450-dureeFiltration)
    else
        -- Mode Auto Heures Pleines ou Manu
        -- On filtre en journée, centré sur le midi solaire
        MidiSol=round((timeofday['SunriseInMinutes']+timeofday['SunsetInMinutes'])/2,0) -- en minutes
        DebutFiltration=round(MidiSol-dureeFiltration/2,0) -- en minutes
    end
    HDebFilt=os.date("%H:%M", DebutFiltration*60-3600)
    print("Début de filtration : "..HDebFilt)

    UpdateVar(var_PPStart,HDebFilt)
    UpdateVar(var_PPDuree,dureeFiltration)
end

function ChkFiltration()
    --[[Gestion de la filtration
    Start / Stop de la pompe
    Demandes de chloration automaique --]]

    -- Mode de la filtration :
    -- Manu / Auto HC / Auto HP
    
    -- local PpeDuree, val_TEau, val_PpeFl, MinDuJour, PpeStart, today, PpeFait
    local dev_TAir, val_TAir, PpeRest, PpeRestH, HFinFilt, HDebFilt, PpeStartH, PpeDuree, PpeFait
    local eff_Fl, val_PpeFl, MinDuJour, PpeStart, today, val_TEau
    print("Script Piscine : Gestion de la filtration")

    PpeDuree=tonumber(uservariables[var_PPDuree])

    if (otherdevices[dev_ModeFl] ~= "Manu") then
        -- val_TEau = tonumber(string.match(otherdevices_svalues[dev_TEau],"(%d+.%d*);.*")) -- si capteur temperature avec capteur humidité
        val_TEau=tonumber(otherdevices_svalues[dev_TEau]) -- si capteur temperature seul
        val_PpeFl=otherdevices[dev_PpeFl]

        if (val_TEau >= 12) then
            -- La témpérature d'eau est >=12°C : on utilise la temporisation
            MinDuJour=60*time.hour+time.min

            PpeStart=tonumber(string.sub(uservariables[var_PPStart],1,2))*60+tonumber(string.sub(uservariables[var_PPStart],4,5))

            -- Calcul de la durée de fonctionnement de la pompe aujourd'hui
            -- Basé sur le compteur de puissance piscine
            today = os.date("%Y-%m-%d")
            PpeFait=os.capture('sqlite3 '..dbPath..' "select sum(value3) from multimeter where devicerowid='..otherdevices_idx[dev_cptFl]..' and Date(date)=\''..today..'\'"')*5/cst_PpeFl_W
            print("Déjà effectué: "..PpeFait.." minutes sur "..PpeDuree)
        --UpdateDev('Filtration effectuée', 0, PpeFait.." minutes sur "..PpeDuree)
            
            -- Calcul du temps restant de filtration
            PpeRest=PpeDuree-PpeFait
            PpeRestH=os.date("%H:%M", PpeRest*60-3600)
            PpeFaitH=os.date("%H:%M", PpeFait*60-3600)
            PpeDureeH=os.date("%H:%M", PpeDuree*60-3600)
            
            -- PpeRest=round(PpeRest,0)
            if (PpeRest > 0) then
                print("Temps restant de filtration piscine : "..PpeRestH.." heures ")
                --UpdateDev(tps_Fl,0,dureeFiltration)
            --UpdateDev('Restant filtration', 0, PpeRestH.." heures ")
                --commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[rest_Fl]..'|0|'..PpeRestH..' heures'}
            else 
                print("Filtration piscine finie")
            --UpdateDev('Restant filtration', 0, 'Arrêtée')
                -- commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[rest_Fl]..'|0|'..'Arrêtée'}
            end
                
                if (MinDuJour >= PpeStart and PpeFait < PpeDuree and val_PpeFl == "Off") then
                    print("Filtration piscine : Démarrage par timer")
                    UpdateSw(dev_PpeFl,'On')
                elseif (PpeFait >= PpeDuree and val_PpeFl == "On") then
                    print("Filtration piscine : Arrêt par timer")
                    UpdateSw(dev_PpeFl,'Off')
                end
            
            -- Calcul de l'heure de début de filtration
            HDebFilt=os.date("%H:%M", PpeStart*60-3600)
            print("Début de filtration : "..HDebFilt)
        --commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[heure_Fl]..'|0|'..HDebFilt}
            
            -- Calcul de l'heure de fin de filtration
            HFinFilt=os.date("%H:%M", ((PpeStart*60-3600)+(PpeDuree*60)))
            print("Fin de la filtration a : "..HFinFilt)
        --commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[fin_Fl]..'|0|'..HFinFilt}
           
-- Capteur texte pour afficher le bilan de la filtration soit le début de la filtration, la fin de filtration, la filtration effectuée et le temps restant à éffectuer.
            UpdateDev(Bil_Filt, 0, "Début filtration: "..HDebFilt.." \n Fin Filtration: "..HFinFilt.." \n fitration éffectuée: "..PpeFait.." sur: "..PpeDuree.." \n Temps restant de filtration: "..PpeRestH)
            --commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[tps_Fl]..'|0|'..'Début: '..PpeStartH..';'..' Fin: '..HFinFilt..';'..'\n Durée: '..PpeDuree..';'..' Fait: '..PpeFait}
        
    
        else
            if gst_HorsGel then
                --[[ La température de l'eau est <12°C : on utilise la température 
                Démarrage si température d'eau <= 0.8
                Arrêt si température d'air >= 1.5 et température eau >= 1
                --]]               
                val_Tair = tonumber(otherdevices_svalues[dev_TAir])
                if (val_TEau <= 0.8) and val_PpeFl == "Off" then
                    print("Filtration piscine : Démarrage par température")
                    UpdateSw(dev_PpeFl,'On')
                elseif (val_Tair >= 1.5) and (val_TEau>=1) and val_PpeFl == "On" then
                    print("Filtration piscine : Arrêt par température")
                    UpdateSw(dev_PpeFl,'Off')
                end                
            end

        end -- filtration timer/temperature 
    else
        print("Mode manu, pas de changement")
    end -- end mode auto/manu
end

-- -------------------------------
-- Fin bibliothèque de fonctions
-- -------------------------------

commandArray = {}

time = os.date("*t")

--Calcul de la durée optimale de filtration et de l'heure de démarrage tous le jours à minuit une
if time.hour==0 and time.min ==1 then CalcFiltration() end
--if time.hour==22 and time.min ==35 then CalcFiltration() end   -- mise a jour à 22H35

-- Marche/Arrêt de la pompe de filtration tous les quart d'heures
if (((time.min-1) % 15)== 0) then ChkFiltration() end
--if (((time.min-1) % 1)== 0) then ChkFiltration() end  -- toutes les minutes

-- Mise à jour du compteur de consommation de la piscine toutes les 5min
if (((time.min-2) % 5)== 0) then 
    UpdateP1(dev_cptFl,dev_HC,ConsoDev(dev_PpeFl,cst_PpeFl_W,0),0,5)
end

return commandArray 

denis_brasseur
Messages : 572
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Domotique Piscine

Message par denis_brasseur »

Jerboy a écrit : 19 mai 2020, 16:17 Quand je fait un :
print ('dev_TAir='dev_TAir)
print ('val_Tair='val_Tair)
juste apres > val_Tair = tonumber(otherdevices_svalues[dev_TAir])
j'ai cette erreur

Code : Tout sélectionner

2020-05-19 16:06:00.303 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:284: ')' expected near 'dev_TAir
La bonne syntaxe : (point point entre texte et variable)

Code : Tout sélectionner

print ('dev_TAir='..dev_TAir)
print ('val_Tair='..val_Tair)
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Jerboy
Messages : 7
Enregistré le : 18 mai 2020, 21:30

Re: Domotique Piscine

Message par Jerboy »

denis_brasseur a écrit : 19 mai 2020, 19:42
Jerboy a écrit : 19 mai 2020, 16:17 Quand je fait un :
print ('dev_TAir='dev_TAir)
print ('val_Tair='val_Tair)
juste apres > val_Tair = tonumber(otherdevices_svalues[dev_TAir])
j'ai cette erreur

Code : Tout sélectionner

2020-05-19 16:06:00.303 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:284: ')' expected near 'dev_TAir
La bonne syntaxe : (point point entre texte et variable)

Code : Tout sélectionner

print ('dev_TAir='..dev_TAir)
print ('val_Tair='..val_Tair)
toujours l'erreur
avec

Code : Tout sélectionner

val_Tair = tonumber(otherdevices_svalues[dev_TAir])
voici le log

Code : Tout sélectionner

2020-05-19 20:44:00.342 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:284: attempt to concatenate a nil value (local 'dev_TAir')
et avec

Code : Tout sélectionner

val_Tair = tonumber(string.match(otherdevices_svalues[dev_TAir],"(%d+.%d*);.*")) -- si capteur temperature avec capteur humidité
voici le log

Code : Tout sélectionner

2020-05-19 20:47:00.372 Error: EventSystem: in Script de gestion de la piscine_page15: [string "--[[ Script de gestion de la piscine page 15 ..."]:283: bad argument #1 to 'match' (string expected, got nil)

denis_brasseur
Messages : 572
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Domotique Piscine

Message par denis_brasseur »

dev_Tair et dev_Teau de type thermomètres

local dev_TAir = "Température Exterieur" --"Température Extérieure" idx 46 -- Température extérieure (nécessaire seulement pour le mode hors gel)
commence par

Code : Tout sélectionner

print(dev_TAir)
qui devrait te retourner le nom de la sonde définie dans la variable précédente et qui doit correspondre au nom de ton device.
Puis :

Code : Tout sélectionner

print(otherdevices[dev_TAir])
ou

Code : Tout sélectionner

print(otherdevices["Température Exterieur"]
afin de voir la structure de la valeur retournée par dev_TAir
Une sonde Thermometre de donnera par exemple : 22.4
Une sonde Thermo + Hygro de donnera par exemple : 22.5;53;1. Dans ce cas :

Code : Tout sélectionner

print(otherdevices_temperature[dev_TAir])
devrait te retourner la temperature
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Jerboy
Messages : 7
Enregistré le : 18 mai 2020, 21:30

Re: Domotique Piscine

Message par Jerboy »

denis_brasseur a écrit : 20 mai 2020, 06:49
dev_Tair et dev_Teau de type thermomètres

local dev_TAir = "Température Exterieur" --"Température Extérieure" idx 46 -- Température extérieure (nécessaire seulement pour le mode hors gel)
commence par

Code : Tout sélectionner

print(dev_TAir)
qui devrait te retourner le nom de la sonde définie dans la variable précédente et qui doit correspondre au nom de ton device.
Puis :

Code : Tout sélectionner

print(otherdevices[dev_TAir])
ou

Code : Tout sélectionner

print(otherdevices["Température Exterieur"]
afin de voir la structure de la valeur retournée par dev_TAir
Une sonde Thermometre de donnera par exemple : 22.4
Une sonde Thermo + Hygro de donnera par exemple : 22.5;53;1. Dans ce cas :

Code : Tout sélectionner

print(otherdevices_temperature[dev_TAir])
devrait te retourner la temperature
Bonjour à tous,

en effet, j'ai tappé ça :

Code : Tout sélectionner

print(dev_TAir)
print(otherdevices[dev_TAir])
print(otherdevices_temperature[dev_TAir])
J'ai obtenu ca

Code : Tout sélectionner

2020-05-20 08:12:00.209 Status: LUA: Température Exterieur
2020-05-20 08:12:00.209 Status: LUA: 15.8;79;3
2020-05-20 08:12:00.209 Status: LUA: 15.800000190735
du coup dans la

Code : Tout sélectionner

if gst_HorsGel then
                --[[ La température de l'eau est <12°C : on utilise la température 
                Démarrage si température d'eau <= 0.8
                Arrêt si température d'air >= 1.5 et température eau >= 1
                --]]   
                
                val_Tair = tonumber(otherdevices_svalues[dev_TAir])
je remplace

Code : Tout sélectionner

val_Tair = tonumber(otherdevices_svalues[dev_TAir])
par

Code : Tout sélectionner

val_Tair = otherdevices_temperature[dev_TAir]
c'est Ça?

denis_brasseur
Messages : 572
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Domotique Piscine

Message par denis_brasseur »

Oui, c'est ça, voir même

Code : Tout sélectionner

val_Tair = tonumber(otherdevices_temperature[dev_TAir])
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Jerboy
Messages : 7
Enregistré le : 18 mai 2020, 21:30

Re: Domotique Piscine

Message par Jerboy »

denis_brasseur a écrit : 20 mai 2020, 18:10 Oui, c'est ça, voir même

Code : Tout sélectionner

val_Tair = tonumber(otherdevices_temperature[dev_TAir])
merci

MAidEN91
Messages : 113
Enregistré le : 01 sept. 2015, 20:50

Re: Domotique Piscine

Message par MAidEN91 »

Bonjour,

J'ai un comportement bizarre avec le script que j'explique pas...

Toutes les variables se calculent bien, mais j'ai un décalage de plusieurs minutes entre l'heure indiquée par la variable "Heure début filtration" et "heure fin filtration" et l'heure ou ma pompe s'allume et s’etteint vraiment :?

L'écart est entre 10 et 13 min pour l'instant de ce que je remarque.

Je pige pas trop d'ou ça pourrait venir si jamais vous avez une idée !

Répondre