Android PAD laden wenn Akkustand unter 20%

Habe da mal was gebastelt - ein Tablett mit Android und der App Tasker, ein Wallplug von Fibaro und ein virtuelles Device in der HC2.

  1. das VD (Aussehen siehe angehängte Datei “BattMobiles”) enthällt erst mal nur zwei Labels. Eines zum Anzeigen des aktuellen Akkustandes und eins zeigt an wenn das PAD geladen wird. In der primären Schleife wird das ganze dann verarbeitet:

selfId = fibaro:getSelfId()
-- wert der aus ui.label1.value gelesen wird
local wert = 0
-- ab wann soll der Akku geladen werden
local low = 20
-- bis zu welchem Wert soll der Akku geladen werden
local high = 90
-- ID des WallPlugs der das Ladegerät des PAD's schaltet
local plugBad = 314

-- check ob geladen werden muss
-- Inhalt des Label1 lesen
wert = tonumber(fibaro:getValue(selfId, "ui.Label1.value"));
fibaro:debug("Battiestand: "..wert)
-- Akku fast leer?
if wert < low then
-- und WallPlug noch nicht angeschatlet
  if (tonumber(fibaro:getValue(plugBad, "value")) == 0 )then
-- Anzeige "wird geladen"
  	fibaro:call(selfId, "setProperty", "ui.Label2.value", "...laden")  
  	fibaro:call(plugBad, "turnOn")
  	fibaro:debug("Laden")
   end
-- Akku hat Sollstand erreicht
elseif wert >= high then
  if (tonumber(fibaro:getValue(plugBad, "value")) == 1 )then
	fibaro:call(selfId, "setProperty", "ui.Label2.value", "")
  	fibaro:call(plugBad, "turnOff")
  	fibaro:debug("Laden beenden")
  end
end

-- setzen des passenden Icons
if wert < 10 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1047)
elseif wert < 30 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1048)
elseif wert < 50 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1049)
elseif wert < 70 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1050)
elseif wert < 90 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1051)
else
  fibaro:call(selfId, "setProperty", "currentIcon", 1052)
end

einen Teil der verwendeten Icons habe ich mal angehängt.

  1. Tasker auf dem PAD einrichten und einen Task (z.B. “AkkuStand”) erstellen:
    Dort ein HTTP GET als Aufgabe anlegen mit folgendem Inhalt:

Server:port = http://<Benutzername>:<Passwort>@<DeineHC2>/api/callAction?deviceID=<DeviceIDdesVirtuellenDevice>&name=setProperty&arg1=ui.Label1.value&arg2=%BATT

dabei bedeuten:
<Benutzername> der Benutzername der auf das VD in der HC2 Zugriff hat und <Passwort> das entsprechende Passwort dazu
<DeineHC2> der Netzwerkname oder die IP Adresse des Fibaro Home Centers
<DeviceIDdesVirtuellenDevice> die ID des oben beschriebenen virtuellen Devices

Das kann man dann schon mal testen in dem man den Task links unten mit dem Pfeilsymbol startet. Dann sollte im VD auch schon der aktuelle Akkustand angezeigt werden

In Tasker dann noch ein Profil anlegen vom Typ Zeit und dort einstellen das von 0:00 bis 23:xx alle (ich habe es auf 30 Minuten) x Minuten der Task AkkuStand aufgerufen wird.

BattMobiles.png

battery_discharging_000.png

battery_discharging_020.png

battery_discharging_040.png

… die noch fehlenden ICons:

battery_discharging_060.png

battery_discharging_080.png

battery_discharging_100.png

Update: So können die Werte für LOW und HIGH sowie das zu schaltende WallPlug auch ohne Änderungen im LUA Code angepasst werden.
Eintrag der LOW und HIGH Werte mit “:” getrennt in das Feld IPAdresse des virtuellen Device: z.B. 20:90 und eintragen der ID des WallPlug im Feld TCPPort.

Dann kann man im Code diese Felder auswerten und verarbeiten:


selfId = fibaro:getSelfId()

-- die ID des WallPlugs ist in TCPPort eingegeben
local plugBad = fibaro:get(selfId, "TCPPort")

-- die Werte für Low und High stehen mit ":" getrennt in IPAdresse
local LowHigh = {};
local i = 1;
-- übertragen der Low und Highwerte aus IPAdresse in lokales Array
local tLowHigh = fibaro:get(selfId, "IPAddress");
	fibaro:debug("LowHigh: "..tLowHigh)
	-- extrahieren der beiden Werte
  	for value in string.gmatch(tLowHigh,"(%d+)") do
  		LowHigh[i] = tostring(value);
  		-- fibaro:debug("Wert "..LowHigh[i])
   		i = i + 1
	end

-- check ob geladen werden muss
-- BAD
local wert = tonumber(fibaro:getValue(selfId, "ui.Label1.value"));
fibaro:debug("Battiestand: "..wert)
if wert < tonumber(LowHigh[1]) then
  if (tonumber(fibaro:getValue(plugBad, "value")) == 0 )then
  	fibaro:call(selfId, "setProperty", "ui.Label2.value", "...laden")  
  	fibaro:call(plugBad, "turnOn")
  	fibaro:debug("Laden")
   end
elseif wert >= tonumber(LowHigh[2]) then
  if (tonumber(fibaro:getValue(plugBad, "value")) == 1 )then
	fibaro:call(selfId, "setProperty", "ui.Label2.value", "")
  	fibaro:call(plugBad, "turnOff")
  	fibaro:debug("Laden beenden")
  end
end

-- set icon
if wert < 10 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1047)
elseif wert < 30 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1048)
elseif wert < 50 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1049)
elseif wert < 70 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1050)
elseif wert < 90 then
  fibaro:call(selfId, "setProperty", "currentIcon", 1051)
else
  fibaro:call(selfId, "setProperty", "currentIcon", 1052)
end