Avläsa Fronius Json till Domoticz hjälp

classic Classic list List threaded Threaded
89 meddelanden Alternativ
12345
Svara | Threaded
Open this post in threaded view
|

Avläsa Fronius Json till Domoticz hjälp

Davil
Hej!

Finns det någon mer än jag här som sysslar med hemautomation och Domoticz?

Jag har en Fronius Symo och Fronius Smartmeter och vill gärna få in värden till min Raspberry pi med Domoticz.

Jag är tyvärr inte så duktig på Lua script men försöker förstå något av det som finns här:
http://www.domoticz.com/forum/viewtopic.php?t=15037

Om någon har kunskaper inom detta så skulle jag bli otroligt glad om jag kunde få hjälp!

Mvh.David
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

tor_fransson
Jag har inte petat på just Domoticz men jag tror nog jag har relevant expertis ändå, vad är det du behöver hjälp med, mer specifikt?
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

Davil
Jadu. Just nu känner jag att jag hade velat ha en steg för steg nybörjarguide.
Eller att någon kunde fjärrköra mitt system och bara fixa så det fungerar.
Jag fattar helt enkelt inte hur jag ska göra.
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

Davil
Jag har fattat att jag når de data som på något sätt ska förflyttas till Domoticz så här:

http://192.168.1.39/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData

Då ser det ut såhär i webbläsaren men sedan ska dessa data förflyttas in i domoticz :

{
   "Body" : {
      "Data" : {
         "DAY_ENERGY" : {
            "Unit" : "Wh",
            "Value" : 64070
         },
         "DeviceStatus" : {
            "ErrorCode" : 0,
            "LEDColor" : 2,
            "LEDState" : 0,
            "MgmtTimerRemainingTime" : -1,
            "StateToReset" : false,
            "StatusCode" : 7
         },
         "FAC" : {
            "Unit" : "Hz",
            "Value" : 49.979999999999997
         },
         "IAC" : {
            "Unit" : "A",
            "Value" : 45.280000000000001
         },
         "IDC" : {
            "Unit" : "A",
            "Value" : 23.329999999999998
         },
         "PAC" : {
            "Unit" : "W",
            "Value" : 10410
         },
         "TOTAL_ENERGY" : {
            "Unit" : "Wh",
            "Value" : 96664.009999999995
         },
         "UAC" : {
            "Unit" : "V",
            "Value" : 232.09999999999999
         },
         "UDC" : {
            "Unit" : "V",
            "Value" : 478.39999999999998
         },
         "YEAR_ENERGY" : {
            "Unit" : "Wh",
            "Value" : 96664.899999999994
         }
      }
   },
   "Head" : {
      "RequestArguments" : {
         "DataCollection" : "CommonInverterData",
         "DeviceClass" : "Inverter",
         "DeviceId" : "1",
         "Scope" : "Device"
      },
      "Status" : {
         "Code" : 0,
         "Reason" : "",
         "UserMessage" : ""
      },
      "Timestamp" : "2018-05-10T14:33:28+02:00"
   }
}
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

tor_fransson
Okej, nybörjarguide... det kan ju bli lite trickigt då jag aldrig provat programvaran i fråga

Men som jag förstår det skall du skapa en ny "virtuell sensor" under "hardware", och där skall du ge den ett namn och ett unikt id. Detta unika ID återkommer sedan som "idx" i json-api:t.

Lua-scriptet (eller vilket skript/program som helst) skall plocka datan med "curl http://192.168.1.39/...", plocka ut ur den strukturen de värden du vill ha till var och en av dina virtuella sensorer, och curl:a med rätt idx och rätt värde mot din domoticz json-api. Om du kollar det skriptet lite längre ned i forumtråden du länkade till har de ett mer komplett skript där, som har 8st "commandArray" på rad, det verkar vara relevant för dig.

Hur det faktiska lua-scriptet anropas vet jag inte, men det kanske framgår då när man skapar en virtuell device?
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

Davil
Hejsan igen och tack så mycket för att du försöker hjälpa mig!

Jag har kommit en liten bit på rätt väg men har fastnat igen...
Jag har skapat Hardware dummy och alla virtuella sensorer korrekt men sedan är jag ett stort frågetecken igen. Jag gissar att det är nu själva scriptet börjar?
Jag försöker följa det som står i tråden jag länkade till innan och har alltså kommit fram till där det står
"-- one-time load of the routines
                JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
        -- JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux""

Saxat från det jag försöker följa men som jag alltså inte förstår tillvägagångsättet längre:

-- Script to read solardata from FroniusAPI
-- Autor : Meulderg
-- Date : 29-Jan-2017
-- Name: script_time_Fronius.lua
-- Warning: Don't forget to setup the Local Networks otherwize the device counters won't get updated if site security is used.

                -- Variables to customize ------------------------------------------------
        local DEBUG = 0             -- 0 is off, 1 for domoticz log, 2 for fronius JSON data to log
        local IPdomiticz = '192.168.xxx.xxx:8080' -- IP adress of the domoticz service + port
        local IPFronius = '192.168.xxx.xxx' -- IP adress of the Fronius converter
        local idx_Fronius_Opbrengst = 19 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UDC = 16 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UAC = 15 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IDC = 18 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IAC = 17 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_DAY_ENERGY = 12 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_YEAR_ENERGY = 13 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_TOTAL_ENERGY = 14 -- idx of the virtual sensor, you need to change this to your own Device IDx
       
       
        --Create Virtual Hardware via JSON script (Copy this URL manualy)
        --Change IP, Port and name accordingly
        --http://127.0.0.1:8080/json.htm?type=command¶m=addhardware&htype=15&port=1&name=Fronius&enabled=true
       
        --Create Virtual sensors via JSON script (Copy these URL manual)
        --Change IP, Port and idx (idx is of the previously created hardware ID) accordingly
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_Opbrengst&sensortype=18
                --Above sensor needs to be manual adjusted to Type: Return.
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_Day_Energy&sensortype=248
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_Year_Energy&sensortype=248
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_Total_Energy&sensortype=248
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_UAC&sensortype=4
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_UDC&sensortype=4
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_IAC&sensortype=19
        --http://192.168.1.41:8080/json.htm?type=createvirtualsensor&idx=6&sensorname=Fronius_IDC&sensortype=19
       
       
        -- one-time load of the routines
                JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
        -- JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
       
        commandArray = {}
        if(DEBUG == 1) then print ('Fronius script running!!') end
        -- get current time & calculate sunrise and sunset.
        time_now = os.date("*t")
        minutes_now = time_now.min + time_now.hour * 60
    if(DEBUG == 1) then print ('Time in minutes: ' ..minutes_now) end
        if(DEBUG == 1) then print ('Sunrise in minutes: ' ..timeofday['SunriseInMinutes'] - 60) end
        if(DEBUG == 1) then print ('Sunset in minutes: ' ..timeofday['SunsetInMinutes'] + 60) end
       
        -- Validation for sunrise and sunset.
        if (minutes_now > timeofday['SunriseInMinutes'] - 30) and (minutes_now < timeofday['SunsetInMinutes'] + 30) then
   
                --Extract data from Fronius converter.
                froniusurl = 'curl "http://'..IPFronius..'/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"'
                jsondata    = assert(io.popen(froniusurl))
                froniusdevice = jsondata:read('*all')
                jsondata:close()
                froniusdata = JSON:decode(froniusdevice)
       
                --Process fronius data
                if (froniusdata ~= nil) then
                if(DEBUG == 2) then print (froniusdevice) end
                local StatusCode = froniusdata['Body']['Data']['DeviceStatus']['StatusCode']
                        if( StatusCode == 7) then --Fronius converter is Running
               
                        local DAY_ENERGY = froniusdata['Body']['Data']['DAY_ENERGY']['Value']
                        local YEAR_ENERGY = froniusdata['Body']['Data']['YEAR_ENERGY']['Value']
                        local TOTAL_ENERGY = froniusdata['Body']['Data']['TOTAL_ENERGY']['Value']
                        local PAC = froniusdata['Body']['Data']['PAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
                        local UAC = froniusdata['Body']['Data']['UAC']['Value']
                        local IDC = froniusdata['Body']['Data']['IDC']['Value']
                        local IAC = froniusdata['Body']['Data']['IAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
       
                        if(DEBUG == 1) then print ('PAC: '..PAC) end
                        if(DEBUG == 1) then print ('Day Energy: '..DAY_ENERGY) end
                        if(DEBUG == 1) then print ('Year Energy: '..YEAR_ENERGY) end
                        if(DEBUG == 1) then print ('Total Energy: '..TOTAL_ENERGY) end
                        if(DEBUG == 1) then print ('UDC: '..UDC) end
                        if(DEBUG == 1) then print ('UAC: '..UAC) end
                        if(DEBUG == 1) then print ('IDC: '..IDC) end
                        if(DEBUG == 1) then print ('IAC: '..IAC) end
                       
                        --To update the devices.
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_Fronius_Opbrengst.."&nvalue=0&svalue="..PAC..";"..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_DAY_ENERGY.."&nvalue=0&svalue="..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_YEAR_ENERGY.."&nvalue=0&svalue="..YEAR_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_TOTAL_ENERGY.."&nvalue=0&svalue="..TOTAL_ENERGY..""}
                       
                        else
                        print ('Fronius converter state other than running')
                        local UDC = 0 local UAC = 0 local IDC = 0 local IAC = 0
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        end
                       
                else
                print ('Fronius converter data is empty or unreachable')
                end
        else
        print ('Fronius converter Offline')
        end
        return commandArray


-- Example of the data returned by the Fronius converter
--[[
{
        "Head" : {
                "RequestArguments" : {
                        "DataCollection" : "CommonInverterData",
                        "DeviceClass" : "Inverter",
                        "DeviceId" : "1",
                        "Scope" : "Device"
                },
                "Status" : {
                        "Code" : 0,
                        "Reason" : "",
                        "UserMessage" : ""
                },
                "Timestamp" : "2017-01-29T12:16:22+01:00"
        },
        "Body" : {
                "Data" : {
                        "DAY_ENERGY" : {
                                "Value" : 1535.1,
                                "Unit" : "Wh"
                        },
                        "FAC" : {
                                "Value" : 50,
                                "Unit" : "Hz"
                        },
                        "IAC" : {
                                "Value" : 4.68,
                                "Unit" : "A"
                        },
                        "IDC" : {
                                "Value" : 3.49,
                                "Unit" : "A"
                        },
                        "PAC" : {
                                "Value" : 1062,
                                "Unit" : "W"
                        },
                        "TOTAL_ENERGY" : {
                                "Value" : 839677.06,
                                "Unit" : "Wh"
                        },
                        "UAC" : {
                                "Value" : 231.1,
                                "Unit" : "V"
                        },
                        "UDC" : {
                                "Value" : 342.7,
                                "Unit" : "V"
                        },
                        "YEAR_ENERGY" : {
                                "Value" : 119222.5,
                                "Unit" : "Wh"
                        },
                        "DeviceStatus" : {
                                "StatusCode" : 7,
                                "MgmtTimerRemainingTime" : -1,
                                "ErrorCode" : 0,
                                "LEDColor" : 2,
                                "LEDState" : 0,
                                "StateToReset" : false
                        }
                }
        }
}
]]--


Jag har lyckats med att skapa alla virtuella sensorer och dummy hardware korrekt.
Efter det skall man köra som det står "-- one-time load of the routines
                JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
        -- JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux"

Jag kör Domoticz på en Raspberry med Linux
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

tor_fransson
Från och med raden commandarray = {} är luaskriptet som skall köras varje minut, om jag förstått det rätt. För att lägga in skriptet i Domoticz skall det antingen finnas en skriptredigerare i guit, eller så kan man hitta en speciell katalog som heter nånting/domoticz/scripts/lua eller dylikt, och lägga skriptet där i en fil som slutar på .lua

Sök på "Domoticz lua time scripts" så får du upp relevant information.
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
In reply to this post by Davil
Kan det vara så här....?

Gå in i Domoticz
Gå till menyn Inställningar/ Fler inställningar/ Händelsesystem/Events


Välj sedan Lua, Time och Event active

Klistra in koden i kodfönstret till vänster

Rader som börjar med "-- "och är gröna är kommentarer, ex:
-- Domoticz passes information to scripts through a number of global tables

Testa om det fungerar.
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

Davil
Tack så mycket för ditt svar!

Jag antar att jag ska skriva in mitt ipnummer och port till domoticz dvs 192.168.1.41:8080
Ser ni något som verkar fel i scriptet?
Jag försökte att klistra in detta men det fungerade ej/händer inget:

commandArray = {}
        if(DEBUG == 1) then print ('Fronius script running!!') end
        -- get current time & calculate sunrise and sunset.
        time_now = os.date("*t")
        minutes_now = time_now.min + time_now.hour * 60
    if(DEBUG == 1) then print ('Time in minutes: ' ..minutes_now) end
        if(DEBUG == 1) then print ('Sunrise in minutes: ' ..timeofday['SunriseInMinutes'] - 60) end
        if(DEBUG == 1) then print ('Sunset in minutes: ' ..timeofday['SunsetInMinutes'] + 60) end
       
        -- Validation for sunrise and sunset.
        if (minutes_now > timeofday['SunriseInMinutes'] - 30) and (minutes_now < timeofday['SunsetInMinutes'] + 30) then
   
                --Extract data from Fronius converter.
                froniusurl = 'curl "http://192.168.1.39/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"'
                jsondata    = assert(io.popen(froniusurl))
                froniusdevice = jsondata:read('*all')
                jsondata:close()
                froniusdata = JSON:decode(froniusdevice)
       
                --Process fronius data
                if (froniusdata ~= nil) then
                if(DEBUG == 2) then print (froniusdevice) end
                local StatusCode = froniusdata['Body']['Data']['DeviceStatus']['StatusCode']
                        if( StatusCode == 7) then --Fronius converter is Running
               
                        local DAY_ENERGY = froniusdata['Body']['Data']['DAY_ENERGY']['Value']
                        local YEAR_ENERGY = froniusdata['Body']['Data']['YEAR_ENERGY']['Value']
                        local TOTAL_ENERGY = froniusdata['Body']['Data']['TOTAL_ENERGY']['Value']
                        local PAC = froniusdata['Body']['Data']['PAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
                        local UAC = froniusdata['Body']['Data']['UAC']['Value']
                        local IDC = froniusdata['Body']['Data']['IDC']['Value']
                        local IAC = froniusdata['Body']['Data']['IAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
       
                        if(DEBUG == 1) then print ('PAC: '..PAC) end
                        if(DEBUG == 1) then print ('Day Energy: '..DAY_ENERGY) end
                        if(DEBUG == 1) then print ('Year Energy: '..YEAR_ENERGY) end
                        if(DEBUG == 1) then print ('Total Energy: '..TOTAL_ENERGY) end
                        if(DEBUG == 1) then print ('UDC: '..UDC) end
                        if(DEBUG == 1) then print ('UAC: '..UAC) end
                        if(DEBUG == 1) then print ('IDC: '..IDC) end
                        if(DEBUG == 1) then print ('IAC: '..IAC) end
                       
                        --To update the devices.
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_Fronius_Opbrengst.."&nvalue=0&svalue="..PAC..";"..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_DAY_ENERGY.."&nvalue=0&svalue="..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_YEAR_ENERGY.."&nvalue=0&svalue="..YEAR_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_TOTAL_ENERGY.."&nvalue=0&svalue="..TOTAL_ENERGY..""}
                       
                        else
                        print ('Fronius converter state other than running')
                        local UDC = 0 local UAC = 0 local IDC = 0 local IAC = 0
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        end
                       
                else
                print ('Fronius converter data is empty or unreachable')
                end
        else
        print ('Fronius converter Offline')
        end
        return commandArray
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
I den här raden ska du skriva in ipnr till växelriktaren
froniusurl = 'curl "http://192.168.1.39/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"'

Se till att du inte har radbrytningar på "fel" ställen.
Jag vill inte ha det här skriptet, för jag läser ut det jag vill ha med PHP skript istället, så jag kommer inte lägga in det i min Domoticz

Rent spontant, så ser det ut som att den radbryter fel i fronousurl och alla rader som börjar med commandArray dom bryter vid type=command, de två raderna ska vara på samma rad.

I övrigt kan inte jag med min begränsade programeringskunskap se något.

När du får igång det, kan du ta en skärmbild och visa hur det ser ut... kanske blir jag sugen när jag ser det i verkligheten :-)
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
Provade klistra in det i min ändå ;-)

