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 :)