Larm när batteriet tar slut i enheter

Hjälp varandra att vara kreativa för att göra hemmet mer bekvämt.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Code: Select all

--[[ 
%% properties 

%% globals 
--]] 

local isBatteryOperated = "1" 
local minbattLevel = 20  -- Ställ in önskad larmnivå här! 
local i = 0 
local maxNodeID = 250 


for i = 0, maxNodeID do 
    local type = fibaro:get (i, 'isBatteryOperated'); 
      x , y = string.find (type, isBatteryOperated ) 
    local batterylevel = tonumber(fibaro:getValue (i, 'batteryLevel')) 
        if x ~= nill and batterylevel ~= nill and (batterylevel <= minbattLevel or batterylevel == 255) then 
            local name = fibaro:getName(i) 
            fibaro:debug("Device "..i.."="..name.." bat. level="..batterylevel) 
            fibaro:call(2, "sendEmail", "Low battery on: "..name) 
        end 
end
 
Jag kör denna 1gång per timme och får ett epost meddelande när batterinivån är 20 eller lägre
Skärmavbild 2013-04-11 kl. 20.10.11.png
Skärmavbild 2013-04-11 kl. 20.10.11.png (35.24 KiB) Viewed 21654 times
kappnet
Medlem
Posts: 38
Joined: 09 Sep 2013, 12:12
10

Bra scen.
Hur ställer man in vilken adress mail skall skickas till?

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

I användarpanelen på varje användare lägger du in den epost adress du vill använda dig utav.
mickeys
Medlem
Posts: 80
Joined: 28 Oct 2013, 19:54
10

Jag har gjort så här istället:

Skapa en scen:

Code: Select all

--[[
%% properties

%% globals
--]]

function getIcon(lowest)
  if (lowest > 90) then return 1017
  elseif (lowest >= 50) then return 1016
  elseif (lowest >= 10) then return 1014
  else return 1015 end
end



local isBatteryOperated = "1" 
local minbattLevel = 10  -- Ställ in önskad larmnivå här! 
local i = 0 
local maxNodeID = 250 
local lowest = 100
local flag = 0;

for i = 0, maxNodeID do    	   
	local type = fibaro:get (i, 'isBatteryOperated');   
	if type and  tonumber(type) == 1 then  
    	local batterylevel = fibaro:getValue (i, 'batteryLevel');  
       	if lowest > tonumber(batterylevel) then
        lowest = tonumber(batterylevel)
      	end
    	if tonumber(batterylevel) <= minbattLevel then
      		local name = fibaro:getName(i)    
      		flag = 1;
            fibaro:call(4, "sendPush", "Low battery on:"..name)
            fibaro:call(22, 'setProperty', 'ui.Battery.value',"Lågt batteri: " ..name)
       	elseif flag == 0 then
      		fibaro:call(22, 'setProperty', 'ui.Battery.value',"Allt ok. Lägst: " ..lowest .."%")  
       	
    	end 
    	fibaro:call(22, "setProperty", "currentIcon", getIcon(lowest));
	end 
 end
fibaro:sleep(86400000); 

Skapa en virtuell label:
batteri
batteri
Skärmavbild 2013-12-31 kl. 14.28.37.png (13.61 KiB) Viewed 21066 times
Batteriet ändras beroende på hur mycket där är kvar.
1388355796_laptop_power.png
1388355796_laptop_power.png (11.66 KiB) Viewed 21066 times
1388355775_battery_two_thirds.png
1388355775_battery_two_thirds.png (7 KiB) Viewed 21066 times
1388349807_battery_low.png
1388349807_battery_low.png (5.79 KiB) Viewed 21066 times
1388355769_battery_empty.png
1388355769_battery_empty.png (3.91 KiB) Viewed 21066 times
iSnobben
Medlem
Posts: 105
Joined: 27 Dec 2013, 20:39
10

mickeys wrote:Jag har gjort så här istället:

Skapa en scen:

Code: Select all

--[[
%% properties

%% globals
--]]

function getIcon(lowest)
  if (lowest > 90) then return 1017
  elseif (lowest >= 50) then return 1016
  elseif (lowest >= 10) then return 1014
  else return 1015 end
end



local isBatteryOperated = "1" 
local minbattLevel = 10  -- Ställ in önskad larmnivå här! 
local i = 0 
local maxNodeID = 250 
local lowest = 100
local flag = 0;

for i = 0, maxNodeID do    	   
	local type = fibaro:get (i, 'isBatteryOperated');   
	if type and  tonumber(type) == 1 then  
    	local batterylevel = fibaro:getValue (i, 'batteryLevel');  
       	if lowest > tonumber(batterylevel) then
        lowest = tonumber(batterylevel)
      	end
    	if tonumber(batterylevel) <= minbattLevel then
      		local name = fibaro:getName(i)    
      		flag = 1;
            fibaro:call(4, "sendPush", "Low battery on:"..name)
            fibaro:call(22, 'setProperty', 'ui.Battery.value',"Lågt batteri: " ..name)
       	elseif flag == 0 then
      		fibaro:call(22, 'setProperty', 'ui.Battery.value',"Allt ok. Lägst: " ..lowest .."%")  
       	
    	end 
    	fibaro:call(22, "setProperty", "currentIcon", getIcon(lowest));
	end 
 end
