Hålla koll på robotklipparen

Beskriv ditt system och hjälp andra med dina kreativa lösningar.
diStefano
Medlem
Posts: 105
Joined: 31 Aug 2013, 21:39
11

Har nu kört denna några dagar och den funkar utmärkt men jag får inte till Total klipptid.
Så snart den klipper igen efter laddning så nollas den och räknar samma som aktuell klipptid.

Har skapat Globala variablar för "lawnmowerStarttime" och "lawnmowerCutttime" och ändrat "cutTime till "cutDuration" enligt tidigare inlägg (tror jag ändrade på rätt ställe).

Vad har jag missat?

Code: Select all

--Ändra Username/Password
--Ändra powerDeviceID till ID som gräsklipparen sitter på
--Skapa Global variabel lawnmowerStarttime

local username = "xxxxx"
local password = "xxxxx"
local powerDeviceID = 146
local selfId = fibaro:getSelfId()
local startTime = tonumber(fibaro:getGlobalValue("lawnmowerStarttime"))
if startTime == 0 then
	  fibaro:setGlobal("lawnmowerStarttime", os.time())
end



function getPowerStatus (currentpower)
	if tonumber(currentpower) < 2 then
    	return "Vilar"
    elseif tonumber(currentpower) < 5 then
    	return "Klipper"
    elseif tonumber(currentpower) >= 5 and tonumber(currentpower) < 200 then
    	return "Laddar"
    else
    	return "retry"
    end
end

if fibaro:getValue(selfId,"ui.lblStatus.value") == "Klipper" then
   fibaro:call(selfId, "setProperty", "currentIcon", 1005)
elseif
   fibaro:getValue(selfId,"ui.lblStatus.value") == "Laddar" then
   fibaro:call(selfId, "setProperty", "currentIcon", 1004)
  elseif
   fibaro:getValue(selfId,"ui.lblStatus.value") == "Vilar" then
   fibaro:call(selfId, "setProperty", "currentIcon", 1003)
end

function checkStatus ()
	VU = Net.FHttp("127.0.0.1",80); 
	VU:setBasicAuthentication(username,password);
	response ,status, errorCode = VU:GET("/api/devices?id=" .. powerDeviceID);
	if  errorCode == 0 then
    	jsonTable = json.decode(response) 
		local power = jsonTable["properties"].power

		fibaro:debug("Energy: " .. power)
		local status = getPowerStatus(power)

		local oldStatus = fibaro:getValue(selfId,"ui.lblStatus.value")
		if status ~= oldStatus then
			fibaro:debug("Status changed from: " .. oldStatus .. " to: " .. status)

      		if oldStatus == "Klipper" then
        		local cutDuration = os.time() - startTime
				local cutTime = tonumber(fibaro:getGlobalValue("lawnmowerCuttime")) + tonumber(cutDuration)
      			fibaro:setGlobal("lawnmowerCuttime", cutTime)		
        		fibaro:call(selfId,"setProperty", "ui.lblLawnmownCuttime.value","C ".. os.date("%H:%M:%S", cutDuration - 3600))
      		end
      
	  		fibaro:call(selfId,"setProperty", "ui.lblStatus.value",status)
			fibaro:setGlobal("lawnmowerStarttime", os.time())
            startTime = os.time()
      		
      		fibaro:call(selfId,"setProperty", "ui.lblstartTime.value", "00:00:00")
		else
  			fibaro:call(selfId,"setProperty", "ui.lblstartTime.value",os.date("%H:%M:%S",os.time() - startTime - 3600 ))
      		if fibaro:getValue(selfId,"ui.lblStatus.value") == "Klipper" then
      			local cutDuration = os.time() - startTime
        		--fibaro:debug("cutduration: " .. cutDuration)
				local cutTime = tonumber(fibaro:getGlobalValue("lawnmowerCuttime")) + tonumber(cutDuration)
   			   	--fibaro:debug("Totalcuttime: " .. cutTime)	
        		--fibaro:debug("Totalcutduration: " ..os.date("%H:%M:%S",cutTime))
   			    fibaro:setGlobal("lawnmowerCuttime", cutTime)	
        		fibaro:call(selfId,"setProperty", "ui.lblLawnmownCuttime.value", os.date("%H:%M:%S", cutDuration - 3600))
        	end
        	fibaro:debug("Duration: " .. os.date("%H:%M:%S",os.time() - startTime - 3600 ))
		end
    end
