Page 1 sur 1

Détection on, off, monitor et log activité radia, chauffeau

Publié : 09 févr. 2017, 09:03
par remis
Bonjour,
Je souhaite remonter l’activité de différents appareils consommateurs pour connaitre leur part dans la facture EDF. Pour le hard : pas besoin de mesurer précisément le courant consommé ( la puissance est connue) : détection par transfo de courant CT013 , mise en forme tout ou rien, mysensor, remontée vers domoticz sous la forme d’un capteur on-off type on-off. Environ 15 euros.
Ces consommateurs ne sont pas commandés : je ne peux pas log la commande.

Mon soucis se situe au niveau du script LUA : je ne suis pas capable de détecter la valeur de ce capteur ‘INTER’. Je ne dois pas savoir utiliser les commandes de lecture de valeur. Dans un script nommé script_device_INTER.lua :

for deviceName,deviceValue in pairs(devicechanged) do
print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'");

me fait apparaitre dans le log ‘Open’ ou ‘Closed’ comme valeure associé à la détection de l’activité ‘INTER’. Donc je vais tester si la val du capteur est open ou closed

commandArray = {}
if (devicechanged['INTER']) then

print( "entree script detection evenement INTER") -- on arrive ici tout se passe bien

print(otherdevices_svalues['INTER']) - - Il affiche la valeure 15 !! rien ne va plus

if (otherdevices_svalues['INTER']=='Open') -- forcément ce test ne fonctionne pas
then
print( " c'est passer a Ouvert")
end

end
return commandArray

Est ce que mon soucis n’est pas au niveau du paramètre que je test ? Comment tester la valeur de ce capteur?

Merci!

La seconde étape sera la génération d’un log mensuel avec l’heure de passage ‘’on’’ et de passage ‘’off’’. Tout cela a une grosse faiblesse : il ne faut pas rater les débuts et fin d’activité ; sinon tout sera décalé. Ou alors il faut forcer le capteur a emmètre son etat toute les minutes ; c’est faisable, je pense.

Re: Détection on, off, monitor et log activité radia, chauffeau

Publié : 09 févr. 2017, 21:50
par remis
il fallait écrire :

valeurinter= tostring(devicechanged['INTER'])
print(valeurinter) -- pour verif

if (valeurinter=='Open')
then
print( " c'est passer a Ouvert")
end

Re: Détection on, off, monitor et log activité radia, chauffeau

Publié : 10 févr. 2017, 09:01
par aleph0
Salut !

Voici le script que j'utilise pour faire ça. Je surveille 3 équipements :
- 2 (TV et pompe piscine) qui correspondent à ton cas d'usage : on a un switch qui permet de savoir si l'appareil est allumé ou éteint et une estimation de puissance fixe)
- 1 plus amusant, le cumulus électrique pour lequel on va chercher la signature sur la consommation électrique totale de la maison : Il se met en marche systématiquement à la commutation heure pleine -> vers heure creuse, et quand la consommation totale de la maison passe en dessous de 2200W, on considère qu'il a fini.

Le script tourne toutes les 5 minutes, il faut donc surveiller des appareils qui ont une durée d'allumage longue par rapport à ça sinon les erreurs d'estimations vont être importante.

On stocke les valeurs dans un dummy counter de type P1 smart counter ce qui permet de répartir l'utilisation entre heures creuse et heures pleines et pouvoir ainsi analyser l'impact sur la facture directement en €

Code : Tout sélectionner

-- Script pour dispatcher la consommation électrique dans différents compteurs selon l'utilisation des appareils
-- 1. Télévision
-- 2. Pompe Piscine
-- 3. Chauffe-eau

local mesure = "owl"			-- Compteur de consommation totale de la maison, en kWh
local HCSw = "Heures creuses EDF"  -- Dummy switch d'indication des heures pleines/creuses, sur planning. On=Heures creuses, Off=Heures pleines

-- 1. Télévision
local c1_cpt = "Consommation TV"  --Dummy P1 smart counter pour logger la consommation de la TV
local c1_W=120  -- Puissance consommée de la TV
local c1_Sw="TV Salon" -- Switch indiquant si la TC est allumée

-- 2. Pompe piscine
local c2_cpt = "Consommation Piscine"
local c2_W=300
local c2_Sw="Filtration piscine"

-- 3. Chauffe eau
local c3_cpt = "Consommation chauffe-eau"
local c3_W = 2200 -- Watt
local c3_UV_CEOn = "CE_Marche"

-- Variables internes
local c1_idx = otherdevices_idx[c1_cpt]
local c2_idx = otherdevices_idx[c2_cpt]
local c3_idx = otherdevices_idx[c3_cpt]
local c4_idx = otherdevices_idx[c4_cpt]
local cmd_idx=1
local freq = 5  -- Fréquence d'exécution du script, en minutes

-- Bibliothèque de fonctions
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 lastupdate(capteur)
    -- retourne le nombre de minutes écoulées depuis la dernière mise à jour d'un capteur
    s=otherdevices_lastupdate[capteur]

    s_year = string.sub(s, 1, 4)
    s_month = string.sub(s, 6, 7)
    s_day = string.sub(s, 9, 10)
    s_hour = string.sub(s, 12, 13)
    s_minutes = string.sub(s, 15, 16)
    s_seconds = string.sub(s, 18, 19)

    t2 = os.time{year=s_year, month=s_month, day=s_day, hour=s_hour, min=s_minutes, sec=s_seconds}
    return os.difftime (os.time(), t2)/60
