Aller au contenu

Messages recommandés

Posté(e) (modifié)

Suite a la mise a jour du firmware de l'onduleur en version 1.35.8-1 le QA fonctionne a nouveau

 

Bugfixes
/ Log data upload stabilization - Devices sporadically interrupted the archive data upload

 

Data	
Inverters	
1	
Battery_Mode	"normal"
DT	1
E_Day	null
E_Total	2238280.7016666667
E_Year	null
P	929.51788330078125JS:929.5178833007812
SOC	68.299999999999997JS:68.3
SecondaryMeters	{}
Site	
BackupMode	false
BatteryStandby	true
E_Day	null
E_Total	2238280.7016666667
E_Year	null
Meter_Location	"grid"
Mode	"bidirectional"
P_Akku	416.56591796875
P_Grid	5.1399999999999997JS:5.14
P_Load	-934.65788330078124JS:-934.6578833007812
P_PV	577.331298828125
rel_Autonomy	99.450066158769474JS:99.45006615876947
rel_SelfConsumption	100.0JS:100
Smartloads	
OhmpilotEcos	{}
Ohmpilots	
0	
P_AC_Total	0.0JS:0
State	"normal"
Temperature	0.0JS:0
Version	"13"
Head	
RequestArguments	{}
Status	
Code	0
Reason	""
UserMessage	""
Timestamp	"2025-03-11T13:17:57+00:00"

 

Modifié par flacon030
Posté(e) (modifié)

bonjour je tente toujours de récupérer le SOC de mon onduleur pour ce QA

Le problème de se que je voie c'est que le .1 (le point est en orange dans le code LUA au lieu d'être en blanc comme tous les autres point?)

comment définir le bon chemin?

donc peut être un problème de chemin pour interroger le SOC

self.SOC = fronius.Body.Data.Inverters.1.SOC or 0

 

json fronius.png

lua.png

Modifié par flacon030
Posté(e) (modifié)

Merci pour ton aide, mais avec ta suggestion les valeurs ne remontent plus et j'ai ce code erreur dans le debug

[15.03.2025] [10:26:01] [DEBUG] [QUICKAPP598]: onInit
[15.03.2025] [10:26:01] [ERROR] [QUICKAPP598]: QuickApp crashed
[15.03.2025] [10:26:01] [ERROR] [QUICKAPP598]: main.lua:183: attempt to index a nil value (field '?')

 

Modifié par flacon030
Posté(e)

Tu peux mettre le JSON brut, non formaté ?

J'ai un doute sur son contenu, pour indexer l'élément 1.

Posté(e) (modifié)

c'est bon je viens de trouver

c'était cela le bon code

 self.SOC = fronius.Body.Data.Inverters["1"].SOC or 0

 

A présent il faut que j'arrive a créer les child pour l'autonomie, l'autoconsommation, et le SOC

Toutes les autres données du QA on leur childs sauf ces trois la ou je bloque encore

QA fronius.png

qa fronius2.png

Modifié par flacon030
Posté(e)
il y a une heure, flacon030 a dit :

c'était cela le bon code

 self.SOC = fronius.Body.Data.Inverters["1"].SOC or 0

Ah ben voilà, c'est exactement ce que je pressentais.

Bravo :)

 

il y a une heure, flacon030 a dit :

A présent il faut que j'arrive a créer les child pour l'autonomie, l'autoconsommation, et le SOC

Je ne sais pas où tu bloques, ce sont des child comme les autres non ?

Par contre moi j'ai un souci d'un autre genre, je suis en train de préparer un QA pour mon nouvel onduleur Victron, et le SOC je peux le mettre dans un multilevelSensor avec l'unité en %, mais il va falloir que je modifie DomoCharts pour le prendre en compte...

Posté(e) (modifié)

oui je regarde pour un "multilevelsensor" car les autres child sont soit des "powermeter" soit des "energymeter"

