Website-Icon Dein Smart Home Blog

Fibaro Home Center - Sensorwerte grafisch als Diagramm darstellen

So eine triviale Funktion, aber dennoch vermissen diese viele von euch im Fibaro Home Center! So kannst du Sensorwerte speichern und grafisch in einem Diagramm darstellen.

Auf der Weboberfläche des Fibaro Home Center, unter dem Menüpunkt "Verbrauch", hast du natürlich die Möglichkeit die Verbrauchswerte von deinen Geräten (Energiemessfunktion vorausgesetzt) einzusehen. Du kannst diese in einem Diagramm darzustellen und sogar Werte aus den verschiedenen Räumen zusammenzufassen und diese auch vergleichen.

Auch den Temperaturverlauf der einzelnen Räume-, sowie auch der einzelnen Temperatursensoren je Raum kann man sich hier anzeigen lassen. Aber an dieser Stelle beginnen schon die ersten Probleme. Ich kann nur jeweils die Temperatursensoren des Raumes "loggen" und im Diagramm anzeigen. Was aber, wenn ich nun die vom Motion Sensor gemessene IST Temperatur mit der SOLL Temperatur des Danfoss Thermostat vergleichen möchte? Keine Chance!

Auch gibt es keine Möglichkeit, zum Beispiel die gemessene Luftfeuchtigkeit in einem Verlaufsdiagramm darzustellen, oder die eines Helligkeitssensors.

Als ich damals zum ersten Mal den Z-Weather hier auf siio vorgestellt hatte, blickte ich ziemlich neidisch auf die Devolo Home Control Zentrale sowie auch auf den homee. Bei diesen Smart Home Zentralen können "out-of-the-box" mit allen Werten Diagramme erstellt werden. Und erst so macht eine Wetterstation Sinn! Was nützt es mir, wenn ich nur Livedaten meines Z-Weather sehe? Da kann ich auch aus dem Fenster schauen, um zu sehen, dass es windig ist. Ich möchte die Daten wie Außentemperatur, Windstärke, Taupunkt, Luftfeuchtigkeit usw. aufzeichnen und grafisch in einem Diagramm darstellen!

Das hat mich wirklich gewurmt! Als das Thema Z-Weather[icons icon="icon-link" color="#1e73be" size="13"] erneut in der Community aufkam, brachte Sascha den hilfreichen Hinweis: Im englischen Fibaro Forum, hat Dave Harrison ein relativ simples LUA Script vorgestellt, welches die Werte beliebiger Sensoren und Geräte welche mit dem Home Center verbunden sind ausliest um diese dann per http Request an das Webportal: maker.smartliving.io - zu senden. Smartliving.io ist eine Plattform, welche die Daten speichert und automatisch in grafischen Diagrammen aufbereitet.

Wie du das Script einsetzt und was du dafür vorbereiten musst, das liest du hier!

Account auf smartliving.io erstellen

Logisch, zunächst benötigst du einen Account auf maker.smartliving.io, in welchem du die Daten speichern und später abrufen kannst. Zum anlegen des Accounts, benötigst du lediglich eine gültig eMail Adresse, einen Wunsch-Nickname und dein individuelles Passwort. Danach erhältst du eine eMail, in welcher du via Klick auf einen Link die Gültigkeit deiner eMail Adresse bestätigen musst. Danach bist du schon im Besitz eines Accounts auf maker.smartliving.io :-) easy!

Smartliving.io Account erstellen

smartliving.io - Gerät verbinden

Nach dem ersten Login landest du auf deinem noch recht leeren Dashbboard. Beginne mit dem hinzufügen von einem Gerät. Naja, so wirklich physisch verbinden wir hier nichts, wir tun nur so - virtuell eben.

[alert variation="alert-info"]Im nächsten Schritt werden wir diesem "Gerät" Sensordaten zuordnen. Alle Daten die du in einem "Gerät" sammelst, kannst du später in einem gemeinsamen Diagramm darstellen. [/alert]

Du kannst dein erstes Gerät frei benennen. Nenne es zum Beispiel "Fibaro Home Center 2", oder wenn du alle Temperaturen deines Hauses in einem Diagramm haben möchtest, so benenne es beispielsweise als "Temperaturen-Räume" - wie du willst. Der Name lässt sich später auch ändern und du kannst auch noch beliebig weitere "Geräte" erstellen.

[carousel arrows="display" buttons="display"]
[panel title="smartliving - device erstellen"]

Smartliving - Device erstellen

[/panel]
[panel title="smartliving - device erstellen"]

