[LUA] Repartition Consommation HC / HP...

Vous avez créé 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.
Triple0s
Messages : 37
Inscription : 23 sept. 2015, 15:13

Re: Repartition Consommation HC / HP...

Message par Triple0s »

euh je suis en train de revoir mon script qui est plein de beugs :-(
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
Triple0s
Messages : 37
Inscription : 23 sept. 2015, 15:13

Re: Repartition Consommation HC / HP...

Message par Triple0s »

Bon ben voila, après un gros travail de compréhension, j'ai modifié mon script, et je peux dire que celà fonctionne

Ci dessous mon script.
Un script par radiateur, un thermostat pour la zone, une sonde de température par radiateur, un switch virtuel pour savoir si température dite de confort ou economique, un switch qui permet de savoir si heure pleine ou pas pour edf, et un switch de présence ou pas.

Switch EDF:virtuel commandé par planning
Switch Confort ou Economique: virtuel commandé par planning google
Switch Présence: Virtuel commandé par la réponse au ping de certains équipements tel le téléphone ou tablette ou pc
Thermostat de zone: pour définir des températures de confort différentes si on est dans la chambre ou zone de vie ou SDB
Thermostat Eco: pour définir la température économique (Utilisé par tous les radiateurs)
Compteur virtuel pour chaque radiateur
Compteur virtuel Heures creuses
Compteur virtuel Heures Pleines
Compteur Virtuel Total.

Il ne manque que l'Hystérésis mais je me demande si bien nécessaire.

Le script est prévu pour tourner avec des radiateurs branchés sur des prises chacon (attention à la puissance du radiateur que vous mettez sur la prise !!!!).
Si vous souhaitez brancher vos radiateurs avec les modules chacon en ajoutant une diode pour ordonner sur le fil pilote, il suffit d'inverser les 2 ordres du commandArray[radiateur]='On' et commandArray[radiateur]='Off'

Code : Tout sélectionner

-- Ce script permet de maintenir la température
 
--------------------------------
------ Variables à éditer ------
--------------------------------
nom = 'chambre d amis'  --Affichage dans le log
local consigne_conf = tonumber(otherdevices_svalues['Therm_Amis'])  -- Température de consigne confort
local consigne_eco = tonumber(otherdevices_svalues['Therm_Eco'])  -- Température de consigne économique

local sonde = 'Temp Amis' -- Nom de la sonde de température
local mode = 'Chauffage_mode_confort' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local presence = 'Presence' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)

local heures = 'HC_HP' -- Nom de l'interrupteur virtuel de choix heures creuses ou pleines

local radiateur = 'Radiateur Amis' -- Nom de l'interrupteur de chauffage
local puissance = 1000   -- puissance du chauffage en watt
local conso = 'Conso_Amis'   -- nom du capteur virtuel de consommation électrique
local conso_id = 146  -- idx du capteur virtuel de consommation électrique

local conso_total = 'Conso TOTALE'   -- nom du capteur virtuel de consommation électrique totale
local conso_total_id = 149   -- idx du capteur virtuel de consommation électrique totale

local conso_creuses = 'Conso HCreuses'   -- nom du capteur virtuel de consommation électrique heures creuses
local conso_creuses_id = 147   -- idx du capteur virtuel de consommation électrique heures creuses

local conso_pleines = 'Conso HPleines'   -- nom du capteur virtuel de consommation électrique heures pleines
local conso_pleines_id = 148   -- idx du capteur virtuel de consommation électrique heures pleines

--------------------------------
-- Fin des variables à éditer --
--------------------------------
 
commandArray = {}
   
    local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) -- Température relevée

   
-- si présence détectée et chauffage sur normal
if ((otherdevices[presence] == 'On') and (otherdevices[mode] == 'On')) then
	consigne = consigne_conf
else 
	consigne = consigne_eco
end

  
   if (temperature < consigne) then
   
      commandArray[radiateur]='On'
      print('Chauffage ' .. nom .. ' -. ON .-')
      
                  
      -- envoie de la conso dans le capteur virtuel d'énergie
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		energy = tonumber(energy) + (puissance / 60)    
      
	  -- conso dans le capteur virtuel d'énergie total
		npower2, energy2 = string.match(otherdevices_svalues[conso_total], "(%d+%.*%d*);(%d+%.*%d*)")
		energy2 = tonumber(energy2) + (puissance / 60)    
      
	  -- conso dans le capteur virtuel d'énergie heures creuses
		npower3, energy3 = string.match(otherdevices_svalues[conso_creuses], "(%d+%.*%d*);(%d+%.*%d*)")
		energy3 = tonumber(energy3) + (puissance / 60)    
      
	  -- conso dans le capteur virtuel d'énergie heures pleines
		npower4, energy4 = string.match(otherdevices_svalues[conso_pleines], "(%d+%.*%d*);(%d+%.*%d*)")
		energy4 = tonumber(energy4) + (puissance / 60)    
     
	  
		if (otherdevices[heures] == 'On') then 
     
			print('envoi dans les consos dont heures pleines')
			commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. puissance .. ';' .. energy }
			commandArray[2]={['UpdateDevice'] = conso_total_id .. '|0|' .. puissance .. ';' .. energy2 } 
			commandArray[3]={['UpdateDevice'] = conso_pleines_id .. '|0|' .. puissance .. ';' .. energy4 } 

		else 

			print('envoi dans les consos dont heures creuses')
			commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. puissance .. ';' .. energy }
			commandArray[2]={['UpdateDevice'] = conso_total_id .. '|0|' .. puissance .. ';' .. energy2 } 
			commandArray[3]={['UpdateDevice'] = conso_creuses_id .. '|0|' .. puissance .. ';' .. energy3 } 
		
		end	
   
   else
      
      commandArray[radiateur]='Off'
      print('Chauffage ' .. nom .. ' -. OFF .-')
      
         
     
		
		
   end

   print('il fait '..temperature..'C pour une consigne de '..consigne..'C souhaite dans la ' .. nom .. '')
      
