LUA - Taupunktlüftung im Keller

Hallo Zusammen,

ich habe einen Netatmo Außensensor und überwache im Keller mittels Sensoren die Temperatur und Luftfeuchtigkeit. Ich suche eine VD, Lua bzw. einen Algorithmus der mir anzeigt, ob ich lüften darf oder nicht. Kennt ihr da was?

Grüße
Carsten

Hi,

die dafür benötigen Werte von Netatmo kannst Du mit dem HC2 schon verarbeiten?

Willst Du manuell lüften?

VG Hoggle

Ja, die Netatmo ist ins HC2 integriert.
Ich möchte manuell lüften. Das heißt ich benötige “du darfst/ du darfst nicht lüften” bzw. “Achtung Fenster ist auf, mach mal zu”

Hast Du bereits die Bedingungen (Temp., Luftfeuchtigkeit), bei den Du lüften willst?
Oder suchst Du genau solche Abhängigkeiten?

Die Szene kannst Du als Blockszene und Push umsetzen.

Kapitano,

Anbei ein Link wo ein User dies mit Loxone realisiert hat:
http://www.loxwiki.eu/display/LOX/Absolute+Luftfeuchtigkeit+berechnen

Logik und Formeln dürften recht hilfreich sein.
Einzig die Genauigkeit von Netatmo ist meiner Meinung nach recht bescheiden.
Am Besten beide Sensoren am gleichen Ort aufstellen und Temperatur und Luftfeuchtigkeit Unterschied im Code korrigieren. (Temperatur Differenz kannst bei Netatmo korrigieren, Feuchte leider nur im Code)
Danach solltest du akzeptable Genauigkeit bekommen.

Hi mdietinger,

das liest sich gut. Doch leider stört sich Fibaro am EXP().
math.exp kennt es leider auch nicht. Wie kann ich das im Fibaro-Lua umsetzen?

C

Das ist nicht korrekt :wink:

Fibaro nutzt hier die normalen LUA-Funktionen, also auch math.exp:

fibaro:debug(math.exp((0.000000000011965 * ((1 + 273.15) * (1 + 273.15) - 293700))))

Gruß

hmmm… das mit math.exp teste ich gleich nochmal. Ich denke mir hat da eine Klammer gefehlt. Ansonsten hier mein Coding mit einem “ungenauem Trick”.

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

local date       = os.date("%d.%m.%Y %H:%M:%S", os.time())
local message

local EXP      = tonumber("2.71828182845904523536028747135266249775724709369995")
local pressure = fibaro:getValue(116, "value") -- Luftdruck
local tempOut  = fibaro:getValue(118, "value") -- Außentemperatur
local humidOut = fibaro:getValue(119, "value") -- Feuchtigkeit

local tempIn   = fibaro:getValue(98, "value")  -- Keller Temp
local humidIn  = fibaro:getValue(100, "value") -- Luftfeuchtigkeit Keller

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DEBUG
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Grundfunktion: Debug("red", "Nachrichtentext")
Debug = function(color, message)
  if (debuging) then
    fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
  end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Value Outside
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

local I1 = tonumber(tempOut)  -- Temperatur (in °C)
local I2 = tonumber(humidOut) -- Relative Luftfeuchtigkeit (in %)
local I3 = tonumber(pressure) -- Aktueller Luftdruck (in Millibar)

	  message = " - " ..date .. " AußenTemp " ..tempOut .. "°C rel. Feuchtigkeit " ..humidOut.. "%"
      fibaro:debug(message)

local humidOutAbs = 0.622 * I2/100 * (1.01325 * 10^(5.426651 - 2005.1 / (I1 + 273.15) + 0.00013869 * ((I1 + 273.15) * (I1 + 273.15) - 293700) / (I1 + 273.15) * (10^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) - 1) - 0.0044 * 10^((-0.0057148 * (374.11 - I1)^1.25))) + (((I1 + 273.15) / 647.3) - 0.422) * (0.577 - ((I1 + 273.15) / 647.3)) * EXP^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) * 0.00980665) / (I3/1000 - I2/100 * (1.01325 * 10^(5.426651 - 2005.1 / (I1 + 273.15) + 0.00013869 * ((I1 + 273.15) * (I1 + 273.15) - 293700) / (I1 + 273.15) * (10^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) - 1) - 0.0044 * 10^((-0.0057148 * (374.11 - I1)^1.25))) + (((I1 + 273.15) / 647.3) - 0.422) * (0.577 - ((I1 + 273.15) / 647.3)) * EXP^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) * 0.00980665)) * I3/1000 * 100000000 / ((I1 + 273.15) * 287.1)
	  message = " - " ..date .. " abs. Luftfeuchtigkeit Außen " ..humidOutAbs.. "g/m³"
      fibaro:debug(message)

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Value Inside
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

