has been running for more than 10 seconds

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
David
Messages : 18
Inscription : 25 mars 2015, 19:55

has been running for more than 10 seconds

Message par David »

Salut,

lorsque je fais un update d'une consigne de thermostat vituel avec la commande suivante :

Code : Tout sélectionner

commandArray['UpdateDevice']= b[5]..'|0|'..tempConsigne
ou avec ca:

Code : Tout sélectionner

commandArray[commandIndex]={['UpdateDevice'] = b[5]..'|0|'..tempConsigne}
avec b[5] = idx de ma "consigne de thermostat"
j'ai dans la console un warning :
2015-03-28 13:56:19.101 (RFX Interface) Temp + Humidity (Chambre parents)
2015-03-28 13:56:23.214 (Thermostat) Thermostat (Consigne réelle chambre parents)
2015-03-28 13:56:30.258 (RFX Interface) Temp + Humidity (Chambre Mathéo)
2015-03-28 13:56:54.328 (RFX Interface) Temp + Humidity (Salle de bain)
2015-03-28 13:57:00.084 LUA: Consigne réelle chambre parents : 21 - 18.5
2015-03-28 13:57:00.084 Sending SetPoint to device....
2015-03-28 13:57:10.084 Error: Warning: lua script /home/david/domoticz/scripts/lua/script_device_thermostat.lua has been running for more than 10 seconds
2015-03-28 13:57:00.082 (RFX Interface) Temp + Humidity (Chambre parents)
2015-03-28 13:57:10.086 (RFX Interface) Temp + Humidity (Chambre Mathéo)
2015-03-28 13:57:10.089 (Thermostat) Thermostat (Consigne réelle chambre parents)
2015-03-28 13:57:10.092 Script event triggered: /home/david/domoticz/scripts/lua/script_device_thermostat.lua
2015-03-28 13:57:37.304 (RFX Interface) Temp + Humidity (Salle de bain)
2015-03-28 13:57:41.065 (RFX Interface) Temp + Humidity (Chambre parents)
2015-03-28 13:57:48.218 (RFX Interface) Temp + Humidity (Chambre Mathéo)
a la deuxième ligne, j'ai manuellement modifié la consigne virtuel de façon a ce qu'elle ne corresponde plus a ce qu'elle devrait être
Ensuite j'ai mes sondes qui remontent leur info et quand je passe sur la sonde "Chambre parents", je vérifie que le thermostat virtuel est conforme et sinon je le met a jour, ça devrait me servir a loguer la température de consigne réelle de chaque pièce et ainsi pouvoir dire : "Tu vois chérie j'ai acheté quelques accessoires "de geek" mais maintenant quand il fait froid je sais pourquoi :)

Donc mon problème est sur le warning que je voudrais corriger mais dont je ne comprends pas trop la cause.
Ce qui est étrange c'est que ma "consigne de thermostat virtuel est bien mise a jour"

Si besoin voila le script complet :

Code : Tout sélectionner

-- thermostat device script
-- script names have three name components: script_trigger_name.lua
-- trigger can be 'time' or 'device', name can be any string
-- domoticz will execute all time and device triggers when the relevant trigger occurs
-- 
-- copy this script and change the "name" part, all scripts named "demo" are ignored. 
--
-- Make sure the encoding is UTF8 of the file
--

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

function round5(num, dec)
    return round(num/5,dec)*5
end 

