--P1 poort van slimme meter uitlezen lastchar = '!' require('serial') port = serial.open('/dev/ttyUSB0', { -- Let op type van de slimme meter voor de onderstaande instellingen. baudrate = 9600, --DSMR 2/3 = 9600 DSMR 4 = 115200 databits = 7, --DSMR 2/3 = 7 DSMR 4 = 8 stopbits = 1, --DSMR 2/3 = 1 DSMR 4 = 1 parity = 'even', --DSMR 2/3 = even DSMR 4 = none duplex = 'full' }) function readdata(port) local char, buf buf = {} while true do char = port:read(1) -- error (timeout) or newline, stop if char == nil or char == lastchar then break -- ignore cr char elseif char ~= '\r' then table.insert(buf, char) end end return table.concat(buf) end data = readdata(port) port:flush() --------------------------------------------------------------- if data then --log(data) -- Totaal verbruik tarief 1 uitlezen kWh tarief_1 = data:match'1.8.1%((%d+.%d+)' tarief_1 = tonumber(tarief_1) --log("Tarief 1: " .. tarief_1 .. " kWh") grp.update('8/0/1', tarief_1) -- Totaal verbruik tarief 2 uitlezen kWh tarief_2 = data:match'1.8.2%((%d+.%d+)' tarief_2 = tonumber(tarief_2) --log("Tarief 2: " .. tarief_2 .. " kWh") grp.update('8/0/2', tarief_2) -- Totaal verbruik tarief 1 + 2 tarief_totaal = tarief_1 + tarief_2 --log("Totaal verbruik: " .. tarief_totaal .. " kWh") grp.update('8/0/0', tarief_totaal) -- Totaal verbruik € verbruik_prijs_kWh = grp.getvalue('8/0/11') totaal_verbruik_€ = tarief_totaal * verbruik_prijs_kWh --log("Totaal verbruik: €" .. totaal_verbruik_€) grp.update('8/0/13', totaal_verbruik_€) -- Totale retourlevering tarief 1 uitlezen kWh retour_1 = data:match'2.8.1%((%d+.%d+)' retour_1 = tonumber(retour_1) --log("Retour 1: " .. retour_1 .. " kWh") grp.update('8/0/4', retour_1) -- Totale retourlevering tarief 2 uitlezen kWh retour_2 = data:match'2.8.2%((%d+.%d+)' retour_2 = tonumber(retour_2) --log("Retour 2: " .. retour_2 .. " kWh") grp.update('8/0/5', retour_2) -- Totale retourlevering tarief 1 + 2 retour_totaal = retour_1 + retour_2 --log("Totaal retour: " .. retour_totaal .. " kWh") grp.update('8/0/3', retour_totaal) -- Totaal retourlevering € retour_prijs_kWh = grp.getvalue('8/0/12') totaal_retour_€ = retour_totaal * retour_prijs_kWh --log("Totaal retour: €" .. totaal_retour_€) grp.update('8/0/14', totaal_retour_€) -- Actuele tariefstand uitlezen T1/T2 actueel_tarief = data:match'14.0%((%d+)' actueel_tarief = tonumber(actueel_tarief) --log("Actueel tarief: T" .. actueel_tarief) grp.update('8/0/10', actueel_tarief) -- Actueel verbruik uitlezen kW actueel_verbruik = data:match'1.7.0%((%d+.%d+)' actueel_verbruik = tonumber(actueel_verbruik) --log("Actueel verbruik: " .. actueel_verbruik .. " kW") grp.update('8/0/6', actueel_verbruik) -- Actueel verbruik W actueel_verbruik_W = actueel_verbruik *1000 --log("Actueel verbruik: " .. actueel_verbruik_W .. " W") grp.update('8/0/7', actueel_verbruik_W) -- Actueel verbruik € verbruik_prijs_kWh = grp.getvalue('8/0/11') actueel_verbruik_€ = actueel_verbruik * verbruik_prijs_kWh --log("Actueel verbruik: €" .. actueel_verbruik_€) grp.update('8/0/15', actueel_verbruik_€) -- Actuele retourlevering uitlezen kW actueel_retour = data:match'2.7.0%((%d+.%d+)' actueel_retour = tonumber(actueel_retour) --log("Actueel retour: " .. actueel_retour .. " kW") grp.update('8/0/8', actueel_retour) -- Actuele retourlevering W actueel_retour_W = actueel_retour *1000 --log("Actueel retour: " .. actueel_retour_W .. " W") grp.update('8/0/9', actueel_retour_W) -- Totale gasverbruik uitlezen m³ gas = data:match'm3.+%((%d+.%d+)' gas = tonumber(gas) --log("Gas: " .. gas .. " m³") grp.update('8/1/0', gas) -- Totaal gasverbruik € verbruik_prijs_M³ = grp.getvalue('8/1/1') totaal_gasverbruik_€ = gas * verbruik_prijs_M³ --log("Totaal gasverbruik: €" .. totaal_gasverbruik_€) grp.update('8/1/2', totaal_gasverbruik_€) end