end
-- Fin bibliothèque de fonctions

commandArray = {}
print ("-------------------------- New minute --------------------------------")
time = os.date("*t")

-- Run every "freq" minutes. 
if  (((time.min - 1)% freq)==0)  then 
    c1_u1, c1_u2 = string.match(otherdevices_svalues[c1_cpt],"(.-);(.-);.*")
    c2_u1, c2_u2 = string.match(otherdevices_svalues[c2_cpt],"(.-);(.-);.*")
    c3_u1, c3_u2 = string.match(otherdevices_svalues[c3_cpt],"(.-);(.-);.*")
    
    actual_conso, compteur, dum2 = string.match(otherdevices_svalues[mesure],"(%d+.%d*);(%d+).(%d*)")

    -- Télévision
    if otherdevices[c1_Sw] == 'On' then
        c1_conso=c1_W
    else
        c1_conso=0.6
    end

    -- Piscine
    if otherdevices[c2_Sw] == 'On' then
        c2_conso=c2_W
    else
        c2_conso=0.4
    end

    -- Chauffe-eau
    -- Le chauffe-eau ne marche que sur tarif de nuit et consomme 2200W, soit plus que tout autre machine de nuit
    -- Il démarre dès le début des heures creuses et s'arrête quand la conso instantanée < 2200W
    
    if otherdevices[HCSw] == 'On' and lastupdate(HCSw)<=freq then 
    --Première exécution du script depuis le début des HC
        commandArray['Variable:'..c3_UV_CEOn] = "On"
    end
    
    if otherdevices[HCSw] == 'On' and tonumber(actual_conso) >= c3_W and uservariables[c3_UV_CEOn] == "On" then
            c3_conso=c3_W
    else
            c3_conso=0
    end
    
    if otherdevices[HCSw] == 'On' and tonumber(actual_conso) < c3_W and uservariables[c3_UV_CEOn] == "On" then
    	-- Une fois qu'on a vu la consommation tomber sous 2200W dans la nuit, la chauffe est terminée. Si, plus tard, un autre appareil consommant plus de 2200W se met en route, il ne sera pas comptabiliser comme étant le chauffe-eau
        commandArray['Variable:'..c3_UV_CEOn] = "Off"
    end

    -- date_stamp=os.date("%Y-%m-%d %H:%M:%S")

    -- print ('HPHC '..otherdevices[HCSw])
    -- print ('C1_Sw '..otherdevices[conso1_Sw])
    -- print (date_stamp.." "..math.floor(actual_conso+0.5).." W") 
    -- print ("u1 "..usage1.." u2 "..usage2)
    -- print ("Wh "..Wh)

    -- Mise à jour des capteurs
    if otherdevices[HCSw] == 'Off' then
        -- svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD
        commandArray[cmd_idx] = {['UpdateDevice'] = tostring(c1_idx)..'|0|'..tostring(c1_u1+c1_conso*freq/60)..';'..tostring(c1_u2)..';0;0;'..tostring(c1_conso)..';0'}
        cmd_idx=cmd_idx+1
        commandArray[cmd_idx] = {['UpdateDevice'] = tostring(c2_idx)..'|0|'..tostring(c2_u1+c2_conso*freq/60)..';'..tostring(c2_u2)..';0;0;'..tostring(c2_conso)..';0'}
        cmd_idx=cmd_idx+1
        commandArray[cmd_idx] = {['UpdateDevice'] = tostring(c3_idx)..'|0|'..tostring(c3_u1+c3_conso*freq/60)..';'..tostring(c3_u2)..';0;0;'..tostring(c3_conso)..';0'}
        cmd_idx=cmd_idx+1
    else
        commandArray[cmd_idx] = {['UpdateDevice'] = tostring(c1_idx)..'|0|'..tostring(c1_u1)..';'..tostring(c1_u2+c1_conso*freq/60)..';0;0;'..tostring(c1_conso)..';0'}
        cmd_idx=cmd_idx+1
        commandArray[cmd_idx] = {['UpdateDevice'] = tostring(c2_idx)..'|0|'..tostring(c2_u1)..';'..tostring(c2_u2+c2_conso*freq/60)..';0;0;'..tostring(c2_conso)..';0'}
        cmd_idx=cmd_idx+1
        commandArray[cmd_idx] = {['UpdateDevice'] = tostring(c3_idx)..'|0|'..tostring(c3_u1)..';'..tostring(c3_u2+c3_conso*freq/60)..';0;0;'..tostring(c3_conso)..';0'}
        cmd_idx=cmd_idx+1
    end
end
    
return commandArray


Re: Détection on, off, monitor et log activité radia, chauffeau

Publié : 10 févr. 2017, 13:30
par remis
Bonjour,
Merci pour cette grosse contribution. Donc je vois que tu utilse le script pour comptabiliser.
Je voulais faire ca en externe sur les logs avec python et affichage, mais après tout..

Il faut que je digère ta réponse avant de revenir avec des questions pertinentes.
Question pratique : tu utilise quelle solution hard pour monitorer tout ca?

Rien a voir mais je viens de tester l'editeur Atom et son package LUA. Plus fort que notepad++

A bientot, des que j'ai du hard a montrer.