fibaro:sleep(86400000); 

Skapa en virtuell label:
Skärmavbild 2013-12-31 kl. 14.28.37.png
Batteriet ändras beroende på hur mycket där är kvar.
1388355796_laptop_power.png
1388355775_battery_two_thirds.png
1388349807_battery_low.png
1388355769_battery_empty.png
Jag är nog förmodligen trög men jag får inte till detta. Vad behöver jag ändra för att det ska fungera hos mig? Ska man lägga till någon kod på sin virtuella enhet eller hur vet den vad den ska visa för info?
Dede
Medlem
Posts: 82
Joined: 14 Jan 2014, 16:15
10

iSnobben wrote:Jag är nog förmodligen trög men jag får inte till detta. Vad behöver jag ändra för att det ska fungera hos mig? Ska man lägga till någon kod på sin virtuella enhet eller hur vet den vad den ska visa för info?
Då är vi två. Har än så länge dålig koll men learning by doing....och få en massa hjälp på forum :)
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Hej,
Jag får följande felmeddelande...Någon aning om vad det kan bero på?

Code: Select all

[ERROR] 17:22:13: line 34: attempt to compare nil with number
iSnobben
Medlem
Posts: 105
Joined: 27 Dec 2013, 20:39
10

svante wrote:Hej,
Jag får följande felmeddelande...Någon aning om vad det kan bero på?

Code: Select all

[ERROR] 17:22:13: line 34: attempt to compare nil with number
Jag har exakt samma problem på samma rad...
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Nån som kan tipsa om vad som är fel??? Please....
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Jompa - vet du vad felet kan vara? Fortfarande problem på samma rad...
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Svante, kikar på det ikväll


Jonny sent this from his iPhone using Tapatalk
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Svante, hur ser hela din kod ut?
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Code: Select all

--[[
%% properties
%% globals
--]]

function getIcon(lowest)
  if (lowest >= 90) then return 1010
  elseif (lowest >= 40) then return 1009
  elseif (lowest >= 20) then return 1008
  else return 1007 end
end

local isBatteryOperated = "1"
local minbattLevel = 15 --alarm level!
local i = 0 
local maxNodeID = 500
local lowest = 100
local name

local flag = 0


for i = 0, maxNodeID do 
local type = fibaro:get (i, 'isBatteryOperated'); 
      x , y = string.find (type, isBatteryOperated ) 
        if x ~= nil
            then 
            name = fibaro:getName(i)
          batterylevel = fibaro:getValue (i, 'batteryLevel')
              if tonumber(batterylevel) == 255 then 
                 batterylevel = 10
              end
             if lowest > tonumber(batterylevel) then
                 lowest = tonumber(batterylevel)
               end
            fibaro:debug("ID = "..i..", Namn:"..name.."\t - \t batteri nivå: "..batterylevel.."%") 
   
          if tonumber(batterylevel) <= minbattLevel then

               flag = 1
                fibaro:call(93, 'setProperty', 'ui.Battery.value',"Lågt batteri: " ..name.." "..batterylevel.."%")
              fibaro:debug("Låg batteri nivå på ID:"..i.." Namn:"..name.." "..batterylevel.."%")
               --fibaro:call(229, "sendPush", "Låg batteri nivå på \n "..name.." ID:"..i.." - "..batterylevel.."%")
             elseif flag == 0 then
                  fibaro:call(93, 'setProperty', 'ui.Battery.value',"Allt ok. Lägsta: " ..lowest .."%")  
               fibaro:call(93, "setProperty", "currentIcon", getIcon(lowest));
          end

          fibaro:call(93, "setProperty", "currentIcon", getIcon(lowest));
       end 
end 
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Kör din kod rätt av och inga fel hos mig.

Code: Select all

