Ankündigung

Einklappen
Keine Ankündigung bisher.

Berechnung der absoluten Luftfeuchte in einer SmartHomeNG Logik

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Berechnung der absoluten Luftfeuchte in einer SmartHomeNG Logik

    Hallo Zusammen,

    für was so ein Brückentag doch gut ist ;-) schon oft hatte ich damit Angefangen nach Lösungsansätzen zu schauen, welche mir die absolute Luftfeuchte berechnen, so das ich in einem weiteren Schritt, den Keller belüften kann.

    Wenn ich keinen Denkfehler drin hab, dann müsste ich heute das Thema gelöst bekommen haben und möchte a) das Ergebnis hier gerne auch anderen zur Verfügung stellen sowie b) mir von klugen Köpfen sagen lassen, das es richtig ist oder ich doch noch einen groben Schnitzer gemacht habe.

    An dieser Stelle auch vielen herzlichen Dank an Martin Kompf, ohne dessen Hilfe (https://www.kompf.de/weather/vent.html) ich mit Sicherheit nicht so einfach zum Ziel gekommen wäre, da Python doch in vielerlei Hinsicht noch eine Fremdsprache für mich ist.

    Aktuell berechne ich für Keller, Schlafzimmer und Küche, sowie für Draußen die absolute Luftfeuchte in je einer eigenen Logik und visualisiere mir dies dann in einem Grafana Dashboard.

    Anbei mal ein Code Beispiel:
    Code:
    import os
    import math
    import time
    import mysql.connector
    
    # Read last temperature and humidity form MariaDB
    # connect to MariaDB mySQL database
    db = mysql.connector.connect(host='XXX.XXX.XXX.XXX',
                                port='XXXX',
                                user='DATENBANKUSER',
                                password='GEHEIMESKENNWORT',
                                db='DATENBANK',)
    
    #temperature sleeping_room
    cursor = db.cursor()
    cursor.execute("SELECT val_num, time FROM item WHERE id LIKE'6'")
    for entry in cursor.fetchall():
        t, tz,  =(entry[0], entry[1])
    
    #humidity sleeping_room    
    cursor.execute("SELECT val_num, time FROM item WHERE id LIKE'7'")
    for entry in cursor.fetchall():
        rh, rhz,  =(entry[0], entry[1])
    
    # Compute saturated water vapor pressure in hPa
    # Param t - temperature in °C
    a = 6.112
    b = 17.67
    c = 243.5
    svp = a * math.exp((b*t)/(c+t))
    
    # Compute actual water vapor pressure in hPa
    # Param rh - relative humidity in %
    # Param t - temperature in °C
    vp = rh/100 * svp
    
    # Compute the absolute humidity in g/m³
    # Param rh - relative humidity in %
    # Param t - temperature in °C
    mw = 18.016 # kg/kmol (Molekulargewicht des Wasserdampfes)
    rs = 8314.3 # J/(kmol*K) (universelle Gaskonstante)
    ah = 10**5 * mw/rs * vp/(t + 273.15)
    
    #transfer value AH to an SmartHomeNG Item
    sh.Sensoren.Aussen.Absolute_Luftfeuchte(ah)
    Wie man sieht, hole ich mir die Werte aus einer SQL Datenbank, welche von SmartHome mit dem DatabasePlugin befüllt wird. Eigentlich hätte ich dies gerne anders gemacht, da die aktuellen Werte ja in einem SmartHomeNG Item liegen. Aber das wollte bei mir nicht funktionieren. Wenn ich statt der Datenbankabfrage die Variablen mit den Items bestücken wollte, so wurde der Wert nicht berechnet, scheint wohl am Format zu liegen, wie diese die Daten vom ITEM bekommen:

    Code:
    t = sh.Sensoren.Aussen.Nord.Temperatur
    rh = sh.Sensoren.Aussen.Nord.Luftfeuchte
    Fehler aus dem Log dazu:
    Code:
    2019-05-31 13:19:29 CEST ERROR    scheduler         logics.Absolute_Luftfeuchte_Aussen Logic: logics.Absolute_Luftfeuchte_Aussen, File: /usr/local/smarthome/logics/abs_luftfeuchte_aussen.py, Line: 15, Method: <module>, Exception: unsupported operand type(s) for *: 'float' and 'Item'  --  (scheduler.py:_task:507)
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/scheduler.py", line 493, in _task
        exec(obj.bytecode)
      File "/usr/local/smarthome/logics/abs_luftfeuchte_aussen.py", line 15, in <module>
        svp = a * math.exp((b*t)/(c+t))
    TypeError: unsupported operand type(s) for *: 'float' and 'Item'
    Vielleicht hat ja jemand einen Tipp für mich, ohne das SQL Statement wäre der Code an sich schon schöner.

    Und in Grafana sieht dies dann nun so aus:
    Grafana.PNG

    So dies mal in aller kürze, würde mich über eure Rückmeldungen freuen.

    Viele Grüße
    Jannis

    #2
    Code:
    t = sh.Sensoren.Aussen.Nord.Temperatur()
    rh = sh.Sensoren.Aussen.Nord.Luftfeuchte()
    Packe mal die Klammern dazu ...

    Kommentar


      #3
      bmx - Danke, da lag der Fehler!

      Nun geht es auch ohne die SQL Abfrage:
      Code:
      # Read last temperature and humidity value from an SmartHomeNG Item
      t = sh.Sensoren.Aussen.Nord.Temperatur()
      rh = sh.Sensoren.Aussen.Nord.Luftfeuchte()
      
      # Compute saturated water vapor pressure in hPa
      # Param t - temperature in °C
      a = 6.112
      b = 17.67
      c = 243.5
      svp = a * math.exp((b*t)/(c+t))
      
      # Compute actual water vapor pressure in hPa
      # Param rh - relative humidity in %
      # Param t - temperature in °C
      vp = rh/100 * svp
      
      # Compute the absolute humidity in g/m³
      # Param rh - relative humidity in %
      # Param t - temperature in °C
      mw = 18.016 # kg/kmol (Molekulargewicht des Wasserdampfes)
      rs = 8314.3 # J/(kmol*K) (universelle Gaskonstante)
      ah = 10**5 * mw/rs * vp/(t + 273.15)
      
      #transfer value AH to an SmartHomeNG Item
      sh.Sensoren.Aussen.Absolute_Luftfeuchte(ah)

      Kommentar


        #4
        Vielleicht könnte man die tools ergänzen wenn notwendig?

        Kommentar


          #5
          mhm, ich sehe grad da gibt es ja schon etwas: sh.tools.rel2abs(temp, hum)

          Mit sh.tools hab ich bisher noch gar nichts gemacht, da muss ich mich doch gleich mal reinlesen. Vielen Dank für den Hinweis.

          Kommentar

          Lädt...
          X