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]
Keros
Messages : 466
Enregistré le : 23 juil. 2019, 20:57

Re: Repartition Consommation HC / HP...

Message par Keros »

Le principe est que les scripts écrivent dans les capteurs virtuels : une fois le(s) capteur(s) créé(s), il faut aller dans le script et modifier les lignes en fonction du nom de ton capteur (ou de son idx).

dg-59
Messages : 34
Enregistré le : 09 juil. 2020, 11:09

Re: Repartition Consommation HC / HP...

Message par dg-59 »

la j'ai tout fait

Code : Tout sélectionner

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

-- Initialisation des variables locales
local capteurGlobal = uservariables['Compteur_general']
local capteurCptHP = uservariables['Compteur Electrique HP']
local capteurCptHC = uservariables['Compteur Electrique HC']
local idxCptHP = uservariables['22']
local idxCptHC = uservariables['21']
local flagHC = uservariables['EDF Heures Creuses']
local flagHP = uservariables['EDF Heures Pleines']
Image
Image

mais je cherche ou on modifier le capteur virtuel"Compteur_general"

Keros
Messages : 466
Enregistré le : 23 juil. 2019, 20:57

Re: Repartition Consommation HC / HP...

Message par Keros »

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.
Si j'ai bien compris, le compteur général semble celui de ta conso totale : cela doit être un compteur physique. Les deux capteurs virtuels à créer sont pour les HP et HC.

Par contre, attention à local capteurGlobal = uservariables['Compteur_general'] : ce sont des variables utilisateurs et non des devices. Il semblerait que le nom des capteurs soient renseignés dans les variables utilisateurs ... Pourquoi :?

dg-59
Messages : 34
Enregistré le : 09 juil. 2020, 11:09

Re: Repartition Consommation HC / HP...

Message par dg-59 »

slt, j'ai juste repris le tuto pour le modifier mais en remplaçant :local capteurGlobal = uservariables['Compteur_general']
par local capteurGlobal = uservariables['OWL_Intuition']

il ne ce passe rien j'essais de trouver comment faire mais je débute donc pas évident de comprendre

Apres je me demande si mon problème ne viendrai pas du fait que mon capteur OWL_Intuition et la pince donne 2 information le capteur OWL_Intuition les kWh et la pince les watts

il faudrait un capteur qui donne les 2 informations instant + compter non ?

Keros
Messages : 466
Enregistré le : 23 juil. 2019, 20:57

Re: Repartition Consommation HC / HP...

Message par Keros »

C'est bien ça, aucune "donnée/paramètre" n'est stockée dans le script. Toutes les infos sont normalement à mettre dans des variables locales.

EDIT : Tout était déjà expliqué en page 2 : https://easydomoticz.com/forum/viewtopi ... ae9e#p4192 :roll:


Une autre solution est de l'écrire comme ceci (à condition que les valeurs correspondent à celles de tes devices):

Code : Tout sélectionner

-- Initialisation des variables locales
local capteurGlobal = 'Compteur_general'
local capteurCptHP = 'Compteur Electrique HP'
local capteurCptHC ='Compteur Electrique HC'
local idxCptHP = '22'
local idxCptHC ='21'
local flagHC = 'EDF Heures Creuses'
local flagHP = 'EDF Heures Pleines'
Le capteurGlobal doit être le device physique de ta mesure (celui qui est lu).
Les capteurCptHP et capteurCptHC sont les devices virtuels que tu doit créer pour enregistrer l'info de mesure.
Les idxCptHP et idxCptHC correspondent aux IDX des capteurCptHP et capteurCptHC (oui le script a besoin du non et du numéro...)
Les flagHC et flagHP sont deux devices virtuels dans lesquels tu dois programmer les états de HP et HC.

dg-59
Messages : 34
Enregistré le : 09 juil. 2020, 11:09

Re: Repartition Consommation HC / HP...

Message par dg-59 »

voila je l'ai refait