[DEBUG] 22:23:35: ID = 14, Namn:Källardörren	 - batteri nivå: 57%
[DEBUG] 22:23:35: ID = 19, Namn:19	 - batteri nivå: 100%
[DEBUG] 22:23:35: ID = 20, Namn:20	 - batteri nivå: 51%
[DEBUG] 22:23:35: ID = 57, Namn:57	 - batteri nivå: 100%
[DEBUG] 22:23:35: ID = 61, Namn:61	 - batteri nivå: 100%
[DEBUG] 22:23:35: ID = 66, Namn:Dörrsensor	 - batteri nivå: 87%
[DEBUG] 22:23:35: ID = 70, Namn:70	 - batteri nivå: 72%
[DEBUG] 22:23:35: ID = 77, Namn:77	 - batteri nivå: 68%
[DEBUG] 22:23:35: ID = 104, Namn:Ytterdörr	 - batteri nivå: 89%
[DEBUG] 22:23:35: ID = 113, Namn:Diskmaskin	 - batteri nivå: 35%
[DEBUG] 22:23:35: ID = 119, Namn:Garageport	 - batteri nivå: 66%
[DEBUG] 22:23:35: ID = 123, Namn:123	 - batteri nivå: 100%
[DEBUG] 22:23:35: ID = 127, Namn:127	 - batteri nivå: 100%
iSnobben
Medlem
Posts: 105
Joined: 27 Dec 2013, 20:39
10

Jag har försökt igen att få detta att fungera men jag får bara följande felmeddelande:
[ERROR] 13:23:20: line 25: bad argument #1 to 'find' (string expected, got nil)

Min kod ser ut såhär i scenen:
--[[
%% properties
%% globals
--]]

function getIcon(lowest)
if (lowest >= 90) then return 1010
elseif (lowest >= 40) then return 1009
elseif (lowest >= 20) then return 1008
else return 1007 end
end

local isBatteryOperated = "1"
local minbattLevel = 15 --alarm level!
local i = 0
local maxNodeID = 500
local lowest = 100
local name

local flag = 0


for i = 0, maxNodeID do
local type = fibaro:get (i, 'isBatteryOperated');
x , y = string.find (type, isBatteryOperated )
if x ~= nil
then
name = fibaro:getName(i)
batterylevel = fibaro:getValue (i, 'batteryLevel')
if tonumber(batterylevel) == 255 then
batterylevel = 10
end
if lowest > tonumber(batterylevel) then
lowest = tonumber(batterylevel)
end
fibaro:debug("ID = "..i..", Namn:"..name.."\t - \t batteri nivå: "..batterylevel.."%")

if tonumber(batterylevel) <= minbattLevel then

flag = 1
fibaro:call(16, 'setProperty', 'ui.Battery.value',"Lågt batteri: " ..name.." "..batterylevel.."%")
fibaro:debug("Låg batteri nivå på ID:"..i.." Namn:"..name.." "..batterylevel.."%")
fibaro:call(229, "sendPush", "Låg batteri nivå på \n "..name.." ID:"..i.." - "..batterylevel.."%")
elseif flag == 0 then
fibaro:call(16, 'setProperty', 'ui.Battery.value',"Allt ok. Lägsta: " ..lowest .."%")
fibaro:call(16, "setProperty", "currentIcon", getIcon(lowest));
end

fibaro:call(16, "setProperty", "currentIcon", getIcon(lowest));
end
end


Behöver jag skapa något förutom en label typ någon variabel eller så? Känner mig verkligen kass på kod när man inte ens kan få färdig kod att fungera. Kanske ska tillägga att jag kör 4.018 Beta om det kan ställa till det på något sätt?
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Ta bort semikolon på dina rader ;-)
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
iSnobben
Medlem
Posts: 105
Joined: 27 Dec 2013, 20:39
10

Bamsefar wrote:Ta bort semikolon på dina rader ;-)

Tack för tipset dock fick jag ett nytt felmeddelande:
[ERROR] 23:45:22: Runtime error: /opt/fibaro/FibaroSceneAPI.lua:117: attempt to index a nil value

Jag blir även lite förvirrad över att det i den här tråden förekommer två ganska olika koder, vilken bör man utgå ifrån?
Joho
Medlem
Posts: 26
Joined: 21 Mar 2014, 09:58
10
Location: Umeå

Får inte detta att fungera jag heller.
Är det något man måste ändra i koden mot sin egen HC2 eller skall den fungera rakt av.
Detsamma gäller för den virtuela labeln, tar gärna en utförlig beskrivning om hur den skall skapas.
Är det en label för varje status eller gör man dessa i samma?

Som ni ser så är man en riktig nybörjare på detta.

Efter nycket testande och trixande så verkar det fungera :-D
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Tja

Varför får inte jag detta att funka då =/

Ja jo jag är ju nybörjare med , klippt ut och klistrat in koden , är det nått mer jag måste ändra ? på ID:t men vart ändrar man det ?

Mvh

Edit: Är det bara kopiera över koden rakt av ? För nu när jag körde scenen så fick jag detta meddelande, är allt ok då ?

[DEBUG] 01:45:54: ID = 8, Namn:Brand Pellets - batteri nivå: 100%
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Ja det borde gå att kopiera rakt av utan att tittat på detaljerna. Koden plockar ut all enheter som är batteridrivna och listar dess batterivärde.. Om nivån är lägre än 15% så skickas ett push meddelande. Du kan alltid höja "minbattlevel" om du vill testa koden.


Sent from my iPhone using Tapatalk
Post Reply