Wohnraumbelüftung mit RGBW Controller steuern

Hallo SIIO Forum,

seit ein paar Wochen bin ich nun auch stolzer Besitzer einer Fibaro HC2 mit diversen Modulen (Wallplugs, Motion Eyes, Fenstersensoren, Roller Shutter etc.). Das Thema Hausautomation ist mir nicht neu, da ich schon seit einigen Jahren unser Haus mit diversen Komponenten von Innogy- (ehem. RWE-) Smarthome ausgerüstet habe. Leider musste ich sukzessive feststellen, dass ich hier aufs “falsche Pferd” gesetzt hatte und darum rüste ich jetzt Stück für Stück auf Fibaro bzw. Z-Wave um.

Schon seit einiger Zeit (bzw. seit ich Netatmo Komponenten eingebaut habe) frage ich mich nun wie ich meine Wohnraumbelüftung (KWL) etwas smarter machen kann. Bis Dato kann ich diese lediglich manuell über einen 4stufigen Drehregler schalten, würde dies aber gerne z.B. abhängig von CO2 Gehalt und/oder Luftfeuchte automatisieren. Bei den verfügbaren Modulen bin ich jetzt auf den RGBW Controller von Fibaro gestossen der sich dafür eigentlich eignen sollte. Leider sind meine Elektrik-Kenntnisse begrenzt und deswegen würde ich den Umbau wohl auch durch einen Elektriker machen lassen. Nur möchte ich mich vorab erst mal informieren wie ihr sowas umsetzen würdet damit der Elektriker mich nicht gleich mit einem Augenaufschlag im Regen stehen lässt und mir erzählt das so etwas vom Hersteller nicht vorgesehen ist und es deshalb auch nicht geht (schon erlebt).

Also nun zur eigentlichen Frage. Ich möchte gerne ein RGBW Modul zwischenschalten um die vier Steuerspannungen (szenenabhängig) zu den Ventilatoren zu leiten. Wenn möglich sollte der Drehregler auch weiter funktionieren. Letzteres ist aber kein Muss und ich kann die Funktionen auch auf einen Z-Wave Wandschalter legen. Ich habe euch mal den Schaltplan des Stufenreglers sowie die Steuerspannungstabelle für die KWL angefügt und würde mich über ein paar Tipps zu den Anschlussmöglichkeiten des RGBW Moduls und weiteren Ideen zur Umsetzung meines Vorhabens freuen.

Grüße aus Schleswig-Holstein
Alex

Vallox_Regler_Schaltung.png

Vallox_Steuerspannungen.png

Hi lodi,

so ordentlich war meine Lüftungsanlage (Tecalor) nicht dokumentiert, ich musste ein Multimeter schwingen. Vielleicht solltest du die Grafiken mal dem Elektriker zeigen und mit ihm zusammen einen möglichen Aufbau erarbeiten (und ihm vorher sagen, was das RGBW-Modul kann), statt ihm einen fertigen Anschlussplan zu präsentieren. Dann kann er deutlich besser damit arbeiten.

VG
Schnuckman

Lodi,

die Schaltung welche Du gepostet hast dürfte entweder falsch sein oder das Ganze funktioniert nicht wie gedacht.
-(Masse) und S liefern keine Spannung wenn mit + und - Versorgt.
Schaut so aus als ob “-” und “S” in der Schaltung vertauscht sind.
Messe unbedingt mal den Ganzen Regler aus bevor du voreilige Schlüsse ziehst.
Weiters solltest Du auch den Widerstand zwischen + und S messen. (Würde den niedrigsten Widerstand auf alle Fälle beim RGB Ausgang vorschalten um Schaden an Lüftung zu vermeiden)

lg,

Markus

Hi Schnuckman und Markus,

Danke für die Tipps. Scheint ja doch ein bisschen komplizierter zu sein. Dann werde ich die Tage mal zu nem Elektriker gehen und ihm den Schaltplan und die Beschreibung vom RGBW Controller zeigen. Mal sehen, ob er damit was anfangen kann (sollte er ja eigentlich).

VG
Alex

Lodi,

für Deinen Elektriker:
Die Schaltung vom 4-stufigen Wahlschalter ist ein Spannungsteiler mit regelbarem Widerstand.
Wenn in der Schaltung +10V an +_PIN angelegt wird, - an S_PIN angelegt wird, dann hat man am -_PIN die Spannung laut regelbaren Widerstand.
Wenn jedoch + an +, - an - und S an S angelegt wird hat man 0V und nur einen Widerstand zwischen - und S.
In diesem Fall macht + und Spannungsteiler keinen Sinn.

Höchstwahrscheinlich ist der Schalter richtig beschriftet und funktioniert wie mein erstes Bsp. aber die Doku dürfte falsch sein.
Er sollte auch den Schalter abhängen und einmal messen in welcher Stellung er den geringsten Widerstand zwischn - und S hat und den zwischen RGB und Vallox hängen.
Du kannst den Schalter auch in die Schaltung mit einbinden.
Am Besten eine Farbe für den Ausgang und eine andere für den Eingang. (z.B. Weiss und Blau)
Bsp. Weiss an Vallox und Programmgesteuert Wert ändern.
Die Schalter Änderungen kannst Du an Blau hängen und im Programm definieren wann der Schalter verwendet wird.
z.B. Wenn sich Blau um mehr als +/- 10% ändert dann Lüftung für 60 Minuten auf gesetzten Wert und danach wieder normales Programm.
Weiters ist abzuklären ob du den RGB ohne Risiko auf +/- von der Lüftung hängen kannst. (Wegen Stromverbrauch)
Im zweifelsfall ein eigenes Netzteil verwenden.

