Stromverbrauch des bisherigen Tages in Variable speichern

Hallo,

ist es möglich den Stromverbrauch eines vergangenen Tages in einer Variable zu sichern?
Kann dazu evtl sogar der Wert aus dem Energy Panel genommen werden? Und wenn ja, wie bekomme ich den jeweils vom Tag zuvor?

Kennt sich da jemand aus?

Hi,

schau dir mal in der Dokumentation die API des Energy panel an. Vielleicht wirst du dort fündig.

https://developer.fibaro.com/docs/fghc-restapi

Gruß

@boomx Danke für den Tipp. Leider ist das Energy panel scheinbar nicht dokumentiert.
In französisch habe ich im Netz folgende Code Zeile gefunden:

Das hier scheint mehrere Devices zu listen:

http://<IP>/api/energy/1393455963/1393459563/compare/devices/power/11,91

Und folgendes je ein Device :

http://<LOGIN>:<PASS>@<IP>/api/energy/now-3600/now/single/devices/power/58

Es gibt auch etwas aus, leider nichts womit ich etwas anfangen kann, geschweige denn weiß was ich damit anfange…

Gibt es eine Möglichkeit die variable im Browser anzeigen zu lassen (Energy panel) und dann den Seiten Quelltext dazu zu benutzen woher der Wert geholt wird??!

schau dir mal folgenden Post an:
https://www.siio.de/board/thema/wall-plug-messung-ueber-zeitraum/#post-65473

Hier passiert genau das was du suchst.
Du musst nur die variablen StartEnergiemessungund EndEnergiemessunganpassen (Unixtime)
Bsp: 20.02.2017 00:00 = 1487545200 also StartEnergiemessung = 1487545200 und EndEnergiemessung = 1487631599

Viele Grüße

@nevv

super, danke ich schaue mir das mal an.
Aber wie würde ich das Ergebnis dann in eine Variable innerhalb Fibaro bekommen?
Ich möchte ja nicht extern messen sondern den Verbrauch intern lesen und speichern?

Danke

Hast den Artikel schon gelesen?!

https://www.siio.de/fibaro-homecenter-guide-teil-4-globale-variablen/

Hier der reduzierte Code:

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

wallplug = 98
StartEnergiemessung = 1487545200
EndEnergiemessung = 1487631599
jsonListe = api.get("/energy/"..StartEnergiemessung.."/"..EndEnergiemessung.."/compare/devices/power/"..wallplug);

fibaro:setGlobal("Verbrauch", jsonListe[1].kWh)
fibaro:debug("Verbrauch der letzten 24 Std: "..jsonListe[1].kWh.. " kWh")

Damit du immer den Tagesverbrauch der letzten 24h erhältst müsstest du allerdings die Szene immer Nachts (23:59) starten damit du die EndEnergiemessung mit der akuellen Zeit füllen kannst (EndEnergiemessung = os.time()). Für die StartEnergiemessung musst du dann von os.time() 23:59h abziehen.

Uhh, sorry hatte heute morgen auf die schnelle (und die Freude eines Lösungsansatzes) den Artikel nicht gelesen und lediglich die Unix Zeitrechnung bewundert.

Vielen Dank für die Lösung! Ich denke das ist alles was ich benötige - Danke Danke danke :slight_smile:

So, jetzt habe ich eine Schleife eingerichtet welche ein Array abarbeitet mit allen Verbrauchern die in Frage kommen.

Wie bekomme ich jetzt automatisch das aktuelle Datum mit 0 Uhr und mit 23:59Uhr in die Unix Zeit umgerechnet. Das müsste doch mit os.time() funktioniere?

Mal schauen. Auf jeden Fall poste ich das Endergebnis um den Thread komplett zu halten…

Hallo

ich habe das hier gemacht mit einer schleife. Um zu lernen würde ich deine Lösung sehen.



local wallplug = 14	
local ct = 22.41 
local StartEnergiemessung = 1487635200; 
local rooms = "6,7,5,8,9"				--rooms ID eintragen
local maxRooms = 5						-- hier eintragen vieviele rooms mann hat
-----------------------------------------------------------------------------------------
debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
----------Timestamp berechnen------------------------------------------
function convertTime(seconds)
    local stunden = math.floor(seconds/3600)
	local minute = math.floor((seconds - (stunden*3600)) /60)
	local seconds = math.floor((seconds  - (stunden*3600)) - minute * 60)
	return ">> "..stunden..":"..minute.. "." ..seconds.." << Stunden."