hysteresis=0.5
Pieces=
{ 
    ['Chambre parents']={'Chambre parents','Consigne chambre parents','Chauffage chambre parents','Consigne réelle chambre parents',23};
    ['Chambre Mathéo']={'Chambre Mathéo','Consigne chambre Mathéo','Chauffage chambre Mathéo','Consigne réelle chambre Mathéo',22};
    ['Salon']={'Salle de bain','Consigne salon','Chauffage salon','Consigne réelle salon',21}
    --[NOM_PIECE]={'NOM SONDE TEMPERATURE','NOM THERMOSTAT VIRTUEL',NOM SWITCH CORRESPONDANT','CONSIGNE ACTIVE',CONSIGNE_ACTIVE_IDX}
}
Distances={'Distance David','Distance Estelle'}
SwitchChauffages={'Chauffage chambre parents','Chauffage chambre Mathéo','Chauffage salon','Force chauffage'}
SwitchChaudiere='Chaudière'

commandArray = {}
commandIndex=0

distanceChanged = false
minDistance = 100
--for i, v in pairs(otherdevices_svalues) do print(i..' '..v) end
-- Gestion des distances et caclul de la distance la plus proche
for a,b in pairs(Distances) do
    if devicechanged[b] then
        distanceChanged = true
    end
    dist = tonumber(otherdevices_svalues[b])
    if minDistance > dist then minDistance = dist end
end
   
-- Gestion des sondes de températures
for a,b in pairs(Pieces) do
    if (devicechanged[b[1]] or devicechanged[b[2]] or distanceChanged) then        
        -- On recupère la température actuel et on calcul la consigne en fonction de la distance    
        tempActuel = tonumber(otherdevices_svalues[b[1]]:match("([^;]+).+"))
        tempConsigne = round5(tonumber(otherdevices_svalues[b[2]]) * math.pow((100-minDistance)/100,1/2),1)
        --print ('Consigne pour '..a..' : '..tempConsigne..' - Température actuel : '..round(tempActuel,1))
        --On met a jour la capteur de consigne réelle pour les logs
        if (tonumber(otherdevices_svalues[b[4]]) ~= tonumber(tempConsigne)) then
            print(b[4]..' : '..tonumber(otherdevices_svalues[b[4]])..' - '..tonumber(tempConsigne))
            --La mise a jour bloque le systeme plus de 10 seconde??
            commandIndex = commandIndex+1
            commandArray[commandIndex]={['UpdateDevice'] = b[5]..'|0|'..tempConsigne}
            --commandArray['UpdateDevice']= b[5]..'|0|'..tempConsigne
            --commandArray[otherdevices_svalues[b[4]]] = tempConsigne
            --(otherdevices_svalues[b[4]] = tempConsigne 
        end
        if (tempConsigne < 17) then tempConsigne = 17 end
        -- On active/desactive le chauffage en cas de besoin
        if ((tempActuel < tempConsigne - hysteresis) and otherdevices[b[3]] == "Off")  then
            print (a..' : Temperature trop basse'..'. Activation '..b[3])
            commandArray[b[3]]='On'
        elseif ((tempActuel > tempConsigne + hysteresis) and otherdevices[b[3]] == "On") then
            print (a..' : Temperature trop haute'..'. Désactivation '..b[3])
            commandArray[b[3]]='Off'
        end
    end
end

-- Gestion des switch et allumage/Extinction chaudières
for a,b in pairs(SwitchChauffages) do
    if (devicechanged[b]) then
        if (devicechanged[b] == "On" and otherdevices[SwitchChaudiere] == "Off") then
            commandArray[SwitchChaudiere]='On'
        elseif (devicechanged[b] == "Off" and otherdevices[SwitchChaudiere] == "On") then
            -- On vérifie si aucun des switchs n'est encore actif
            needStop = true
            for c,d in pairs(SwitchChauffages) do 
                if otherdevices[d] == "On" then needStop = false end 
            end
            if (needStop == true) then
                commandArray[SwitchChaudiere]='Off'
            end
        end
    end
end

return commandArray

Pour chaque piece, j'ai un capteur oregon + une consigne de thermostat virtuel avec planning (qui me permet de définir ma température souhaité en fonction de l'horaire par pièce) + un switch pour allumer au pas le chauffage de la pièces + une consigne de thermostat virtuel que le script doit mettre a jour avec la consigne réelle de la pièce (la consigne réelle de la piece = "consigne du thermostat virtuel avec planning" * "un coefficient lié a la distance qui me sépare de ma maison") + idx de ce dernier thermostat
Et j'ai un switch global pour allumer ou éteindre la chaudière

Merci d'avance.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: has been running for more than 10 seconds

Message par vil1driver »

oui ici aussi et chez d'autre... même symptomes
mais via json ça passe bien.

Code : Tout sélectionner

commandArray['OpenURL']='IP:PORT/json.htm?type=command&param=udevice&idx='..b[5]..'&nvalue=0&svalue='..tempConsigne
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
David
Messages : 18
Inscription : 25 mars 2015, 19:55

Re: has been running for more than 10 seconds

Message par David »

OK merci j,'avais trouver cette solution mais je ne trouvais pas ça très propre.

A+
spads69
Messages : 65
Inscription : 01 mars 2015, 22:12

Re: has been running for more than 10 seconds

Message par spads69 »

j'ai eu le même problème 2 ou 3 fois ce jour, (je suis en version 2339) sur un script anodin qui ne posait pas de pb dans les versions précédentes ; après reboot plus de pb. Peut être est ce lié à cette version ?
Répondre