Wichtig, der Elektriker sollte verstehen was ich da wegen der Schaltung geschrieben habe, ansonsten ist es besser einen anderen Experten aufzusuchen.
Ist zwar keine Wissenschaft, aber sollte dir und deinem Elektriker Frust ersparen.

lg,

Markus

Moin Markus,

prima, vielen Dank für die tolle Erklärung. Jetzt weiss ich zumindest, dass “mein Plan” theoretisch möglich ist und kann danke Deiner Erläuterungen checken ob der Elektriker wirklich die Materie versteht. Ich muss nur noch die Zeit für einen Einbautermin finden.
Ein extra Netzteil hatte ich eh schon eingeplant und eine freie Steckdose liegt direkt neben der KWL. Ich werde berichten wenn die Hardware eingebunden ist und ich die entsprechenden Szenen baue. Dann sicherlich wieder mit ein paar weiteren Fragen (mein LUA ist noch deutlich ausbaufähig).
LG,
Alex

Hallo Alex,

ich habe eine Vallox 90 SC mit dem vierstufigen SC-Wählschalter, die auch gerne in mein Z-Wave System einbinden würde. Konntest Du Deinen “Plan” schon umsetzen?

VG
Maik

Hallo Maik,
Leider musste ich mich ein bisschen gedulden, da ich erst für Ende Mai einen Termin mit dem Elektriker bekommen konnte. Plan habe ich schon und werde dann nach Umsetzung (erst mal checken ob es klappt) hier berichten.
VG
Alex

Hallo,

wie sieht es denn jetzt bezüglich der Realisierung aus?
Ich besitze auch die Vallox mit 4-Stufen-Schalter.

Mir ist nicht ganz klar, ob das Fibaro RGBW Modul dafür wirklich geeignet ist. Was liefert dieses Modul denn jeweils am Ausgang?

Eigentlich sollte doch der Qubino Flush Dimmer ZMNHVD1 genau das passende sein, da er einen 0 - 10 V Eingang und einen 0 - 10 V Ausgang hat, also exakt den Schalter simulieren können dürfte (möglicherweise der Schalter sogar am Eingang angeschlossen werden und damit als mechanischer Schalter verbleiben kann).

Grüße

Ralf

Hi Ralf,

