Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiki:projekte:openhab2:uebersicht

openHAB 2.x auf dem Raspberry Pi B

Minimalistische „Hausautomation“ auf Basis eines Raspberry Pi Modell B (2011), openHAB 2.x und einer kleinen selbst entwickelten Leiterplatte mit folgenden Funktionen:

  • 6-polige Pfostenleiste für FTDI-Kalbel
  • 2-polige Pfostenleiste für Reedkontakt (Gaszähler)
  • 3-polige Pfostenleiste für 1-Wire Temperatursensoren
  • 7-poliger Anschluss für 1,8“ Display

Die Basis bildet das jeweils aktuelle Release von Raspbian.
Um kurzzeitige Unterbrechungen der Versorgungsspannung zu überbrücken setzte ich die keine USV „Strom Pi“ ein (Bildmitte). Links im Bild zu sehen mein kleiner Empfänger für die eingesetzten Temperatur- und Feuchtesensoren. Unterhalb zwei Li-Po Zellen (Bauform 18650, je 3,7 V, 2200mAh) zur Versorgung des Stom-Pi bei Netzausfll.

verwendete Quellen

OpenHAB
Gesamtsystem


unbestückte Leiterplatten
fertig bestückte Leiterplatte


1,8 Zoll Display, per SPI-Schnittstelle angeschlossen
kompletter Raspbery Pi
allgemein
Strom-Pi USV
Shelly
DS18S20 - 1-Wire Temperatursensor
1,8" Display

Infos

  • Die rrd4j Datenbankdateien liegen unter /var/lib/openhab2/persistence/rrd4j/
  • ;-)

Systeminstallation

Anleitungen für alle gängigen Betriebssysteme zur Installation auf einer geeigneten SD-Karte findet man zu Hauf im Internet. Daher verzichte ich an dieser Stelle auf eine Beschreibung.

Diese Anleitung ist gültig für Raspbian auf der Basis von Debian 10.x aka. Buster.
Der OpenSSH-Server wird nicht automatisch gestartet!
Daher nicht vergessen nach dem schreiben der *.img-Datei auf die SD-Karte eine leere Datei mit dem Namen ssh (ohne Endung) in der boot-Partition abzulegen - sonst kann man sich nicht per SSH über das Netzwerk einloggen ;-)
Aktuell verwende ich 2019-09-26-raspbian-buster-lite.img.
ssh <R-PI-IP>
sudo su
#raspi-config nonint do_expand_rootfs
raspi-config nonint do_hostname fhem-lan
timedatectl set-timezone Europe/Berlin
raspi-config nonint do_i2c 1
raspi-config nonint do_onewire 0
 
#
# reboot um Änderungen wirksam werden zu lassen ...
shutdown -r now && exit
# Grundsystem aktualisieren ...
apt-get update
apt-get upgrade
apt-get purge pi-bluetooth bluez usb-modeswitch wolfram-engine libreoffice* scratch -y
apt-get clean
apt-get autoremove -y
apt-get install aptitude mc dos2unix apt-transport-https ntp ntpdate
# oracle-java8-jdk wird leider nicht mehr im Repositors geführt :-(. Ersatz (Zulu) siehe unten
#
# privaten NTP Server eintragen
mcedit /etc/ntp.conf
 --> server 192.168.100.1
#
## service ntp status
systemctl status ntp
systemctl enable ntp
systemctl start ntp

Systemkonfiguration

WLAN

… mit statischer IP, damit der Raspberry auch per SSH erreichbar ist wenn gerade kein DHCP-Server die automatische Verteilung der Netzwerkparameter vornehmen kann.

sudo su
#
# --> habe ich hicht wieder verwende, lasse ich aber informativ hier stehen ...
#
# DNS-Dienst systemd-resolved aktivieren und starten:
#systemctl enable systemd-resolved.service
#systemctl start systemd-resolved.service
#
# Prüfen, ob der Dienst laeuft:
#systemctl status systemd-resolved
#
 
# Stromsparfunktion des WLAN Adapters deaktivieren
echo "options 8192cu rtw_power_mgnt=0 rtw_enusbss=0" > /etc/modprobe.d/8192cu.conf
#

mcedit /etc/dhcpcd.conf

dhcpcd.conf
interface wlan0
metric 100
static ip_address=192.168.100.13/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1
 
interface eth0
metric 300
static ip_address=192.168.100.12/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1
# Netzwerkschnittstellen (eth0 und wlan0) mit festen IP Adressen konfigurieren:
mcedit /etc/network/interfaces
...
auto lo
iface lo inet loopback
 
allow-hotplug eth0
auto eth0
 
allow-hotplug wlan0
auto wlan0
  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
# wpa_supplicant.conf erstellen mit:
wpa_passphrase "MYSSID" "MYPASSWORD" >> /etc/wpa_supplicant/wpa_supplicant.conf
 
# Beispiel für eine /etc/wpa_supplicant/wpa_supplicant.conf mit zwei WLAN SSIDs und Priorisierung (höhere Zahl = höhere Priorität!)
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
	ssid="wlan_EXT"
	#psk="WLAN-KEY1"
	psk=WLAN-KEY1_encrypted
	priority=2
	id_str="homewlanext"
}
 
network={
	ssid="wlan"
	#psk="WLAN-KEY2"
	psk=WLAN-KEY2_encrypted
	priority=1
	id_str="homewlan"
}
 
# DHCP Client Daemon aktivieren:
systemctl enable dhcpcd
systemctl status dhcpcd
systemctl enable wpa_supplicant
systemctl start wpa_supplicant
 
# abschließender Reboot
shutdown -r now && exit

Echtzeituhr DS1307Z

apt-get install i2c-tools
#
echo "i2c-dev" >> /etc/modules
echo "rtc-ds1307" >> /etc/modules
echo "i2c-bcm2708" >> /etc/modules
echo "HWCLOCKACCESS=yes" >> /etc/default/hwclock
echo "HCTOSYS_DEVICE=rtc0" >> /etc/default/hwclock
echo "dtparam=i2c_arm=on" >> /boot/config.txt
echo "dtoverlay=i2c-rtc,ds1307" >> /boot/config.txt
 
mcedit /etc/init.d/hwclock.sh
# Nach der Zeile 'case "$1" in start)' werden die folgenden drei Zeilen auskommentieren ('#' voran stellen):
#
# ...
  #if [ -d /run/udev ] || [ -d /dev/.udev ]; then
  #   return 0
  #fi
# ...
# Nun die Datei speichern und den Editor verlassen.
# abschließender Reboot damit das neue Gerät beim Starten erkannt und eingebunden wird.
shutdown -r now && exit
 
#
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
# Zeit mit von einem NTP Server synchronisieren:
ntpdate 192.168.100.1
 