local I1 = tonumber(tempIn)  -- Temperatur (in °C)
local I2 = tonumber(humidIn) -- Relative Luftfeuchtigkeit (in %)

	  message = " - " ..date .. " InnenTemp " ..tempIn .. "°C rel. Feuchtigkeit " ..humidIn.. "%"
      fibaro:debug(message)

local humidInAbs = 0.622 * I2/100 * (1.01325 * 10^(5.426651 - 2005.1 / (I1 + 273.15) + 0.00013869 * ((I1 + 273.15) * (I1 + 273.15) - 293700) / (I1 + 273.15) * (10^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) - 1) - 0.0044 * 10^((-0.0057148 * (374.11 - I1)^1.25))) + (((I1 + 273.15) / 647.3) - 0.422) * (0.577 - ((I1 + 273.15) / 647.3)) * EXP^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) * 0.00980665) / (I3/1000 - I2/100 * (1.01325 * 10^(5.426651 - 2005.1 / (I1 + 273.15) + 0.00013869 * ((I1 + 273.15) * (I1 + 273.15) - 293700) / (I1 + 273.15) * (10^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) - 1) - 0.0044 * 10^((-0.0057148 * (374.11 - I1)^1.25))) + (((I1 + 273.15) / 647.3) - 0.422) * (0.577 - ((I1 + 273.15) / 647.3)) * EXP^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) * 0.00980665)) * I3/1000 * 100000000 / ((I1 + 273.15) * 287.1)
	  message = " - " ..date .. " absolute Luftfeuchtigkeit Innen " ..humidInAbs.. "g/m³"
      fibaro:debug(message)

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Check Values
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

if (humidInAbs > humidOutAbs) then
	message = " - " ..date .. " Keller lüften!"
else
  	message = " - " ..date .. " Keller nicht lüften"
end
fibaro:debug(message)

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- To waht you want ...
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Hi Kapitano1,

jetzt wo wieder die Heizsaison beginnt, habe ich genau das gleiche vorgehabt, wie Du. Allerdings fürs Schlafzimmer.
Super, dass Du es hier für die HC2 gepostet hast. Das hat mir Stunden an Arbeit erspart.

Ein paar Fragen habe ich aber dennoch:

  • Die Netatmo misst ja nur den Innen-Luftdruck. Scheinbar ist das nicht schlimm für die Berechnung oder welchen Wert hast Du dort eingetragen?
  • Was ist denn der kleine "ungenaue Trick?:slight_smile:
  • Hast Du die Formel einigermaßen verstanden? Woher kommen denn die ganzen Konstensten z.B. die 0,622 gleich zu beginn?

Auf jeden Fall scheint es zu funktionieren:-)

Danke.
Mr.Coffee

Hallo,

Ich bin leider nicht LUA fit, kann man da auch eine Push Nachricht beifügen das man lüften kann bzw. nicht kann?
lg

Hallo,

interessanter Script, leider bekomme ich den Fehler “I2” und kenne mich mit Lua nicht so aus.

[DEBUG] 12:21:50: [1;31m2018-09-23 12:21:50.181267 [ fatal] Unknown exception: /opt/fibaro/scenes/39.lua:40: attempt to perform arithmetic on local ‘I2’ (a nil value)

Könnte mir jemand vielleicht helfen?

Lg…

Hi,

nur kurz auf dem Sprung.
@gravity82: Hast Du oben in den Zeilen 11 bis 16 deine Variablen-Nummern angepasst?

@dosierklappe: Push-Nachrichten sind recht leicht einzufügen. Google Mal nach Hc2 und sendpush.

VG

Hallo,

ja schon alles gemacht,aber irgendwie funzt es nicht. Welche Aussensensoren benutzt ihr?

Lg…

@gravity82: Dein Sensor “pressure” liefert keinen Wert also nil. Mach mal Zeile 39:
fibaro:debug("Druck: "… pressure)
Und debug beobachten. Vermutlich stimmt die ID in Zeile 11 nicht.