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 - 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"] [/panel] [panel title="smartliving - device erstellen"] [/panel] [panel title="smartliving - device erstellen"] [/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:
- Client id
- Client key
Dies sind später in der Fibaro LUA Szene deine Authorisierungsdaten, damit die LUA Szene in deinen smartliving.io Account schreiben darf.
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".
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:
- Asset id
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"] [/panel] [panel title="smartliving - asset erstellen"] [/panel] [panel title="smartliving - asset erstellen"] [/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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
--[[ %% 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.
1 2 |
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:
1 2 3 4 5 |
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".
- neues Asset in smartliving.io anlegen
- Asset öffnen - > Zahnrad Symbol
- in Profile von "string" auf "number" ändern
- asset ID merken / notieren / kopieren / wissen wo es steht :-)
- im Fibaro HC den gewünschten Sensor suchen - ID ermitteln
- 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:
1 |
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.
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
- Gerätetrigger
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:
1 |
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:
1 2 3 4 5 6 7 8 9 |
--[[ %% 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"] [/panel] [panel title="smartliving - 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.
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.
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"] [/panel] [panel title="Diagramme"] [/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".
Kopiere folgende Befehlskette in das Feld und bestätige es über den Button "SET".
1 2 3 4 5 6 7 |
{ "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:
60m
: 60 minutes (1 Stunde)24h
: 24 hours (1 Tag)7d
: 7 Tage30d
: 30 Tage
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"] [/panel] [panel title="Diagramme in der Smartphone App"] [/panel] [/carousel]Hier ist so einiges möglich! .. und für was nutzt du die Diagramme? Berichte uns davon in den Kommentaren!
He, dass freut mich das nochmal ein Tip von mir
Euch als Anleitung dient. Cool. Jetzt kann ich mich
Dann auch ran trauen?
Habt Ihr echt super beschrieben. Ich finde nämlich
Auch das genau diese Funktionen sehr wichtig sind.
Gerade auch in Verbindung um eine Heizkurve auszulesen.
Gruß Sascha
Hallo crissxcross,
vielen Dank für diesen Beitrag - eine wirklich sehr gute Sache und auch gut umzusetzen.
Ich habe aktuell noch 2 Dinge die leider nicht funktionieren:
1. Zeile 36 bringt einen Fehler beim Speichern der Szene: [DEBUG] 09:36:15: line 38: ')' expected near 'color'
2. Wenn ich die Szene manuell triggere funktioniert alles - wenn ich sie automatisch alle 15 Minuten starten lasse, dann bekomme ich einen Fehler: [DEBUG] 09:39:53: [1;31m2016-11-05 09:39:53.089611 [ fatal] LUA error: /opt/fibaro/scenes/20.lua:43: attempt to concatenate local 'assetId' (a nil value)
Hat da jemand noch eine Idee was das sein könnte?
Vielen Dank und viele Grüße
Hey. Das Problem mit der Farbenformatierung hab ich gerade rausgenommen. Ist quasi das gleiche wie unten Hebold beschreibt. Kopier dir einfach hier aus dem Script Zeile 35 und 36 und ersetze Sie bei dir in der 37 & 38.
Der 2. Fehler, jo da muss Daniel ein Workaround schreiben. An der Stelle kommt keine assetiD zurück. Ich hab erstmal fix eine grafische Blockszene gebaut: Intervallbasiert alle X Minuten DANN Szene Datenlog starten.
Grüße
Chris
Hi, vielen Dank für die schnelle Korrektur - Funktioniert jetzt (sowohl der Debug, als auch das Triggren der Sammelszene über eine Triggerszenze).
Vielen Dank und viele Grüße
Hallo,
habe einen falschen Wert von der Netatmo Wetterstation.Im Hc2 wird 1,7° angezeigt und im Debug 17,
also das 10 fache.Bei Luftfeuchte habe ich den richtigen Wert (100%). Bei maker.allthingstalk.com kommen natürlich auch die falschen Werte an. Der value des Sensors wird mit 1700 angezeigt,
denke es ist ein Formatierungfehler im Code.
MfG Reinhold
Hallo, habe gerade versucht es umzusetzen, leider erhalte ich im DEBUG folgenden Fehler:
[DEBUG] 10:05:18: line 36: ')' expected near 'color'
Die betreffende Zeile ist wie im Originell LUA Script:
local function errorlog(str) fibaro:debug(""..str..""); end
Hey, sorry da ist beim kopieren eine html Formatierung reingerutscht.
Zeile 35 und 36 sind jetzt korrigiert. versuch es nochmal. Freue mich auf dein Feedback ob es geht oder nicht.
Hallo Criss,
gibt es eigentlich keine Möglichkeit die Daten an die eigene Festplatte zu senden bzw zu exportieren?
Hi,
vom HC2 aus? Nein, gibt es nicht.
Gruß
naja, über das oben beschriebene Verfahren, kannst du Sie von dort aus als CSV exportieren.
Ich hatte auch schon Ansätze gelesen, wie man es auf einer Synology speichern könnte.
Direkt vom HC2 aus geht es nicht... Darauf hatte meine Frage abgezielt ;)
Hi. also ich habe auch den Fehler: [DEBUG] 09:39:53: [1;31m2016-11-05 09:39:53.089611 [ fatal] LUA error: /opt/fibaro/scenes/20.lua:43: attempt to concatenate local ‚assetId‘ (a nil value)
wenn ich es über die Zeitsteuerung mache. Zudem bin ich noch etwas unzufrieden mit dem Diagrammen, bei mir werden nur Punkte angezeigt. Eine Linie wird nur gezeichnet, wenn ich viele Werte eintrage.
Timescale:
1h -> benötig jede minute einwert, damit eine linie gezeichnet wird
24h -> kann man irgendenwie total vergessen, da seh ich fast gar nichts
1 wekk -> hier krieg ich noch am ehesten eine linie, da hier ein messpunkt pro stunde reicht.
dieses "Zoom" stellt mich nicht wirklich zu frieden, da es auch nur unter Devices geht. Im Playground/ Dashboard krieg ich generell nur eine Timeline von 1h. was sich auch nicht ändern läßt.
Ich habe überlegt ob ich mir auf einen Respi das Fhem installiere und die Messwerte dahin zu exportieren. Oder man fragt bei Fibaro mal nach ob die auch für Helligkeit und Feuchtigkeit noch die Statistiken implementieren. Die temperaturen haben sie ja auch nachgepflegt.
Der Dienst läuft wohl noch bis zum 30.06.2017 und heisst dass AllThingsTalk.io
https://forum.fibaro.com/index.php?/topic/21656-recording-data-to-allthingstalkio/
Hallo zusammen,
super Sache und läuft wie beschrieben perfekt. Danke an ALLE.
Ein Frage habe ich, wenn ich die Heizkurve aus dem Fibaro Heating Panel auslesen möchte, was kann ich tun?
Wenn ich die id des Heizplans angebe, bekomme ich eine "0" in maker.allthingstalk geliefert.
Herzlichen Dank und weiter so :-)
Hallo Criss,
habe die Szenen jetzt am Laufen - Vielen dank für Dein Engagement!
Ich habe jedoch die App nicht gefunden..?
Unter "Smartliving" kommt alles Mögliche, aber nicht die Beschriebene Applikation.
Bitte poste doch einmal die genaue Bezeichnung oder das zugehörige Icon zur genauen Identifizierung - Vielen Dank.
Außerdem eventuell interessant:
Zur Regenmengen-Messung verwende ich den Sensor RG-11 von HYDREON (www.rainsensors.com). Dieser besitzt vielfältige Einstellmöglichkeiten und arbeitet nicht mechanisch. In Kombination mit einem FIBARO-Universalsensor habe ich hier diverse Möglichkeiten zur Steuerung und Auswertung.
Beste Grüße.
Hey!
Die App heisst jetzt „AllThingsTalkMaker“
Die Sache mit dem Regensensor finde ich hoch spannend!
Kannst du mal skizzieren, wie du den an den Universalsensor angeschlossen hast?
Welche Informationen kannst du auswerten?
Gibt es den auch hierzulande zu kaufen?
Hallo Criss,
zunächst noch zur App:
Kein Erfolg! (Wollte hier mit Ctrl-V Screenshot von GooglePlay einfügen - geht nicht?)
Zum Sensor:
Den habe ich direkt auf der Seite (also in den USA) bestellt. Der Versand dauert zwar etwas, und im Zweifel muss man zur Abholung zum nächsten Zollamt, ansonsten kein Problem. Import-Steuern fallen auf Grund der geringen Summe nicht an.
Zum Anschluss - würde gern eine Skizze einstellen, geht aber hier (siehe oben) irgendwie nicht.
Der Anschluss an den Universalsensor ist aber unkompliziert:
Sensoren parallel mit Spannung aus EINER Quelle (12V DC) versorgen (also +Pol an PWR1 des RG-11 und an P beim Universalsensor). Dann den NC-Konakt des RG-11 mit dem (z.Bsp.) IN1 vom Universalsensor verbinden. Zum Schluss noch den COM-Kontakt des RG-11, PWR2 vom RG-11, GND vom Universalsensor mit dem -Pol der 12V Gleichspannungsquelle verbinden.
Wenn alles passt die DIP-Schalter am RG-11 mal nach dem Chart "Mode 1: It's Raining" (Medium Sensitivity) in der Bedienungsanleitung vom RG -11 setzen und dass ganze verschrauben. Nun versuchsweise etwas Wasser auf das Gehäuse geben. Die grüne LED sollte nun leuchten und der Universalsensor auf "ausgelöst" wechseln.
Wenn alles funktioniert wird es etwas schwerer: Man muss sich nämlich für einen der vielen Modi des RG-11 entscheiden:
Ich hatte zunächst einfach nur wissen wollen ob es regnet (um so meinen Rasenmäher zu steuern). Die Auswertung benötigt nur den Status des Universalsensor-Kontaktes. Die Verzögerung (also für die BMSR-Fans die Hysterese) lässt sich dabei am RG-11 auf 15min oder 0 setzen.
Man kann aber auch die Regentropfen (nach Größe!) auswerten, einen Bewässerungssteuerungsmodi auswählen, oder auch Scheibenwischer ansteuern.
Ich habe aktuell die Simulation eines Regenmengenmessers mit Kippsensor gewählt.
Dabei sendet der RG-11 jeweils bei Erreichen einer Regenmenge von 0,2mm (ist einstellbar) einen Impuls, welcher vom Universalsensor registriert wird.
Aktuell versuche ich diesen Impuls mit einer Lua-Szene und einem Virtuellen Device im Fibaro-System auszuwerten.
Bin dabei für jede Idee/Beispiel dankbar!
AllThingsTalkMaker hat am 29. Juni 2017 ziemlich viel geändert am Layout und auf den ersten Blick die Asset ID in "ID" geändert. Seither funktioniert die Datenübertragung von fibaro an AllThingsTalk nicht mehr. Im debug der Szene heisst es dann auch: "Device ID": ERROR
Ist das ein Allgemeines Problem oder geht es nur bei uns nicht mehr?
Hi
Konnte das Ganze leider nicht zum Laufen bringen. Bekomme nur ERROR -Meldungen in der Szene als Debug. Analog Melissa oben. Mir scheint auch, dass AllThingsTalk soviel verändert hat, dass das obige LUA-Skript nicht mehr geht und entsprechend angepasst werden müsste. Habe aber auch keine Ahnung, wie das geht. Kann da jemand weiterhelfen?
Gruss
Hallo,
ich habe es bei mir hinbekommen.
Zeile 41 geändert in: local url = "https://api.allthingstalk.io/asset/" .. assetId .. "/state"
und Zeile 99 deaktiviert.
Bei mir funktioniert es wieder.
Grüsse
Hi Peter
VIELEN DANK! Jawoll! Wir haben die 2 Zeilen genau so angepasst und es funktioniert wieder! SUPER gemacht!
Lieber Gruss
Melissa
Hey Ihr,
Bei mir geht es leider nicht. Wollt ihr eueren Code evtl. posten?
MfG,
Nager1978
HI,
leider scheint es keinen clientKey mehr zu geben:
Authenticating generic clients using Auth-ClientId and Auth-ClientKey headers will be deprecated during 2017
...und dann:
NOTE: This is legacy document that describes how we used to support generic client authentication.
Würde mich sehr über eine aktualisierte Anleitung freuen (und verstehe weiterhin nicht warum Fibaro das nicht integriert)
LG Mike
Moin,
wie kann ich das ganze realisieren wenn ich die Werte von einer Datenbank nach api.allthingstalk.io übertragen möchte? Oder kann ich das per einfachen Link übergeben?
lg Andy
Da die API sich sicherlich unterscheidet, musst du den Code natürlich umschreiben.
Gruß
Auch ich würde mich sehr über eine aktualisierte Version freuen - bekomme Fehlermeldung, denen es liegt an den nicht mehr vorhandenen ClientID bzw ClientKEY
Danke!!
Hallo und vielen Dank für dies Tutorial!
Gibt es ein Update auf die "neue Seite" /allthingstalk.io/? Würde es gerne einsetzten, scheitert aber gerade an ClientId and Auth-ClientKey..
schönen Start ins Wochenende!
--[[
%% properties
%% events
%% globals
fifteenMinuteTimer
--]]
-- Scene : All Things Talk Test
-- Version : 1.3
-- Date Created : 09 June 2016
-- Last Changed : 12 November 2018
-- HC Version : Home Center 2 v4.510
-- Created By : Dave Harrison
-- Purpose : To test sending data to AllThingsTalk.io
-- Trigger : Triggered by the Timer Scene updating the fifteenMinuteTimer global variable
-- Revision History
-- ----------------
-- 1.2 19-Nov-16 SmartLiving.io rebranded as AllThingsTalk.io
-- 1.3 12-Nov-18 New authentication method
--====================================================
-------------------- Declaration: Local Variables
--====================================================
local debug = true
local sourceTrigger = fibaro:getSourceTrigger()
local currentDateISO = os.date("%Y-%m-%dT%XZ")
local currentDateTime = os.time()
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(""..str..""); end
local function sendData (assetId, requestBody)
local deviceToken = "maker:xxxxxxxxx" -- Replace maker:xxxxxxxxx with your Device Authentication Token
local url = "https://api.allthingstalk.io/asset/" .. assetId .. "/state"
local httpClient = net.HTTPClient({timeout=5000})
local httpHeaders =
{
["Authorization"] = "Bearer " .. deviceToken,
["Content-Type"] = "application/json",
}
httpClient:request(url, {
options={
headers = httpHeaders,
data = requestBody,
method = 'PUT',
checkCertificate = false,
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 AllThingsTalk
-- --------------------------
local requestData = {}
-- 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