Och såg då det konstiga tecknet som jag gulmarkerade. Det blev lite svårt att se, så jag zoomade inte lite

Jag tror att det är det tecknet som är fel, för jag känner inte igen det. Men jag är inte LUA programerare så...
Förslag, inaktivera det här skriptet, ta en kopia på det och ta bort krumelurm, så att det står.
type=command=udevice&idx=' istället. Det kan gå och det kan inte gå.

Jag provade köra skriptet ändå och min dator låste sig, så jag får ge upp innan jag tar sönder något på riktigt.
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
Jäklars, nu fastnade jag i det här... något fel ser det ut att vara. I loggen säger den "Error: EventSystem: in Fronius: [string "--commandArray = {} ..."]:18: attempt to index global 'JSON' (a nil value)" Jag tolkar det som att den inte lyckas läsa in JSON filen och då händer det inget.
Jag tog bort allt som har med att spara värden att göra, det kan vara det som strular till det för mig - eller så är det inte det - som sagt jag har eg ingen koll på vad jag gör.


Ledsen att jag inte kunde hjälpa mer.
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

tor_fransson
Det där felmeddelandet är ju inte så hjälpsamt, men det betyder att det är fel på en helt annan rad, nämligen där JSON används. Det var jag som sade fel när jag sade att skriptet skall starta med "commandarray = {}", raden som deklarerar variablen JSON måste också vara med, alltså den här:
JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

