Solltet Ihr eine netatmo Wetterstation in eurem Fibaro HomeCenter 2 eingebunden haben, dann ist dieses "kleine" Skript bestimmt interessant für euch.
Bereits vor 150 Jahren wurde durch den deutschen Chemiker Max von Pettenkofer (Wikipedia) die CO2-Konzentration in einem Raum festgelegt, welche zwischen gefühlt angenehmer und unangenehmer Raumluft unterscheidet. Diese liegt bei 1.000 ppm (ppm = Parts per Million). Alles unter diesem Wert wird als gute Luftqualität empfunden. Alles darüber kann zu abnehmender Konzentrationsfähigkeit, Müdigkeit und zu Kopfschmerzen führen.
Mehr Informationen findet Ihr in dem pdf von www.raumluft.org.
CO2-Konzentration mit netatmo messen
Solltet Ihr eine netatmo Wetterstation besitzen, so wird euch die CO2-Konzentration in eurem Raum bereits angezeigt. Die natatmo-App pusht auch bereits eine Meldung auf euer Handy/Tablet, wenn diese Konzentration den Wert von 1.000 ppm übersteigt.
Doch das war uns nicht genug. Deshalb haben wir ein Skript programmiert, welches die Farben eines RGBW-Controllers in Abhängigkeit von der CO2-Konzentration ändert. Alles unter 1.000 ppm wird als "Grün" dargestellt, über dieser Konzentration beginnt dann "Gelb" und geht fließend in "Rot" über. Ab einer Konzentration von mehr als 1.500 ppm wird es dann komplett "Rot". So habt Ihr einen guten Indikator, um mit einem Blick die Qualität der Raumluft zu erkennen.
Anpassungen des Skriptes
Dazu müsst Ihr in den Zeilen 3 und 7 nur die ID von eurem CO2-Sensor (In meinem Fall die 141) eintragen. Die ID findet Ihr, wenn Ihr euch die Optionen des Sensors anzeigen lasst. In der Zeile 8 müsst Ihr dann noch die ID eures RGBW-Controllers (In meinem Fall die 171) eintragen.
Das Skript könnt Ihr euch einfach kopieren:
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 |
--[[ %% properties 141 value %% globals --]] local co2ID = 141 -- ID des netatmo co2-Sensor local rgbwID = 171 local co2 = tonumber(fibaro:getValue(co2ID, "value")) local startSource = fibaro:getSourceTrigger() Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")) end -- Funktion RGBW function setRGBW (rgbw_option, deviceID, colourString) local RGBWTable= {} local i = 1 for value in string.gmatch(colourString,"(%d+)") do RGBWTable[i] = value i = i + 1 end if (tonumber(fibaro:getValue(deviceID, "brightness")) ~= 0) then fibaro:call(deviceID, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4]) else fibaro:debug('Funktion aufgerufen; RGBW ist aus') end end if (startSource['type'] == 'other') then Debug('white', "netatmo co2-Check 1.0 gestartet. Szene manuell gestartet") else Debug('green', "netatmo co2-Check 1.0 gestartet. Szene durch CO2-Wert gestartet") end if (co2 < 1000) then Debug( "green", "co2-Wert von " .. co2 .. " ppm ist ok.") setRGBW(rgbw_opt, rgbwID, '0,0,255,255') elseif (co2 >= 1000 and co2 <= 1050) then Debug( "orange", "co2-Wert von " .. co2 .. " ppm liegt leicht über dem empfohlenen Wert von 1000 ppm.") setRGBW(rgbw, rgbwID, '255,232,0,0') elseif (co2 >= 1050 and co2 <= 1100) then Debug( "orange", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1050 ppm. Es sollte gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,209,0,0') elseif (co2 >= 1100 and co2 <= 1150) then Debug( "orange", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1100 ppm. Es sollte gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,186,0,0') elseif (co2 >= 1150 and co2 <= 1200) then Debug( "orange", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1150 ppm. Es sollte dringend gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,163,0,0') elseif (co2 >= 1200 and co2 <= 1250) then Debug( "orange", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1200 ppm. Es sollte dringend gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,140,0,0') elseif (co2 >= 1250 and co2 <= 1300) then Debug( "red", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1250 ppm. Es sollte DRINGEND gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,117,0,0') elseif (co2 >= 1300 and co2 <= 1350) then Debug( "red", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1300 ppm. Es sollte DRINGEND gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,94,0,0') elseif (co2 >= 1350 and co2 <= 1400) then Debug( "red", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1350 ppm. Es sollte DRINGEND gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,71,0,0') elseif (co2 >= 1400 and co2 <= 1450) then Debug( "red", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1400 ppm. Es sollte DRINGEND gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,48,0,0') elseif (co2 >= 1450 and co2 <= 1500) then Debug( "red", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1450 ppm. Es sollte DRINGEND gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,25,0,0') elseif (co2 >= 1500) then Debug( "red", "co2-Wert von " .. co2 .. " ppm liegt liegt über 1500 ppm. Es sollte DRINGEND gelüftet werden.") setRGBW(rgbw_opt, rgbwID, '255,0,0,0') end |
Das Skript wird durch den netatmo CO2-Sensor getriggert (Also immer wenn sich der gemessene CO2-Wert verändert) und prüft dann in 50iger Schritten den aktuellen Wert. Abhängig von diesem Wert werden dann an die Funktion die bestimmten RGBW-Werte übergeben. Sollte der RGBW-Controller aus sein, bleibt dieser auch aus und wird durch das Skript nicht angeschaltet.
Habt Ihr noch weitere Ideen, wie das Skript erweitert werden kann? Wenn ja, dann würden wir uns über eure Ideen in den Kommentaren freuen. Viel Spass :)
Coole Idee.
Davon aber mal abgesehen - mein CO2-Sensor hat nicht mal die 40 ppm geknackt.
Meistens ist er bei Null.
Ist das Ding dann eher kaputt (weil unglaubwürdig) oder die Raumluft wirklich so toll????
VG Hoggle.
Hi,
oh, ne... Das kann eigentlich nicht sein. In der Atmosphäre herrscht ein CO2-Gehalt von über 300 ppm vor. Bei mir schwankt es so zwischen 400 & 1000 ppm. Über die netatmo-Webseite kannst du den Sensor Kalibrieren. Vielleicht läuft es danach.
Gruß
:-)
Danke!
Die Auto-Kalibrierung ist aktiviert..... Komisch - macht er angeblich auch selber.
Ich habe mal das Manuelle angestoßen...
so, cooler Artikel Daniel. Jetzt will ich mal Klugscheissen. Eine Sache hast du vergessen zu erklären :-)
Also: Das Script wird von dem CO2 Sensor getriggert. Das würde bedeuten, das dass Licht auch immer angehen würde wenn ein neuer Wert gemessen wurde. Damit das nicht passiert, ist in dem Script eine Prüfung, ob das Licht schon eingeschalten ist und nur dann wird die Farbe anhand des CO2 Wertes verändert.
Zuständig dafür ist diese Funktion:
if (tonumber(fibaro:getValue(deviceID, "brightness")) ~= 0) then
fibaro:call(deviceID, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
else
fibaro:debug('Funktion aufgerufen; RGBW ist aus')
Das Ganze ist ausgelegt für das Fibaro RGBW Modul. Mit dem Wert brightness kann aber die Zipato RGBW Bulb nichts anfangen. Hier müsst ihr statt brightness -> value nehmen. Das sieht dann so aus:
----------------------------------------
ZIPATO RGBW BULB
----------------------------------------
if (rgbw_option) then
if (tonumber(fibaro:getValue(deviceID, "value")) ~= 0) then
fibaro:call(deviceID, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
else
fibaro:debug('RGBW = true; RGBW ist aus')
end
Danke für deine Ergänzungen und deine Idee :)
Erst mal Danke Jungs für die tollen Skripte! Weiter so!!! An welcher Stelle des Skripts muss ich denn den Code einfügen/ersetzen damit das Licht nur auf Orange wechselt wenn es eingeschaltet ist? Gruß
Hi,
den Wert kannst du in Zeile 41 ändern. Dort steht der Wert, den das Skript bei Werten bei erkannten Werten < 1000 setzt :) Gruß
Moin Daniel,
wieder eine super Idee. Eure Lua Scripte Reihe ist echt klasse. Weiter so.
Da ich im Wohnzimmer gute 11m RGBW Stripe verbaut habe und mir spontan eine Person einfällt die meckert wenn da alles grün oder orange leuchtet, wäre es doch cool einen eher unauffälligen Wallplug als,Indikator zu nutzen.
Die blenden einen auch nicht so :).
So, jetzt erstmal eine Netatmo Wetterstation samt Zubehör kaufen :).
Grüße
gringo
Hi,
danke für dein Lob :) Freut mich sehr.
Coole Idee. Da bräuchte man auch nicht so viele Abfragen, da die Farben des Wallplug beschränkt sind. Aber grün, orange, rot gibt es ja. :)
Werd ich mal umsetzen.
Gruß
Bin auch begeistert von Eurer LUA Scripte Reihe. Danke und gerne weiter so.
Geht das auch mit HUE´s?
Hi,
danke :)
Sollte auch mit den HUEs gehen. Schieb ich heute Abend mal nach.
Gruß
Ok, hab es mir angeschaut. Ist ein wenig mehr zum Coden, da die RGBW-Funktion umprogrammiert werden muss. Mach ich morgen.
Konntest du sowas für HUE scripten?
Danke und Grüsse aus der Schweiz
Hi,
hatte ich bis jetzt nicht geplant. Die HUEs werden anders angesteuert als die RGBWs, weshalb dort ein solcher Übergang schwerer abzubilden ist. Man könnte allerdings bei 1000 ppm direkt auf grün schalten und bei 1500 ppm direkt auf rot. Dazu müsstest du nur die if-else-Abfrage anpassen und die Funktion abändern.
Gruß
Hallo Daniel,
vielen Dank für die immer wieder tollen LUA Skripte. Ich bin seit heute Besitzer einer Netatmo Wetterstation, aktuell bin ich sehr begeistert. Ich würde mit den CO2 Werten gerne meine Belüftungsanlage im Haus steuern. Die Idee ist, den vorhanden Schalter (Serienschalter) mit einem Fibaro Relais Unterputzeinsatz 2 Schalter a 1.5 kW auszustatten und die Bedingungen entsprechend zu prüfen. D.h. bei CO2 Werten unter 500 ppm = Stufe 0 (aus), bei werten von 500ppm – 1000ppm = Stufe1, bei 1000-1500ppm = Stufe 2 und bei über 1500ppm = Stufe 3. Bei jeder Schaltänderung würde ich mir eine Push aufs handy vorstellen können.
Ändere ich bei deinem Code „einfach nur“ die RGB Funktion durch die Schaltzustände des Release?
Die Stufen würden sich wie folgt zusammensetzen:
Stufe 0 = beide Schalter 0 (aus
Stufe 1 = Schalterwippe 1 an
Stufe 2 = Schalterwippe 12 an
Stufe 3 = Schalterwippe 1&2 an
Vielen Dank für die Hilfe
LG Daniel
Hi,
klar, das würde funktionieren :) Musst dir Funktion nur ein klein wenig anpassen...
Gruß
Hi, interessanter Artikel! Ich plane die netatmo co2 Sensoren für die Steuerung einer Lüftung (0-10V) zu nutzen. Könntest du mir erklären wie ich das Script anpassen muss, um mit dem RGBW die 0-10V in Abhängigkeit vom co2 Gehalt auszugeben? Danke!
VG
Danny