end
--------- Energy verbrauch --------------------------------------------
function energieverbrauch();
  	local jsonListe = api.get("/energy/"..StartEnergiemessung.."/"..EndEnergiemessung.."/compare/rooms/power/"..rooms.."/");
    i = 1; kWh = 0;
    repeat; 
    kWh = kWh + jsonListe[i].kWh; 
    i = i + 1; 
    until i == maxRooms; 
  return kWh
end

local EndEnergiemessung = os.time();

debug('orange',"Energiemessung dauerte "..(convertTime(os.difftime(EndEnergiemessung , StartEnergiemessung))).." Der Verbrauch ist "..string.format("%.2f", energieverbrauch()).." kWh und kostet "..string.format("%.2f", energieverbrauch()*ct/100).." €.");  


@ragnarok:

hier der zusätzliche Code für die Zeitenberechnung:

std = 86400
StartEnergiemessung = (os.time()-std);
EndEnergiemessung = os.time();

Grüße

Hallo
habe meine schleife optimiert und deswegen braucht mann nicht mehr die “maxRooms” variable.


--------- Energy verbrauch --------------------------------------------
function energieverbrauch();
  	local jsonListe = api.get("/energy/"..StartEnergiemessung.."/"..EndEnergiemessung.."/compare/rooms/power/"..rooms.."/");
    kWh = 0;
  for i = 1, #jsonListe do
    kWh = kWh + jsonListe[i].kWh;
  end
  return kWh
end

Danke für eure Hilfe. Hatte heute morgen auch die Unix Umrechnung fertig.

@parip69

Woher kommt denn die variable rooms? Läuft die Schleife alle vorhandenen Räume automatisch durch?
Wenn ja,gibt es eine Unterteilungsmöglichkeit in Licht und Strom Steckdosen?

Habe im Moment alle Verbraucher in einer Variable einzeln eingetragen und zahle die in einer Schleife zusammen.

Hi
Die Variable rooms ist nur dafür da und das in einem string format um die api abzufragen beispiel weiter unten das letzte rooms.
Ich habe mir den nahmen ausgedacht, du kannst auch mit roomsID erstzen was vieleicht auch besser währe um den code zu lesen zu können.

local jsonListe = api.get("/energy/"…StartEnergiemessung…"/"…EndEnergiemessung…"/compare/rooms/power/"…rooms…"/");
local jsonListe = api.get("/energy/"…StartEnergiemessung…"/"…EndEnergiemessung…"/compare/rooms/power/6,7,5,8,9/");

Ich wollte nur Lösungsvorschläge bringen der code ist rausgefischt aus einem Waschmaschinen script.

Unterteilung geht so devices

local jsonListe = api.get("/energy/"…StartEnergiemessung…"/"…EndEnergiemessung…"/compare/devices/power/"…devicesID…"/");

Unterteilung
Was ich herausfinden konnte ist das was ich oben geschrieben habe. Mann müsste halt über Variablen z.b. “devicesIDLicht” und “devicesIDSteckdosen”.

Gruss

Hi

Habe lange gebraucht. Im Internet habe ich auch nichts gefunden. Jetzt habe ich es geschafft einen Timestamp von der Mitternachtsstunde des aktuellen Tages aus zu geben.
Habe lange gebraucht.


local midnight = os.date('*t'); midnight.hour = 0; midnight.min = 0; midnight.sec = 0; 
print(os.time(midnight)); 					--Timestamp
print(os.date( "%H:%M - %d.%m.%Y" , os.time(midnight))); 	--Datum format

Jetzt zeigt er immer ab Mitternacht bis aktuelle zeit. Die Vareablen “StartEnergiemessung” und “EndEnergiemessung” braucht mann nicht mehr.
local jsonListe = api.get("/energy/"…os.time(midnight)…"/now/compare/rooms/power/"…rooms…"/");

Gruss