Och den måste ju referera en JSON.lua som faktiskt finns, så du får justera den om du inte har /home/pi/domoticz-katalogen.
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
Jag tog en kopia på orginalskriptet som länkades till i första inlägget. Kommenterade bort alla cammandArray (för att inte skriva något till Domoticz) och nu fick jag iaf en reaktion.
2018-05-15 23:38:00.481 LUA: Fronius converter Offline
Och det stämmer, det är mörkt här nu. Jag hade JSON.lua på rätt ställe...
Nya tag i morgon om jag hinner.
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
Oki, fick igång det - så det loggar till loggen iaf. (debug = 1)
Eg var det bara att få de  här raderna rätt.
        local DEBUG = 1             -- 0 is off, 1 for domoticz log, 2 for fronius JSON data to log
        local IPdomiticz = '192.168.0.117:8080' -- IP adress of the domoticz service + port
        local IPFronius = '192.168.0.101/' -- IP adress of the Fronius converter

Sen får du kolla så att dina sensorIdn är rätt också. Men det hade du väl redan gjort? Jag har inte skapat dom så jag kan inte se om/hur det fungerar.

        local idx_Fronius_Opbrengst = 19 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UDC = 16 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UAC = 15 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IDC = 18 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IAC = 17 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_DAY_ENERGY = 12 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_YEAR_ENERGY = 13 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_TOTAL_ENERGY = 14 -- idx of the virtual sensor, you need to change this to your own Device IDx