Le SOC je le gère dans grafana mais c'est vrai que dans domocharts il ne peut y être pour le moment

Modifié par flacon030
Posté(e)

Bon après pas mal d'essai j'arrive a créer mon child mais j'ai un message d'erreur

Mais cela ne semble pas empêcher le QA de fonctionner

 

[15.03.2025] [13:43:43] [DEBUG] [QUICKAPP598]: onInit
[15.03.2025] [13:43:43] [WARNING] [QUICKAPP598]: Class for the child device: 1098, with type: com.fibaro.multilevelSensor not found. Using base class: QuickAppChild

 

function QuickApp:createChildDevices()
    self:initChildDevices({
        ["com.fibaro.electricMeter"] = Meter,
        ["com.fibaro.energyMeter"] = Meter,
        ["com.fibaro.powerMeter"] = PowerSensor,
        ["com.fibaro.multilevelsensor"] = multilevelsensor, --ajout ligne
    })
    
    -- data from: /solar_api/v1/GetMeterRealtimeData.cgi?Scope=System endpoint
    self.childs.totalEnergyConsumedChild = self:initChildDevice("totalEnergyConsumedChild", "Total energy consumed", "com.fibaro.energyMeter", Meter)
    self.childs.totalEnergyConsumedChild:updateProperty("rateType", "consumption")

    -- data from: /solar_api/v1/GetPowerFlowRealtimeData.fcgi endpoint
    -- total energy produced (kWh)
    self.childs.totalEnergyChild = self:initChildDevice("totalEnergyChild", "Index total PV", "com.fibaro.energyMeter", Meter)
    self.childs.totalEnergyChild:updateProperty("rateType", "production")

    -- current production (W)
    self.childs.currentPowerChild = self:initChildDevice("currentPowerChild", "Production", "com.fibaro.powerMeter", PowerSensor)
    self.childs.currentPowerChild:updateProperty("rateType", "production")

    -- Current Akku power (w)-- ajoute Akku
    self.childs.currentAkkuChild = self:initChildDevice("currentAkkuChild", "Akku", "com.fibaro.powerMeter", PowerSensor)
    self.childs.currentAkkuChild:updateProperty("rateType", "production")   
    
    -- Current Load power (w)-- ajoute Load
    self.childs.currentLoadChild = self:initChildDevice("currentLoadChild", "Load", "com.fibaro.powerMeter", PowerSensor)

    -- current grid power (W)
    -- from docs: value is null if no meter is enabled ( + from grid , - to grid ) 
    self.childs.currentGridChild = self:initChildDevice("currentGridChild", "Grid", "com.fibaro.powerMeter", PowerSensor)

    -- Current rel_Autonomie (%)-- ajout ligne
 	 self.childs.rel_AutonomyChild = self:initChildDevice("rel_AutonomyChild", "Autonomie", "com.fibaro.multilevelSensor", multilevelsensor)
    self.childs.rel_AutonomyChild:updateProperty("unit", "%")

end

 