Code : Tout sélectionner

-- Initialisation des variables locales
local capteurGlobal = 'OWL_Intuition'
local capteurCptHP = 'Compteur Electrique HP'
local capteurCptHC ='Compteur Electrique HC'
local idxCptHP = '22'
local idxCptHC ='21'
local flagHC = 'FlagHC'
local flagHP = 'FlagHP'


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

-- 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
    
        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))

   
-- extraction de la puissance consommé en watt
-- Attention remplacer dans la ligne ci-dessous 'Compteur EDF' par le nom de votre capteur principal, ne pas mettre l'uservariable 'CapteurGlobal' ca ne marche pas
-- extraction de la valeur en watt , (P1 smart meter, ex: "Data" : "17564059;9855288;0;0;517;0")
a, b, x, y, watt, z = string.match(otherdevices_svalues[OWL_Intuition], "(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%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)
    watt = tonumber(watt)
   
    
        print('Heures pleines = '..tostring(heurespleines)..' / Heures Creuses = '..tostring(heurescreuses)..' / Watt = '..tostring(usage)..' ')
   

    local consoCumuleCible
    local consoInstantCible

    if (otherdevices[flagHP] == 'Off') then

        -- Periode heures creuse
        -- Recupération des valeurs actuelles du compteur Heures Creuses
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)


        
            print('Compteur cible = HC')
            print('Valeur precedente = '..tostring(consoCumuleCible))
        

        -- 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[flagHP] == 'On') then

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

        
            print('Compteur cible = HP')
            print('Valeur precedente = '..tostring(consoCumuleCible))
       

        -- 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


    
        print('-- Fin Calcul Compteur HC / HP --')
    
end
end

return commandArray
Maintenant j'ai ceci :

Code : Tout sélectionner

2020-08-02 09:43:10.938 Status: LUA: -- Calcul Compteurs HC / HP --
2020-08-02 09:43:10.938 Status: LUA: CapteurGlobal = OWL_Intuition
2020-08-02 09:43:10.938 Status: LUA: CapteurCptHP = Compteur Electrique HP
2020-08-02 09:43:10.938 Status: LUA: CapteurCptHC = Compteur Electrique HC
2020-08-02 09:43:10.938 Status: LUA: idxCptHP = 22
2020-08-02 09:43:10.938 Status: LUA: idxCptHC = 21
2020-08-02 09:43:10.938 Status: LUA: flagHP = FlagHP
une erreur :

Code : Tout sélectionner

2020-08-02 09:44:10.956 Error: EventSystem: in script_device_compteurHC-HP: [string "-- Initialisation des variables locales ..."]:37: bad argument #1 to 'match' (string expected, got nil)

Keros
Messages : 466
Enregistré le : 23 juil. 2019, 20:57

Re: Repartition Consommation HC / HP...

Message par Keros »

C'est à toi de faire le boulot de débogage :arrow: Le message d'erreur t'indique la ligne qui pose problème : dans ton cas, c'est la 37 : a, b, x, y, watt, z = string.match(otherdevices_svalues[OWL_Intuition], "(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*)")

Alors oui la ligne semble compliquée, mais il faut regarder en premier les choses que tu as modifiées ... tu devrais trouver ton erreur ;)

dg-59
Messages : 34
Enregistré le : 09 juil. 2020, 11:09

Re: Repartition Consommation HC / HP...

Message par dg-59 »

j'ai trouver mon erreur mais j'en ai une nouvelle

Code : Tout sélectionner

2020-08-02 10:43:10.907 Error: EventSystem: in script_device_compteurHC-HP: [string "-- Initialisation des variables locales ..."]:16: attempt to concatenate a nil value (local 'power')


sinon ;

Code : Tout sélectionner