ich wollte eigentlich schon längs hier wieder gepostet haben, aber leider hat mich mein Elektriker versetzt und ich habe es schlussendlich nicht hinbekommen meine Schaltung an die KWL anzuschliessen. Zum herumprobieren ist mir das Geät zu teuer.
Theoretisch läuft es aber mit dem RGBW Controller. Ich habe an den Controller vier Schaltregler gelötet und diese entsprechend der vier Steuerspannungen eigestellt. Eine passende Szene habe ich auch gebastelt welche mir die Ausgänge getriggert durch die CO2 Levels meiner beiden Netatmo Stationen schaltet (im Anhang). Das ganze läuft schon seit geraumer Zeit erfolgreich im Testbetrieb, nur habe ich es noch nicht an die KWL angeschlossen. Da brauch ich jemanden mit Elektronik Erfahrung. Ich muss ja irgendwie die Ausgänge von den Schaltreglern zusammenführen und dann habe ich immer die Spannung des am höchsten eingestellten (9.8V) Reglers :-(. Wenn ich dazu komme poste ich hier später auch noch mal meinen Schlatplan.

Allerdings scheint mir der Ansatz mit dem Qubino Flush Dimmer noch besser und einfacher. Das Teil muss ich mir unbedingt mal genauer anschauen. HC2-Kompatibel scheint er ja zu sein. Evtl. kann man das Skript dafür entsprechend umbauen Mit den vier Schaltreglern habe ich doch eine ganze Menge Kabelsalat und die ganze Apparatur wird doch so gross dass sie nicht mehr in eine kleine Verteilerdose passt.

Gruss
Alex

--[[
%% properties
147 value
%% globals
PresentState
KWLBoost
--]]

-- KWL Control KWL = (Kontrollierte Wohnraumlüftung)
-- Version 1.1 by Lodi: mit zwei CO2 Sensoren und zeitlimitierter boost Funktion
-- My first LUA script, so pls apologize amateurish scripting and theft of logic array from other scenes (e.g. perfekte Lichtsteuerung, RFID Alarm....from www.siio.com)
-- Event getriggerte version reagiert auf Netatmo CO2 sensoren und "PresentState" und "KWLBoost" variable
-- RGBW Controller mit 4 Stufen: 'weiss' = niedrigste Steuerspannung und 'rot' = höchste Steuerspannung
-- Globale Variable "KWLBoost" ermöglicht manuelles Schalten auf die höchste Stufe (z.B. beim Duschen oder Kochen) unabhängig vom CO2 Wert
-- Variable kann z.B. über virtuelles Device geschaltet werden ("KWLBoost" Variable hat Werte 'Boost' und 'Off')
-- Zur Schonung der Anlage läuft der Boost Modus  immer nur für eine bestimmte Zeit (boostInterval) und schaltet dann auf die nächtst tiefere Stufe.
-- Diese Stufe wird eine Weile beibehalten (boostBreak) bevor wieder neu getriggert werden kann und ein erneuter CO2 check durchlaufen wird
-- bei Abwesenheit läuft die KWL unterhalb des Mittelwertes (CO2levels) auf niedrigster Stufe
-- um Doppelte Steuersignale zu vermeiden wird bei jeder Schaltung zunächst der RGBW Controller für 1 Sekunde auf 0,0,0,0 gesetzt (nicht sicher ob das nötig ist)

--initiate Variables
local sourceTrigger  = fibaro:getSourceTrigger();
local debugging      = true -- quite eccessive debugging toggle off if desired (true= on / false=off)
local CO2SensorID    = {147,156} --Netatmo CO2 sensors as array. Needs to be two. Guess it should also work if you enter two times the same ID (not checked)
local KWLControlID   = 225 --ID of the RGBW Controller
local VDcolorPlug    = 231 --Virtual device for wall plug used as indicator LED
--local runInterval    = 60 --Time period in minutes to run the CO2 check. NOT USED ANYMORE as the scene is no longer triggered by a scheduler
local boostInterval  = 30 --Time the KWL will run in boost mode before switching down to the next lower volume level (3).
local boostBreak     = 15 --Minimum time period for which boosting mode will forced to pause. Preserve the KWL from running ages on highest level
local CO2levels      = {500,700,1600} --insert your 3 desired CO2 level cornerpoints (e.g. here for ranges 0-500 / 501-800 / 801-1600 / >1600)#

--Global variables that are needed. Script does not create them. So make sure they are in place.
local timeOfDay      = fibaro:getGlobal("TimeOfDay"); --Time of Day Global variable.
local presentState   = fibaro:getGlobal("PresentState"); --Present state Global variable.
local kwlBoost       = fibaro:getGlobal("KWLBoost"); --manual boost Global variable (KWLBoost). Needs to be created with values "Boost" and "Off".

local CO2Sensor1Val  = tonumber(fibaro:getValue((CO2SensorID[1]), "value"))
local CO2Sensor2Val  = tonumber(fibaro:getValue((CO2SensorID[2]), "value"))
local Netatmo1room   = fibaro:getRoomNameByDeviceID(CO2SensorID[1])
local Netatmo2room   = fibaro:getRoomNameByDeviceID(CO2SensorID[2])
local highCO2ID      = (CO2SensorID[1]) --Initiate variable. In my case ID '147' is located inside the most sensitive room.
local lowCO2ID       = (CO2SensorID[2]) --Initiate variable.

--Not in use
--kwlBoostMapping     = {Boost="Boost", Off="Off"};
--presentStateMapping = {Home="Home", Away="Away", Holiday="Holiday"};
--timeOfDayMapping    = {Morning="Morning", Day="Day", Evening="Evening", Night="Night"};

--Color debugging
function ExtraDebug( color, message )
  if (debugging) then
    fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); 
  end
end

--Ensuring that only 1 instance is running at a time.
fibaro:sleep(50); --sleep to prevent all instances being killed.
if (fibaro:countScenes() > 1)
then
  ExtraDebug( "grey", "Abort, Scene count = " .. fibaro:countScenes());
  fibaro:abort();
end

----------------------------------------------------------------
--------------------checkHighCO2ID----------------------------
-- function to test which CO2 sensor has current highest level--
----------------------------------------------------------------
function checkHighCO2ID()
  if       tonumber(fibaro:getValue((CO2SensorID[1]), "value")) >= tonumber(fibaro:getValue((CO2SensorID[2]), "value"))
  then
    highCO2ID    = tonumber(CO2SensorID[1])
    lowCO2ID     = tonumber(CO2SensorID[2])
    local highCO2room  = fibaro:getRoomNameByDeviceID(highCO2ID)
    local lowCO2room   = fibaro:getRoomNameByDeviceID(lowCO2ID)
    ExtraDebug('magenta', "Reference sensor with higher CO2 level has ID "..highCO2ID.." ("..highCO2room.." @ "..fibaro:getValue(highCO2ID, "value").."ppm).");
    --	ExtraDebug('magenta', "HighCO2ID value is:("..fibaro:getValue(highCO2ID, "value").."ppm) and LowCO2ID value is:("..fibaro:getValue(lowCO2ID, "value").."ppm).");
  elseif   tonumber(fibaro:getValue((CO2SensorID[2]), "value")) >= tonumber(fibaro:getValue((CO2SensorID[1]), "value")) then
    highCO2ID    = tonumber(CO2SensorID[2])
    lowCO2ID     = tonumber(CO2SensorID[1])
    local highCO2room  = fibaro:getRoomNameByDeviceID(highCO2ID)
    local lowCO2room   = fibaro:getRoomNameByDeviceID(lowCO2ID)
    ExtraDebug('darkkhaki', "Reference sensor with higher CO2 level has ID "..highCO2ID.." ("..highCO2room.." @ "..fibaro:getValue(highCO2ID, "value").."ppm).");
    --	ExtraDebug('darkkhaki', "HighCO2ID value is:("..fibaro:getValue(highCO2ID, "value").."ppm) and LowCO2ID value is:("..fibaro:getValue(lowCO2ID, "value").."ppm).");
  else
    highCO2ID    = tonumber(CO2SensorID[1])--in case one or both of the Netatmos return no value (not sure if this will work)
    lowCO2ID     = tonumber(CO2SensorID[2])
    local highCO2room  = fibaro:getRoomNameByDeviceID(highCO2ID)
    local lowCO2room   = fibaro:getRoomNameByDeviceID(lowCO2ID)
    ExtraDebug('orange', "COULD NOT GET BOTH CO2 VALUES. CHECK STATUS OF NETATMO DEVICES");
  end