# aktuelle Systemzeit und Datum kontrollieren:
date
 
# Hardware Uhr (RTC) auslesen:
hwclock -r
 
# Systemzeit und Datum in Hardware Uhr (RTC) schreiben:
hwclock -w
 
# Hardware Uhr (RTC) auslesen:
hwclock -r
 
#
mcedit /etc/rc.local
#
#echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
#sleep 2
/sbin/hwclock -s
exit 0
#
# nicht benötigte Systemdienste abschalten und entfernen:
update-rc.d -f fake-hwclock disable
update-rc.d -f fake-hwclock remove
apt-get remove fake-hwclock
update-rc.d hwclock.sh enable
#
# abschließender Neustart:
shutdown -r now && exit
#

Java (Zulu) installieren

sudo su
apt-get install dirmngr
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0x219BD9C9
echo 'deb http://repos.azulsystems.com/debian stable main' | sudo tee /etc/apt/sources.list.d/zulu.list
#
apt-get update
apt-get install zulu-embedded-8
 
# check Java Version:
java -version
 
update-alternatives --config java

openHab 2.x

Installation

wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.list
apt-get update
apt-get install openhab2 openhab2-addons
 
#mkdir -p /var/log/openhab2
#touch /var/log/openhab2/openhab.log
#chown -R openhab:openhab /var/log/openhab2
#
#apt-get purge openhab2 openhab2-addons; apt-get install openhab2 openhab2-addons
#
adduser openhab dialout
adduser openhab gpio
#
touch /etc/openhab2/services/gpio.cfg
echo "sysfs=/sys" >> /etc/openhab2/services/gpio.cfg
echo "debounce=10" >> /etc/openhab2/services/gpio.cfg
chown -R openhab:openhab /etc/openhab2/services/gpio.cfg
echo "package = expert" >> /etc/openhab2/services/addons.cfg
echo "binding = gpio1,jeelink,onewiregpio,mqtt" >> /etc/openhab2/services/addons.cfg
echo "misc = mqttbroker" >> /etc/openhab2/services/addons.cfg
echo "persistence = rrd4j" >> /etc/openhab2/services/addons.cfg
echo "legacy = true"  >> /etc/openhab2/services/addons.cfg
#
systemctl daemon-reload
systemctl enable openhab2.service
systemctl start openhab2.service
systemctl status openhab2.service
#
#shutdown -r now
#
openhab-cli status
# ca. 10 Minuten warten ...
#
# Start im Log beobachten:
tail -f /var/log/openhab2/openhab.log
#

openHAB2 Webseite http://<RASPBERRY-PI-IP>:8080/start/index im Browser öffnen

Dieses Kapitel beschreibt die Konfiguration der eingesetzten Funk Temperatur- und Feuchtesensoren des Herstellers TechnoLine vom Typ TX29DTH-IT.
Als Empfänger verwende ich einen CUL (CC1101 USB Lite) Eignenbau.
Zum Erzeugen der folgenden Konfiguration(en) ist es hilfreich und sinnvoll, openHAB2 kurzfristig zu deaktivieren.

systemctl stop openhab2.service
# systemctl disable openhab2.service

Things

touch /etc/openhab2/things/lacrosse.things
chown -R openhab:openhab /etc/openhab2/things/lacrosse.things
lacrosse.thing
// Eine Kommentarzeile beginnt immer mit //.
// Thing <binding_id>:<type_id>:<thing_id> "Label" @ "Location" [ <parameters> ]
Thing jeelink:jeelinkUsb:lacrosse "JeeLink USB Empfänger" @ "RaspberryPi" [ serialPort="/dev/ttyUSB0" ]
//
//      Treiber:Produkt:Gerät "NAME" (BRIDGE) @ LOCATION [ sensorID="xx" ]
//Thing network:device:webcam           "Webcam"                                          @ "Living Room"  [ hostname="192.168.0.2", timeout="5000", ... ]
//sensorID = ID im Display in  HEX --> DEZ:4; z.B. 0x4C --> 76/4 = 19
Thing jeelink:lacrosse:TX29DTH_IT_01 "TX29DTH_IT_Sensor01" (jeelink:jeelinkUsb:lacrosse)  @ "Draussen" [ sensorId="8" ]
Thing jeelink:lacrosse:TX29DTH_IT_02 "TX29DTH_IT_Sensor02" (jeelink:jeelinkUsb:lacrosse)  @ "Jonas Zimmer" [ sensorId="19" ]
Thing jeelink:lacrosse:TX29DTH_IT_03 "TX29DTH_IT_Sensor03" (jeelink:jeelinkUsb:lacrosse)  @ "Badezimmer" [ sensorId="34" ]
Thing jeelink:lacrosse:TX29DTH_IT_04 "TX29DTH_IT_Sensor04" (jeelink:jeelinkUsb:lacrosse)  @ "Schlafzimmer" [ sensorId="32" ]
Thing jeelink:lacrosse:TX29DTH_IT_05 "TX29DTH_IT_Sensor05" (jeelink:jeelinkUsb:lacrosse)  @ "Kueche" [ sensorId="29" ]
Thing jeelink:lacrosse:TX29DTH_IT_06 "TX29DTH_IT_Sensor06" (jeelink:jeelinkUsb:lacrosse)  @ "Wohnzimmer" [ sensorId="28" ]
Thing jeelink:lacrosse:TX29DTH_IT_07 "TX29DTH_IT_Sensor07" (jeelink:jeelinkUsb:lacrosse)  @ "Gaestezimmer" [ sensorId="60" ]
Thing jeelink:lacrosse:TX29DTH_IT_08 "TX29DTH_IT_Sensor08" (jeelink:jeelinkUsb:lacrosse)  @ "Wintergarten" [ sensorId="52" ]
Thing jeelink:lacrosse:TX29DTH_IT_09 "TX29DTH_IT_Sensor09" (jeelink:jeelinkUsb:lacrosse)  @ "IT-Schrank" [ sensorId="47" ]

Items

Full path: /etc/openhab2/items/lacrosse_sensors.items