Jag fick det här i loggen.
2018-05-16 08:29:00.121 LUA: Fronius script running!!
2018-05-16 08:29:00.121 LUA: Time in minutes: 509
2018-05-16 08:29:00.121 LUA: Sunrise in minutes: 82
2018-05-16 08:29:00.121 LUA: Sunset in minutes: 1428
2018-05-16 08:29:01.068 LUA: PAC: 1810
2018-05-16 08:29:01.068 LUA: Day Energy: 1601.7
2018-05-16 08:29:01.068 LUA: Year Energy: 1603110
2018-05-16 08:29:01.068 LUA: Total Energy: 6408610
2018-05-16 08:29:01.069 LUA: UDC: 576.4
2018-05-16 08:29:01.069 LUA: UAC: 230.8
2018-05-16 08:29:01.069 LUA: IDC: 3.16
2018-05-16 08:29:01.069 LUA: IAC: 7.84
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
This post was updated on .
Såg förresten att du också kör på en Raspberry PI, då måste du även ändra.
        -- one-time load of the routines
                   JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
        --        JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux

Till
        -- one-time load of the routines
        --        JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
                   JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux

Dvs flytta -- från den nedre raden till den övre. Det här är inte något du själv ska köra utan det körs av skriptet.
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

Davil
Suck. Jag är ju helt borta känner jag. Så jädrans frustrerande att jag tydligen är så korkad att inte få detta att fungera!

Jag har försökt med att klistra in i "Events / Lua med valet "Time".
Detta har jag försökt med och får följade error i min log:
Error: EventSystem: in JSON: [string "-- one-time load of the routines ..."]:21: attempt to index global 'JSON' (a nil value)

och detta är kopia av det jag har klistrat in:

-- one-time load of the routines
        -- JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
       
        commandArray = {}
        if(DEBUG == 1) then print ('Fronius script running!!') end
        -- get current time & calculate sunrise and sunset.
        time_now = os.date("*t")
        minutes_now = time_now.min + time_now.hour * 60
    if(DEBUG == 1) then print ('Time in minutes: ' ..minutes_now) end
        if(DEBUG == 1) then print ('Sunrise in minutes: ' ..timeofday['SunriseInMinutes'] - 60) end
        if(DEBUG == 1) then print ('Sunset in minutes: ' ..timeofday['SunsetInMinutes'] + 60) end
       
        -- Validation for sunrise and sunset.
        if (minutes_now > timeofday['SunriseInMinutes'] - 30) and (minutes_now < timeofday['SunsetInMinutes'] + 30) then
   
                --Extract data from Fronius converter.
                froniusurl = 'curl "http://192.168.1.39/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"'
                jsondata    = assert(io.popen(froniusurl))
                froniusdevice = jsondata:read('*all')
                jsondata:close()
                froniusdata = JSON:decode(froniusdevice)
       
                --Process fronius data
                if (froniusdata ~= nil) then
                if(DEBUG == 2) then print (froniusdevice) end
                local StatusCode = froniusdata['Body']['Data']['DeviceStatus']['StatusCode']
                        if( StatusCode == 7) then --Fronius converter is Running
               
                        local DAY_ENERGY = froniusdata['Body']['Data']['DAY_ENERGY']['Value']
                        local YEAR_ENERGY = froniusdata['Body']['Data']['YEAR_ENERGY']['Value']
                        local TOTAL_ENERGY = froniusdata['Body']['Data']['TOTAL_ENERGY']['Value']
                        local PAC = froniusdata['Body']['Data']['PAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
                        local UAC = froniusdata['Body']['Data']['UAC']['Value']
                        local IDC = froniusdata['Body']['Data']['IDC']['Value']
                        local IAC = froniusdata['Body']['Data']['IAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
       
                        if(DEBUG == 1) then print ('PAC: '..PAC) end
                        if(DEBUG == 1) then print ('Day Energy: '..DAY_ENERGY) end
                        if(DEBUG == 1) then print ('Year Energy: '..YEAR_ENERGY) end
                        if(DEBUG == 1) then print ('Total Energy: '..TOTAL_ENERGY) end
                        if(DEBUG == 1) then print ('UDC: '..UDC) end
                        if(DEBUG == 1) then print ('UAC: '..UAC) end
                        if(DEBUG == 1) then print ('IDC: '..IDC) end
                        if(DEBUG == 1) then print ('IAC: '..IAC) end
                       
                        --To update the devices.
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_Fronius_Opbrengst.."&nvalue=0&svalue="..PAC..";"..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_DAY_ENERGY.."&nvalue=0&svalue="..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_YEAR_ENERGY.."&nvalue=0&svalue="..YEAR_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_TOTAL_ENERGY.."&nvalue=0&svalue="..TOTAL_ENERGY..""}
                       
                        else
                        print ('Fronius converter state other than running')
                        local UDC = 0 local UAC = 0 local IDC = 0 local IAC = 0
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://192.168.1.41:8080/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        end
                       
                else
                print ('Fronius converter data is empty or unreachable')
                end
        else
        print ('Fronius converter Offline')
        end
        return commandArray
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
Jag tror inte att du fått med dig hela skriptet, jag klistrar in det här under och jag har ändrat så att den läser in JSON.lua på din Raspberry.
Det du behöver göra är att få in rätt värden i stycket -- Variables to customize.
Börja med att testa DEBUG=2, då ska du få ut JSON filen i loggen, testa sedan DEBUG=1, då ska du se värdena som sparas i Domoticz. När dom ser ok ut, sätter du DEBUG=0 för att slippa se skrotet i loggen.

-- Script start --
- Script to read solardata from FroniusAPI
-- Autor : Meulderg
-- Date : 29-Jan-2017
-- Name: script_time_Fronius.lua
-- Warning: Don't forget to setup the Local Networks otherwize the device counters won't get updated if site security is used.

                -- Variables to customize ------------------------------------------------

        local DEBUG = 0             -- 0 is off, 1 for domoticz log, 2 for fronius JSON data to log
        local IPdomiticz = '192.168.xxx.xxx:8080' -- IP adress of the domoticz service + port
        local IPFronius = '192.168.xxx.xxx' -- IP adress of the Fronius converter
        local idx_Fronius_Opbrengst = 19 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UDC = 16 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UAC = 15 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IDC = 18 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IAC = 17 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_DAY_ENERGY = 12 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_YEAR_ENERGY = 13 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_TOTAL_ENERGY = 14 -- idx of the virtual sensor, you need to change this to your own Device IDx
       
-- Ändra inget nedanför den här raden --


        --Create Virtual Hardware via JSON script (Copy this URL manualy)
        --Change IP, Port and name accordingly
        --http://127.0.0.1:8080/json.htm?type=command¶m=addhardware&htype=15&port=1&name=Fronius&enabled=true
       
        --Create Virtual sensors via JSON script (Copy these URL manual)
        --Change IP, Port and idx (idx is of the previously created hardware ID) accordingly
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Opbrengst&sensortype=18
                --Above sensor needs to be manual adjusted to Type: Return.
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Day_Energy&sensortype=248
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Year_Energy&sensortype=248
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Total_Energy&sensortype=248
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_UAC&sensortype=4
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_UDC&sensortype=4
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_IAC&sensortype=19
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_IDC&sensortype=19
       
       
        -- one-time load of the routines
        -- JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
                JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
       
        commandArray = {}
        if(DEBUG == 1) then print ('Fronius script running!!') end
        -- get current time & calculate sunrise and sunset.
        time_now = os.date("*t")
        minutes_now = time_now.min + time_now.hour * 60
    if(DEBUG == 1) then print ('Time in minutes: ' ..minutes_now) end
        if(DEBUG == 1) then print ('Sunrise in minutes: ' ..timeofday['SunriseInMinutes'] - 60) end
        if(DEBUG == 1) then print ('Sunset in minutes: ' ..timeofday['SunsetInMinutes'] + 60) end
       
        -- Validation for sunrise and sunset.
        if (minutes_now > timeofday['SunriseInMinutes'] - 30) and (minutes_now < timeofday['SunsetInMinutes'] + 30) then
   
                --Extract data from Fronius converter.
                froniusurl = 'curl "http://'..IPFronius..'/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"'
                jsondata    = assert(io.popen(froniusurl))
                froniusdevice = jsondata:read('*all')
                jsondata:close()
                froniusdata = JSON:decode(froniusdevice)
       
                --Process fronius data
                if (froniusdata ~= nil) then
                if(DEBUG == 2) then print (froniusdevice) end
                local StatusCode = froniusdata['Body']['Data']['DeviceStatus']['StatusCode']
                        if( StatusCode == 7) then --Fronius converter is Running
               
                        local DAY_ENERGY = froniusdata['Body']['Data']['DAY_ENERGY']['Value']
                        local YEAR_ENERGY = froniusdata['Body']['Data']['YEAR_ENERGY']['Value']
                        local TOTAL_ENERGY = froniusdata['Body']['Data']['TOTAL_ENERGY']['Value']
                        local PAC = froniusdata['Body']['Data']['PAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
                        local UAC = froniusdata['Body']['Data']['UAC']['Value']
                        local IDC = froniusdata['Body']['Data']['IDC']['Value']
                        local IAC = froniusdata['Body']['Data']['IAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
       
                        if(DEBUG == 1) then print ('PAC: '..PAC) end
                        if(DEBUG == 1) then print ('Day Energy: '..DAY_ENERGY) end
                        if(DEBUG == 1) then print ('Year Energy: '..YEAR_ENERGY) end
                        if(DEBUG == 1) then print ('Total Energy: '..TOTAL_ENERGY) end
                        if(DEBUG == 1) then print ('UDC: '..UDC) end
                        if(DEBUG == 1) then print ('UAC: '..UAC) end
                        if(DEBUG == 1) then print ('IDC: '..IDC) end
                        if(DEBUG == 1) then print ('IAC: '..IAC) end
                       
                        --To update the devices.
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_Fronius_Opbrengst.."&nvalue=0&svalue="..PAC..";"..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_DAY_ENERGY.."&nvalue=0&svalue="..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_YEAR_ENERGY.."&nvalue=0&svalue="..YEAR_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_TOTAL_ENERGY.."&nvalue=0&svalue="..TOTAL_ENERGY..""}
                       
                        else
                        print ('Fronius converter state other than running')
                        local UDC = 0 local UAC = 0 local IDC = 0 local IAC = 0
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        end
                       
                else
                print ('Fronius converter data is empty or unreachable')
                end
        else
        print ('Fronius converter Offline')
        end
        return commandArray
-- Script slut --
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

Davil
Jag är fortfarande ett hopplöst fall :(
Nu ser det ut såhär :

- Script to read solardata from FroniusAPI
-- Autor : Meulderg
-- Date : 29-Jan-2017
-- Name: script_time_Fronius.lua
-- Warning: Don't forget to setup the Local Networks otherwize the device counters won't get updated if site security is used.

                -- Variables to customize ------------------------------------------------

        local DEBUG = 1             -- 0 is off, 1 for domoticz log, 2 for fronius JSON data to log
        local IPdomiticz = 192.168.1.41:8080 -- IP adress of the domoticz service + port
        local IPFronius = 192.168.1.39 -- IP adress of the Fronius converter
        local idx_Fronius_Opbrengst = 640 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UDC = 639 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_UAC = 638 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IDC = 642 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_IAC = 641 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_DAY_ENERGY = 624 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_YEAR_ENERGY = 636 -- idx of the virtual sensor, you need to change this to your own Device IDx
        local idx_TOTAL_ENERGY = 637 -- idx of the virtual sensor, you need to change this to your own Device IDx
       
-- Ändra inget nedanför den här raden --

        --Create Virtual Hardware via JSON script (Copy this URL manualy)
        --Change IP, Port and name accordingly
        --http://127.0.0.1:8080/json.htm?type=command¶m=addhardware&htype=15&port=1&name=Fronius&enabled=true
       
        --Create Virtual sensors via JSON script (Copy these URL manual)
        --Change IP, Port and idx (idx is of the previously created hardware ID) accordingly
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Opbrengst&sensortype=18
                --Above sensor needs to be manual adjusted to Type: Return.
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Day_Energy&sensortype=248
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Year_Energy&sensortype=248
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_Total_Energy&sensortype=248
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_UAC&sensortype=4
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_UDC&sensortype=4
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_IAC&sensortype=19
        --http://127.0.0.1:8080/json.htm?type=createvirtualsensor&idx=4&sensorname=Fronius_IDC&sensortype=19
       
       
        -- one-time load of the routines
        -- JSON = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
                JSON = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
       
        commandArray = {}
        if(DEBUG == 1) then print ('Fronius script running!!') end
        -- get current time & calculate sunrise and sunset.
        time_now = os.date("*t")
        minutes_now = time_now.min + time_now.hour * 60
    if(DEBUG == 1) then print ('Time in minutes: ' ..minutes_now) end
        if(DEBUG == 1) then print ('Sunrise in minutes: ' ..timeofday['SunriseInMinutes'] - 60) end
        if(DEBUG == 1) then print ('Sunset in minutes: ' ..timeofday['SunsetInMinutes'] + 60) end
       
        -- Validation for sunrise and sunset.
        if (minutes_now > timeofday['SunriseInMinutes'] - 30) and (minutes_now < timeofday['SunsetInMinutes'] + 30) then
   
                --Extract data from Fronius converter.
                froniusurl = 'curl "http://'..IPFronius..'/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"'
                jsondata    = assert(io.popen(froniusurl))
                froniusdevice = jsondata:read('*all')
                jsondata:close()
                froniusdata = JSON:decode(froniusdevice)
       
                --Process fronius data
                if (froniusdata ~= nil) then
                if(DEBUG == 2) then print (froniusdevice) end
                local StatusCode = froniusdata['Body']['Data']['DeviceStatus']['StatusCode']
                        if( StatusCode == 7) then --Fronius converter is Running
               
                        local DAY_ENERGY = froniusdata['Body']['Data']['DAY_ENERGY']['Value']
                        local YEAR_ENERGY = froniusdata['Body']['Data']['YEAR_ENERGY']['Value']
                        local TOTAL_ENERGY = froniusdata['Body']['Data']['TOTAL_ENERGY']['Value']
                        local PAC = froniusdata['Body']['Data']['PAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
                        local UAC = froniusdata['Body']['Data']['UAC']['Value']
                        local IDC = froniusdata['Body']['Data']['IDC']['Value']
                        local IAC = froniusdata['Body']['Data']['IAC']['Value']
                        local UDC = froniusdata['Body']['Data']['UDC']['Value']
       
                        if(DEBUG == 1) then print ('PAC: '..PAC) end
                        if(DEBUG == 1) then print ('Day Energy: '..DAY_ENERGY) end
                        if(DEBUG == 1) then print ('Year Energy: '..YEAR_ENERGY) end
                        if(DEBUG == 1) then print ('Total Energy: '..TOTAL_ENERGY) end
                        if(DEBUG == 1) then print ('UDC: '..UDC) end
                        if(DEBUG == 1) then print ('UAC: '..UAC) end
                        if(DEBUG == 1) then print ('IDC: '..IDC) end
                        if(DEBUG == 1) then print ('IAC: '..IAC) end
                       
                        --To update the devices.
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_Fronius_Opbrengst.."&nvalue=0&svalue="..PAC..";"..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_DAY_ENERGY.."&nvalue=0&svalue="..DAY_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_YEAR_ENERGY.."&nvalue=0&svalue="..YEAR_ENERGY..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_TOTAL_ENERGY.."&nvalue=0&svalue="..TOTAL_ENERGY..""}
                       
                        else
                        print ('Fronius converter state other than running')
                        local UDC = 0 local UAC = 0 local IDC = 0 local IAC = 0
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UDC.."&nvalue=0&svalue="..UDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IDC.."&nvalue=0&svalue="..IDC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_UAC.."&nvalue=0&svalue="..UAC..""}
                        commandArray[#commandArray + 1]={['OpenURL']="http://"..IPdomiticz.."/json.htm?type=command¶m=udevice&idx="..idx_IAC.."&nvalue=0&svalue="..IAC..""}
                        end
                       
                else
                print ('Fronius converter data is empty or unreachable')
                end
        else
        print ('Fronius converter Offline')
        end
        return commandArray
Fronius Symo 17,5. Fronius Smartmeter. 18,24kW. 32 x 32st JA-Solar 285w paneler 20Gr lutning riktning Öst/Väst i Glanshammar Närke.
https://www.solarweb.com/Home/GuestLogOn?pvSystemid=26a3723a-9023-45ae-9816-b3d81c12c592 
Svara | Threaded
Open this post in threaded view
|

Re: Avläsa Fronius Json till Domoticz hjälp

TommyE
Fungerar inte?
Får du något fel i loggen?
6,0kWp: 8st JA-Solar 290W + 13st JA-Solar 285W. Fronius Symo 5.0-3-M + Smart Meter 63A-3, montage system Renusol Metasol+.
Taklutning 45°. Azimut 190° Ort Kiruna.
Produktionsdata: PVOutput
12345