end

------------------------------------------------------------
--------------------boostFunc-------------------------------
--------Boost function (KWL runs at highest level)----------
------------------------------------------------------------
function boostFunc()
  fibaro:call(KWLControlID, "setColor", "0","0","0","0");
  ExtraDebug('red', "-------BOOSTING for "..boostInterval.."mins.-------");
  fibaro:sleep(1000);
  fibaro:call(KWLControlID, "setColor", "255","0","0","0");
  fibaro:call(VDcolorPlug, "pressButton", "3");
  ExtraDebug('red', "CO2 levels are "..Netatmo2room.." ("..CO2Sensor2Val.." ppm) and "..Netatmo1room.." ("..CO2Sensor1Val.." ppm)");
  fibaro:sleep(boostInterval*60000); --after boost interval switch back to level 3 and pause boosting for at least half the boosting time
  fibaro:setGlobal('KWLBoost', 'Off'); --switch Global Variable back to "Off" if Boost mode was initiated manually by changing the variable to "Boost"
  ExtraDebug('green', "-------BOOSTING OFF-----");
  fibaro:call(KWLControlID, "setColor", "0","0","0","0");
  fibaro:sleep(1000);
  fibaro:call(KWLControlID, "setColor", "0","255","0","0");
  fibaro:call(VDcolorPlug, "pressButton", "4");
  ExtraDebug('green', "CO2 levels are "..Netatmo2room.." ("..CO2Sensor2Val.." ppm) and "..Netatmo1room.." ("..CO2Sensor1Val.." ppm)");
  ExtraDebug('green', "Switched KWL after ".. boostInterval.."mins back to volume 3 (".. boostBreak.."mins)");
  fibaro:sleep(boostBreak*60000); --boost break to give the KWL fan a minimum rest (e.g. 15mins)
  ExtraDebug('yellow', "-------Boost sequence over, checking CO2 levels-----");
end

--------------------------EXECUTION----------------------------------
--------------Schleife wenn trigger ('for' Schleife geplant)---------
if (sourceTrigger["type"] == "property")
then
  startSourceID = tonumber(sourceTrigger['deviceID']);
  ExtraDebug('yellow', "Scene triggered by: " .. startSourceID .. "");
elseif ( sourceTrigger["type"] == "global" )
  then
  startSourceGlob = (sourceTrigger['name']);
  ExtraDebug('yellow', "Scene triggered by: " .. startSourceGlob .. " global variable");
else
  ExtraDebug('yellow', "Scene was started manually.")
end

checkHighCO2ID()
local highCO2Val = tonumber(fibaro:getValue(highCO2ID, "value"))
local lowCO2Val = tonumber(fibaro:getValue(lowCO2ID, "value"))
ExtraDebug('pink', "High CO2 Value: "..highCO2Val.."ppm. Low CO2 Value: "..lowCO2Val.."ppm");
  
if (presentState ~= "Home" ) and (highCO2Val <= (CO2levels[2]))
then
  if (fibaro:getValue(KWLControlID, "color") ~= "0,0,0,255")
  then
    fibaro:call(KWLControlID, "setColor", "0","0","0","0");
    fibaro:sleep(1000);
    fibaro:call(KWLControlID, "setColor", "0","0","0","255");
    fibaro:call(VDcolorPlug, "pressButton", "2");
    ExtraDebug('white', "Home status = " .. presentState .. ". @ "..highCO2Val.."ppm. Switching KWL to lowest volume");
  else
    ExtraDebug('white', "Home status = " .. presentState .. " and KWL runs on low level. No further action required");
  end
elseif (kwlBoost == "Boost" )
then
  boostFunc()
elseif  CO2Sensor1Val == nil or CO2Sensor2Val == nil
then
  fibaro:call(KWLControlID, "setColor", "0","0","0","0");
  fibaro:sleep(1000);
  fibaro:call(KWLControlID, "setColor", "0","0","255","0");
  fibaro:call(VDcolorPlug, "pressButton", "5");
  ExtraDebug('orange', "PROBLEMS WITH CO2 READINGS, PLEASE CHECK NETATMO DEVICES. Set KWL to volume 2");
  ExtraDebug('blue', "---Set KWL to volume 2---");