function QuickApp:parseGeneralData(data)
    local fronius = json.decode(data)
    self:trace(data)

    self.P_Grid = fronius.Body.Data.Site.P_Grid or 0
    self.P_Load = fronius.Body.Data.Site.P_Load or 0
    self.P_Akku = fronius.Body.Data.Site.P_Akku or 0
    self.P_PV = fronius.Body.Data.Site.P_PV or 0 
    self.E_Total = fronius.Body.Data.Site.E_Total or 0
    self:updateView("mode", "text", "Mode: " .. fronius.Body.Data.Site.Mode)
    self:updateView("Meter_Location", "text", "Meter Location: " .. fronius.Body.Data.Site.Meter_Location) -- ligne en plus
    self.rel_Autonomy = fronius.Body.Data.Site.rel_Autonomy or 0                   -- ligne en plus
    self.rel_SelfConsumption = fronius.Body.Data.Site.rel_SelfConsumption or 0     -- ligne en plus
    self.SOC = fronius.Body.Data.Inverters["1"].SOC or 0                           -- ligne en plus

    -- -----P grid -----
    if self.P_Grid ~= json.null() then
        self:setChildVisibility("currentGridChild", true)
        self.childs.currentGridChild:updateProperty("log", "")

        local gridValue = string.format("%.0f", self.P_Grid)
        self:updateView("grid", "text", "Linky: - Injection / + Conso: " .. gridValue .. " W")
        self.childs.currentGridChild:setValue(gridValue)

        if self.P_Grid < 0 then
            self.childs.currentGridChild:updateProperty("log", "Injection linky")
        else
            self.childs.currentGridChild:updateProperty("log", "Conso linky")
        end
    else
        self.childs.currentGridChild:updateProperty("log", "Meter not connected")
        self:setChildVisibility("currentGridChild", false)                           -- hiding unused device
    end

    -- -----P_load--------- ajoute child P_load
    if self.P_Load ~= json.null() then
        self:updateView("load", "text", "Conso maison: " .. string.format("%.3f", self.P_Load * -1) .. " W")                                
        self.childs.currentLoadChild:updateProperty("value", self.P_Load * -1)
    end

    -- -----P_Akku------- -- ajouté child Akku
   if self.P_Akku ~= json.null() then 
       self:updateView("akku", "text", "Batterie: - Charge / + Decharge: " .. string.format("%.3f", self.P_Akku) .. " W")
       self.childs.currentAkkuChild:updateProperty("value", self.P_Akku)                                                                
   end

    -- -----P_PV------
    if self.P_PV ~= json.null() then
        self:updateView("current", "text", "Fronius PV: " .. string.format("%.3f",self.P_PV) .. " W")
        self.childs.currentPowerChild:updateProperty("value", self.P_PV)
    end

    -- ----E_Total Index total---- 
    self:updateView("total", "text", "Index Total: " .. string.format("%.3f",self.E_Total / 1000) .. " kWh")
    self.childs.totalEnergyChild:setValue((self.E_Total) / 1000)

    -- -----rel_SelfConsumption--------- ajouté rel_SelfConsumption
   if self.rel_SelfConsumption ~= json.null() then 
       self:updateView("rel_SelfConsumption", "text", "Autoconsommation: " .. string.format("%.3f", self.rel_SelfConsumption) .. " %")
   end

    -- -----SOC--------- ajouté SOC
   if self.SOC ~= json.null() then 
       self:updateView("SOC", "text", "SOC: " .. string.format("%.3f", self.SOC) .. " %")                                          
   end 

       -- -----rel_Autonomy------- -- ajouté rel_Autonomy
   if self.rel_Autonomy ~= json.null() then 
       self:updateView("rel_Autonomy", "text", "Autonomie: " .. string.format("%.3f", self.rel_Autonomy) .. " %")
       self.childs.rel_AutonomyChild:updateProperty("value", self.rel_Autonomy)
   end

end

 

Posté(e)

Dans le onInit() tu affectes la classe "multilevelsensor" aux child devices de type com.fibaro.multilevelsensor, mais est-ce que cette classe est définie quelque part dans ton code ?

Vu le message d'erreur, je pense que non.

 

Perso pour tous les devices de type sensor, j'utilise 1 seule et unique classe, c'est plus simple.

Exemple, ici elle s'appelle MyInput :

	-- Setup classes for child devices
	self:initChildDevices({
		["com.fibaro.powerMeter"] = MyInput,
		["com.fibaro.energyMeter"] = MyInput,
		["com.fibaro.electricMeter"] = MyInput,
		["com.fibaro.temperatureSensor"] = MyInput,
		["com.fibaro.binarySensor"] = MyInput,
		["com.fibaro.binarySwitch"] = MyDigitalOutput,
	})

 

Posté(e)