Smartliving - Device erstellen

[/panel]
[panel title="smartliving - device erstellen"]

Smartliving - Device benennen

[/panel]
[/carousel]

Für unser kleines Tutorial hier, bleibe ich gleich mal bei meinem größten Wunsch, die Sensorwerte des Z-Weather aufzuzeichnen. Also benenne ich das Gerät schlicht als "Wetterdaten"

Nach dem Erstellen des "Device" bekommst du schon folgende wichtige Daten angezeigt:

Dies sind später in der Fibaro LUA Szene deine Authorisierungsdaten, damit die LUA Szene in deinen smartliving.io Account schreiben darf.

Authcode Daten für API Call

smartliving.io - Asset erstellen

Danach kannst du sogenannte "Asset´s" anlegen. Dies sind die Sensordaten, welche wir speichern und grafisch darstellen wollen. Pro "Device" (das was wir im letzten Schritt erstellt haben) sind bis zu 16 Assets möglich. Um in unserem Beispiel zu bleiben, erstelle ich nun als erstes "Asset" den Sensor "Z-Weather Windgeschwindigkeit".

Smartliving -Asset erstellen

Nachdem du nun auch das "Asset" erstellt hast, klicke auf den Namen. Hier findest du oben rechts ein "Zahnrad"-Symbol, über welches du zu den Details gelangst. Hier finden wir nun alle Infos welche wir benötigen: die Client id und den Client key, welchen wir bereits vorhin unter "Device" schon erhalten haben. Zusätzlich bekommen wir hier auch die eindeutige id für dieses Asset:

An dieser Stelle siehst du unten in dem Feld "Profile", das der "type" auf "string" steht. Strings können nicht in Diagrammen ausgewertet werden. Daher musst du diese hier auf "number" umstellen. Dazu einfach in das Feld klicken, das Wort "string" löschen und "number" eintragen. Danach mit dem Button "SET" bestätigen. En großer grüner Banner im Fuß der Seite sollte nun den Erfolg vermelden.

[carousel arrows="display" buttons="display"]
[panel title="smartliving - asset erstellen"]

Smartliving.io Asset

[/panel]
[panel title="smartliving - asset erstellen"]

Smartliving.io Asset Einstellungen

[/panel]
[panel title="smartliving - asset erstellen"]

Smartliving.io Asset Details

[/panel]
[/carousel]

Fibaro Home Center - LUA Szene erstellen

Wir wechseln auf die Oberfläche des Home Center 2 und gehen dort, zum erstellen von LUA Szenen, wie gewohnt über den Menüpunkt: Szenen -> Szene hinzufügen -> LUA Szene. Hier fügst du folgenden LUA Code ein. In alter bewährter Weise, poste ich jetzt erstmal das vollständige Script von Dave Harrison (leicht von Daniel modifiziert) und im Anschluss schauen wir uns die wichtigsten Stellen einmal an, um zu verstehen was da passiert. (Was Daniel genau modifiziert hat, - das erkläre ich im Abschnitt Trigger)

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


-- Scene         : Smart Living Test
-- Version       : 1.1
-- Date Created  : 09 June 2016
-- Last Changed  : 19 June 2016
-- HC Version    : Home Center 2 v4.080
-- Created By    : Dave Harrison

-- Purpose       : To test sending data to SmartLiving.io
-- Trigger       : Triggered by the Timer Scene updating the fifteenMinuteTimer global variable

--====================================================
-------------------- Declaration: Local Variables
--====================================================
local debug = true

local sourceTrigger = fibaro:getSourceTrigger()


local devices = 
      {
        loungeTemperature = {deviceId = 28, assetId = "46259176a77ed70b83138702"},
        loungeThermostat = {deviceId = 27, assetId = "464b8ba0e8ced21cf391b773"}
      }
--====================================================
-------------------- Functions
--====================================================
local function log(str) if debug then fibaro:debug(str); end; end
local function errorlog(str) fibaro:debug("<font color='red'>"..str.."</font>"); end