elseif  (highCO2Val <= (CO2levels[1])) and fibaro:getValue(KWLControlID, "color") ~= "0,0,0,255"
then
  fibaro:call(KWLControlID, "setColor", "0","0","0","0");
  fibaro:sleep(1000);
  fibaro:call(KWLControlID, "setColor", "0","0","0","255");
  fibaro:call(VDcolorPlug, "pressButton", "2");
  ExtraDebug('white', "---Set KWL to volume 1---");
elseif (highCO2Val >= (CO2levels[1])+1) and (highCO2Val <= (CO2levels[2]))  and  fibaro:getValue(KWLControlID, "color") ~= "0,0,255,0"
then
  fibaro:call(KWLControlID, "setColor", "0","0","0","0");
  fibaro:sleep(1000);
  fibaro:call(KWLControlID, "setColor", "0","0","255","0");
  fibaro:call(VDcolorPlug, "pressButton", "5");
  ExtraDebug('blue', "---Set KWL to volume 2---");
elseif (highCO2Val >= (CO2levels[2])+1) and (highCO2Val <= (CO2levels[3]))  and  fibaro:getValue(KWLControlID, "color") ~= "0,255,0,0"
then
  fibaro:call(KWLControlID, "setColor", "0","0","0","0");
  fibaro:sleep(1000);
  fibaro:call(KWLControlID, "setColor", "0","255","0","0");
  fibaro:call(VDcolorPlug, "pressButton", "4");
  ExtraDebug('green', "---Set KWL to volume 3---");
elseif (highCO2Val >= (CO2levels[3])+1) and fibaro:getValue(KWLControlID, "color") ~= "255,0,0,0"
then
  boostFunc()
elseif (fibaro:getValue(KWLControlID, "color") == "0,0,0,0" )
then
  fibaro:call(KWLControlID, "setColor", "0","0","0","255");
  fibaro:call(VDcolorPlug, "pressButton", "2");
  ExtraDebug('white', "!!RGBW Controller was off. Switching KWL to volume 1!!");
end

Hallo Leute,
mit dem RGBW dürfte das nicht funktionieren. Der Schaltet entweder die Ports R,G,B und W an/aus Liefert als die Spannung die Ihr angelegt habt, oder er steuert LEDs.
LEDs steuern funktioniert durch Pulsweitenmodulation also an aus in eine bestimmten Rhythmus und nicht wie bei einem Dimmer durch Anpassung der Spannung.

Ich würde dem Schalter komplett ersetzen und den Motor direkt steuern, der Ventilatormotor selber wird doch an 220V AC hängen?

Gruß
Gerhard

Hallo,

ja, ich habe auch nochmal bzgl. RGBW Controller nachgelesen. Der Fibaro Aktor hat nur einen 0 - 10 V Eingang aber keinen solchen Ausgang. Der ist tatsächlich PWM.
Da die Vallox Anlage durch einen 0 - 10 V Eingang gesteuert wird, kann es nur über den entsprechenden Ausgang des Qubino Flush Dimmers geben. Scheint wohl auch der Einzige mit 0 - 10 V Ausgang auf dem Markt zu sein…
Kaputt machen kann man damit dann ja wahrscheinlich auch nichts, weil ja das Signal dem entspricht, welches die Vallox sowieso erwartet.

Gruß
Ralf

Hallo Ralf und Gerhard,

wie gesagt, ich stimme Euch zu dass der Qubino Flush Dimmer sich interessant anhört. Damit spart man sich den Aufwand des Lötens. Ich kann Euch aber versichern, dass auch die Umsetzung mit dem Fibaro RGBW funktioniert. Um die 0-10V zu erreichen werden ja die Schaltregler zwischengeschaltet. Ich habe es selbst schon ausprobiert und einen Ausgang (RGBW) des Controllers über den Schaltregler an die Vallox Anlage angeschlossen. Das funktioniert einwandfrei und man kann über die Stellschraube ganz akkurat die Ausgangsspannung zwischen 0-10V einstellen. Die Ventilatoren der Vallox haben auch wie gewünscht darauf reagiert und die Drehzahl entsprechend der Spannung angepasst. Einzig ist es mir nicht gelungen alle vier Kanäle gleichzeitig anzuschließen. Das liegt aber mit Sicherheit nicht am Controller, sondern an meiner fehlenden Kenntnis. Jeder Regler hat einen Plus und einen Minus Ausgang und ich weiß nicht wo ich mit den vier Minus-Kabeln hin soll. Wenn ich sie alle verbinde und an die entsprechende Leitung an der KWL anschließe, dann bekomme ich leider in jedem Fall die Spannung des höchsten Reglers (in meinem Fall 9.8V) und somit läuft die KWL immer auf höchster Stufe.

Grüße
Alex

…P.S. Hab mir grad den “Qubino Flush Dimmer 0-10V” angesehen und umgehend bestellt. Damit bekomme ich endlich meine KWL eingebunden und brauch auch keinen Elektriker mehr.

Grüße
Alex