2020-08-02 10:42:10.927 Status: LUA: -- Calcul Compteurs HC / HP --
2020-08-02 10:42:10.927 Status: LUA: CapteurGlobal = OWL_Intuition
2020-08-02 10:42:10.927 Status: LUA: CapteurCptHP = Compteur_Electrique_HP
2020-08-02 10:42:10.927 Status: LUA: CapteurCptHC = Compteur_Electrique_HC
2020-08-02 10:42:10.927 Status: LUA: idxCptHP = 22
2020-08-02 10:42:10.927 Status: LUA: idxCptHC = 21
2020-08-02 10:42:10.927 Status: LUA: flagHP = FlagHP
2020-08-02 10:42:10.927 Status: LUA: Heures pleines = 0.0 / Heures Creuses = 10268.0 / Watt = nil
2020-08-02 10:42:10.927 Status: LUA: Compteur cible = HP
2020-08-02 10:42:10.927 Status: LUA: Valeur precedente = 0.0
2020-08-02 10:42:22.154 Status: User: DG-59 initiated a switch command (102/FlagHP/Off)
2020-08-02 10:42:23.199 Status: User: DG-59 initiated a switch command (103/FlagHC/On)
2020-08-02 10:43:10.907 Status: LUA: -- Calcul Compteurs HC / HP --
2020-08-02 10:43:10.907 Status: LUA: CapteurGlobal = OWL_Intuition
2020-08-02 10:43:10.907 Status: LUA: CapteurCptHP = Compteur_Electrique_HP
2020-08-02 10:43:10.907 Status: LUA: CapteurCptHC = Compteur_Electrique_HC
2020-08-02 10:43:10.907 Status: LUA: idxCptHP = 22
2020-08-02 10:43:10.907 Status: LUA: idxCptHC = 21
2020-08-02 10:43:10.907 Status: LUA: flagHP = FlagHP
2020-08-02 10:43:10.907 Status: LUA: Heures pleines = 0.0 / Heures Creuses = 10270.0 / Watt = nil
2020-08-02 10:43:10.907 Status: LUA: Compteur cible = HC
2020-08-02 10:43:10.907 Status: LUA: Valeur precedente = 0.0

la j'ai 2 équipement qui me donne les infos

OWL_Intuition idx 91 qui me donne les kWh mais pas les Watts:

Code : Tout sélectionner

{
	"ActTime" : 1596362276,
	"AstrTwilightEnd" : "00:01",
	"AstrTwilightStart" : "03:42",
	"CivTwilightEnd" : "22:06",
	"CivTwilightStart" : "05:38",
	"DayLength" : "15:11",
	"NautTwilightEnd" : "22:56",
	"NautTwilightStart" : "04:47",
	"ServerTime" : "2020-08-02 11:57:56",
	"SunAtSouth" : "13:52",
	"Sunrise" : "06:17",
	"Sunset" : "21:27",
	"app_version" : "2020.2",
	"result" : 
	[
		{
			"AddjMulti" : 1.0,
			"AddjMulti2" : 1.0,
			"AddjValue" : 0.0,
			"AddjValue2" : 0.0,
			"BatteryLevel" : 255,
			"CounterToday" : "1.991 kWh",
			"CustomImage" : 0,
			"Data" : "10.416 kWh",
			"Description" : "",
			"EnergyMeterMode" : "0",
			"Favorite" : 1,
			"HardwareID" : 2,
			"HardwareName" : "RFlink",
			"HardwareType" : "RFLink Gateway USB",
			"HardwareTypeVal" : 46,
			"HaveTimeout" : false,
			"ID" : "0000030A",
			"LastUpdate" : "2020-08-02 11:57:10",
			"Name" : "OWL_Intuition",
			"Notifications" : "false",
			"PlanID" : "0",
			"PlanIDs" : 
			[
				0
			],
			"Protected" : false,
			"ShowNotifications" : true,
			"SignalLevel" : "-",
			"SubType" : "kWh",
			"SwitchTypeVal" : 0,
			"Timers" : "false",
			"Type" : "General",
			"TypeImg" : "current",
			"Unit" : 1,
			"Usage" : "0 Watt",
			"Used" : 1,
			"XOffset" : "0",
			"YOffset" : "0",
			"idx" : "91"
		}
	],
	"status" : "OK",
	"title" : "Devices"
}
OWL_Intuition idx 83 qui me donne les Watts mais pas les kWh :