touch /etc/openhab2/items/lacrosse_sensors.items
chown -R openhab:openhab /etc/openhab2/items/lacrosse_sensors.items
lacrosse_sensors.items
//itemtype            itemname                            "labeltext [stateformat]"   <iconname> (group1, group2, ...) ["tag1", "tag2", ...] {bindingconfig}
//
// unbekannter Aussensensor
Number:Temperature TX29DTH_IT_Sensor01_Temperatur "TX29DTH-IT Sensor 01 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_01:temperature"}
//Contact TX29DTH_IT_Sensor01_Battery_Low_LR "TX29DTH-IT Sensor 01 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_01:batteryLow"}
//Contact TX29DTH_IT_Sensor01_Battery_New_LR "TX29DTH-IT Sensor 01 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_01:batteryNew"}
//
//TX29DTH_IT_Sensor02
Number:Dimensionless TX29DTH_IT_Sensor02_Luftfeuchtigkeit "TX29DTH-IT Sensor 02 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_02:humidity"}
Number:Temperature TX29DTH_IT_Sensor02_Temperatur "TX29DTH-IT Sensor 02 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_02:temperature"}
Contact TX29DTH_IT_Sensor02_Battery_Low_LR "TX29DTH-IT Sensor 02 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_02:batteryLow"}
Contact TX29DTH_IT_Sensor02_Battery_New_LR "TX29DTH-IT Sensor 02 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_02:batteryNew"}
//
// TX29DTH_IT_Sensor03
Number:Dimensionless TX29DTH_IT_Sensor03_Luftfeuchtigkeit "TX29DTH-IT Sensor 03 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_03:humidity"}
Number:Temperature TX29DTH_IT_Sensor03_Temperatur "TX29DTH-IT Sensor 03 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_03:temperature"}
Contact TX29DTH_IT_Sensor03_Battery_Low_LR "TX29DTH-IT Sensor 03 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_03:batteryLow"}
Contact TX29DTH_IT_Sensor03_Battery_New_LR "TX29DTH-IT Sensor 03 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_03:batteryNew"}
//
// TX29DTH_IT_Sensor04
Number:Dimensionless TX29DTH_IT_Sensor04_Luftfeuchtigkeit "TX29DTH-IT Sensor 04 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_04:humidity"}
Number:Temperature TX29DTH_IT_Sensor04_Temperatur "TX29DTH-IT Sensor 04 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_04:temperature"}
Contact TX29DTH_IT_Sensor04_Battery_Low_LR "TX29DTH-IT Sensor 04 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_04:batteryLow"}
Contact TX29DTH_IT_Sensor04_Battery_New_LR "TX29DTH-IT Sensor 04 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_04:batteryNew"}
//
// TX29DTH_IT_Sensor05
Number:Dimensionless TX29DTH_IT_Sensor05_Luftfeuchtigkeit "TX29DTH-IT Sensor 05 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_05:humidity"}
Number:Temperature TX29DTH_IT_Sensor05_Temperatur "TX29DTH-IT Sensor 05 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_05:temperature"}
Contact TX29DTH_IT_Sensor05_Battery_Low_LR "TX29DTH-IT Sensor 05 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_05:batteryLow"}
Contact TX29DTH_IT_Sensor05_Battery_New_LR "TX29DTH-IT Sensor 05 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_05:batteryNew"}
//
// TX29DTH_IT_Sensor06
Number:Dimensionless TX29DTH_IT_Sensor06_Luftfeuchtigkeit "TX29DTH-IT Sensor 06 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_06:humidity"}
Number:Temperature TX29DTH_IT_Sensor06_Temperatur "TX29DTH-IT Sensor 06 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_06:temperature"}
Contact TX29DTH_IT_Sensor06_Battery_Low_LR "TX29DTH-IT Sensor 06 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_06:batteryLow"}
Contact TX29DTH_IT_Sensor06_Battery_New_LR "TX29DTH-IT Sensor 06 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_06:batteryNew"}
//
// TX29DTH_IT_Sensor07
Number:Dimensionless TX29DTH_IT_Sensor07_Luftfeuchtigkeit "TX29DTH-IT Sensor 07 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_07:humidity"}
Number:Temperature TX29DTH_IT_Sensor07_Temperatur "TX29DTH-IT Sensor 07 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_07:temperature"}
Contact TX29DTH_IT_Sensor07_Battery_Low_LR "TX29DTH-IT Sensor 07 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_07:batteryLow"}
Contact TX29DTH_IT_Sensor07_Battery_New_LR "TX29DTH-IT Sensor 07 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_07:batteryNew"}
//
// TX29DTH_IT_Sensor08
Number:Dimensionless TX29DTH_IT_Sensor08_Luftfeuchtigkeit "TX29DTH-IT Sensor 08 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_08:humidity"}
Number:Temperature TX29DTH_IT_Sensor08_Temperatur "TX29DTH-IT Sensor 08 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_08:temperature"}
Contact TX29DTH_IT_Sensor08_Battery_Low_LR "TX29DTH-IT Sensor 08 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_08:batteryLow"}
Contact TX29DTH_IT_Sensor08_Battery_New_LR "TX29DTH-IT Sensor 08 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_08:batteryNew"}
//
// TX29DTH_IT_Sensor09
Number:Dimensionless TX29DTH_IT_Sensor09_Luftfeuchtigkeit "TX29DTH-IT Sensor 09 Luftfeuchtigkeit [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:TX29DTH_IT_09:humidity"}
Number:Temperature TX29DTH_IT_Sensor09_Temperatur "TX29DTH-IT Sensor 09 Temeratur [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:TX29DTH_IT_09:temperature"}
Contact TX29DTH_IT_Sensor09_Battery_Low_LR "TX29DTH-IT Sensor 09 Battery Low" {channel="jeelink:lacrosse:TX29DTH_IT_09:batteryLow"}
Contact TX29DTH_IT_Sensor09_Battery_New_LR "TX29DTH-IT Sensor 09 Battery New" {channel="jeelink:lacrosse:TX29DTH_IT_09:batteryNew"}

Konfiguration Gaszähler

Zur Erfassung des Gasverbruches habe ich einen kleinen Reedkontakt unterhalb der letzten Zählerstelle am Gaszähler angebracht. Die umlaufende Liter-Scheibe hat an der 0 einen Magneten, so dass jeweils ein Schaltimpuls pro Umdrehung (10 Liter Gas) erfassbar ist. Der Impuls wir über einen GPI/O Pin am R-Pi eingelesen und aufsummiert.

Item

Full path: /etc/openhab2/items/gaszaehler.items

touch /etc/openhab2/items/gaszaehler.items
chown -R openhab:openhab /etc/openhab2/items/gaszaehler.items
gaszaehler.items
Contact Gaszaehler_Reedkontakt "Gaszaehler Reedkontakt [%s]" { gpio="pin:17 activelow:yes debounce:100" }
 
//Gruppen für die Sitemap-Einbindung
Group	Gas
Group	Aussen
Group	Badezimmer
Group	Jonas_Zimmer
Group	Kueche
Group	Schlafzimmer
Group	Wohnzimmer
Group	Gaestezimmer
Group	Wintergarten
Group	IT_Schrank
Group	Heizung
 
