ich habe den Versuch gestartet auf Basis von folgender Doku ein Python Skript einzubinden.
https://www.openhab.org/addons/bindings/exec/
Mein Problem ist, dass an irgendeiner Stelle ein Fehler sein muss, da keine Berechnung und anzeige des Wassergehalts erfolgt.
Ich habe als Versuch alle Werte im Python Skript fest vorgegeben. Auch das funktioniert nicht.
Zunächst einmal mein Aufbau.
Ich habe openhab auf einem Raspi laufen. An den Raspi ist ein DHT22 und ein BMP180 angeschlossen. Zusätzlich habe ich ein NodeMCU als Außenstation mit einem DHT22. Per MQTT sende ich Temperatur und Feuchte an den Raspi. Dies funktioniert auch so weit ganz gut.
Mein Ziel ist es nun aus Temperatur Feuchte und Luftdruck den Wassergehalt zu berechnen. Die Berechnung wollte ich in einem Python Skript auf dem Raspi ablaufen lassen.
Hierzu habe ich folgende Dateien angelegt:
outdoorstation.items
outdoorstation.rules
outdoorstation.py
outdoorstation.sitemap
outdoorstation.things
Mir stellen sich nun zwei Fragen:
- Habe ich in meinem Vorgehen bzw. vom Aufbau etwas grundsätzlich falsch gemacht?
- Wie übergebe ich zwei Variablen an das Python Skript mittels %2$s
Code: Alles auswählen
Group Outdoorstation_Chart (System, Charts)
Number Outdoorstation_Chart_Period "Periode" (System)
Number Outdoorstation_Temperature "Temperatur [%.1f °C]" <temperature> {mqtt="<[mosquitto:Outdoor_Temperature:state:default]"}
Number Outdoorstation_Humidity "Luftfeuchtigkeit [%.1f %%]" <humidity> {mqtt="<[mosquitto:Outdoor_Humidity:state:default]"}
Number Outdoorstation_Watercontent "Wassergehalt [%.1f g/kg]" <water>
String Outdoorstation_Watercontent_Args {channel="exec:command:outdoorstation_watercontent:input"}
String Outdoorstation_watercontent_out {channel="exec:command:outdoorstation_watercontent:output"}
Code: Alles auswählen
rule "Livingroomstation Water content"
when
Item Outdoorstation_Temperature changed or Item Outdoorstation_Humidity changed or Item Livingroomstation_Pressure changed
then
Outdoorstation_Watercontent_Args.sendCommand(Outdoorstation_Temperature.toString)
Outdoorstation_Watercontent.postUpdate(
( ( Float::parseFloat(Outdoorstation_watercontent_out.state.toString) as Number ) * 10 ) / 10
)
end
Code: Alles auswählen
import sys
if len(sys.argv) > 2:
temperature = float(sys.argv[1])
humidity = float(sys.argv[2])
pressure = float(sys.argv[3])
if humidity > 0 and pressure > 800 and temperature < 45 and humidity < 100:
saturationpressure = 288.68 * (1.098 + temperature / 100)**8.02
zaehler = 0.622 * (humidity / 100 * saturationpressure)
nenner = pressure - saturationpressure * (humidity / 100)
watercontent = zaehler / nenner * 1000
print(watercontent)
Code: Alles auswählen
sitemap outdoorstation label="Balkon"
{
Frame label="Außenklima" {
Text item=Outdoorstation_Temperature
Text item=Outdoorstation_Humidity
Text item=Outdoorstation_Watercontent
}
}
Code: Alles auswählen
Thing exec:command:outdoorstation_watercontent "Wassergehalt" [command="/etc/openhab2/scripts/outdoorstation.py %2$s", transform="REGEX((.*?))", interval=60, timeout=10, autorun=true]
Vielen Dank für eure Anregungen.
Gruß Daniel