return { logging = { level = domoticz.LOG_DEBUG, -- zmien na LOG_ERROR jak skrypt bedzie Ok marker = 'Fronius global' }, on = { timer = { 'every minute' }, httpResponses = { 'triggerFronius' } }, execute = function(domoticz,item) -- utworz dwie zmienne i potrzebne czujniki i dostosuj nazwy i typy local IPdomiticz = domoticz.variables('192.168.0.23:8080').value -- zmienna uzytkownika ciag znakow Adres IP domoticz : Port local IPFronius = domoticz.variables('192.168.0.134').value -- zmienna uzytkownika ciag znakow Adres IP Fronius local idx_Fronius_Actual = domoticz.devices('Fronius_Aktualnie').idx -- czujnik licznik local idx_DAY_ENERGY = domoticz.devices('Fronius_Dzień_Energia').idx -- czujnik CustomSensor local idx_YEAR_ENERGY = domoticz.devices('Fronius_Rok_Energia').idx -- czujnik CustomSensor local idx_TOTAL_ENERGY = domoticz.devices('Fronius_Total_Energia').idx -- czujnik CustomSensor local idx_UDC = domoticz.devices('Fronius_UDC').idx -- czujnik Napięcie local idx_UAC = domoticz.devices('Fronius_UAC').idx -- czujnik Napięcie local idx_IDC = domoticz.devices('Fronius_IDC').idx -- czujnik Prąd A local idx_IAC = domoticz.devices('Fronius_IAC').idx -- czujnik Prąd A local json = assert(loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() domoticz.log('Fronius script running', domoticz.LOG_INFO) if (item.isTimer) then time_now = os.date("*t") minutes_now = time_now.min + time_now.hour * 60 domoticz.log('Time in minutes: ' ..minutes_now, domoticz.LOG_INFO) domoticz.log('Sunrise in minutes: ' ..timeofday['SunriseInMinutes'] - 60, domoticz.LOG_INFO) domoticz.log('Sunset in minutes: ' ..timeofday['SunsetInMinutes'] + 60, domoticz.LOG_INFO) -- Validation for sunrise and sunset. if (minutes_now > timeofday['SunriseInMinutes'] - 30) and (minutes_now < timeofday['SunsetInMinutes'] + 30) then domoticz.log('Call Fronius url with callback', domoticz.LOG_DEBUG) -- ASYNC openUrl domoticz.openURL({ url = 'http://192.168.0.134/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData', method = 'GET', callback = 'triggerFronius' }) else domoticz.log('Fronius inverter Offline because of SunSet', domoticz.LOG_INFO) end end if (item.isHTTPResponse and item.ok) then domoticz.log('Callback from url requested', domoticz.LOG_DEBUG) domoticz.log('Data: '..item.data, domoticz.LOG_INFO) local jsonfroniusdata = domoticz.utils.fromJSON(item.data) if (jsonfroniusdata == nil) then domoticz.log('Fronius inverter data is empty', domoticz.LOG_INFO) return end -- request successfull ? if ( jsonfroniusdata.Head.Status.Code ~= 0 ) then domoticz.log('Fronius inverter head status code data is not 0', domoticz.LOG_INFO) domoticz.log('Status code: ' + jsonfroniusdata.Head.Status.Code + ' Reason: ' + jsonfroniusdata.Head.Status.Reason + ' User message: ' + jsonfroniusdata.Head.Status.UserMessage, domoticz.LOG_ERROR) return end local StatusCode = jsonfroniusdata.Body.Data.DeviceStatus.StatusCode domoticz.log('json froniusdata Statuscode: '..StatusCode, domoticz.LOG_INFO) if ( StatusCode == 7) then --Fronius converter is Running local DAY_ENERGY = jsonfroniusdata.Body.Data.DAY_ENERGY.Value/1000 local YEAR_ENERGY = jsonfroniusdata.Body.Data.YEAR_ENERGY.Value/1000 local TOTAL_ENERGY = jsonfroniusdata.Body.Data.TOTAL_ENERGY.Value/1000000 local PAC = jsonfroniusdata.Body.Data.PAC.Value local UDC = jsonfroniusdata.Body.Data.UDC.Value local UAC = jsonfroniusdata.Body.Data.UAC.Value local IDC = jsonfroniusdata.Body.Data.IDC.Value local IAC = jsonfroniusdata.Body.Data.IAC.Value domoticz.log('PAC: '..PAC, domoticz.LOG_INFO) domoticz.log('Day Energy: '..DAY_ENERGY, domoticz.LOG_INFO) domoticz.log('Year Energy: '..YEAR_ENERGY, domoticz.LOG_INFO) domoticz.log('Total Energy: '..TOTAL_ENERGY, domoticz.LOG_INFO) domoticz.log('UDC: '..UDC, domoticz.LOG_INFO) --domoticz.log('UAC: '..UAC, domoticz.LOG_DEBUG) domoticz.log('IDC: '..IDC, domoticz.LOG_INFO) domoticz.log('IAC: '..IAC, domoticz.LOG_INFO) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_DAY_ENERGY..'&nvalue=0&svalue='..DAY_ENERGY) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_YEAR_ENERGY..'&nvalue=0&svalue='..YEAR_ENERGY) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_TOTAL_ENERGY..'&nvalue=0&svalue='..TOTAL_ENERGY) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_Fronius_Actual..'&nvalue=0&svalue='..PAC..';'..DAY_ENERGY) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_UDC..'&nvalue=0&svalue='..UDC) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_IDC..'&nvalue=0&svalue='..IDC) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_UAC..'&nvalue=0&svalue='..UAC) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_IAC..'&nvalue=0&svalue='..IAC) else domoticz.log('Fronius converter state (Statuscode:'..StatusCode..') other than running', domoticz.LOG_INFO) local UDC = 0 local UAC = 0 local IDC = 0 local IAC = 0 domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_UDC..'&nvalue=0&svalue='..UDC) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_IDC..'&nvalue=0&svalue='..IDC) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_UAC..'&nvalue=0&svalue='..UAC) domoticz.openURL('http://'192.168.0.23'/json.htm?type=command¶m=udevice&idx='..idx_IAC..'&nvalue=0&svalue='..IAC) end end end }