Hallo,
bei der Vallox Anlage ist mir nur novh nicht klar, wie das Zusammenspiel mit dem Qubinobaustein und dem 4 Stufenregler funktioniert.
Der Qubino Aktor hat ja den entsprechenden Eingang, an der der 4 Stufenschalter angeschlossen werden kann. Es sollte ja dann über den Schalter alles so laufen, wie bisher. Aber was geschieht nun bei Fernsteuerung?
Ignoriert die Qubinosteuerung dann den am Eingang angeschlossenen Schalter und der zeigt dann eine falsche Stellung an, oder ist der mechanisvhe Schalter vorrangig und damit faktisch keine Fernsteuerung möglich, wenn auch der mechanische Schalter angeschlossen ist?

Gruß
Ralf

Hallo,
die gleiche Frage stelle ich mir auch. Sobald ich den Dimmer in Händen habe werde ich das mal durchmessen. Laut Qubino-Beschreibung gibt es ja einige Parameter welche man einstellen kann/muss um das Verhalten des Dimmers festzulegen. Ich erhoffe mir, dass es ähnlich wie z.B. bei einer Rolladensteuerung (mit Kippschalter) funktioniert und man es so einstellen kann, dass das letzte Schaltsignal (manuell oder von HC2) Vorrang hat. Dann ist zwar die Stellung des Drehreglers ggf. irreführend, aber man kann ja die tatsächliche Stufe der KWL über ein VD und einen Wallplug farblich anzeigen (z.B. Rot=Stoßlüftung, weiss=Sparstufe).

Hat sonst noch jemand eine bessere Idee?
Gruß
Alex

Hallo,
Ich denke es kann tatsächlich so funktionieren. Dem Manual zufolge muss nur Parameter 1 auf “2” gesetzt werden und der Dimmer gibt die Spannung heraus welche ihm als letztes Übergeben wurde (s.u.)

Available configuration parameters (data type is 1 Byte DEC):
•default value 0
•0 - mono-stable switch type (push button) – button quick press turns between previous set dimmer value and zero)
•1 - Bi-stable switch type
•2 - Potentiometer Flush 0-10V is using set value the last received from potentiometer or from Z-Wave controller)
•3 - 0-10V Temperature sensor (regulated output)
•4 - 0-10V Illumination sensor (regulated output)
•5 - 0-10V General propose sensor (regulated output)

Moin,

so, habe den Qubino Flush Dimmer 0-10V wie besprochen eingebaut und die olle Vallox lässt sich sowohl über die Szene (update unten) als auch über den Drehregler schalten. Es gilt immer das letzte Signal. Wenn man also die Szene deaktiviert, dann hat man wieder eine komplett manuelle Steuerung.
Seltsamerweise, unterscheiden sich jedoch die Eingangsspannung die vom Drehregler an den Dimmer geliefert wird und die Ausgangsspannung die der Dimmer an die KWL weitergibt. Ist ggf. eine Einstellung am Dimmer. Bis ich das näher betrachten kann, habe ich erst mal die Ausgangsspannungen an den vier Regelwiederständen am Drehschalter so angepasst, dass am KWL die entsprechenden vier Spannungen ankommen (in meinem Fall 2V / 4V / 6V / 9,8V). Da ich ab sofort die Anlage über Fibaro steuere ist der Drehregler eh nur noch für den Noteinsatz.
Gruss
Alex

--[[
%% properties
147 value
%% globals
PresentState
KWLBoost
--]]

-- KWL Control KWL = (Kontrollierte Wohnraumlüftung)
-- Version 1.2 by Lodi: Qubino 1-10V Flush Dimmer; mit zwei CO2 Sensoren und zeitlimitierter boost Funktion
-- My first LUA script, so pls apologize amateurish scripting and theft of logic array from other scenes (e.g. perfekte Lichtsteuerung, RFID Alarm....from www.siio.com)
-- Event getriggerte version reagiert auf Netatmo CO2 sensoren und "PresentState" und "KWLBoost" variable
-- RGBW Controller mit 4 Stufen: 'weiss' = niedrigste Steuerspannung und 'rot' = höchste Steuerspannung
-- Globale Variable "KWLBoost" ermöglicht manuelles Schalten auf die höchste Stufe (z.B. beim Duschen oder Kochen) unabhängig vom CO2 Wert
-- Variable kann z.B. über virtuelles Device geschaltet werden ("KWLBoost" Variable hat Werte 'Boost' und 'Off')
-- Zur Schonung der Anlage läuft der Boost Modus  immer nur für eine bestimmte Zeit (boostInterval) und schaltet dann auf die nächtst tiefere Stufe.
-- Diese Stufe wird eine Weile beibehalten (boostBreak) bevor wieder neu getriggert werden kann und ein erneuter CO2 check durchlaufen wird
-- bei Abwesenheit läuft die KWL unterhalb des Mittelwertes (CO2levels) auf niedrigster Stufe

--initiate Variables
local sourceTrigger  = fibaro:getSourceTrigger();
local debugging      = true -- quite eccessive debugging toggle off if desired (true= on / false=off)
local CO2SensorID    = {147,156} --Netatmo CO2 sensors as array. Needs to be two. Guess it should also work if you enter two times the same ID (not checked)
local KWLControlID   = 307 --ID of the Qubino Flush Dimmer
local VDcolorPlug    = 231 --Virtual device for wall plug used as indicator LED
--local runInterval    = 60 --Time period in minutes to run the CO2 check. NOT USED ANYMORE as the scene is no longer triggered by a scheduler
local boostInterval  = 30 --Time the KWL will run in boost mode before switching down to the next lower volume level (3).
local boostBreak     = 15 --Minimum time period for which boosting mode will forced to pause. Preserve the KWL from running ages on highest level
local CO2levels      = {500,700,1600} --insert your 3 desired CO2 level cornerpoints (e.g. here for ranges 0-500 / 501-800 / 801-1600 / >1600)#

--Global variables that are needed. Script does not create them. So make sure they are in place.
local timeOfDay      = fibaro:getGlobal("TimeOfDay"); --Time of Day Global variable.
local presentState   = fibaro:getGlobal("PresentState"); --Present state Global variable.
local kwlBoost       = fibaro:getGlobal("KWLBoost"); --manual boost Global variable (KWLBoost). Needs to be created with values "Boost" and "Off".

local CO2Sensor1Val  = tonumber(fibaro:getValue((CO2SensorID[1]), "value"))
local CO2Sensor2Val  = tonumber(fibaro:getValue((CO2SensorID[2]), "value"))
local Netatmo1room   = fibaro:getRoomNameByDeviceID(CO2SensorID[1])
local Netatmo2room   = fibaro:getRoomNameByDeviceID(CO2SensorID[2])
local highCO2ID      = (CO2SensorID[1]) --Initiate variable. In my case ID '147' is located inside the most sensitive room.
local lowCO2ID       = (CO2SensorID[2]) --Initiate variable.

--Not in use
--kwlBoostMapping     = {Boost="Boost", Off="Off"};
--presentStateMapping = {Home="Home", Away="Away", Holiday="Holiday"};
--timeOfDayMapping    = {Morning="Morning", Day="Day", Evening="Evening", Night="Night"};

--Color debugging
function ExtraDebug( color, message )
  if (debugging) then
    fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); 
  end
end

--Ensuring that only 1 instance is running at a time.
fibaro:sleep(50); --sleep to prevent all instances being killed.
if (fibaro:countScenes() > 1)
then
  ExtraDebug( "grey", "Abort, Scene count = " .. fibaro:countScenes());
  fibaro:abort();
end

----------------------------------------------------------------
--------------------checkHighCO2ID----------------------------
-- function to test which CO2 sensor has current highest level--
----------------------------------------------------------------
function checkHighCO2ID()
  if       tonumber(fibaro:getValue((CO2SensorID[1]), "value")) >= tonumber(fibaro:getValue((CO2SensorID[2]), "value"))
  then
    highCO2ID    = tonumber(CO2SensorID[1])
    lowCO2ID     = tonumber(CO2SensorID[2])
    local highCO2room  = fibaro:getRoomNameByDeviceID(highCO2ID)
    local lowCO2room   = fibaro:getRoomNameByDeviceID(lowCO2ID)
    ExtraDebug('magenta', "Reference sensor with higher CO2 level has ID "..highCO2ID.." ("..highCO2room.." @ "..fibaro:getValue(highCO2ID, "value").."ppm).");
    --	ExtraDebug('magenta', "HighCO2ID value is:("..fibaro:getValue(highCO2ID, "value").."ppm) and LowCO2ID value is:("..fibaro:getValue(lowCO2ID, "value").."ppm).");
  elseif   tonumber(fibaro:getValue((CO2SensorID[2]), "value")) >= tonumber(fibaro:getValue((CO2SensorID[1]), "value")) then
    highCO2ID    = tonumber(CO2SensorID[2])
    lowCO2ID     = tonumber(CO2SensorID[1])
    local highCO2room  = fibaro:getRoomNameByDeviceID(highCO2ID)
    local lowCO2room   = fibaro:getRoomNameByDeviceID(lowCO2ID)
    ExtraDebug('darkkhaki', "Reference sensor with higher CO2 level has ID "..highCO2ID.." ("..highCO2room.." @ "..fibaro:getValue(highCO2ID, "value").."ppm).");
    --	ExtraDebug('darkkhaki', "HighCO2ID value is:("..fibaro:getValue(highCO2ID, "value").."ppm) and LowCO2ID value is:("..fibaro:getValue(lowCO2ID, "value").."ppm).");
  else
    highCO2ID    = tonumber(CO2SensorID[1])--in case one or both of the Netatmos return no value (not sure if this will work)
    lowCO2ID     = tonumber(CO2SensorID[2])
    local highCO2room  = fibaro:getRoomNameByDeviceID(highCO2ID)
    local lowCO2room   = fibaro:getRoomNameByDeviceID(lowCO2ID)
    ExtraDebug('orange', "COULD NOT GET BOTH CO2 VALUES. CHECK STATUS OF NETATMO DEVICES");
  end
end