Je me suis inspirer du créateur du qa qui a réaliser plusieurs fichiers et j'en ai créer un "multilevelsensor" dans le quel j'ai mis le code ci dessous en m'inspirant de ceux qu'il avait créer pour "PowerSensor" et "Meter"

Mais sans être sur de se que je fait

 

class 'multilevelsensor' (QuickAppChild)

function multilevelsensor:__init(device)
    QuickAppChild.__init(self, device)
    self:updateProperty("unit", "%")
end

function multilevelsensor:setValue(value)
    self:updateProperty("value", tonumber(value))
end

 

class 'Meter' (QuickAppChild)

function Meter:__init(device)
    QuickAppChild.__init(self, device)
    self:updateProperty("unit", "kWh")
end

function Meter:setValue(value)
    -- print("updating", self.id, "value: ", value)
    self:updateProperty("value", tonumber(value))
end

 

class 'PowerSensor' (QuickAppChild)

function PowerSensor:__init(device)
    QuickAppChild.__init(self, device)
    self:updateProperty("unit", "W")
end

function PowerSensor:setValue(value)
    self:updateProperty("value", tonumber(value))
end

 

Posté(e) (modifié)

Bon je viens de mettre a jour le QA fronius qui se trouve sur le marketplace de fibaro

https://marketplace.fibaro.com/items/fronius-solar-9a09a221-0f2e-4e0d-b076-d273ba6c7434

 

J'y ai ajouté les fonction suivantes:

 

Le SOC batterie (y compris le module enfant)

L'autoconsommation (y compris le module enfant)

L'autonomie (y compris le module enfant)

La puissance de l'onduleur (y compris le module enfant)

La consommation de la maison (y compris le module enfant)

La charge décharge de la batterie (y compris le module enfant)

Le status de la batterie

J'ai supprimer

E_day (y compris le module enfant car plus géré par l'onduleur)

E_yars (y compris le module enfant car plus géré par l'onduleur)

 

il me reste un bug que je n'ai pas encore trouvé mais qui ne fait pas buger le QA

[15.03.2025] [17:15:52] [WARNING] [QUICKAPP598]: Class for the child device: 1091, with type: com.fibaro.multilevelSensor not found. Using base class: QuickAppChild
[15.03.2025] [17:15:52] [WARNING] [QUICKAPP598]: Class for the child device: 1092, with type: com.fibaro.multilevelSensor not found. Using base class: QuickAppChild
[15.03.2025] [17:15:53] [WARNING] [QUICKAPP598]: Class for the child device: 1093, with type: com.fibaro.multilevelSensor not found. Using base class: QuickAppChild

 

Le QA modifier et disponible ci dessous

 

Fronius.fqa

 

Suggestion d’icônes pour vos modules enfants

fronius.png

byd.png

Fronius.png

PV fronius.png

Grid fronius.png

batterie fronius.png

Consohabitation.png

Rendue des modules enfants

Qa fronius childs.png

 

Visualisation du QA

fronius card.png

Modifié par flacon030
  • Like 1
Posté(e) (modifié)

C'est bon tous fonctionne a présent, merci lazer pour ton aide précieuse

voici donc la version final, libre a vous de la modifier selon vos besoins

Pour info il est possible d'avoir la 2éme table JSON de l'onduleur ou se trouve les tensions, courants, fréquences, ect...

 

Fronius.fqa

 

http://192.168.1.88/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System

Json fronius2.png


 

Modifié par flacon030
  • Like 3
Posté(e)

petite question

pour une fréquence un "com.fibaro.multilevelSensor" pourrait convenir?

 

quel est la liste des différents type de capteur?

Posté(e)

Oui c'est ce que j'utilise.

 

Pour les API :

/api/quickApp/availableTypes
/api/devices/hierarchy

 

Posté(e)

Merci

Je vais a présent essayé de remonter toutes les autres informations de l'onduleur de la deuxième table json comme les courant par phases, les tensions, ect..

×
×
  • Créer...