Repartition Consommation HC / HP...

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Repartition Consommation HC / HP...

Messagepar chandler45 » 10 mars 2015, 16:19

Bonjour,

Si comme moi vous avez un capteur de consommation électrique et que vous êtes en heures creuses / pleines, vous voulez peut être savoir votre conso dans les heures creuses et celle dans les heures pleines. Donc voici le script que j'ai mis en place sur mon Domoticz.

But
Le but est donc d'avoir des capteur comme ci-dessous dans Domoticz
Cpt.JPG
Cpt.JPG (48.77 Kio) Consulté 11236 fois

Donc voici les étaptes pour arriver à ça.

Etape 1: les capteurs
Nous avons un déjà capteur électrique qui cumule tout ("Compteur Electrique Global"). Il faut maintenant créer 2 capteurs virtuels de type "Electrique (Instant + Compteur)". Dans mon cas, il s'agit de "Compteur Electrique HC" et "Compteur Electrique HP" comme vous pouvez le voir ci-dessus.

Etape 2 : Interrupteurs HC / HP
Ensuite, il faut que Domoticz puisse savoir quand nous sommes en HC ou HP. Donc pour cela, on crée 2 switchs virtuels (ici "EDF Heures Creuses" et "EDF Heures Pleines").
SwitchHCHP.JPG
SwitchHCHP.JPG (31.83 Kio) Consulté 11236 fois

Vous pouvez gérer les passages HC/HP via le planning de chaque bouton. Mais il suffit d'une erreur sur l'un pour se retrouver avec les 2 allumer ou eteint. Donc dans mon cas, j'ai préféré gérer ça de façon "centralisée" dans un blocky comme celui ci :
blocky.JPG
blocky.JPG (78.2 Kio) Consulté 11236 fois

Comme vous pouvez le voir, j'ai 3 périodes d'heures creuses. A vous d'ajouter ou supprimer des blocs en fonction...

Etape 3 : Sous le capot
Maintenant que tout le "visible" est en place, il faut s'attaque à la mécanique, avec le script ci-dessous. Donc pour expliquer rapidement son fonctionnement :
  • A chaque réception d'une valeur du capteur "réél", le script regarde si on se trouve en HC ou HP
  • Il calcule la consommation depuis le dernier envoi du capteur, et l'ajoute à la consommation global du compteur HC ou HP
  • Il récupère également la conso instantanée pour la mettre sur le compteur HC ou HP
  • Et important, il remet à 0 la conso instantanée de l'autre compteur. Sans cela, elle reste à la dernière valeur reçu, et ça va fausser les stats de vos compteurs HC/HP.

Code : Tout sélectionner

- script domoticz/scripts/lua/script_device_compteurHC-HP.lua

-- Initialisation des variables locales
local capteurGlobal = uservariables['CapteurGlobal']
local capteurCptHP = uservariables['CapteurCptHP']
local capteurCptHC = uservariables['CapteurCptHC']
local idxCptHP = uservariables['IdxCptHP']
local idxCptHC = uservariables['IdxCptHC']
local flagHC = uservariables['FlagHC']
local flagHP = uservariables['FlagHP']
local lastValueCptElecGlobal = uservariables['LastValueCptElecGlobal']

-- Mode debug Oui / Non
local debug = uservariables['debug']

-- Fonction de mise à jour
function update(device, id, power, energy, index)
    commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
    return
end

commandArray = {}

-- On prend en compte a chaque changement de valeur du compteur global
if (devicechanged[capteurGlobal]) then
    if (debug == 'OUI') then
        print('-- Calcul Compteurs HC / HP --')
        print('CapteurGlobal = '..capteurGlobal)
        print('CapteurCptHP = '..capteurCptHP)
        print('CapteurCptHC = '..capteurCptHC)
        print('idxCptHP = '..tostring(idxCptHP))
        print('idxCptHC = '..tostring(idxCptHC))
        print('flagHP = '..tostring(flagHP))
        print('flagHC = '..tostring(flagHC))
        print('LastValueCptElecGlobal = '..tostring(lastValueCptElecGlobal))
    end
   
    -- Recuperation des valeurs du compteur global
    local consoCumule
    local consoInstant
    consoInstant, consoCumule = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
    consoInstant = tonumber(consoInstant)
    consoCumule = tonumber(consoCumule)
   
    if (debug == 'OUI') then
        print('Conso Instant = '..tostring(consoInstant)..' / Conso Cumule = '..tostring(consoCumule)..' ')
    end

    -- Calcul de l'ecart avec le dernier envoi de donnees
    lastValueCptElecGlobal = tonumber(lastValueCptElecGlobal)
    local consoDelta = consoCumule - lastValueCptElecGlobal

    if (debug == 'OUI') then
        print('Delta conso = '..tostring(consoDelta))
    end

    local consoCumuleCible
    local consoInstantCible

    if (otherdevices[flagHC] == 'On') then
        -- Periode heures creuse
        -- Recuperation des valeurs du compteur global
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)

        if (debug == 'OUI') then
            print('Compteur cible = HC')
            print('Valeur precedente = '..tostring(consoCumuleCible))
            print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))
        end

        consoCumuleCible = consoCumuleCible + consoDelta
        -- Mise à jour du compteur
        update(capteurCptHC, idxCptHC, consoInstant, consoCumuleCible, 1)

        -- Mise à 0 de la conso intantanee du compteur HP
        consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        consoInstantHP = 0
        update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)
    else     
        -- Periode heures pleines
        -- Recuperation des valeurs du compteur global
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)

        if (debug == 'OUI') then
            print('Compteur cible = HP')
            print('Valeur precedente = '..tostring(consoCumuleCible))
            print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))
        end

        consoCumuleCible = consoCumuleCible + consoDelta
        -- Mise à jour du compteur
        update(capteurCptHP, idxCptHP, consoInstant, consoCumuleCible, 3)

        -- Mise à 0 de la conso intantanee du compteur HC
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        consoInstantHC = 0
        update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 4)
    end

    -- Sauvegarde de la valeur du compteur global pour prochain calcul
    commandArray['Variable:LastValueCptElecGlobal'] = tostring(consoCumule)

    if (debug == 'OUI') then
        print('-- Fin Calcul Compteur HC / HP --')
    end
