hoping someone can help me troubleshoot this. I initially set up the original script to send energy and power data from an aeon labs smart switch hooked up to my washing machine. In SEG I created the dummy device, did the discovery, and it discovered the two streams and connected them to my device. Great so far.
I then tried to add streams for 2 home energy monitors. 2 monitors - power and energy for each. I’m not having any luck picking them up in SEG. When I do an api trace I almost never see anything at all in there, but the 2 streams for my washing machine device do regularly update. I tried to manually create another device thinking maybe I need to do that first, but I get a message about ‘permalink already used’.
Here’s my script
local http = require('socket.http')
http.TIMEOUT = 5
local SEG_SITE = "478c91a17fca017"
local SEG_URL = "http://api.smartenergygroups.com/api_sites/stream"
local segLog = function (text) luup.log('SEG Logger: ' .. (text or "empty")) end
SEG_DEVICES = {
{node='vera', stream='p_washing_machine', deviceId=19, serviceId='urn:micasaverde-com:serviceId:EnergyMetering1', serviceVar="Watts"},
{node='vera', stream='e_washing_machine', deviceId=19, serviceId='urn:micasaverde-com:serviceId:EnergyMetering1', serviceVar="KWH"},
{node='vera', stream='p_hem1', deviceId=28, serviceId='urn:micasaverde-com:serviceId:EnergyMetering1', serviceVar="Watts"},
{node='vera', stream='e_hem1', deviceId=28, serviceId='urn:micasaverde-com:serviceId:EnergyMetering1', serviceVar="KWH"},
{node='vera', stream='p_hem2', deviceId=37, serviceId='urn:micasaverde-com:serviceId:EnergyMetering1', serviceVar="Watts"},
{node='vera', stream='e_hem2', deviceId=37, serviceId='urn:micasaverde-com:serviceId:EnergyMetering1', serviceVar="KWH"}
}
local function findStream(deviceId, serviceId, serviceVar)
-- TODO: Change from a simple scan to something that'll support more entries efficiently.
for k, v in pairs(SEG_DEVICES) do
if (v.deviceId == deviceId and
v.serviceId == serviceId and
v.serviceVar == serviceVar) then
return v.node, v.stream
end
end
return nil, nil
end
local function initWatch()
for k, v in pairs(SEG_DEVICES) do
luup.variable_watch('segWatch', v.serviceId, v.serviceVar, v.deviceId)
end
end
function segWatch(deviceId, serviceId, serviceVar, oldValue, newValue)
local nodeName, streamName = findStream(deviceId, serviceId, serviceVar)
if (nodeName == nil or streamName == nil) then
segLog(string.format("Node not found for %s,%s,%s", deviceId, serviceId, serviceVar))
return
end
-- TODO: Encoding
segData = string.format("(site %s (node %s ? (%s %s)))", SEG_SITE, nodeName, streamName, newValue)
segLog(segData)
result, status = http.request(SEG_URL, segData)
end
initWatch()