Se husets elförbrukning med virtuell enhet

jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Status.PNG
Status.PNG (22.85 KiB) Viewed 28344 times
Skapa en ny virtuell enhet och lägg till 4st labels. Sätt ID namn till: LabelNow, LabelHour, LabelMonth och LabelWhen och sen kan du ge Label namnet till vad du önskar själv.
labels.PNG
labels.PNG (80.23 KiB) Viewed 28344 times
labels2.PNG
labels2.PNG (25.97 KiB) Viewed 28344 times
Lägg till en knapp (button) och döp den till Update eller annat önskvärt namn.
Lägg till följande LUA kod i knappen:

Code: Select all

function getIcon(watt)
  if(watt > 8000) then return 1049
  elseif(watt >= 7500) then return 1047
  elseif(watt >= 6500) then return 1046
  elseif(watt >= 5500) then return 1045
  elseif(watt >= 4850) then return 1044
  elseif(watt >= 4250) then return 1043
  elseif(watt >= 3750) then return 1042
  elseif(watt >= 3450) then return 1041
  elseif(watt >= 3350) then return 1040
  elseif(watt >= 3250) then return 1039
  elseif(watt >= 3150) then return 1038
  elseif(watt >= 3050) then return 1037
  elseif(watt >= 2950) then return 1036
  elseif(watt >= 2850) then return 1035
  elseif(watt >= 2750) then return 1034
  elseif(watt >= 2650) then return 1033
  elseif(watt >= 2550) then return 1032
  elseif(watt >= 2450) then return 1031
  elseif(watt >= 2350) then return 1030
  elseif(watt >= 2250) then return 1029
  elseif(watt >= 2150) then return 1028
  elseif(watt >= 2050) then return 1027
  elseif(watt >= 1950) then return 1026
  elseif(watt >= 1850) then return 1025
  elseif(watt >= 1750) then return 1024
  elseif(watt >= 1650) then return 1023
  elseif(watt >= 1550) then return 1022
  elseif(watt >= 1450) then return 1021
  elseif(watt >= 1350) then return 1020
  elseif(watt >= 1250) then return 1019
  elseif(watt >= 1150) then return 1018
  elseif(watt >= 1050) then return 1017
  elseif(watt >= 950) then return 1016
  elseif(watt >= 850) then return 1015
  elseif(watt >= 750) then return 1014
  elseif(watt >= 650) then return 1013
  elseif(watt >= 550) then return 1012
  elseif(watt >= 450) then return 1011
  else return 1011 end
end
local time = os.time()
local date = os.date("*t", time)
local year = date.year
local month = date.month
local unixtime = os.time{year=year, month=month, day=01, hour=00, min=00, sec=00}
--fibaro:log(month)
--fibaro:log(unixtime)
thisId = 173
started = os.date("%Y-%m-%d %H:%M:%S")
fibaro:debug("-- ["..started .."] Function Start --")
HC2 = Net.FHttp("192.168.0.61")
rwatt, status, errorCode = HC2:GET("/api/energy/now/now/single/devices/power/17")
rkwhour, status, errorCode = HC2:GET("/api/energy/now-3600/now/single/devices/power/17")
rkwhmonth, status, errorCode = HC2:GET("/api/energy/"..unixtime.."/now/single/devices/power/17")
jsonTable = json.decode(rwatt)
jsonTable = json.decode(rkwhour)
jsonTable2 = json.decode(rkwhmonth)
watt = (jsonTable.W)
kwh = (jsonTable.kWh)
month = (jsonTable2.kWh)

time =  os.date("%H:%M:%S");
fibaro:log("Now: "..watt.."W | Last hour: "..kwh.."kWh")
fibaro:call(thisId, "setProperty", "ui.LabelNow.value", watt.." Watt");
fibaro:call(thisId, "setProperty", "ui.LabelHour.value",kwh.." kWh");
fibaro:call(thisId, "setProperty", "ui.LabelMonth.value", month.." kWh");
fibaro:call(thisId, "setProperty", "ui.LabelWhen.value", time);
fibaro:call(thisId, "setProperty", "currentIcon", getIcon(watt));

ended = os.date("%Y-%m-%d %H:%M:%S");
fibaro:debug("-- [".. ended .."] Function Ended --");
fibaro:debug("Error: "..errorCode);
--- VIKTIGT! -- Byt ut enhet 17 samt din egen HC2's IP adress ---VIKTIGT!
Dessa rader ska ändras:

Code: Select all

HC2 = Net.FHttp("192.168.0.61")
rwatt, status, errorCode = HC2:GET("/api/energy/now/now/single/devices/power/17")
rkwhour, status, errorCode = HC2:GET("/api/energy/now-3600/now/single/devices/power/17")
rkwhmonth, status, errorCode = HC2:GET("/api/energy/"..unixtime.."/now/single/devices/power/17")

Skapa en scen som trycker på knappen Update var xx:min (jag uppdaterar min var 5:e min)
scene.PNG
scene.PNG (13.52 KiB) Viewed 28344 times
Ladda upp all png filer till din HC2 för att få dom snygga ikonerna som ändras beroende på vad förbrukning är.
Du måste byta numret på ikonerna under funktionen getIcon
128.zip
(972.02 KiB) Downloaded 705 times
Du hittar id på ikonerna efter uppladdning genom att gå till http://hc2_ip/api/icons
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Hej!
Fantastiskt bra guide, men jag får inte upp några värden i själva enheten, de syns bara nere i det gröna fältet under enheten....vad gör jag för fel?
calle
Medlem
Posts: 35
Joined: 23 Aug 2013, 16:21
10

Riktigt snygg lösning.
Men enhet 17. Vad står den för och var ska jag leta efter min motsvarighet till 17???




Sent from my iPhone using Tapatalk
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Du ser ID under själva enheten.
Capture.PNG
Capture.PNG (41.75 KiB) Viewed 28232 times
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

el
el
Screen Shot 2013-12-02 at 14.51.53.png (38.84 KiB) Viewed 28226 times
Som du ser dyker inget upp...Det kommer upp i det gröna fältet under enheten och där är all info korrekt.
Vad är felet? :oops:
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Hur ser koden ut i din virtuella enhet? Detta löser vi :)
calle
Medlem
Posts: 35
Joined: 23 Aug 2013, 16:21
10

Okey. Missuppfatta det hela en del. Du har en aeon mätare på centralen. Jag trodde den tog förbrukning får alla mina samlade enheter likt så det ser på energi panelen ?

Hur som helst. Snyggt var det, och du måste ju vara z-wave kungen nummer 1
Tack för allt tålamod gällande dumma frågor



Sent from my iPhone using Tapatalk
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Gjort en knapp för "uppdatera" och valt "LUA-kod"

Code: Select all

function getIcon(watt)
  if(watt > 8000) then return 1054
  elseif(watt >= 7500) then return 1054
  elseif(watt >= 6500) then return 1053
  elseif(watt >= 5500) then return 1052
  elseif(watt >= 4850) then return 1051
  elseif(watt >= 4250) then return 1050
  elseif(watt >= 3750) then return 1049
  elseif(watt >= 3450) then return 1048
  elseif(watt >= 3350) then return 1047
  elseif(watt >= 3250) then return 1046
  elseif(watt >= 3150) then return 1045
  elseif(watt >= 3050) then return 1044
  elseif(watt >= 2950) then return 1043
  elseif(watt >= 2850) then return 1042
  elseif(watt >= 2750) then return 1041
  elseif(watt >= 2650) then return 1040
  elseif(watt >= 2550) then return 1039
  elseif(watt >= 2450) then return 1038
  elseif(watt >= 2350) then return 1037
  elseif(watt >= 2250) then return 1036
  elseif(watt >= 2150) then return 1035
  elseif(watt >= 2050) then return 1034
  elseif(watt >= 1950) then return 1033
  elseif(watt >= 1850) then return 1032
  elseif(watt >= 1750) then return 1031
  elseif(watt >= 1650) then return 1030
  elseif(watt >= 1550) then return 1029
  elseif(watt >= 1450) then return 1028
  elseif(watt >= 1350) then return 1027
  elseif(watt >= 1250) then return 1026
  elseif(watt >= 1150) then return 1025
  elseif(watt >= 1050) then return 1024
  elseif(watt >= 950) then return 1023
  elseif(watt >= 850) then return 1022
  elseif(watt >= 750) then return 1021
  elseif(watt >= 650) then return 1020
  elseif(watt >= 550) then return 1019
  elseif(watt >= 450) then return 1017
  else return 1017 end