end

return commandArray


Explication pour les variables :
  • CapteurGlobal : Nom du capteur physique
  • CapteurCptHP : nom du capteur virtuelle HP
  • CapteurCptHC : nom du capteur virtuelle HC
  • idxCptHP : IDX du capteur virtuelle HP
  • idxCptHC : IDX du capteur virtuelle HC
  • flagHP : Nom du switch HP
  • flagHC : Nom du switch HC
  • LastValueCptElecGlobal : valeur du compteur cumulé pour calculer l'écart par rapport au dernier relevé

Et merci à jackslayter qui m'a donné un coup de main pour fusionner mes 3 scripts initiaux en 1 seul !

Voilà, j'espère que ça pourra vous être utile ! :D
N'hésitez pas si vous avec des questions ou des remarques.
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


hobbe
Messages : 111
Inscription : 15 déc. 2014, 15:33
Contact :

Re: Repartition Consommation HC / HP...

Messagepar hobbe » 10 mars 2015, 23:29

chandler45 a écrit :Etape 2 : Interrupteurs HC / HP
Ensuite, il faut que Domoticz puisse savoir quand nous sommes en HC ou HP. Donc pour cela, on crée 2 switchs virtuels (ici "EDF Heures Creuses" et "EDF Heures Pleines").

Vous pouvez gérer les passages HC/HP via le planning de chaque bouton. Mais il suffit d'une erreur sur l'un pour se retrouver avec les 2 allumer ou eteint. Donc dans mon cas, j'ai préféré gérer ça de façon "centralisée" dans un blocky comme celui ci :


Personnellement,je n'utilise qu'un seul interrupteur heures pleines, contrôlé par le planning classique.
S'il est à On, c'est HP ; s'il est à Off, c'est HC.
Je suis sûr de ne pas me retrouver avec les 2 actifs en même temps ;)
Soft: Domoticz, OpenKarotz
Hard: Karotz, RFXtrx433, TeleinfoStick V3, DI-O 54795, THGN122N, THGR122NX, THN132N, KD101
Dev: Github

hobbe
Messages : 111
Inscription : 15 déc. 2014, 15:33
Contact :

Re: Repartition Consommation HC / HP...

Messagepar hobbe » 10 mars 2015, 23:33

chandler45 a écrit :

Code : Tout sélectionner

-- Mode debug Oui / Non
local debug = uservariables['debug']


J'aime beaucoup le coup du mode debug contrôlé par une "user variable", je vais faire de même dans mes scripts.

Merci !
Soft: Domoticz, OpenKarotz
Hard: Karotz, RFXtrx433, TeleinfoStick V3, DI-O 54795, THGN122N, THGR122NX, THN132N, KD101
Dev: Github

chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Repartition Consommation HC / HP...

Messagepar chandler45 » 11 mars 2015, 10:26

@hobbe : effectivement comme il n'y a que 2 modes j'aurais pu faire 1 seul switch... Comme je découvre encore Domoticz, à vouloir essayer les différentes fonctionnalités, j'ai parfois tendance à faire plus compliqué qu'il ne faudrait... Je vais regarder pour simplifier ! :)

Pour le mode debug, je confirme que ça simplifie le dev... une fois que le script fonctionne, au moins on ne prend pas le risque de supprimer quelque chose qu'il ne faut pas en même temps que tous les print. Même si ce n'est pas parfait, parce que quand tu te laches un peu sur les print de debug, et que tu commences à avoir quelques scripts... ben ça défile dans la log !! :lol:
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


jackslayter
Messages : 797
Inscription : 30 sept. 2014, 14:40
Localisation : RA38

Re: Repartition Consommation HC / HP...