//Group   Strom
//Number Shelly1_2_PM_Gesamtverbrauch "Strom Gesamtverbrauch [%.5f kWh]" (Strom)
//Number Shelly1_2_PM_Tagesverbrauch "Strom Tagesverbrauch [%.5f kWh]" (Strom)
//Number Shelly1_2_PM_Intervallverbrauch "Strom Intervallverbrauch [%.5f kWh]" (Strom)
 
//Gruppe für den Chart
//Group	Gas_Chart
//Group	Temp_Aussen_Chart
 
// Der Tagesverbrauch - jeweils auf zwei Nachkommastellen gerundet
Number	Gas_Tagesverbrauch	"Gas Tagesverbrauch [%.2f m3]" (Gas)
 
// Der Gas Gesamtverbrauch - jeweils auf zwei Nachkommastellen gerundet
Number	Gas_Gesamtverbrauch	"Gas Gesamtverbrauch [%.2f m3]" (Gas)
 
// Benoetigt, um die Zeitintervalle fuer die grafische Darstellung festlegen zu koennen
Number	Gas_Tag_Chart_Intervall	"Gas_Chart-Intervall"
Number	Gas_Gesamt_Chart_Intervall	"Gas_Chart-Intervall"
Number	Temp_Chart_Intervall	"Temp_Chart-Intervall"
Number	Humid_Chart_Intervall	"Humid_Chart-Intervall"

Rules

Das Regelwerk zur Berechnung der Zählerstände des Gaszählers:

Full path: /etc/openhab2/rules/gas_counter.rules

touch /etc/openhab2/rules/gas_counter.rules
chown -R openhab:openhab /etc/openhab2/rules/gas_counter.rules
gas_counter.rules
var Number Letzter_abgelesener_Zaehlerstand = 9748.25
var Number Letzter_abgelesener_Tagesstand = 6.80
var Number Einheit = 0.01
 
rule "Increment Gas Meter"
when
	Item  Gaszaehler_Reedkontakt changed from OPEN to CLOSED
then
// Initialer Start - die beiden folgenden Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
//	postUpdate(Gas_Tagesverbrauch, 0.0)
//	postUpdate(Gas_Gesamtverbrauch, 0.0)
 
// Aktuellen Zaehlerstand setzten - die folgenden drei Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
//	if (Gas_Gesamtverbrauch.state != NULL && Gas_Gesamtverbrauch.state < Letzter_abgelesener_Zaehlerstand)  {
//		postUpdate(Gas_Gesamtverbrauch, (Letzter_abgelesener_Zaehlerstand))
//	}
// ggf. auch den Tageszähler neu setzten ...
//	if (Gas_Tagesverbrauch.state != NULL && Gas_Tagesverbrauch.state < Letzter_abgelesener_Tagesstand)  {
//		postUpdate(Gas_Tagesverbrauch, (Letzter_abgelesener_Tagesstand))
//	}
 
// der Rest wird immer ausgefuehrt
	postUpdate(Gas_Tagesverbrauch, (Gas_Tagesverbrauch.state as DecimalType + Einheit))
	logInfo("gas_counter.rules", "Gas_Tagesverbrauch: " +Gas_Tagesverbrauch.state)
 
	postUpdate(Gas_Gesamtverbrauch, (Gas_Gesamtverbrauch.state as DecimalType + Einheit))
	logInfo("gas_counter.rules", "Gas_Gesamtverbrauch: " +Gas_Gesamtverbrauch.state)
end
 
rule "Reset Gas Tagesverbrauch"
when
	Time is midnight
then
		executeCommandLine("/etc/openhab2/scripts/log_gas_tagesverbrauch.sh"+"@@"+Gas_Tagesverbrauch.state+"@@"+Gas_Gesamtverbrauch.state )
		postUpdate(Gas_Tagesverbrauch, 0.0)
end

Scripts

Zur sicherung des Tageszählers und des Gesamtzählers ein keines Script:

Full path: /etc/openhab2/scripts/log_gas_tagesverbrauch.sh

touch /etc/openhab2/scripts/log_gas_tagesverbrauch.sh
chown -R openhab:openhab /etc/openhab2/scripts/log_gas_tagesverbrauch.sh
chmod +x /etc/openhab2/scripts/log_gas_tagesverbrauch.sh
touch /home/pi/gas_tagesverbrauch.log
chown openhab:openhab /home/pi/gas_tagesverbrauch.log
log_gas_tagesverbrauch.sh
#!/bin/sh
NOW=$(date -d "yesterday 00:00" '+%Y-%m-%d')
echo "Datum:	$NOW	Tagesverbrauch:	$1	Gesamtverbrauch:	$2" >> /home/pi/gas_tagesverbrauch.log
echo "Datum:	$NOW	Tagesverbrauch:	$1	Gesamtverbrauch:	$2" >> /tmp/gas_tagesverbrauch.log

Sitemap (TMP)

Vereinfachte default.sitemap zur schnellen Darstellung während der Entwicklung:

touch /etc/openhab2/sitemaps/default.sitemap
chown -R openhab:openhab /etc/openhab2/sitemaps/default.sitemap
default.sitemap
sitemap default label="Christophs Hausautomation" {
    Frame label="Überblick" {
//    Text label="Gas Tagesverbrauch" item=Gas_Tagesverbrauch icon="fire"
//    Text label="Gas Gesamtverbrauch" item=Gas_Gesamtverbrauch icon="fire"
//
      Text label="Vorlauftemperatur" item=Heizung_Vorlauftemperatur icon="temperature"
      Text label="Ruecklauftemperatur" item=Heizung_Ruecklauftemperatur icon="temperature"
//    Switch label="Heizung Hauptschalter" item=Shell11Heizung_Hauptschalter
//
      Text label="Raumtemperatur Jonas" item=TX29DTH_IT_Sensor02_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Jonas" item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur Badezimmer" item=TX29DTH_IT_Sensor03_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Badezimmer" item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur Schlafzimmer" item=TX29DTH_IT_Sensor04_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Schlafzimmer" item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur Kueche" item=TX29DTH_IT_Sensor05_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Kueche" item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur Wohnzimmer" item=TX29DTH_IT_Sensor06_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Wohnzimmer" item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur Gaestezimmer" item=TX29DTH_IT_Sensor07_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Gaestezimmer" item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur Wintergarten" item=TX29DTH_IT_Sensor08_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit Wintergarten" item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit icon="humidity"
      Text label="Raumtemperatur IT-Schrank" item=TX29DTH_IT_Sensor09_Temperatur icon="temperature"
      Text label="Luftfeuchtigkeit IT-Schrank" item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit icon="humidity"
      Text label="Aussentemperatur" item=TX29DTH_IT_Sensor01_Temperatur icon="temperature"
    }
}

Sitemaps

Komplette default.sitemap zur Darstellung der Webseite mit allen Informationen, Grafiken und dem Hauptschalter für die Heizung.

Full path: /etc/openhab2/sitemaps/default.sitemap

touch /etc/openhab2/sitemaps/default.sitemap
chown -R openhab:openhab /etc/openhab2/sitemaps/default.sitemap
default.sitemap
sitemap default label="Christophs Hausautomation" {
  Frame label="Überblick" {
    Text label="Gas Tagesverbrauch" item=Gas_Tagesverbrauch icon="fire"
    Text label="Gas Gesamtverbrauch" item=Gas_Gesamtverbrauch icon="fire"
    Text label="Aussentemperatur" item=TX29DTH_IT_Sensor01_Temperatur icon="temperature"
    Text label="Vorlauftemperatur" item=Heizung_Vorlauftemperatur icon="temperature"
    Text label="Ruecklauftemperatur" item=Heizung_Ruecklauftemperatur icon="temperature"
    Switch label="Heizung Hauptschalter" item=Heizung_Hauptschalter
  }
 
  Frame {
    Group label="Heizung" icon="fire" item=Gas {
      Frame {
	Text label="Gas Tagesverbrauch" item=Gas_Tagesverbrauch icon="fire"
	Text label="Gas Gesamtverbrauch" item=Gas_Gesamtverbrauch icon="fire"
	Text label="Vorlauftemperatur" item=Heizung_Vorlauftemperatur icon="temperature"
	Text label="Ruecklauftemperatur" item=Heizung_Ruecklauftemperatur icon="temperature"
	Switch label="Heizung Hauptschalter" item=Heizung_Hauptschalter
//	Chart item=Gas_Tagesverbrauch period=d refresh=10000 legend=true
//	Chart item=TX29DTH_IT_Sensor01_Temperatur period=d refresh=10000 legend=true
      }
 
      Frame label="Grafiken zum Gas Tagesverbrauch" icon="chart" {
	Switch item=Gas_Tag_Chart_Intervall label="Gas Tagesverbrauch" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=Gas_Tagesverbrauch period=h refresh=30000 visibility=[Gas_Tag_Chart_Intervall==0, Gas_Tag_Chart_Intervall=="Uninitialized"]
	Chart item=Gas_Tagesverbrauch period=D refresh=30000 visibility=[Gas_Tag_Chart_Intervall==1]
	Chart item=Gas_Tagesverbrauch period=W refresh=30000 visibility=[Gas_Tag_Chart_Intervall==2]
	Chart item=Gas_Tagesverbrauch period=2W refresh=30000 visibility=[Gas_Tag_Chart_Intervall==3]
	Chart item=Gas_Tagesverbrauch period=M refresh=30000 visibility=[Gas_Tag_Chart_Intervall==4]
	Chart item=Gas_Tagesverbrauch period=2M refresh=30000 visibility=[Gas_Tag_Chart_Intervall==5]
	Chart item=Gas_Tagesverbrauch period=4M refresh=30000 visibility=[Gas_Tag_Chart_Intervall==6]
      }
 
      Frame label="Grafiken zum Gas Gesamtverbrauch" icon="chart" {
	Switch item=Gas_Gesamt_Chart_Intervall label="Gesamt Gasverbrauch" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=Gas_Gesamtverbrauch period=h refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==0, Gas_Gesamt_Chart_Intervall=="Uninitialized"]
	Chart item=Gas_Gesamtverbrauch period=D refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==1]
	Chart item=Gas_Gesamtverbrauch period=W refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==2]
	Chart item=Gas_Gesamtverbrauch period=2W refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==3]
	Chart item=Gas_Gesamtverbrauch period=M refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==4]
	Chart item=Gas_Gesamtverbrauch period=2M refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==5]
	Chart item=Gas_Gesamtverbrauch period=4M refresh=30000 visibility=[Gas_Gesamt_Chart_Intervall==6]
      }
 
      Frame label="Grafiken zur Aussentemperatur" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Aussentemperatur" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
 
      Frame label="Grafiken zur Vorlauftemperatur" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Vorlauftemperatur" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=Heizung_Vorlauftemperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=Heizung_Vorlauftemperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=Heizung_Vorlauftemperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=Heizung_Vorlauftemperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=Heizung_Vorlauftemperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=Heizung_Vorlauftemperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=Heizung_Vorlauftemperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Grafiken zur Ruecklauftemperatur" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Ruecklauftemperatur" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=Heizung_Ruecklauftemperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=Heizung_Ruecklauftemperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=Heizung_Ruecklauftemperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=Heizung_Ruecklauftemperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=Heizung_Ruecklauftemperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=Heizung_Ruecklauftemperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=Heizung_Ruecklauftemperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
    }
  }
 
  Frame {
    Group label="Draußen" icon="garden" item=Aussen {
      Frame label="Aussentemperatur" {
	  Text item=TX29DTH_IT_Sensor01_Temperatur icon="temperature"
      }
//	    Frame label="Aussentemperatur" {
//		Chart item=TempSensorXxAussen_Temperatur period=d refresh=10000
//	    }
      Frame label="Grafiken zur Aussentemperatur" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Aussentemperatur" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor01_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
    }
  }
 
  Frame {
    Group label="Jonas Zimmer" icon="bedroom" item=Jonas_Zimmer {
      Frame label="Jonas Zimmer" {
	Text item=TX29DTH_IT_Sensor02_Temperatur icon="temperature"
        Text item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur in Jonas Zimmer" {
//		Chart item=TX29DTH_IT_Sensor02_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit in Jonas Zimmer" {
//		Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur in Jonas Zimmer" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur in Jonas Zimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor02_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit in Jonas Zimmer" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit in Jonas Zimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor02_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  }
 
  Frame {
    Group label="Badezimmer" icon="bath" item=Badezimmer {
      Frame label="Badezimmer" {
        Text item=TX29DTH_IT_Sensor03_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur im Badezimmer" {
//		Chart item=TX29DTH_IT_Sensor03_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Badezimmer" {
//		Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur im Badezimmer" icon="chart" {
        Switch item=Temp_Chart_Intervall label="Temperatur im Badezimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor03_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor03_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
        Chart item=TX29DTH_IT_Sensor03_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor03_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor03_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor03_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor03_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit im Badezimmer" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit im Badezimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor03_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    } 
  }
 
  Frame {
    Group label="Schlafzimmer" icon="bedroom" item=Schlafzimmer {
      Frame label="Schlafzimmer" {
	Text item=TX29DTH_IT_Sensor04_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur im Schalfzimmer" {
//		Chart item=TX29DTH_IT_Sensor04_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Schlafzimmer" {
//		Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur im Schlafzimmer" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur im Schlafzimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor04_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit im Schlafzimmer" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit im Schlafzimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor04_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  }
 
  Frame {
    Group label="Küche" icon="kitchen" item=Kueche {
      Frame label="Küche" {
        Text item=TX29DTH_IT_Sensor05_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur in der Küche" {
//		Chart item=TX29DTH_IT_Sensor05_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit in der Küche" {
//		Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur in der Küche" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur in der Küche" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor05_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit in der Küche" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit in der Küche" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
        Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor05_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  }
 
  Frame {
    Group label="Wohnzimmer" icon="terrace" item=Wohnzimmer {
      Frame label="Wohnzimmer" {
	Text item=TX29DTH_IT_Sensor06_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur im Wohnzimmer" {
//		Chart item=TX29DTH_IT_Sensor06_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Wohnzimmer" {
//		Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur im Wohnzimmer" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur im Wohnzimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor06_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit im Wohnzimmer" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit im Wohnzimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor06_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  }
  Frame {
    Group label="Gaestezimmer" icon="bedroom" item=Gaestezimmer {
      Frame label="Gaestezimmer" {
	Text item=TX29DTH_IT_Sensor07_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur im Gaestezimmer" {
//		Chart item=TX29DTH_IT_Sensor07_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Gaestezimmer" {
//		Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur im Gaestezimmer" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur im Gaestezimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor07_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit im Gaestezimmer" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit im Gaestezimmer" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor07_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  }
  Frame {
    Group label="Wintergarten" icon="greenhouse" item=Wintergarten {
      Frame label="Wintergarten" {
	Text item=TX29DTH_IT_Sensor08_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur im Wintergarten" {
//		Chart item=TX29DTH_IT_Sensor08_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Wintergarten" {
//		Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur im Wintergarten" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur im Wintergarten" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor08_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit im Wintergarten" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit im Wintergarten" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor08_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  }
  Frame {
    Group label="IT-Schrank" icon="mediacontrol" item=IT_Schrank {
      Frame label="IT-Schrank" {
	Text item=TX29DTH_IT_Sensor09_Temperatur icon="temperature"
	Text item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit icon="humidity"
      }
//	    Frame label="Temperatur im IT-Schrank" {
//		Chart item=TX29DTH_IT_Sensor09_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im IT-Schrank" {
//		Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=d refresh=10000
//	    }
      Frame label="Temperatur im IT-Schrank" icon="chart" {
	Switch item=Temp_Chart_Intervall label="Temperatur im IT-Schrank" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor09_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
      }
      Frame label="Luftfeuchtigkeit im IT-Schrank" icon="chart" {
	Switch item=Humid_Chart_Intervall label="Luftfeuchtigkeit im IT-Schrank" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TX29DTH_IT_Sensor09_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
      }
    }
  } 
}

Persistence

Damit ich den Temperaturverlauf über der Zeit sowie den zugehörigen Gasverbrauch darstellen kann müssen alle aufgenommenen Werte in einer Datenbank gespeichert werden.

Full path: /etc/openhab2/persistence/rrd4j.persist

touch /etc/openhab2/persistence/rrd4j.persist
chown -R openhab:openhab /etc/openhab2/persistence/rrd4j.persist
rrd4j.persist
// persistence strategies have a name and a definition and are referred to in the "Items" section
Strategies {
	// for rrd, we need a cron strategy
	everyMinute : "0 * * * * ?"
//	everyHour : "0 0 * * * ?"
//	everyDay : "0 0 0 * * ?"
}
 
Items {
	Gas_Tagesverbrauch : strategy = everyMinute, restoreOnStartup
	Gas_Gesamtverbrauch : strategy = everyMinute, restoreOnStartup
//	Gas_Chart* : strategy = everyMinute,restoreOnStartup
	TX29DTH_IT_Sensor01_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor02_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor02_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor03_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor03_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor04_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor04_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor05_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor05_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor06_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor06_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor07_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor07_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor08_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor08_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor09_Temperatur : strategy = everyMinute, restoreOnStartup
	TX29DTH_IT_Sensor09_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
//	Temp_Aussen_Chart* : strategy = everyMinute,restoreOnStartup
	Heizung_Ruecklauftemperatur : strategy = everyMinute, restoreOnStartup
	Heizung_Vorlauftemperatur : strategy = everyMinute, restoreOnStartup
      //Shelly1_2_PM_Gesamtverbrauch : strategy = everyMinute, restoreOnStartup
      //Shelly1_2_PM_Tagesverbrauch : strategy = everyMinute, restoreOnStartup
      //Shelly1_2_PM_Intervallverbrauch : strategy = everyMinute, restoreOnStartup
}

One Wire Bus

Zur Erfassung der Vor- und Rücklauftemperaturen meiner Heizung setze ich zwei sog. 1-Wire Temperatursensoren vom Typ DS18S20 des Herstellers MAXIM Integrated.

sudo su
echo "dtoverlay=w1-gpio,gpiopin=4" >> /boot/config.txt
# --> reboot
sudo su
ls /sys/bus/w1/devices/
  10-000801f0d39e  w1_bus_master1
#
# !-Wire Sensor testweise auslesen:
# Sensor 1: hier die Vorlauftemperatur:
watch -n 0.5 cat /sys/bus/w1/devices/10-00080359c712/w1_slave
# Sensor 2: hier die Ruecklauftemperatur:
watch -n 0.5 cat /sys/bus/w1/devices/10-00080359e7fe/w1_slave 

Full path: /etc/openhab2/things/onewire.things

touch /etc/openhab2/things/onewire.things
chown -R openhab:openhab /etc/openhab2/things/onewire.things

Things

onewire.things
Thing onewiregpio:sensor:ds18s20_c712 "Heizung" [gpio_bus_file="/sys/bus/w1/devices/10-00080359c712/w1_slave",refresh_time=30]
Thing onewiregpio:sensor:ds18s20_e7fe "Heizung" [gpio_bus_file="/sys/bus/w1/devices/10-00080359e7fe/w1_slave",refresh_time=30]

Full path: /etc/openhab2/things/onewire.things

touch /etc/openhab2/items/onewire.items
chown -R openhab:openhab /etc/openhab2/items/onewire.items

Items

onewire.items
Number:Temperature Heizung_Vorlauftemperatur "Temperatur: [%.2f %unit%]" <temperature>  { channel="onewiregpio:sensor:ds18s20_c712:temperature" }
Number:Temperature Heizung_Ruecklauftemperatur "Temperatur: [%.2f %unit%]" <temperature>  { channel="onewiregpio:sensor:ds18s20_e7fe:temperature" }

Heizung AN/AUS schalten mit einem Shelly

Zum Aus- und Einschalten der Heizung nutze ich einen sog. Shelly ein. Das ist ein günstiges WLAN Relais ohne Cloud-Gedöns das man noch ganz gut in eine klassische Abzweigdose einbauen kann.

ACHTUNG - Das Arbeiten unter Netzspannung ist Lebensgefährlich!
Vor Installation des WLAN-Schalters „Shelly 1“ unbedingt die 5 Sicherheitsregeln beachten.

Things

Full path: /etc/openhab2/items/mqtt.things

touch /etc/openhab2/things/mqtt.things
chown -R openhab:openhab /etc/openhab2/things/mqtt.things
mqtt.things
Bridge mqtt:broker:embedded_broker "OpenHAB embedded MQTT Broker" [ host="127.0.0.1", secure=false, clientID="openHAB2" ]
{
        Thing topic Heizung_Hauptschalter "Heizung Hauptschalter" @ "Heizung" {
                Channels:
                Type switch : power "Power" [ stateTopic="shellies/shelly1-2C82FA/relay/0", on="on", off="off", commandTopic="shellies/shelly1-2C82FA/relay/0/command", on="on", off="off" ] 
        }
}

Items

Full path: /etc/openhab2/items/mqtt.items

touch /etc/openhab2/items/mqtt.items
chown -R openhab:openhab /etc/openhab2/items/mqtt.items
mqtt.items
Switch Heizung_Hauptschalter "Heizung Hauptschalter" <switch> [ "Heizung Hauptschalter" ] { channel="mqtt:topic:embedded_broker:Heizung_Hauptschalter:power" }

Leistungsmessung mit einem Shelly 1 PM

default.sitemap
sitemap default label="Christophs Hausautomation" {
  Frame label="Überblick" {
    Text label="Gas Tagesverbrauch" item=Gas_Tagesverbrauch icon="fire"
    Text label="Gas Gesamtverbrauch" item=Gas_Gesamtverbrauch icon="fire"
    Text label="Aussentemperatur" item=TX29DTH_IT_Sensor01_Temperatur icon="temperature"
    Text label="Shelly 1.2 PM Leistung" item=Shelly1_2_PM_Leistung icon="poweroutlet"
    Text label="Strom Intervallverbrauch" item=Shelly1_2_PM_Intervallverbrauch icon="fire"
    Text label="Strom Tagesverbrauch" item=Shelly1_2_PM_Tagesverbrauch icon="fire"
    Text label="Strom Gesamtverbrauch" item=Shelly1_2_PM_Gesamtverbrauch icon="fire"
//    Text label="Vorlauftemperatur" item=Heizung_Vorlauftemperatur icon="temperature"
//    Text label="Ruecklauftemperatur" item=Heizung_Ruecklauftemperatur icon="temperature"
    Switch label="Heizung Hauptschalter" item=Heizung_Hauptschalter
  }
 
  Frame {
    Group label="Leistungsverbrauch" icon="poweroutlet" item=Strom {
      Frame {
        Switch label="Shelly 1.2 PM Schalter" item=Shelly1_2_PM_Schalter
        Text label="Shelly 1.2 PM Leistung" item=Shelly1_2_PM_Leistung icon="poweroutlet"
        Text label="Strom Intervallverbrauch" item=Shelly1_2_PM_Intervallverbrauch icon="fire"
        Text label="Strom Tagesverbrauch" item=Shelly1_2_PM_Tagesverbrauch icon="fire"
        Text label="Strom Gesamtverbrauch" item=Shelly1_2_PM_Gesamtverbrauch icon="fire"
      }
 
//      Frame label="Grafiken zum Strom Intervallverbrauch" icon="chart" {
//        Switch item=Strom_Tag_Chart_Intervall label="Strom Intervallverbrauch" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=h refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==0, Strom_Tag_Chart_Intervall=="Uninitialized"]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=D refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==1]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=W refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==2]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=2W refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==3]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=M refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==4]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=2M refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==5]
//        Chart item=Shelly1_2_PM_Intervallverbrauch period=4M refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==6]
//      }
 
      Frame label="Grafiken zum Strom Tagesverbrauch" icon="chart" {
        Switch item=Strom_Tag_Chart_Intervall label="Strom Tagesverbrauch" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=h refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==0, Strom_Tag_Chart_Intervall=="Uninitialized"]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=D refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==1]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=W refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==2]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=2W refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==3]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=M refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==4]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=2M refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==5]
        Chart item=Shelly1_2_PM_Tagesverbrauch period=4M refresh=30000 legend=true visibility=[Strom_Tag_Chart_Intervall==6]
      }
 
      Frame label="Grafiken zum Strom Gesamtverbrauch" icon="chart" {
        Switch item=Strom_Gesamt_Chart_Intervall label="Strom Gesamtverbrauch" mappings=[0="letzte Stunde", 1="letzten 24h", 2="letzten 7 Tage", 3="letzten 2 Wochen", 4="letzer Monat", 5="letzten 2 Monate", 6="letzten 4 Monate" ]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=h refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==0, Strom_Gesamt_Chart_Intervall=="Uninitialized"]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=D refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==1]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=W refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==2]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=2W refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==3]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=M refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==4]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=2M refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==5]
        Chart item=Shelly1_2_PM_Gesamtverbrauch period=4M refresh=30000 legend=true visibility=[Strom_Gesamt_Chart_Intervall==6]
      }
    }
  }
}    

Full path: /etc/openhab2/items/mqtt.things

touch /etc/openhab2/things/mqtt.things
chown -R openhab:openhab /etc/openhab2/things/mqtt.things
mqtt.things
Bridge mqtt:broker:embedded_broker "OpenHAB embedded MQTT Broker" [ host="127.0.0.1", secure=false, clientID="openHAB2" ]
{
        Thing topic Shelly1_2_PM_Schalter "Shelly 1.2 PM Schalter" @ "Test" {
                Channels:
                Type switch : relais "Schalter" [ stateTopic="shellies/shelly1pm-B1E10D/relay/0", on="on", off="off", commandTopic="shellies/shelly1pm-B1E10D/relay/0/command", on="on", off="off" ]
                Type number : leistung "Leistung" [ stateTopic="shellies/shelly1pm-B1E10D/relay/0/power" ]
                Type number : energie "Energie" [ stateTopic="shellies/shelly1pm-B1E10D/relay/0/energy" ]
        }
}

Full path: /etc/openhab2/items/mqtt.items

touch /etc/openhab2/items/mqtt.items
chown -R openhab:openhab /etc/openhab2/items/mqtt.items
mqtt.items
Switch Shelly1_2_PM_Schalter "Shelly 1.2 PM Schalter" <switch> [ "Shelly 1.2 PM Schalter" ] { channel="mqtt:topic:embedded_broker:Shelly1_2_PM_Schalter:relais" }
Number Shelly1_2_PM_Leistung "Shelly 1.2 PM Leistung [%.2f W]" <power> [ "Shelly 1.2 PM Schalter" ] { channel="mqtt:topic:embedded_broker:Shelly1_2_PM_Schalter:leistung" }
Number Shelly1_2_PM_Energie "Shelly 1.2 PM Energie [%.2f Wh]" <energy> [ "Shelly 1.2 PM Schalter" ] { channel="mqtt:topic:embedded_broker:Shelly1_2_PM_Schalter:energie" }
//
Group Strom
Number Shelly1_2_PM_Gesamtverbrauch "Strom Gesamtverbrauch [%.5f kWh]" (Strom)
Number Shelly1_2_PM_Tagesverbrauch "Strom Tagesverbrauch [%.5f kWh]" (Strom)
Number Shelly1_2_PM_Intervallverbrauch "Strom Intervallverbrauch [%.5f kWh]" (Strom)

Full Path: /etc/openhab2/rules/shelly1_2_pm.rules

touch /etc/openhab2/rules/shelly1_2_pm.rules
chown -R openhab:openhab /etc/openhab2/rules/shelly1_2_pm.rules
shelly1_2_pm.rules
var Number last_count = 0.00
var Number diff = 0.00
 
rule "Convert Wmin to KWh"
when
  Item Shelly1_2_PM_Energie received update
then
 
// Initialer Start - die drei folgenden Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
//	postUpdate(Shelly1_2_PM_Gesamtverbrauch, 0.0)
//	postUpdate(Shelly1_2_PM_Tagesverbrauch, 0.0)
//	postUpdate(Shelly1_2_PM_Intervallverbrauch, 0.0)
//
 
if ( Shelly1_2_PM_Energie.state == 0.00000000 )  {
  diff = 0.00
  last_count = 0.00
}
 
diff = ((Shelly1_2_PM_Energie.state as DecimalType / (1000*60)) - last_count )
postUpdate(Shelly1_2_PM_Intervallverbrauch, (Shelly1_2_PM_Energie.state as DecimalType / (1000*60)))
logInfo("shelly1_2_pm.rules", "Strom Intervallverbrauch kWh: " + Shelly1_2_PM_Intervallverbrauch.state)
last_count  = Shelly1_2_PM_Intervallverbrauch.state
 
postUpdate(Shelly1_2_PM_Tagesverbrauch, (Shelly1_2_PM_Tagesverbrauch.state as DecimalType + diff ))
logInfo("shelly1_2_pm.rules", "Strom Tagesverbrauch kWh: " + Shelly1_2_PM_Tagesverbrauch.state)
 
postUpdate(Shelly1_2_PM_Gesamtverbrauch, (Shelly1_2_PM_Gesamtverbrauch.state as DecimalType + diff ))
logInfo("shelly1_2_pm.rules", "Strom Gesamtverbrauch kWh: " + Shelly1_2_PM_Gesamtverbrauch.state)
end
 
rule "Reset Strom Tagesverbrauch"
when
    Time is midnight
then
//	executeCommandLine("/etc/openhab2/scripts/log_gas_tagesverbrauch.sh"+"@@"+Gas_Tagesverbrauch.state+"@@"+Gas_Gesamtverbrauch.state )
	postUpdate(Shelly1_2_PM_Tagesverbrauch, 0.0)
end

Full Path: /etc/openhab2/persistence/rrd4j.persist

touch /etc/openhab2/persistence/rrd4j.persist
chown -R openhab:openhab /etc/openhab2/persistence/rrd4j.persist
rrd4j.persist
// persistence strategies have a name and a definition and are referred to in the "Items" section
Strategies {
    // for rrd, we need a cron strategy
    everyMinute : "0 * * * * ?"
//	everyHour : "0 0 * * * ?"
//	everyDay : "0 0 0 * * ?"
}
 
Items {
    Shelly1_2_PM_Gesamtverbrauch : strategy = everyMinute, restoreOnStartup
    Shelly1_2_PM_Tagesverbrauch : strategy = everyMinute, restoreOnStartup
    Shelly1_2_PM_Intervallverbrauch : strategy = everyMinute, restoreOnStartup
}

Backup

scp pi@openhab-wlan:strom_tagesverbrauch.log `date +%Y%m%d`_strom_tagesverbrauch.log; scp pi@openhab-wlan:gas_tagesverbrauch.log `date +%Y%m%d`_gas_tagesverbrauch.log

1,8" Display (aktuell nicht verwendet)

Da ich noch ein kleines Display hatte habe ich es mal am R-Pi ausprobiert - funktioniert gut, wird aber aktell nicht weiter verwendent.

#?apt-get update && sudo apt-get install xorg xserver-xorg xserver-xorg-video-fbturbo
apt-get install xserver-xorg-video-fbdev
 
#? mcedit /usr/share/X11/xorg.conf.d/99-fbturbo.conf
mcedit /usr/share/X11/xorg.conf.d/99-fbdev.conf
..
Option "fbdev" "/dev/fb1"
...
#
touch /etc/modules-load.d/fbtft.conf
mcedit /etc/modules-load.d/fbtft.conf
...
spi-bcm2835
fbtft_device
#
 
touch /etc/modprobe.d/fbtft.conf
mcedit /etc/modprobe.d/fbtft.conf
...
options fbtft_device name=sainsmart18 rotate=90
#
mcedit /boot/cmdline.txt 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=12dcfc59-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fbcon=map:1 fbcon=font:VGA8x8
#
 
echo "dtparam=spi=on" >> /boot/config.txt
#
 
cat /etc/modprobe.d/fbtft.conf 
#options fbtft_device name=sainsmart18 rotate=90 speed=16000000 bgr=1
# Option bgr=1 korrigiert die Farbwiedergabe -> kein Rotstich mehr ;-)
options fbtft_device name=adafruit18_green speed=40000000 bgr=1 fps=60 custom=1 height=160 width=128 rotate=90
 
apt-get install fbi
reboot
FRAMEBUFFER=/dev/fb1 startx -- -dpi 60
wget https://dummyimage.com/100.jpg
fbi -d /dev/fb1 -T 1 -noverbose -a 100.jpg
#
# Youtube Video absoielen:
apt-get install omxplayer youtube-dl
youtube-dl -g <youtube-video-url>
omxplayer "output of <youtube-dl -g youtube-video-url>"
#
wiki/projekte/openhab2/uebersicht.txt · Zuletzt geändert: 2021/04/06 14:44 von wikimaster