flacon030 Posté(e) le 11 mars Auteur Signaler Posté(e) le 11 mars (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é le 11 mars par flacon030
flacon030 Posté(e) le 12 mars Auteur Signaler Posté(e) le 12 mars (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 Modifié le 12 mars par flacon030
flacon030 Posté(e) le 15 mars Auteur Signaler Posté(e) le 15 mars (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é le 15 mars par flacon030
Lazer Posté(e) le 15 mars Signaler Posté(e) le 15 mars Tu peux mettre le JSON brut, non formaté ? J'ai un doute sur son contenu, pour indexer l'élément 1.
flacon030 Posté(e) le 15 mars Auteur Signaler Posté(e) le 15 mars (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 Modifié le 15 mars par flacon030
Lazer Posté(e) le 15 mars Signaler Posté(e) le 15 mars 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...
flacon030 Posté(e) le 15 mars Auteur Signaler Posté(e) le 15 mars (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é le 15 mars par flacon030
flacon030 Posté(e) le 15 mars Auteur Signaler Posté(e) le 15 mars 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
Lazer Posté(e) le 15 mars Signaler Posté(e) le 15 mars 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, })
flacon030 Posté(e) le 15 mars Auteur Signaler Posté(e) le 15 mars 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
flacon030 Posté(e) le 15 mars Auteur Signaler Posté(e) le 15 mars (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 Rendue des modules enfants Visualisation du QA Modifié le 15 mars par flacon030 1
Lazer Posté(e) le 16 mars Signaler Posté(e) le 16 mars J'ai compris, tu as oublié le S majuscule dans "com.fibaro.multilevelSensor" 1
flacon030 Posté(e) le 17 mars Auteur Signaler Posté(e) le 17 mars OK merci je vais voir a modifier le QA et je revient pour confirmer ou pas si cela fonctionne
flacon030 Posté(e) le 17 mars Auteur Signaler Posté(e) le 17 mars (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 Modifié le 17 mars par flacon030 3
flacon030 Posté(e) le 19 mars Auteur Signaler Posté(e) le 19 mars petite question pour une fréquence un "com.fibaro.multilevelSensor" pourrait convenir? quel est la liste des différents type de capteur?
Lazer Posté(e) le 19 mars Signaler Posté(e) le 19 mars Oui c'est ce que j'utilise. Pour les API : /api/quickApp/availableTypes /api/devices/hierarchy
flacon030 Posté(e) le 20 mars Auteur Signaler Posté(e) le 20 mars 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..
Messages recommandés