local function sendData (assetId, requestBody)
  local clientID = "xxxxxxxxx"         -- Replace xxxxxxxxx with your Client Id
  local clientKey = "yyyyyyyyyyy"      -- Replace yyyyyyyyyyy with your Client Key
  local url = "https://api.smartliving.io/asset/" .. assetId .. "/state"
  local httpClient = net.HTTPClient({timeout=5000})
  
  local httpHeaders = 
      {
        ["Auth-ClientId"] = clientID,
        ["Auth-ClientKey"] = clientKey,
        ["Content-Type"] = "application/json",
      }
  
  httpClient:request(url, {
    options={
      headers = httpHeaders,
      data = requestBody,
      method = 'PUT',
      timeout = 5000
    },
    success = function(response)
      if (response.status >= 200 and response.status < 300) then
        log(assetId .. ": " .. response.status .. " - successful")
      else
        errorlog(assetId .. ": " .. "ERROR")
      end
    end,
    error = function(error)
      errorlog(assetId .. ": " .. "ERROR")
      log(error)
    end
    })
end

--====================================================
-------------------- Main
--====================================================

-- Send data to SmartLiving
-- ------------------------
if (sourceTrigger["type"] == "autostart") then
  fibaro:debug('Autostart')
  local requestData = {}
  local currentDateISO = os.date("%Y-%m-%dT%XZ")
  local currentDateTime = os.time() 

-- Check each device and format the request data
  for i, device in pairs(devices) do

    requestData = {value = tonumber(fibaro:getValue(device.deviceId, "value")), at = currentDateISO}
  
    local requestBody = json.encode(requestData)
    log(i .. ": " .. requestBody)
  
    -- Send the data
    sendData(device.assetId, requestBody)
    setTimeout(sendData, 300*1000)
  end
else
  fibaro:debug('Trigger')
  local requestData = {}
  local currentDateISO = os.date("%Y-%m-%dT%XZ")
  local currentDateTime = os.time() 

-- Check each device and format the request data
  for i, device in pairs(devices) do

    requestData = {value = tonumber(fibaro:getValue(device.deviceId, "value")), at = currentDateISO}
  
    local requestBody = json.encode(requestData)
    log(i .. ": " .. requestBody)
  
    -- Send the data
    sendData(device.assetId, requestBody)
  end
end

Wir beginnen in Zeile 39-40. Das sollte recht selbsterklärend sein, hier geht es um die Authentifizierungs-Daten für den http Aufruf.

  local clientID = "xxxxxxxxx"         -- Replace xxxxxxxxx with your Client Id
  local clientKey = "yyyyyyyyyyy"      -- Replace yyyyyyyyyyy with your Client Key

Diese Daten wurden zum einen nach dem erstellen des "Device" im smartliving.io angezeigt und du findest diese auch noch einmal, wenn du in die Einstellungen (Zahnrad Symbol) deines erstellten "Asset" gehts.

Fibaro Home Center - Sensordaten abfragen und loggen

Kommen wir zum spannenden Teil - dieser findet sich in Zeile 29-30. Hier siehst du, das ein Temperatursensor mit der ID 28, sowie ein Thermostat mit der ID 27 abgefragt wird. Dies erfolgt über den Befehl:

local devices = 
      {
        loungeTemperature = {deviceId = XX, assetId = "xxxxxxxxxxxxxxxxxxxxxxx"},
        loungeThermostat = {deviceId = 27, assetId = "464b8ba0e8ced21cf391b773"},
      }

"loungeTemperature" ist dabei nur eine Variable, damit du später nachvollziehen kannst, welcher Sensor hier abgefragt wird. Da der Variablen-Name an keiner weiteren Stelle im Script verwendet wird, kannst du diesen frei vergeben. Soll heißen, du kannst es auch "Sensor1", oder "ZWeatherWind" nennen.

Nun öffnest du (am besten in einem neuen Tab oder Fenster) den Menüpunkt "Module" auf der Fibaro Weboberfläche und suchst den Sensor, dessen Werte du im Diagramm darstellen möchtest. Wenn du diesen anklickst, siehst du dessen ID in der URL, sowie auch in der Registerkarte "Allgemein" unter "ID".

Genau diese Nummer trägst du bei "deviceId = XX, ein. Die "assetId" kennst du bereits. Diese wird dir angezeigt, wenn du in deinem smartliving.io Account unter "Asset" oben rechts auf das "Zahnrad"-Symbol klickst.

[alert variation="alert-info"]Kurzum, an dieser Stelle verknüpfst du also deinen physikalischen Z-Wave Sensor / Gerät (deviceID) mit dem virtuellen Sensor (assetID).[/alert]

Genau nach diesem Schema kannst du nun beliebig weitere Sensoren abfragen und den Wert an die Assets senden. Versuch es doch gleich nochmal mit der zweiten Zeile: "loungeThermostat".

  1. neues Asset in smartliving.io anlegen
  2. Asset öffnen - > Zahnrad Symbol
    1. in Profile von "string" auf "number" ändern
    2. asset ID merken / notieren / kopieren / wissen wo es steht :-)
  3. im Fibaro HC den gewünschten Sensor suchen - ID ermitteln
  4. deviceID  und assetID in der LUA Szene anpassen

