Instalacja Fotowolt...
 
Powiadomienia
Wyczyść wszystko

Instalacja Fotowoltaiczna - Fronius Symo - Fronius Smart Meter -skrypt LUA

138 Wpisów
7 Użytkownicy
1 Likes
15.5 K Wyświetleń
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Instalacja odpalona, licznik zalozyli 3 dni temu

GetString wlasnie nic nie zglasza

Mam inverter bez zadnych dodatkow

Ale chcialbym eby mi bynajmniej pokazywalo moc biezaca, dzienna produkcje i calkowita produkcje

Wiecej chyba nic nie wyciagnie bez dodatkowych zabawek ale tyle by mi chyba wystarczylo

W przyszlosci mysle na smart meterem. Wtedy pewnie daa sie wiecej

 
Dodane : 15/04/2021 10:21 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@kniazio sam skrypt mogę wrzucić zaraz, ale żeby działał trzeba dodać dwie zmienne , utworzyć sprzęt "Fronius" w domoticz i dodać wszystkie czujniki żeby działał.

Jak ogarniesz bez opisu to napisz 

 
Dodane : 15/04/2021 10:31 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Raczej opis by sie przydal 🙂

 
Dodane : 15/04/2021 10:43 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Jeśli możesz to podeślij ten skrypt. Zapoznam sie z nim . Opis jak najbardziej nadal potrzebny 🙂

 
Dodane : 16/04/2021 9:11 am
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@kniazio testuj, to jest główny skrypt i powinieneś dostać podstawowe dane

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('UV_DomoticzIP').value    -- zmienna uzytkownika ciag znakow Adres IP domoticz : Port
    	local IPFronius = domoticz.variables('UV_FroniusIP').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://'..IPFronius..'/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://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_DAY_ENERGY..'&nvalue=0&svalue='..DAY_ENERGY)
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_YEAR_ENERGY..'&nvalue=0&svalue='..YEAR_ENERGY)
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_TOTAL_ENERGY..'&nvalue=0&svalue='..TOTAL_ENERGY)
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_Fronius_Actual..'&nvalue=0&svalue='..PAC..';'..DAY_ENERGY)
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_UDC..'&nvalue=0&svalue='..UDC) 
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_IDC..'&nvalue=0&svalue='..IDC) 
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_UAC..'&nvalue=0&svalue='..UAC) 
                domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=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://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_UDC..'&nvalue=0&svalue='..UDC) 
               domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_IDC..'&nvalue=0&svalue='..IDC) 
               domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_UAC..'&nvalue=0&svalue='..UAC) 
               domoticz.openURL('http://'..IPdomiticz..'/json.htm?type=command&param=udevice&idx='..idx_IAC..'&nvalue=0&svalue='..IAC) 
            end

        end
    end

}
 
Dodane : 16/04/2021 12:02 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Rozumiem ze mam utworzyc czujniki ale nie wiem gdzie wpisac ich idx-y oraz nie wiem gdzie (w ktorym miejscu w skrypcie) mam wpisac IP Froniusa i Domoticza

Czy moglbys podac jakis przyklad?

 

Nie bardzo wiem ktory to jest czujnik Napiecie i czujnik Prad A (w Domoticzu jest angielskie nazewnictwo)

 
Dodane : 16/04/2021 12:33 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@kniazio w szybkim skrócie :

Jedna zmienna to ma być adres IP domoticz + port i na podstawie tej zmiennej skrypt sobie będzie aktualizował czujniki.

Druga zmienna to adres IP Froniusa i ta zmienna zastępuje w skrypcie wpisywanie IP Froniusa ( skrypt pobiera adres ze zmiennej)

Nie wpisujesz nigdzie idx -ów , ten skrypt bazuje na nazwach a nie na idx

Do testów nazwij czujniki tak jak u mnie i wystarczy

Jak masz zmieniony język na polski w domoticz to nazwy przy tworzeniu czujników są po polsku np Amperaż (1 faza) .

A jak dalej nie dasz rady to musisz poczekać na dokładny opis

 
Dodane : 16/04/2021 2:23 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Co to sa te zmienne ? Jak je zrobic i gdzie wstawic?

 
Dodane : 16/04/2021 2:50 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Konfiguracja - Więcej Opcji - Zmienne użytkownika 

Zmienna typu ciąg znaków po angielsku string , i nazwa zmiennej

UV_DomoticzIP

analogicznie druga zmienna

 
Dodane : 16/04/2021 2:55 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

zrobilem zmienne, odpalilem skrypt i mam:

 2021-04-16 15:06:03.128 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:10.372 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:25.739 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:25.865 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:30.305 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:30.428 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:30.434 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value)
2021-04-16 15:06:30.441 Error: EventSystem: in FSymo: [string "return {..."]:3: attempt to index global 'domoticz' (a nil value) 

Czy IP froniusa i domoticza maja byc z http:// ??. Ja dalem bez czyli np 192.168.1.199