end
local time = os.time()
local date = os.date("*t", time)
local year = date.year
local month = date.month
local unixtime = os.time{year=year, month=month, day=01, hour=00, min=00, sec=00}
--fibaro:log(month)
--fibaro:log(unixtime)
thisId = 173
started = os.date("%Y-%m-%d %H:%M:%S")
fibaro:debug("-- ["..started .."] Function Start --")
HC2 = Net.FHttp("192.168.0.22")
rwatt, status, errorCode = HC2:GET("/api/energy/now/now/single/devices/power/45")
rkwhour, status, errorCode = HC2:GET("/api/energy/now-3600/now/single/devices/power/45")
rkwhmonth, status, errorCode = HC2:GET("/api/energy/"..unixtime.."/now/single/devices/power/45")
jsonTable = json.decode(rwatt)
jsonTable = json.decode(rkwhour)
jsonTable2 = json.decode(rkwhmonth)
watt = (jsonTable.W)
kwh = (jsonTable.kWh)
month = (jsonTable2.kWh)

time =  os.date("%H:%M:%S");
fibaro:log("Now: "..watt.."W | Last hour: "..kwh.."kWh")
fibaro:call(thisId, "setProperty", "ui.LabelNow.value", watt.." Watt");
fibaro:call(thisId, "setProperty", "ui.LabelHour.value",kwh.." kWh");
fibaro:call(thisId, "setProperty", "ui.LabelMonth.value", month.." kWh");
fibaro:call(thisId, "setProperty", "ui.LabelWhen.value", time);
fibaro:call(thisId, "setProperty", "currentIcon", getIcon(watt));

ended = os.date("%Y-%m-%d %H:%M:%S");
fibaro:debug("-- [".. ended .."] Function Ended --");
fibaro:debug("Error: "..errorCode);
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Tror felet ligger här:

thisID = 173

thisID är din virtuella's ID (min är 173)
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Aha där ser man, lägger du till det i din guide? :)
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Fantastiskt, funkar nu :D
dhanjel
Medlem
Posts: 264
Joined: 19 Apr 2013, 12:47
10
Contact:

Riktigt snyggt, ska testas ikväll!
dhanjel
Medlem
Posts: 264
Joined: 19 Apr 2013, 12:47
10
Contact:

Finns det nåt smidigt sätt att få in alla ikoner på?

Och hade man inte istället för scen använda main loop på enheten istället?

Bjuder på ett litet tips med, i senaste Fibaro-betan så kan man importera och exportera enheter.
linsri
Ny medlem
Posts: 6
Joined: 26 Jan 2014, 15:17
10

Hej!
Har försökt att göra så som ni beskriver men utan att få igång det ordentligt, men jag har en NorthQ Power Reader.
Jag antar att jag bör ändra en del i Lua koden för att anpassa den till NorthQ´n? Är det någon som fått i gång det med en sådan elmätare?
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Fungerar den med HC2? Då borde det gå att få ut värderna.
Vilket ID har din elmätare? Har du provat att ändra bara detta värde?
linsri
Ny medlem
Posts: 6
Joined: 26 Jan 2014, 15:17
10

jompa68 wrote:Fungerar den med HC2? Då borde det gå att få ut värderna.
Vilket ID har din elmätare? Har du provat att ändra bara detta värde?
Hej jompa68!, Ja den fungerar med HC2, det ser liknande ut som för den elmätaren ni har som exempel här i tråden.
Ja har ändrat ID i LUA koden till det som min elmätare har samt ändrat "thisid" efter vad den virtuella enheten heter.


så här ser det ut för närvarande -
Image
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Om du kör detta kommando i webbläsaren, vad får du ut då?

Code: Select all

http://HC2_IP/api/energy/now/now/single/devices/power/ID
linsri
Ny medlem
Posts: 6
Joined: 26 Jan 2014, 15:17
10

jompa68 wrote:Om du kör detta kommando i webbläsaren, vad får du ut då?

Code: Select all

http://HC2_IP/api/energy/now/now/single/devices/power/ID
-"Firefox kan inte hitta servern på http://www.hc2_ip.se.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

http://xxx.xxx.xxx.xxx/api/energy/now/n ... s/power/ID

byt ut xxx.xxx.xxx.xxx mot din kontrollers ipadress och byt ut ID mot det id som din NorthQ har
linsri
Ny medlem
Posts: 6
Joined: 26 Jan 2014, 15:17
10

jompa68 wrote:http://xxx.xxx.xxx.xxx/api/energy/now/n ... s/power/ID

byt ut xxx.xxx.xxx.xxx mot din kontrollers ipadress och byt ut ID mot det id som din NorthQ har

Det borde jag fattat, lite klantigt av mig... :lol:

detta får jag

{"id":1,"kWh":0.00,"W":-0.00,"min":-0.00,"max":-0.00,"avg":-nan}
Post Reply