Für alle die es interessiert, an welcher Stelle die Module / Geräte IDs abgefragt werden - dies passiert ab Zeile 82. Dort findest du:

requestData = {value = tonumber(fibaro:getValue(device.deviceId, "value")), at = currentDateISO}

Der Befehl "tonumber" macht aus dem Wert, welcher durch "fibaro:getValue" abgefragt wird, aus einem String eine Nummer. HA! Da haben wir es wieder, die Story mit String und Number ;-)

at = currentDateISO fügt das Datum und die Uhrzeit an, welches mit an smartliving.io übergeben wird, um den Zeitpunkt auf der X-Achse im Verlaufsdiagramm korrekt zu setzen.

Testlauf

Dann speicher die LUA Szene doch einfach mal ab. Im Debug sollte nun in etwa soetwas erscheinen:
[DEBUG] 14:01:59: Autostart
[DEBUG] 14:01:59: loungeTemperature: {"at":"2016-11-04T14:01:59Z","value":2}
[DEBUG] 14:02:00: 9oy00mXS6hLrdMR9TOa0aXpF: 200 - successful

Zuerst werden die Werte ausgelesen, gefolgt von "at" dem Datum und der Uhrzeit. Wenn alle Sensoren ausgelesen sind, werden die Werte an smartliving.io gesendet. War dies erfolgreich meldet der Debug eine "200 - successful" zurück und du siehst den Wert direkt im Asset auf smartlivin.io.

Asset zeigt Wert und letzte Aktualisierung an

Trigger

Im Debug steht etwas von "Autostart". Da du sicherlich nicht 24h vor deinem PC sitzen und manuell auf "Szene ausführen" klicken möchtest, benötigst du einen Trigger. Ein Trigger oder auf Deutsch ein Auslöser, startet die Szene. Auslöser unterscheiden sich in:

Zeittrigger können die Szene intervallbasiert starten, ein Gerätetrigger startet die Szene, sobald sich sein Zustand oder Wert verändert. Dies hat Daniel an der original Szene von Dave Harrison modifiziert, damit du diese je nach deinen Wünschen nutzen kannst.

Zeittrigger - Autostart

Falls du mit dem Script eine Temperaturkurve loggen möchtest, um Beispielsweise die SOLL Temperatur der Heizungsthermostate auf die aktuelle IST Temperatur zu legen, dann ist ein Zeit Trigger sinnvoll, welcher beispielsweise intervallbasiert alle 15 Minuten die Szene startet.

In dem Beispielscript oben, hat Daniel eine Modifizierung zum original Script eingebaut, wodurch die Szene mit einem Autostart-Trigger automatisch gestartet wird. In Zeile 94 definiert der folgende Befehl den Intervall, in welchem die Szene getriggert wird:

    setTimeout(sendData, 300*1000)

Die Zeitangabe 300*1000 lässt die Szene für 300 Sekunden (also 5 Minuten) pausieren, bevor diese erneut ausgeführt wird. Möchtest du den Intervall auf beispielsweise 15 Minuten erhöhen, so trage dort 900*1000 ein.

Gerätetrigger

Zurück zu unserem Beispiel, dem Z-Weather. Da dieser nicht mit einer Batterie ausgestattet ist, sondern ein Solarpanel einen internen Kondensator lädt, wird das das wakeup-Intervall des Gerätes von einem Energiemanagement variiert. So sendet der Z-Weather an sonnigen Tagen alle 15 Minuten neue Messwerte, an bewölkten Tagen ca. alle 2h und an dunklen Wintertagen kann das Aufwachen bis zu 5h dauern. Hier wäre ein Zeitintervall also suboptimal und das Diagramm welches daraus entsteht, wäre nicht aussagekräftig.

Daher nutzen wir hierfür einen Gerätetrigger. Dazu musst du lediglich im Header der Szene das Wort: %% autostart entfernen und im Bereich %% Properties die Geräte ID eintragen, welche die Szene starten soll:

--[[
%% properties
28 value
%% events
%% globals
--]]

Würde sich oben im Beispiel der Zustand, oder der Sensorwert (value) des Gerätes mit der ID 28 ändern, so würde dies die Szene starten. Verwendest du mehrere Geräte im Script, so kannst du die Szene auch von mehreren Geräten triggern lassen. Hierzu einfach weitere Geräte IDs in den Properties Bereich hinzufügen. Bedeutet für den Z-Weather: wacht dieser auf und sendet einen neuen Wert an das Fibaro Home Center, so würde die Szene starten und der neue Wert wird sofort an dein smartliving.io Account gesendet.

