EDIT: Om du letar lösning så finns det flera versioner av en scen längre ner i tråden
Är det någon som lagrar HC2-information i InfluxDB ?
Hur kör ni över allt data?
Jag har testat att göra en scen som skickar över en del data men den känns lite statisk så jag funderar på andra varianter.
Finns ju lite att välja på... Göra en VD av "samma" kod, externt script eller kanske en egenknackad Telegraf-plugin eller så kan man använda pluginen exec.
HC2 till InfluxDB
Last edited by riro on 09 Nov 2017, 11:56, edited 1 time in total.
Berätta mer hur du gjort, har gjort några försök med node-red men då sparat till MySQL. Men inte fått till det som jag velat. Har du tänkt göra grafer med grafana också?
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Just nu så har jag en scen som reagerar på properties från mina sensorer och så postar den helt enkelt iväg datat till InfluxDB's enkla api.
Har gjort lite enkla test-grafer med chronograf (ungefär samma lika som grafana), men har inte så mycket data ännu så det är ju inte så roligt.
Ungefär så här ser i alla fall scenen ut nu
Har gjort lite enkla test-grafer med chronograf (ungefär samma lika som grafana), men har inte så mycket data ännu så det är ju inte så roligt.
Ungefär så här ser i alla fall scenen ut nu
Code: Select all
--[[
%% properties
6 value
7 value
8 value
9 value
%% weather
%% events
%% globals
--]]
local doDebug = true
local sUrl = "http://192.168.100.10:8086/write?db=testdb"
local sMeasurement = "HomeCenter2"
-- local mySettings = json.decode( tostring( fibaro:getGlobalValue("set_IDs") ) )
msgDebug = function (color, message)
if doDebug then
fibaro:debug("<span style='color: " .. color .. "'>" .. tostring(message) .. "</span>")
end
end
local startSource = fibaro:getSourceTrigger()
if (startSource['type'] ~= 'property') then
msgDebug("Red", 'Started by trigger: ' .. startSource['type'] .. " / " .. tostring(startSource['name']) .. ", aborting!")
fibaro:abort()
end
-- Collect data
iDeviceId = startSource["deviceID"]
iValue = fibaro:getValue(iDeviceId, "value")
sName = fibaro:getName(iDeviceId)
sDeviceType = fibaro:getType(iDeviceId)
msgDebug("Green", sName .. " (" .. tostring(iDeviceId) .. ") = " .. tostring(iValue) .. " (" .. sDeviceType .. ")" )
-- Compose API-post
sName = string.gsub(sName, " ", "\\ ")
sDeviceType = string.gsub(sDeviceType, " ", "\\ ")
local sPostData = sMeasurement .. ",Device\\ ID=" .. tostring(iDeviceId) .. ",Device\\ Type=" .. sDeviceType .. " " .. sName .. "=" .. tostring(iValue)
msgDebug("Gray", sPostData)
-- Post to API
local http = net.HTTPClient()
http:request(
sUrl,
{
success = function (response)
-- msgDebug("Green", "OK: " .. response.data)
end,
error = function (err)
msgDebug("Red", "Error: " ..err)
end,
options = {
method = 'POST',
data = sPostData
}
}
)
Lite uppdaterad scen som fixar lite mer... hanterar kWh från enheter samt att den rapporterar in vilken "unit" datat kommer i.
Är dock lite osäker på en sak, om unit inte finns är det då en binär sensor (dörr, rörelse, etc) eller finns det något annat bra sätt att veta om den är binär?
(Just nu rapporterar den in 0 eller 1 på binära sensorer)
Är dock lite osäker på en sak, om unit inte finns är det då en binär sensor (dörr, rörelse, etc) eller finns det något annat bra sätt att veta om den är binär?
(Just nu rapporterar den in 0 eller 1 på binära sensorer)
Code: Select all
--[[
%% properties
6 value
7 value
31 power
32 power
%% weather
%% events
%% globals
--]]
local doDebug = true
local sInfluxDbAPI = "http://192.168.100.10:8086"
local sInfluxDbDB = "CasaWeRo"
local sMeasurement = "HomeCenter2"
msgDebug = function (color, message)
if doDebug then
fibaro:debug("<span style='color: " .. color .. "'>" .. tostring(message) .. "</span>")
end
end
local startSource = fibaro:getSourceTrigger()
if (startSource['type'] ~= 'property') then
msgDebug("Red", 'Started by trigger: ' .. startSource['type'] .. " / " .. tostring(startSource['name']) .. ", aborting!")
fibaro:abort()
end
-- Collect data
iDeviceId = startSource["deviceID"]
iValue = fibaro:getValue(iDeviceId, "value")
sName = fibaro:getName(iDeviceId)
sDeviceType = fibaro:getType(iDeviceId)
iPower = fibaro:getValue(iDeviceId, "power")
if iPower ~= nil then
iValue = iPower
sUnit = "kWh"
else
sUnit = fibaro:getValue(iDeviceId, "unit")
end
msgDebug("Green", sName .. " (" .. tostring(iDeviceId) .. ") = " .. tostring(iValue) .. " " .. tostring(sUnit) .. " (" .. sDeviceType .. ")" )
-- Compose API-post
sName = string.gsub(sName, " ", "\\ ")
sDeviceType = string.gsub(sDeviceType, " ", "\\ ")
sPostData = sMeasurement .. ",Device\\ ID=" .. tostring(iDeviceId) .. ",Device\\ Type=" .. sDeviceType
if sUnit ~= nil then
sUnit = string.gsub(sUnit, " ", "\\ ")
sPostData = sPostData .. ",Unit=" .. sUnit
end
sPostData = sPostData .. " " .. sName .. "=" .. tostring(iValue)
msgDebug("Gray", sPostData)
-- Post to API
local http = net.HTTPClient()
http:request(
sInfluxDbAPI .. "/write?db=" .. sInfluxDbDB,
{
success = function (response)
-- msgDebug("Green", "OK: " .. response.data)
end,
error = function (err)
msgDebug("Red", "Error: " ..err)
end,
options = {
method = 'POST',
data = sPostData
}
}
)
Har inte haft så mycket tid över sista dagarna, men ikväll vart det en liten stund.
Smutt med "Unit" också, dock så passade inte kWh in i mitt system då jag inte har några så energikrävande enheter. Jag böt ut det till Watt istället,
Det enda som jag kan känna saknas just nu är vilket rum enheten sitter i, går det att få in det med tror du?
Helt underbart snällt att du delar med dig av detta
Smutt med "Unit" också, dock så passade inte kWh in i mitt system då jag inte har några så energikrävande enheter. Jag böt ut det till Watt istället,
Det enda som jag kan känna saknas just nu är vilket rum enheten sitter i, går det att få in det med tror du?
Helt underbart snällt att du delar med dig av detta
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Hade inte ens tänkt på att ta med rum, men nu är både ID och namn med i koden nedanför.sonnyboy wrote:Det enda som jag kan känna saknas just nu är vilket rum enheten sitter i, går det att få in det med tror du?
Code: Select all
--[[
%% properties
6 value
7 value
31 power
32 power
%% weather
%% events
%% globals
--]]
local doDebug = true
local sInfluxDbAPI = "http://192.168.100.10:8086"
local sInfluxDbDB = "CasaWeRo"
local sMeasurement = "HomeCenter2"
msgDebug = function (color, message)
if doDebug then
fibaro:debug("<span style='color: " .. color .. "'>" .. tostring(message) .. "</span>")
end
end
local startSource = fibaro:getSourceTrigger()
if (startSource['type'] ~= 'property') then
msgDebug("Red", 'Started by trigger: ' .. startSource['type'] .. " / " .. tostring(startSource['name']) .. ", aborting!")
fibaro:abort()
end
-- Collect data
iDeviceId = startSource["deviceID"]
iValue = fibaro:getValue(iDeviceId, "value")
sName = fibaro:getName(iDeviceId)
sDeviceType = fibaro:getType(iDeviceId)
iPower = fibaro:getValue(iDeviceId, "power")
iRoomId = fibaro:getRoomID(iDeviceId)
sRoomName = fibaro:getRoomName(iRoomId)
if iPower ~= nil then
iValue = iPower
sUnit = "kWh"
else
sUnit = fibaro:getValue(iDeviceId, "unit")
end
msgDebug("Green", sName .. " (" .. tostring(iDeviceId) .. ") = " .. tostring(iValue) .. " " .. tostring(sUnit) .. " (" .. sDeviceType .. ")" )
-- Compose API-post
sName = string.gsub(sName, " ", "\\ ")
sDeviceType = string.gsub(sDeviceType, " ", "\\ ")
sRoomName = string.gsub(sRoomName, " ", "\\ ")
sPostData = sMeasurement .. ",Device\\ ID=" .. tostring(iDeviceId) .. ",Device\\ Type=" .. sDeviceType .. ",Room\\ Name=" .. sRoomName .. ",Room\\ ID=" .. tostring(iRoomId)
if sUnit ~= nil then
sUnit = string.gsub(sUnit, " ", "\\ ")
sPostData = sPostData .. ",Unit=" .. sUnit
end
sPostData = sPostData .. " " .. sName .. "=" .. tostring(iValue)
msgDebug("Gray", sPostData)
-- Post to API
local http = net.HTTPClient()
http:request(
sInfluxDbAPI .. "/write?db=" .. sInfluxDbDB,
{
success = function (response)
-- msgDebug("Green", "OK: " .. response.data)
end,
error = function (err)
msgDebug("Red", "Error: " ..err)
end,
options = {
method = 'POST',
data = sPostData
}
}
)
Snyggt
Har en fråga på dom 2 senaste scenerna, jag får inte in mina tempsensorer i någon av dom.
Är det en bugg någon stans tro?
Den skriver i debugen att den läser tempen men det kommer inte något i influx.
[DEBUG] 16:46:13: Temp_Netatmo (359) = 22.3 (com.fibaro.temperatureSensor)
[DEBUG] 16:46:13: HomeCenter2,Device\ ID=359,Device\ Type=com.fibaro.temperatureSensor,Room\ Name=Vardagsrum,Room\ ID=2,Unit= Temp_Netatmo=22.3
1510069290579030335 250 com.fibaro.FGWP101 0 1 Köket kWh
1510069292087180114 250 com.fibaro.FGWP101 7.2 1 Köket kWh
1510069440610304880 322 com.fibaro.FGWP101 23.1 1 Köket kWh
1510069444232657515 322 com.fibaro.FGWP101 23 1 Köket kWh
pi@grafana:~ $
Har en fråga på dom 2 senaste scenerna, jag får inte in mina tempsensorer i någon av dom.
Är det en bugg någon stans tro?
Den skriver i debugen att den läser tempen men det kommer inte något i influx.
[DEBUG] 16:46:13: Temp_Netatmo (359) = 22.3 (com.fibaro.temperatureSensor)
[DEBUG] 16:46:13: HomeCenter2,Device\ ID=359,Device\ Type=com.fibaro.temperatureSensor,Room\ Name=Vardagsrum,Room\ ID=2,Unit= Temp_Netatmo=22.3
1510069290579030335 250 com.fibaro.FGWP101 0 1 Köket kWh
1510069292087180114 250 com.fibaro.FGWP101 7.2 1 Köket kWh
1510069440610304880 322 com.fibaro.FGWP101 23.1 1 Köket kWh
1510069444232657515 322 com.fibaro.FGWP101 23 1 Köket kWh
pi@grafana:~ $
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Skulle tro att det är Unit som saknas... testa att kommentera ut den här raden:sonnyboy wrote: [DEBUG] 16:46:13: Temp_Netatmo (359) = 22.3 (com.fibaro.temperatureSensor)
[DEBUG] 16:46:13: HomeCenter2,Device\ ID=359,Device\ Type=com.fibaro.temperatureSensor,Room\ Name=Vardagsrum,Room\ ID=2,Unit= Temp_Netatmo=22.3
Code: Select all
sPostData = sPostData .. ",Unit=" .. sUnit
... eller så skriver du om stycket så det ser ut ungefär så här:
Det är alltså bara 1a raden av de där som är ändrad mot tidigare post...
Code: Select all
if sUnit ~= nil and sUnit ~= "" then
sUnit = string.gsub(sUnit, " ", "\\ ")
sPostData = sPostData .. ",Unit=" .. sUnit
end
Nu kom jag på en till grej som vore kul om man kunde få med,
Jag har ganska många Globala variablar som uppdateras från Beyond Measure till min HC, mest så är det temperaturer och Rh men även nederbörd elmätning mm.
Är det möjligt att få in globala variablar också?
Jag har ganska många Globala variablar som uppdateras från Beyond Measure till min HC, mest så är det temperaturer och Rh men även nederbörd elmätning mm.
Är det möjligt att få in globala variablar också?
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Borde inte vara någon raketforskning att få till... ska se om jag får lite tid över så kan jag kolla på det, har ett par variabler själv som skulle vara kul att få in.sonnyboy wrote:Är det möjligt att få in globala variablar också?
... men just i det här fallet så är det kanske smartare att posta direkt från BM till Influx-API'et...sonnyboy wrote:Jag har ganska många Globala variablar som uppdateras från Beyond Measure till min HC
Visste inte att BM levde fortf
//Tidig MSure användare
Och här kommer en version som fixar globala variabler också...
Code: Select all
--[[
%% properties
6 value
7 value
31 power
32 power
%% weather
%% events
%% globals
TimeOfDay
Pushover
SonosTTS
--]]
local doDebug = true
local sInfluxDbAPI = "http://192.168.100.10:8086"
local sInfluxDbDB = "CasaWeRo"
local sMeasurement = "HomeCenter2"
local sDeviceTypeGlobalVar = "GlobalVariable"
msgDebug = function (color, message)
if doDebug then
fibaro:debug("<span style='color: " .. color .. "'>" .. tostring(message) .. "</span>")
end
end
local startSource = fibaro:getSourceTrigger()
if (startSource['type'] == 'property') then
-- Collect data
iDeviceId = startSource["deviceID"]
iValue = fibaro:getValue(iDeviceId, "value")
sName = fibaro:getName(iDeviceId)
sDeviceType = fibaro:getType(iDeviceId)
iPower = fibaro:getValue(iDeviceId, "power")
iRoomId = fibaro:getRoomID(iDeviceId)
sRoomName = fibaro:getRoomName(iRoomId)
if iPower ~= nil then
iValue = iPower
sUnit = "kWh"
else
sUnit = fibaro:getValue(iDeviceId, "unit")
end
msgDebug("Green", sName .. " (" .. tostring(iDeviceId) .. ") = " .. tostring(iValue) .. " " .. tostring(sUnit) .. " (" .. sDeviceType .. ")" )
-- Compose POST data
sName = string.gsub(sName, " ", "\\ ")
sDeviceType = string.gsub(sDeviceType, " ", "\\ ")
sRoomName = string.gsub(sRoomName, " ", "\\ ")
sPostData = sMeasurement .. ",Device\\ ID=" .. tostring(iDeviceId) .. ",Device\\ Type=" .. sDeviceType .. ",Room\\ Name=" .. sRoomName .. ",Room\\ ID=" .. tostring(iRoomId)
if sUnit ~= nil and sUnit ~= "" then
sUnit = string.gsub(sUnit, " ", "\\ ")
sPostData = sPostData .. ",Unit=" .. sUnit
end
sPostData = sPostData .. " " .. sName .. "=" .. tostring(iValue)
elseif (startSource['type'] == 'global') then
-- Collect data
sVariableName = startSource['name']
sVariableValue = tostring(fibaro:getGlobalValue(sVariableName))
msgDebug("Green", "Global variable: " .. sVariableName .. " = " .. sVariableValue)
-- Compose POST data
sVariableName = string.gsub(sVariableName, " ", "\\ ")
sVariableValue = string.gsub(sVariableValue, " ", "\\ ")
sPostData = sMeasurement .. ",Variable\\ Name=" .. sVariableName .. ",Device\\ Type=" .. sDeviceTypeGlobalVar .. " " .. sVariableName .. "=" .. sVariableValue
else
msgDebug("Red", 'Started by trigger: ' .. startSource['type'] .. " / " .. tostring(startSource['name']) .. ", aborting!")
fibaro:abort()
end
-- Post to InfluxDB API
msgDebug("Gray", sPostData)
local http = net.HTTPClient()
http:request(
sInfluxDbAPI .. "/write?db=" .. sInfluxDbDB,
{
success = function (response)
-- msgDebug("Green", "OK: " .. response.data)
end,
error = function (err)
msgDebug("Red", "Error: " ..err)
end,
options = {
method = 'POST',
data = sPostData
}
}
)
-- Done!
Rackarns vad trevlig, nu vill man ju hem istället för att jobba
Jag hoppade på Msure till en början men tyckte det var lite för komplicerat att hoppa från LogTemp till Msure, Men strax efter kom BM och då ljusnade allt
När jag började med Z-wave så körde jag BM som front-end till min Razberry jag hade då, då loggades alla händelser mm till MySQL och graferna gjordes och allt var frid och fröjd
Elförbrukningen på huset loggas fortfarande i BM, svart är värmepumpen och rött hushållsel
klicka Här så kommer en liten graf
Vi är några användare som fortfarande använder BM, det är ju så bra till allt, tyvärr så har ju Per lagt ner utvecklingen av BM så nu är det dött egentligen, men jag har ju typ 10 år i MySQL sparat och har lite svårt att byta bort detta.riro wrote:Visste inte att BM levde fortf
//Tidig MSure användare
Jag hoppade på Msure till en början men tyckte det var lite för komplicerat att hoppa från LogTemp till Msure, Men strax efter kom BM och då ljusnade allt
När jag började med Z-wave så körde jag BM som front-end till min Razberry jag hade då, då loggades alla händelser mm till MySQL och graferna gjordes och allt var frid och fröjd
Elförbrukningen på huset loggas fortfarande i BM, svart är värmepumpen och rött hushållsel
klicka Här så kommer en liten graf
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Hej, nu finns det (sedan ett par månader) en färdig Telegraf plugin till Fibaro.riro wrote: ↑02 Nov 2017, 16:38 EDIT: Om du letar lösning så finns det flera versioner av en scen längre ner i tråden
Är det någon som lagrar HC2-information i InfluxDB ?
Hur kör ni över allt data?
Jag har testat att göra en scen som skickar över en del data men den känns lite statisk så jag funderar på andra varianter.
Finns ju lite att välja på... Göra en VD av "samma" kod, externt script eller kanske en egenknackad Telegraf-plugin eller så kan man använda pluginen exec.
https://github.com/influxdata/telegraf/ ... uts/fibaro
/rumbLe