return commandArray
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
bebert89
Messages : 4
Inscription : 09 déc. 2015, 07:34

Re: Repartition Consommation HC / HP...

Message par bebert89 »

Bonjour,

Je suis nouvel utilisateur de domoticz et je n'arrive pas à utiliser les scripts cité plus haut concernant les heures creuses et heures pleines.
Je suis équipé d'un téléinfo de chez cartelectronic usb 1 module. il est bien reconnu sous domoticz. mais je n'ai que la consomation instantané d'affiché. (j'ai pourtant fait comme indiqué :? )

[img]
Capture d’écran 2015-12-09 à 10.12.47.png
Capture d’écran 2015-12-09 à 10.12.47.png (116.26 Kio) Consulté 10279 fois
[/img]

dans le log j'obtien cela :

2015-12-09 10:08:25.838 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:08:38.554 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:08:51.300 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:09:04.046 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:09:16.793 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:09:29.498 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:09:42.246 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:09:54.972 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:10:07.717 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:10:20.435 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:10:33.151 (teleinfo edf) P1 Smart Meter (teleinfo edf)
2015-12-09 10:10:45.887 (teleinfo edf) P1 Smart Meter (teleinfo edf)

quand je fait cat /dev/USB0 j'ai bien toute les informations qui arrivent.

Donc voilà j'aimerais recevoir l'index des heures creuses (HCHC) et celui des heures pleines (HCHP). sur le tableau de bord de domotics.

merci d'avance pour votre aide.
patoche
Messages : 192
Inscription : 25 oct. 2015, 15:51

Re: Repartition Consommation HC / HP...

Message par patoche »

Bonjour

Si tu es en version stable de domoticz 2.3530 essaie avec la version beta.
RPI2 OSMC + domoticz + Rfx 433e + chacon dio, teleinfo 433 via arduino nano, sonde T° innovaley et TFA 303139, sonde T° piscine DIY 433 oregon, OWL 180, RPI zero W + camera
bebert89
Messages : 4
Inscription : 09 déc. 2015, 07:34

Re: Repartition Consommation HC / HP...

Message par bebert89 »

merci pour ta réponse mais malheureusement ça n'a rien changer !!

n'y a t'il pas moyen de dissocier les information donné par le téléinfo plus simplement que par le script. Comme j'ai dit je début avec domoticz et n'ai pas encore regardé tout les solutions mais si l'on pouvais m'aiguiller ce serait pas mal.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Repartition Consommation HC / HP...

Message par vil1driver »

Salut,

As tu simplement regardé le rapport ? (bouton visible après avoir cliqué le bouton logs du module)

J'ai ce module et je trouve la page rapport au top
Détail HP HC et calcules des coûts...
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
bebert89
Messages : 4
Inscription : 09 déc. 2015, 07:34

Re: Repartition Consommation HC / HP...

Message par bebert89 »

merci "vil1driver" ce sont bien les informations que je cherchais à obtenir.
Après je ne comprend pas pourquoi le script ne fonctionnais pas.

Savez vous si est possible de récupérer ces informations dans le dashbord directement.

Merci
alpin38
Messages : 64
Inscription : 02 juil. 2015, 11:14

Re: Repartition Consommation HC / HP...

Message par alpin38 »

bonjour

j'ai modifié un bout de script pour détecter les périodes HC/HP automatiquement
cela évite de creer le switch virtuel (ou deux) ainsi que le blocky

c'est en test ce jour, si le basculement se fait automatiquement ce soir ( heures creuses a 23 heures chez moi ) je posterai le bout de code modifié
(c'est le code préalablement modifié par Jacques68 donc pour l'optocoupleur fait maison) mais le principe reste le meme , ce ne doit pas etre difficile de l'appliquer au code initial du post

bonne journée

donc 23h00 est passé et le changement d'etat HP => HC a fonctionné parfaitement