Dank Daniels Modifikation, siehst du im Debug der Szene dann:

[DEBUG] 14:03:53: Trigger
[DEBUG] 14:03:53: loungeTemperature: {"value":2,"at":"2016-11-04T14:03:53Z"}
[DEBUG] 14:03:54: 9oy00mXS6hLrdMR9TOa0aXpF: 200 - successful

Diagramm

Bevor du einen Kaffee trinken gehst, während smartliving.io deine Daten sammelt, musst du noch etwas ganz wichtiges aktivieren. Gehe dazu auf dein erstelltes Device (dort wo du alle Assets in einer Übersicht angezeigt bekommst) und klicke oben rechts auf das "Zahnrad"-Symbol um den Schieberegler: Storing device activity - auf "aktiv" zu setzen.

[carousel]
[panel title="smartliving - Store data"]

smartliving.io Store Data

[/panel]
[panel title="smartliving - Store data"]

smartliving.io Store Data

[/panel]
[/carousel]

Danach kannst du auf den Tab: "Activity" wechseln und solltest bereits die ersten Werte als Datenpunkte im Diagramm sehen. Per Klick auf die Sensoren, werden diese dem Diagramm hinzugefügt bzw. bei wiederholtem Klick aus der Betrachtung ausgeschlossen. Die Art des Diagramms (Säulen- oder Liniendiagramm), kannst du unten im Fuß auswählen.

Z-Weather Diagramm

Anwendungsbeispiele:

So lassen sich nun endlich die Wetterdaten des Z-Weather grafisch darstellen und wenn dann der Z-Rain in den Handel kommt, können auch dessen Werte über die gefallene Regenmenge schön in einem Säulendiagramm dargestellt werden.

Z-Weather Diagramm

Neben meiner Tätigkeit als Hobby-Meteorologe, nutze ich das Script ausserdem um meine Heizpläne zu optimieren. So erfasse ich die SOLL Temperatur aller meiner POPP Heizungsthermostate[icons icon="icon-link" color="#1e73be" size="13"]. Zwar baugleich zu den Danfoss LC-13, übermitteln diese aber auch die vom Heizungsthermostat gemessene IST Temperatur. So ließe sich die Heizkurve besser verstehen und optimieren.

[carousel arrows="display" buttons="display"]
[panel title="Diagramme"]

5°C Absenktemperatur Fenster offen

[/panel]
[panel title="Diagramme"]

Heizkurve SOLL und IST Wohnzimmer

[/panel]
[/carousel]

Theoretisch, könnte man soweit gehen, dass man auf die IST und SOLL Heizkurve auch die Bewegungserkennung legt. So würde man über einen längeren Zeitraum sehen, falls man einen Raum auf Komfortemperatur heizt, diesen aber in dem Zeitblock sehr oder gar nicht nutzt.

Diagramme 2 go - smartliving Smartphone App

Für unterwegs gibt es auch die Smartliving iOS App und Smartliving Android App. Hier kannst du zwar nicht die gemeinsamen Diagramme (Activitys) einsehen, aber du kannst den Datenverlauf in einem Diagramm je Sensor / Gerät darstellen. Dafür gehst du in die Assets und dort wieder auf das "Zahnrad" Symbol. Unten neben dem Tab Profile - in welchem wir vorhin von String auf Number umgestellt haben findest du den Bereich "Control".

Control Chart Typ ändern

Kopiere folgende Befehlskette in das Feld und bestätige es über den Button "SET".

{
    "name": "chart",
    "extras": {
        "type": "line-chart",
        "timescale": "7d"
    }
}

Die Angabe "timescale": 7d steht für die Zeitskala von 7 Tagen. Das kannst du wie folgt anpassen:

Jetzt nur noch oben rechts über das PIN Symbol dieses Asset dem Dashbaord hinzufügen und es wird beim Öffnen der App mitgeladen.

[carousel arrows="display" buttons="display"]
[panel title="Diagramme in der Smartphone App"]

Diagramme in der App

[/panel]
[panel title="Diagramme in der Smartphone App"]

Diagramme in der App

[/panel]
[/carousel]

Hier ist so einiges möglich! .. und für was nutzt du die Diagramme? Berichte uns davon in den Kommentaren!

Die mobile Version verlassen