I jeszcze jedno. Czy to ma byc Lua czy Dzvents?

 
Dodane : 16/04/2021 3:10 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@kniazio zmienne mają być bez http:// bo  to jest już w skrypcie  zrób zrzut tych zmiennych w domoticz i sprawdż najpierw co zwraca u ciebie taki adres wpisany w przeglądarkę 

http://IP Fronius/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData

Oczywiście IP Fronius zmieniasz na prawdziwy adres Inwertera

 
Dodane : 16/04/2021 3:20 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

	
Body	
Data	
DAY_ENERGY	
Unit	"Wh"
Value	235.2
DeviceStatus	
ErrorCode	0
LEDColor	2
LEDState	0
MgmtTimerRemainingTime	-1
StateToReset	false
StatusCode	7
FAC	
Unit	"Hz"
Value	49.97
IAC	
Unit	"A"
Value	1.49
IDC	
Unit	"A"
Value	1.28
PAC	
Unit	"W"
Value	348
TOTAL_ENERGY	
Unit	"Wh"
Value	18943
UAC	
Unit	"V"
Value	229.9
UDC	
Unit	"V"
Value	378.1
YEAR_ENERGY	
Unit	"Wh"
Value	18943.7
Head	
RequestArguments	
DataCollection	"CommonInverterData"
DeviceClass	"Inverter"
DeviceId	"1"
Scope	"Device"
Status	
Code	0
Reason	""
UserMessage	""
Timestamp	"2021-04-16T15:29:37+02:00"
 
Dodane : 16/04/2021 3:30 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Wrzuć taki skrypt i zobacz czy będzie się aktualizował czujnik UDC , tylko ustaw adres na adres Inwertera

local scriptVar = 'Fronius'

return
{
    on =
    {
        timer =
        {
            'every minute at daytime'},

        httpResponses =
        {
        scriptVar,
        },
    },

    logging =
    {
        level = domoticz.LOG_DEBUG,
        marker = Fronius test,
    },

    execute = function(dz, item)

        if item.isTimer then
            dz.openURL(
            {
                'http://IP Fronius/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData',
                callback = scriptVar,
            })
            return
        end

        if item.ok and item.isJSON then
            local rt = item.json.Body.Data
            dz.devices('Fronius_UDC').updateVoltage( (rt.UDC and rt.UDC.Value ) or 0) 
	                
        else
            dz.log('There was a problem handling the request', dz.LOG_ERROR)
            dz.log(item, dz.LOG_DEBUG)
        end

    end
}

 

 

 

 
Dodane : 16/04/2021 3:44 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

 

f1

@isom

Niby juz dziala ale jak to poustawiac zeby te jednostki byly jakos normalnie

Dzien_energia i Aktualnie zeby bylo bez "0"

U mnie ta dzienna energia cos jest zle pokazywanana wyswietlaczu Froniusa pokazuje:

Day 0,46kWh

Year 19,174kWh

TOTAL 19,174kWh

W apce na fonie pokazuje dzisiejsza energie 3 418,21 Wh czyli ok 3,5 kWh

Plugin ktory mam na domoticzu jaki znalazlem w sieci pokazuje 3,815 kWh

Masakra jakas

 
Dodane : 16/04/2021 3:52 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Mało dziś produkuje ta instalacja i musi być zero na początku . Jak będzie ponad 1 kW będzie ok 

PS

Jednak coś pomieszałeś z czujnikami bo PAC powinien być w watach 

 
Dodane : 16/04/2021 4:00 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Ale Dzien Energia jest ponad 1kW wiec nie powinno byc zera

U ciebie na kafelku "Aktualnie sa dwie wartosci (aktualna moc + uzysk dzienny) a u mnie jest tylko jedna watosc

 
Dodane : 16/04/2021 4:05 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Namieszałeś z czujnikami nie umiem pomóc bo nie wiem co gdzie dodałeś . Sorki 

A na apkę froniusa nie patrz bo kłamie jak najęta 

 

 
Dodane : 16/04/2021 4:09 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Co to jest ten PAC ? Czy te jednostki sie wpisuje recznie czy jak? Bo ja moge wpisac co chce i zarz bedzie w watach

 
Dodane : 16/04/2021 4:10 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 

@isom

Ok apk amoze i klamie ale Day energy nie moze byc 0,46kWh bo napewno dzisiaj instalacja wyprodukowala ponad 3,5kW

 
Dodane : 16/04/2021 4:12 pm
kniazio
(@kniazio)
Wpisów: 209
Pomocny Donator 2K21
 
 

Dodane przez: @isom

Namieszałeś z czujnikami nie umiem pomóc bo nie wiem co gdzie dodałeś . Sorki 

A na apkę froniusa nie patrz bo kłamie jak najęta 

 

Napisz w wolnej chwili jak te cujniki dodac bo napewno cos popier....m

Plugin znaleziony w sieci pokazuje dobrze pomimo ze Day_Energy w api pokazuje glupoty

f2
day

 

 

 
Dodane : 16/04/2021 4:13 pm
Strona 2 / 7
Udostępnij: