Page 1 of 1

JSon values to virtual sensors

Posted: Thursday 16 April 2020 16:48
by mikeoo
I am using DSMR-Logger to read the values from my electricity and gas meter and put them in Domoticz.
After a update of DSMR-Logger it is working with RestApi and now i need to make a new script for it but my skills in DZvents are not there yet.

Hope someone would help creating a script for it. Would be nice i you can get logging also.

When i go to URL http://192.168.0.24/api/v1/sm/actual i get:

Code: Select all

{"actual":[

{"name": "timestamp", "value": "200416155148S"},

{"name": "energy_delivered_tariff1", "value": 3037.105, "unit": "kWh"},

{"name": "energy_delivered_tariff2", "value": 1514.748, "unit": "kWh"},

{"name": "energy_returned_tariff1", "value": 0.000, "unit": "kWh"},

{"name": "energy_returned_tariff2", "value": 0.000, "unit": "kWh"},

{"name": "power_delivered", "value": 0.344, "unit": "kW"},

{"name": "power_returned", "value": 0.000, "unit": "kW"},

{"name": "voltage_l1", "value": 227.000, "unit": "V"},

{"name": "current_l1", "value": 1, "unit": "A"},

{"name": "power_delivered_l1", "value": 0.344, "unit": "kW"},

{"name": "power_returned_l1", "value": 0.000, "unit": "kW"},

{"name": "gas_delivered", "value": 1565.780, "unit": "m3"}

]}

What i would like to is to read the url and put the values in the virtual sensors and that they are updating every minute.

The senors i use in Domoticz are

Code: Select all

Timestamp_IDX = 					         -- Dummy = Text
Gas_Delivered_IDX = 4702	 				 -- Dummy = Counter Incremental --> Gas
Energy_Delivered_Tariff1_IDX = 4707  		 -- Dummy = Counter Incremental --> Engergy
Energy_Delivered_Tariff2_IDX = 4706                  -- Dummy = Counter Incremental --> Engergy
Power_Delivered_IDX = 4703  				 -- Dummy - Electric
Voltage_l1_IDX = 4710					 -- Dummy - Voltage
Current_l1_IDX = 4711					 -- Dummy - Amperage
Power_Delivered_l1_IDX = 4705 		         -- Dummy = Electric
Energy_Returned_Tariff1_IDX =  		     	 -- Dummy = Counter Incremental --> Engergy 
Energy_Returned_Tariff2_IDX =   	    	 	 -- Dummy = Counter Incremental --> Engergy
Power_Returned_IDX =  				     	 -- Dummy - Electric 
Power_Returned_l1_IDX =  		 		 -- Dummy = Electric
Found some examples and with a local url i get the see a value. But don't get how the use the URL with live data and use more then one value. Also the url presents the data like above and not like one line with text.

What i tried to create.

Code: Select all

-- dsmr.lua

return { 
            on = {   timer  =   { "every minute" },},
       
        logging    =    {   
                            level       =  domoticz.LOG_DEBUG,   
                            marker      =  "DSMR-Logger" 
                        },    

    execute = function(dz)
        local function logWrite(str,level)             -- Support function for shorthand debug log statements
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
        
	local url = '{"actual":[{"name": "timestamp", "value": "200416155148S"}, {"name": "energy_delivered_tariff1", "value": 3037.105, "unit": "kWh"}, {"name": "energy_delivered_tariff2", "value": 1514.748, "unit": "kWh"}, {"name": "energy_returned_tariff1", "value": 0.000, "unit": "kWh"}, {"name": "energy_returned_tariff2", "value": 0.000, "unit": "kWh"}, {"name": "power_delivered", "value": 0.344, "unit": "kW"}, {"name": "power_returned", "value": 0.000, "unit": "kW"}, {"name": "voltage_l1", "value": 227.000, "unit": "V"}, {"name": "current_l1", "value": 1, "unit": "A"}, {"name": "power_delivered_l1", "value": 0.344, "unit": "kW"}, {"name": "power_returned_l1", "value": 0.000, "unit": "kW"}, {"name": "gas_delivered", "value": 1565.780, "unit": "m3"} ]}'

--	local url = "http://192.168.0.24/api/v1/sm/actual"

        local rt        = dz.utils.fromJSON(url)        -- convert complete json to table
        local dsmr      = rt.actual[1]                  -- liveweer is a key in table (or "associative array") rt and contains one or more subtables. You want the first one for key, value in pairs(weer) 
	
	for key, value in pairs(dsmr) do
            logWrite(key .. ": " .. tostring(value))
        end
    end
}

Re: JSon values to virtual sensors

Posted: Friday 17 April 2020 14:55
by waaren
mikeoo wrote: Thursday 16 April 2020 16:48 I am using DSMR-Logger to read the values from my electricity and gas meter and put them in Domoticz.
After a update of DSMR-Logger it is working with RestApi and now i need to make a new script for it but my skills in DZvents are not there yet.
I am working on it. Also for another forum member. I expect to have a first version somehere this coming weekend

Re: JSon values to virtual sensors

Posted: Friday 17 April 2020 15:56
by mikeoo
waaren wrote: Friday 17 April 2020 14:55
mikeoo wrote: Thursday 16 April 2020 16:48 I am using DSMR-Logger to read the values from my electricity and gas meter and put them in Domoticz.
After a update of DSMR-Logger it is working with RestApi and now i need to make a new script for it but my skills in DZvents are not there yet.
I am working on it. Also for another forum member. I expect to have a first version somehere this coming weekend

Thank you, what a great service :D

Re: JSon values to virtual sensors  [Solved]

Posted: Sunday 19 April 2020 11:02
by waaren
mikeoo wrote: Thursday 16 April 2020 16:48 I am using DSMR-Logger to read the values from my electricity and gas meter and put them in Domoticz.
After a update of DSMR-Logger it is working with RestApi and now i need to make a new script for it but my skills in DZvents are not there yet.
Posted an initial dzVents version here