je vous met le code

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 memo_hp = uservariables['Memo_HP']
local memo_hc = uservariables['Memo_HC']
local etathc = uservariables['EtatHC']


-- 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 .. ";" .. ene$
    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('HC = '..tostring(etathc))

    end

-- extraction de la puissance consommé en watt
-- Attention remplacer dans la ligne ci-dessous 'Compteur EDF' par le nom de vot$
-- extraction de la valeur en watt , (P1 smart meter, ex: "Data" : "17564059;985$
a, b, x, y, watt, z = string.match(otherdevices_svalues['Compteur EDF'], "(%d+%.$
usage = tonumber(watt)



    -- Recuperation des valeurs du compteur principal
    local heurescreuses
    local heurespleines
    heurespleines, heurescreuses = otherdevices_svalues[capteurGlobal]:match("([$
    heurespleines = tonumber(heurespleines)
    heurescreuses = tonumber(heurescreuses)

        --Detection HP/HC en fonction du chgt de valeur du compteur EDF

        if (tonumber(memo_hp)< heurespleines) then
         if (debug == 'OUI') then
                print('Détection Heures pleines')
         end
                etathc = 'Off'

        elseif (tonumber(memo_hc)< heurescreuses) then
         if (debug == 'OUI') then
                print('Détection Heures Creuses')
         end
                etathc = 'On'
        end
        --memorisation des dernieres valeurs pour prochain calcul

        commandArray['Variable:EtatHC'] = etathc
        commandArray['Variable:Memo_HP'] = tostring(heurespleines)
        commandArray['Variable:Memo_HC'] = tostring(heurescreuses)



    watt = tonumber(watt)

    if (debug == 'OUI') then
        print('Heures pleines = '..tostring(heurespleines)..' / Heures Creuses =$
    end

    local consoCumuleCible
    local consoInstantCible

    --if (otherdevices[flagHC] == 'On') then
    if (etathc == 'On') then

        -- Periode heures creuse
        -- Recupération des valeurs actuelles du compteur Heures Creuses
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHC]$
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle v$
        consoCumuleCible = tonumber(consoCumuleCible)


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

        -- Calcul de la conso journalière HC
        consoCumuleCible = consoCumuleCible + heurescreuses
        -- Mise à jour du compteur
        update(capteurCptHC, idxCptHC, usage , heurescreuses, 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




   --if (otherdevices[flagHC] == 'Off') then
   if (etathc == 'Off') then

        -- Periode heures pleines
        -- Récuperation des valeurs du compteur Heures Pleines
        consoInstancible, consoCumuleCible = otherdevices_svalues[capteurCptHP]:$
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle v$
        consoCumuleCible = tonumber(consoCumuleCible)

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

        -- calcul de la conso journaliere HP
        consoCumuleCible = consoCumuleCible + heurespleines
        -- Mise à jour du compteur
        update(capteurCptHP, idxCptHP, usage , heurespleines, 3)

        -- Mise à 0 de la conso intantanée du compteur HC
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match$
        consoInstantHC = 0
        update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 4)
    end


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

return commandArray






il faut créer donc 3 variables (1 chaine pour EtatHC et 2 decimal pour les Memo_HP/Memo_HC)
vs pouvez supprimer ensuite vos switch ainsi que vos planning dans blocky
Dernière modification par alpin38 le 18 déc. 2015, 10:05, modifié 1 fois.
bebert89
Messages : 4
Inscription : 09 déc. 2015, 07:34

Re: Repartition Consommation HC / HP...

Message par bebert89 »

Je viens de le mettre en route chez moi, pour le moment pas de message d'erreur dans le log


MERCI ;)
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Repartition Consommation HC / HP...

Message par Seb13 »

Hello à tous,

J'ai mis en fonction chez moi aussi, j'ai un TéléInfo EDF USB, donc, la solution de la page 1 ne fonctionne pas, il faut prendre la 2ème solution.

Pour les débutants comme moi :D
Il faut bien déclarer les variables via le menu de Domoticz et non dans le script. :cry:
Il faut relancer Domoticz via /home/pi/domoticz/scripts/restart_domoticz
Dans mon cas, j'avais une erreur ...nil... sur la variable HP ou HC... car j'ai fait les tests avant et après le passage en HC.
local capteurCptHP = uservariables['CapteurCptHP']
local capteurCptHC = uservariables['CapteurCptHC']
Je suis devenu fou... pendant 1h j'ai cherché...à la fin, j'ai dit... aller je relance... :o

Attention au Maj ou Min des variables...
Attention à votre Copier/Coller du dernier script... vous allez avoir des $ à la fin des lignes trop longue... je l'ai eu avec VI.

Pour l'instant, cela fonctionne... je regarde demain matin si le passage HP fonctionne.

Chez moi c'est HP de 7h00 à 23h10 et HC de 23h10 à 7h00 :lol:

Encore merci pour votre aide sur les x sujets du forum... on avance très vite avec vos scripts déjà tout fait :P
Répondre