Code : Tout sélectionner

{
	"ActTime" : 1596365660,
	"AstrTwilightEnd" : "00:01",
	"AstrTwilightStart" : "03:42",
	"CivTwilightEnd" : "22:06",
	"CivTwilightStart" : "05:38",
	"DayLength" : "15:11",
	"NautTwilightEnd" : "22:56",
	"NautTwilightStart" : "04:47",
	"ServerTime" : "2020-08-02 12:54:20",
	"SunAtSouth" : "13:52",
	"Sunrise" : "06:17",
	"Sunset" : "21:27",
	"app_version" : "2020.2",
	"result" : 
	[
		{
			"AddjMulti" : 1.0,
			"AddjMulti2" : 1.0,
			"AddjValue" : 0.0,
			"AddjValue2" : 0.0,
			"BatteryLevel" : 255,
			"CounterToday" : "0.000 kWh",
			"CustomImage" : 0,
			"Data" : "0.000 kWh",
			"Description" : "",
			"EnergyMeterMode" : "0",
			"Favorite" : 1,
			"HardwareID" : 2,
			"HardwareName" : "RFlink",
			"HardwareType" : "RFLink Gateway USB",
			"HardwareTypeVal" : 46,
			"HaveTimeout" : false,
			"ID" : "0000000A",
			"LastUpdate" : "2020-08-02 12:54:10",
			"Name" : "OWL_Intuition",
			"Notifications" : "false",
			"PlanID" : "0",
			"PlanIDs" : 
			[
				0
			],
			"Protected" : false,
			"ShowNotifications" : true,
			"SignalLevel" : "-",
			"SubType" : "kWh",
			"SwitchTypeVal" : 0,
			"Timers" : "false",
			"Type" : "General",
			"TypeImg" : "current",
			"Unit" : 1,
			"Usage" : "3712 Watt",
			"Used" : 1,
			"XOffset" : "0",
			"YOffset" : "0",
			"idx" : "83"
		}
	],
	"status" : "OK",
	"title" : "Devices"
}
le problème ne viendrai pas de la ?

Keros
Messages : 466
Enregistré le : 23 juil. 2019, 20:57

Re: Repartition Consommation HC / HP...

Message par Keros »

dg-59 a écrit :
02 août 2020, 10:44
le problème ne viendrai pas de la ?
Non, ton problème est : attempt to concatenate a nil value (local 'power') C'est écrit dans les logs.

Il y a des infos de débogage, il faut essayer de les comprendre :

2020-08-02 10:42:10.927 Status: LUA: Heures pleines = 0.0 / Heures Creuses = 10268.0 / Watt = nil

:arrow: Tiens, une valeur nil, mais d'où vient t'elle :

print('Heures pleines = '..tostring(heurespleines)..' / Heures Creuses = '..tostring(heurescreuses)..' / Watt = '..tostring(usage)..' ')

:arrow: usage serait nil. On continu de remonter :

Usage = tonumber(watt)

:arrow: watt serait nil aussi. On continu de remonter :

a, b, x, y, watt, z = string.match(otherdevices_svalues['OWL_Intuition'], "(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*)")

:arrow: La valeur récupérée pour watt ne fonctionne pas certainement parce que le device que tu utilises n'est pas le même que celui qui a écrit le script.

Il faut que tu renseignes la valeur de watt d'une autre façon.

dg-59
Messages : 34
Enregistré le : 09 juil. 2020, 11:09

Re: Repartition Consommation HC / HP...

Message par dg-59 »

sa vient pas du fait que les informations ne vienne pas du même capteur ?

Répondre