end

checkStatus()
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Någonstans efter mitten av koden har du "cutDuration" där jag har "cutTime" i min kod.

if oldStatus == "Klipper" then
local cutDuration = os.time() - startTime
local cutTime = tonumber(fibaro:getGlobalValue("lawnmowerCuttime")) + tonumber(cutDuration)
fibaro:setGlobal("lawnmowerCuttime", cutTime)
fibaro:call(selfId,"setProperty", "ui.lblLawnmownCuttime.value","C ".. os.date("%H:%M:%S", cutDuration - 3600))
end
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
diStefano
Medlem
Posts: 105
Joined: 31 Aug 2013, 21:39
11

Ok, det ändrade jag till i samband med installationen enligt inlägget från den 1 maj men det kanske var på fel ställe.
Testar att ändra tillbaka får vi se.
diStefano
Medlem
Posts: 105
Joined: 31 Aug 2013, 21:39
11

Går inget bra med den totala klipptiden....

Skrev ner några uppdateringar nu:
Tid Total klipptid
1.39.37 23.36.13
1.39.53 02.55.51
1.40.01 04.35.53
1.40.17 07.56.18
01.40.25 09.36.45
01.40.41 12.57.57
01.40.49 14.38.46

Verkar som totala klipptiden adderar senaste tidsuppdateringen och börjar om efter 24 timmar.
N kan se min Uppdatera status-kod tre inlägg upp med skillnaden att jag efter det så har ändrat tillbaka enligt RH_Dreambox två inlägg upp.
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Så som scriptet ser ut idag så nollställs tiden efter 24 timmar. Det går att fixa med ytterligare kod men själv hinner jag inte titta på detta just nu.
I stället testar jag en variant där jag ändrar "%H:%M:%S" till "%d:%H:%M:%S" som då visar antal dygn (Obs d, inte D)
Nackdelen verkar vara att den gärna vill börja på 1 i stället för 0.
Det är ingen garanti för att det funkar men jag testar.
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
diStefano
Medlem
Posts: 105
Joined: 31 Aug 2013, 21:39
11

Ok, tack då vet jag. Övrigt funkar det utmärkt!

Finns det möjlighet till någon kodrad som skickar ett push om klipparen har en status längre än normalt?

Drabbades nu av att se att den fortfarande har statusen Klipper efter 17 timmar. Hade jag fått ett meddelande efter t.ex. 3 timmar så hade jag varit hemma och kunnat åtgärda problemet.
Clabbe
Medlem
Posts: 357
Joined: 25 May 2015, 21:53
9
Location: Torslanda

Någon som har den senaste versionen?

Där även totalklipptid visas?
Samt som sistnämnde sa, ett push om den är ute förlänge?
-----------------------------------------------------------------
HC2
Aeon Labs, Fibaro, Danfoss enheter (30++st)
Clabbe
Medlem
Posts: 357
Joined: 25 May 2015, 21:53
9
Location: Torslanda

Hm, verkade fungera.

Men efter 48sekunder klippning så stannade VDn.

Tror eventuellt den fick, lågt värde och ville ändra till "vilar".

[ERROR] 21:09:28: line 45: attempt to perform arithmetic on a nil value
-----------------------------------------------------------------
HC2
Aeon Labs, Fibaro, Danfoss enheter (30++st)
andersmh
Ny medlem
Posts: 1
Joined: 20 Jul 2018, 12:08
6

Jag har testat en lösning baserad på strömförbrukning med min 330x under sommaren men tyckte det var för mycket problem med Eco mode. Då jag inte kan öppna luckan medan klipparen står i laddaren måste jag först dra ut klipparen och sedan öppna luckan. Efter det går inte slingan på som den ska. Därför har jag funderat på alternativ med IR-sensor liknande den som Ikea använder i sina garderober. Jag har inte funnit någon IR-sensor med Z-wave. Men man borde kunna kombinera en Fibaro universalsensor med tex Markslöjd Connect IR-sensor. Det utesluter så klart inte att man använder elmätaren också.

Skickat från min H8216 via Tapatalk

Post Reply