------------------------------------------------------------
--------------------boostFunc-------------------------------
--------Boost function (KWL runs at highest level)----------
------------------------------------------------------------
function boostFunc()
  ExtraDebug('red', "-------BOOSTING for "..boostInterval.."mins.-------");
  fibaro:call(KWLControlID, "setValue", "98");
  fibaro:call(VDcolorPlug, "pressButton", "3");
  ExtraDebug('red', "CO2 levels are "..Netatmo2room.." ("..CO2Sensor2Val.." ppm) and "..Netatmo1room.." ("..CO2Sensor1Val.." ppm)");
  fibaro:sleep(boostInterval*60000); --after boost interval switch back to 75% and pause boosting for at least half the boosting time
  fibaro:setGlobal('KWLBoost', 'Off'); --switch Global Variable back to "Off" if Boost mode was initiated manually by changing the variable to "Boost"
  ExtraDebug('green', "-------BOOSTING OFF-----");
  fibaro:call(KWLControlID, "setValue", "75");
  fibaro:call(VDcolorPlug, "pressButton", "5");
  ExtraDebug('blue', "CO2 levels are "..Netatmo2room.." ("..CO2Sensor2Val.." ppm) and "..Netatmo1room.." ("..CO2Sensor1Val.." ppm)");
  ExtraDebug('blue', "Switched KWL after ".. boostInterval.."mins back to volume 3 (".. boostBreak.."mins)");
  fibaro:sleep(boostBreak*60000); --boost break to give the KWL fan a minimum rest (e.g. 15mins)
  ExtraDebug('orange', "-------Boost sequence over, checking CO2 levels-----");
end

--------------------------EXECUTION----------------------------------
--------------Schleife wenn trigger ('for' Schleife geplant)---------
if (sourceTrigger["type"] == "property")
then
  startSourceID = tonumber(sourceTrigger['deviceID']);
  ExtraDebug('orange', "Scene triggered by: " .. startSourceID .. "");
elseif ( sourceTrigger["type"] == "global" )
  then
  startSourceGlob = (sourceTrigger['name']);
  ExtraDebug('orange', "Scene triggered by: " .. startSourceGlob .. " global variable");
else
  ExtraDebug('orange', "Scene was started manually.")
end

checkHighCO2ID()
local highCO2Val = tonumber(fibaro:getValue(highCO2ID, "value"))
local lowCO2Val = tonumber(fibaro:getValue(lowCO2ID, "value"))
ExtraDebug('pink', "High CO2 Value: "..highCO2Val.."ppm. Low CO2 Value: "..lowCO2Val.."ppm");
  
if (presentState ~= "Home" ) and (kwlBoost ~= "Boost" ) and (highCO2Val <= (CO2levels[2]))
then
  if (fibaro:getValue(KWLControlID, "value") ~= "20")
  then
    fibaro:call(KWLControlID, "setValue", "20");
    fibaro:call(VDcolorPlug, "pressButton", "2");
    ExtraDebug('white', "Home status = " .. presentState .. ". @ "..highCO2Val.."ppm. Switching KWL to 20%");
  else
    ExtraDebug('white', "Home status = " .. presentState .. " and KWL runs on 20%. No further action required");
  end
elseif (kwlBoost == "Boost" )
then
  boostFunc()
elseif  CO2Sensor1Val == nil or CO2Sensor2Val == nil
then
  fibaro:call(KWLControlID, "setValue", "50");
  fibaro:call(VDcolorPlug, "pressButton", "6");
  ExtraDebug('magenta', "PROBLEMS WITH CO2 READINGS, PLEASE CHECK NETATMO DEVICES. Set KWL to volume 2");
  ExtraDebug('yellow', "---Set KWL to 50%---");
elseif  (highCO2Val <= (CO2levels[1])) and fibaro:getValue(KWLControlID, "value") ~= "20"
then
  fibaro:call(KWLControlID, "setValue", "20");
  fibaro:call(VDcolorPlug, "pressButton", "2");
  ExtraDebug('white', "---Set KWL to 20%---");
elseif (highCO2Val >= (CO2levels[1])+1) and (highCO2Val <= (CO2levels[2]))  and  fibaro:getValue(KWLControlID, "value") ~= "50"
then
  fibaro:call(KWLControlID, "setValue", "50");
  fibaro:call(VDcolorPlug, "pressButton", "6");
  ExtraDebug('yellow', "---Set KWL to 50%---");
elseif (highCO2Val >= (CO2levels[2])+1) and (highCO2Val <= (CO2levels[3]))  and  fibaro:getValue(KWLControlID, "value") ~= "75"
then
  fibaro:call(KWLControlID, "setValue", "75");
  fibaro:call(VDcolorPlug, "pressButton", "5");
  ExtraDebug('blue', "---Set KWL to 75%---");
elseif (highCO2Val >= (CO2levels[3])+1) and fibaro:getValue(KWLControlID, "value") ~= "98"
then
  boostFunc()
elseif (fibaro:getValue(KWLControlID, "value") == "0" )
then
  fibaro:call(KWLControlID, "setValue", "20");
  fibaro:call(VDcolorPlug, "pressButton", "2");
  ExtraDebug('white', "!!RGBW Controller was off. Switching KWL to volume 1!!");
end