Messagepar jackslayter » 13 mars 2015, 08:43

en test depuis 3 jours et c'est au top 8-)
j'ai mis en parallèle des compteurs (KWh) pour tester et avoir la conso par heure mais ça fait n’importe quoi
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Repartition Consommation HC / HP...

Messagepar chandler45 » 13 mars 2015, 09:51

Cool ! :D
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500

jackslayter
Messages : 797
Inscription : 30 sept. 2014, 14:40
Localisation : RA38

Re: Repartition Consommation HC / HP...

Messagepar jackslayter » 14 mars 2015, 17:37

Tu as essayé avec compteurs au lieu des électriques ?
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Repartition Consommation HC / HP...

Messagepar chandler45 » 14 mars 2015, 21:47

J'ai mis des compteurs, mais pour faire un semblant de calcul de la puissance consommée par les différents radiateurs quand ils sont allumés. Pour ce qui vient du capteur de conso, effectivement je suis resté sur le type électrique... C'est bizarre que ça fasse n'importe quoi, parce que c'est quand même des comportements proches les 2... Ou alors c'est lié aux paramètres diviseurs et CM180 qui jouent un rôle dans les électriques, mais pas les compteurs...

Je fais essayer de faire un test...
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500

brakc
Messages : 63
Inscription : 08 mars 2015, 21:37

Re: Repartition Consommation HC / HP...

Messagepar brakc » 08 mai 2015, 22:58

hobbe a écrit :
chandler45 a écrit :Etape 2 : Interrupteurs HC / HP
Ensuite, il faut que Domoticz puisse savoir quand nous sommes en HC ou HP. Donc pour cela, on crée 2 switchs virtuels (ici "EDF Heures Creuses" et "EDF Heures Pleines").

Vous pouvez gérer les passages HC/HP via le planning de chaque bouton. Mais il suffit d'une erreur sur l'un pour se retrouver avec les 2 allumer ou eteint. Donc dans mon cas, j'ai préféré gérer ça de façon "centralisée" dans un blocky comme celui ci :


Personnellement,je n'utilise qu'un seul interrupteur heures pleines, contrôlé par le planning classique.
S'il est à On, c'est HP ; s'il est à Off, c'est HC.
Je suis sûr de ne pas me retrouver avec les 2 actifs en même temps ;)


Bonsoir,

Perso, je n'utilise également qu'un seul interrupteur heures pleines. Cela change-t-il quelques chose au script svp?

Merci à vous ;)

Fabrice.

brakc
Messages : 63
Inscription : 08 mars 2015, 21:37

Re: Repartition Consommation HC / HP...

Messagepar brakc » 09 mai 2015, 10:05

brakc a écrit :
hobbe a écrit :
chandler45 a écrit :Etape 2 : Interrupteurs HC / HP
Ensuite, il faut que Domoticz puisse savoir quand nous sommes en HC ou HP. Donc pour cela, on crée 2 switchs virtuels (ici "EDF Heures Creuses" et "EDF Heures Pleines").

Vous pouvez gérer les passages HC/HP via le planning de chaque bouton. Mais il suffit d'une erreur sur l'un pour se retrouver avec les 2 allumer ou eteint. Donc dans mon cas, j'ai préféré gérer ça de façon "centralisée" dans un blocky comme celui ci :


Personnellement,je n'utilise qu'un seul interrupteur heures pleines, contrôlé par le planning classique.
S'il est à On, c'est HP ; s'il est à Off, c'est HC.
Je suis sûr de ne pas me retrouver avec les 2 actifs en même temps ;)


Bonsoir,

Perso, je n'utilise également qu'un seul interrupteur heures pleines. Cela change-t-il quelques chose au script svp?

Merci à vous ;)

Fabrice.



Rebonjour,

J'ai initialisé mes variables comme suit:

Code : Tout sélectionner

-- Initialisation des variables locales
local capteurGlobal = uservariables['Compteur Electrique Global']
local capteurCptHP = uservariables['Compteur Electrique HP']
local capteurCptHC = uservariables['Compteur Electrique HC']
local idxCptHP = uservariables['388']
local idxCptHC = uservariables['387']
local flagHC = uservariables['EDF heure pleines']
--local flagHP = uservariables['EDF heure pleines']
local lastValueCptElecGlobal = uservariables['3.578']


J'ai commenté "local flagHP" car je n'ai qu'un seul intérupteur HC/HP nommé "EDF heure pleines" (j'ai commenté également le print du flagHP plus bas).

Voici ce que j'ai:

Code : Tout sélectionner

pi@raspberrypi ~/domoticz/scripts/lua $ lua ./script_device_compteurHC-HP.lua
lua: ./script_device_compteurHC-HP.lua:4: attempt to index global 'uservariables' (a nil value)
stack traceback:
   ./script_device_compteurHC-HP.lua:4: in main chunk
   [C]: ?


Auriez-vous une idée svp?

Merci

Fab

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.



Revenir vers « La Bibliothèque Scripts et Tutos »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités