Gesamtsystem
unbestückte Leiterplatten
fertig bestückte Leiterplatte
1,8 Zoll Display, per SPI-Schnittstelle angeschlossen
kompletter Raspbery Pi

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.

verwendete Quellen

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 9.x aka. Stretch.
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 ;-)
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 install aptitude mc dos2unix apt-transport-https ntp ntpdate oracle-java8-jdk
#
# 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
#
# 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
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
 
# 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

RTC 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
 
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
ntpdate 192.168.100.1
date
hwclock -r
hwclock -w
hwclock -r
#
mcedit /etc/rc.local
...
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sleep 2
/sbin/hwclock -s
exit 0
#
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
#
shutdown -r now && exit
#

1,8" Display

Quelle(n):


#?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>"
#

OpenHab2

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
#
systemctl daemon-reload
systemctl enable openhab2.service
systemctl start openhab2.service
systemctl status openhab2.service
#
adduser openhab dialout
adduser openhab gpio
#
shutdown -r now
#
openhab-cli status
# ca. 5 Minuten warten ...
# dann http://<RASPBERRY-PI-IP>:8080/start/index im Browser öffnen
#
# Start im Log beobachten:
tail -f /var/log/openhab2/openhab.log
#

Konfiguration

  • Paper-UI → Add-Ons → Bindings → JeeLink → Install
  • Paper-UI → Add-Ons → Bindings → GPIO Binding → Install
  • Paper-UI → Persistence → RRD4j Persistence (persistence-rrd4j - 1.12.0)

Zum Erzeugen der folgenden Konfigurationen ist es hilfreich und sinnvoll, Openhab2 kurzfristig zu deaktivieren.

systemctl stop openhab2.service
systemctl disable openhab2.service

Items

Full path: /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	Heizung
 
//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"

Scripts

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

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

Sitemaps

Full path: /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=TempSensorXxAussen_Temperatur icon="temperature"
//    Text label="Vorlauftemperatur" item=Vorlauftemperatur_Temperatur icon="temperature"
//    Text label="Ruecklauftemperatur" item=Ruecklauftemperatur_Temperatur icon="temperature"
    Switch label="Heizung Hauptschalter" item=Shell11Heizung_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=Vorlauftemperatur_Temperatur icon="temperature"
	Text label="Ruecklauftemperatur" item=Ruecklauftemperatur_Temperatur icon="temperature"
	Switch label="Heizung Hauptschalter" item=Shell11Heizung_Hauptschalter
//		Chart item=Gas_Tagesverbrauch period=d refresh=10000 legend=true
//		Chart item=TempSensorXxAussen_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=TempSensorXxAussen_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempSensorXxAussen_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempSensorXxAussen_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempSensorXxAussen_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempSensorXxAussen_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempSensorXxAussen_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempSensorXxAussen_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=Vorlauftemperatur_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=Vorlauftemperatur_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=Vorlauftemperatur_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=Vorlauftemperatur_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=Vorlauftemperatur_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=Vorlauftemperatur_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=Vorlauftemperatur_Temperatur 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=Ruecklauftemperatur_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=Ruecklauftemperatur_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=Ruecklauftemperatur_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=Ruecklauftemperatur_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=Ruecklauftemperatur_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=Ruecklauftemperatur_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=Ruecklauftemperatur_Temperatur period=4M refresh=30000 visibility=[Temp_Chart_Intervall==6]
        }
    }
    }
 
    Frame {
    Group label="Draußen" icon="garden" item=Aussen {
        Frame label="Aussentemperatur" {
	Text item=TempSensorXxAussen_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=TempSensorXxAussen_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempSensorXxAussen_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempSensorXxAussen_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempSensorXxAussen_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempSensorXxAussen_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempSensorXxAussen_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempSensorXxAussen_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=TempHumidSensor02JonasZimmer_Temperatur icon="temperature"
	Text item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit icon="humidity"
        }
//	    Frame label="Temperatur in Jonas Zimmer" {
//		Chart item=TempHumidSensor02JonasZimmer_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit in Jonas Zimmer" {
//		Chart item=TempHumidSensor02JonasZimmer_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=TempHumidSensor02JonasZimmer_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor02JonasZimmer_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempHumidSensor02JonasZimmer_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempHumidSensor02JonasZimmer_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempHumidSensor02JonasZimmer_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempHumidSensor02JonasZimmer_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempHumidSensor02JonasZimmer_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=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TempHumidSensor02JonasZimmer_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
        }
    }
    }
 
    Frame {
        Group label="Badezimmer" icon="bath" item=Badezimmer {
        Frame label="Badezimmer" {
	Text item=TempHumidSensor03Badezimmer_Temperatur icon="temperature"
	Text item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit icon="humidity"
        }
//	    Frame label="Temperatur im Badezimmer" {
//		Chart item=TempHumidSensor03Badezimmer_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Badezimmer" {
//		Chart item=TempHumidSensor03Badezimmer_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=TempHumidSensor03Badezimmer_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor03Badezimmer_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempHumidSensor03Badezimmer_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempHumidSensor03Badezimmer_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempHumidSensor03Badezimmer_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempHumidSensor03Badezimmer_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempHumidSensor03Badezimmer_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=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TempHumidSensor03Badezimmer_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
        }
    }
    }
 
    Frame {
        Group label="Schlafzimmer" icon="bedroom" item=Schlafzimmer {
        Frame label="Schlafzimmer" {
	Text item=TempHumidSensor04Schlafzimmer_Temperatur icon="temperature"
	Text item=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit icon="humidity"
        }
//	    Frame label="Temperatur im Schalfzimmer" {
//		Chart item=TempHumidSensor04Schlafzimmer_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Schlafzimmer" {
//		Chart item=TempHumidSensor04Schlafzimmer_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=TempHumidSensor04Schlafzimmer_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor04Schlafzimmer_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempHumidSensor04Schlafzimmer_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempHumidSensor04Schlafzimmer_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempHumidSensor04Schlafzimmer_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempHumidSensor04Schlafzimmer_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempHumidSensor04Schlafzimmer_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=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TempHumidSensor04Schlafzimmer_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=TempHumidSensor05Kueche_Temperatur icon="temperature"
	Text item=TempHumidSensor05Kueche_Luftfeuchtigkeit icon="humidity"
        }
//	    Frame label="Temperatur in der Küche" {
//		Chart item=TempHumidSensor05Kueche_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit in der Küche" {
//		Chart item=TempHumidSensor05Kueche_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=TempHumidSensor05Kueche_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor05Kueche_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempHumidSensor05Kueche_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempHumidSensor05Kueche_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempHumidSensor05Kueche_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempHumidSensor05Kueche_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempHumidSensor05Kueche_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=TempHumidSensor05Kueche_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor05Kueche_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TempHumidSensor05Kueche_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TempHumidSensor05Kueche_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TempHumidSensor05Kueche_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TempHumidSensor05Kueche_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TempHumidSensor05Kueche_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
        }
    }
    }
 
    Frame {
        Group label="Wohnzimmer" icon="terrace" item=Wohnzimmer {
        Frame label="Wohnzimmer" {
	Text item=TempHumidSensor06Wohnzimmer_Temperatur icon="temperature"
	Text item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit icon="humidity"
        }
//	    Frame label="Temperatur im Wohnzimmer" {
//		Chart item=TempHumidSensor06Wohnzimmer_Temperatur period=d refresh=10000
//	    }
//	    Frame label="Luftfeuchtigkeit im Wohnzimmer" {
//		Chart item=TempHumidSensor06Wohnzimmer_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=TempHumidSensor06Wohnzimmer_Temperatur period=h refresh=30000 visibility=[Temp_Chart_Intervall==0, Temp_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor06Wohnzimmer_Temperatur period=D refresh=30000 visibility=[Temp_Chart_Intervall==1]
	Chart item=TempHumidSensor06Wohnzimmer_Temperatur period=W refresh=30000 visibility=[Temp_Chart_Intervall==2]
	Chart item=TempHumidSensor06Wohnzimmer_Temperatur period=2W refresh=30000 visibility=[Temp_Chart_Intervall==3]
	Chart item=TempHumidSensor06Wohnzimmer_Temperatur period=M refresh=30000 visibility=[Temp_Chart_Intervall==4]
	Chart item=TempHumidSensor06Wohnzimmer_Temperatur period=2M refresh=30000 visibility=[Temp_Chart_Intervall==5]
	Chart item=TempHumidSensor06Wohnzimmer_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=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=h refresh=30000 visibility=[Humid_Chart_Intervall==0, Humid_Chart_Intervall=="Uninitialized"]
	Chart item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=D refresh=30000 visibility=[Humid_Chart_Intervall==1]
	Chart item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=W refresh=30000 visibility=[Humid_Chart_Intervall==2]
	Chart item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=2W refresh=30000 visibility=[Humid_Chart_Intervall==3]
	Chart item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=M refresh=30000 visibility=[Humid_Chart_Intervall==4]
	Chart item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=2M refresh=30000 visibility=[Humid_Chart_Intervall==5]
	Chart item=TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit period=4M refresh=30000 visibility=[Humid_Chart_Intervall==6]
        }
    }
    }
}

Rules

Full path: /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

Persistence

Full path: /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
	TempHumidSensor02JonasZimmer_Temperatur : strategy = everyMinute, restoreOnStartup
	TempHumidSensor02JonasZimmer_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TempHumidSensor03Badezimmer_Temperatur : strategy = everyMinute, restoreOnStartup
	TempHumidSensor03Badezimmer_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TempHumidSensor04Schlafzimmer_Temperatur : strategy = everyMinute, restoreOnStartup
	TempHumidSensor04Schlafzimmer_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TempHumidSensor05Kueche_Temperatur : strategy = everyMinute, restoreOnStartup
	TempHumidSensor05Kueche_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TempHumidSensor06Wohnzimmer_Temperatur : strategy = everyMinute, restoreOnStartup
	TempHumidSensor06Wohnzimmer_Luftfeuchtigkeit : strategy = everyMinute, restoreOnStartup
	TempSensorXxAussen_Temperatur : strategy = everyMinute, restoreOnStartup
	Temp_Aussen_Chart* : strategy = everyMinute,restoreOnStartup
	Rueckluftemperatur_Temperatur : strategy = everyMinute, restoreOnStartup
	Vorlaufluftemperatur_Temperatur : strategy = everyMinute, restoreOnStartup
}

One Wire Bus

pi@fhem:~ $ sudo echo "dtoverlay=w1-gpio,gpiopin=4" >> /boot/config.txt
# --> reboot
pi@fhem:~ $  ls /sys/bus/w1/devices/
10-000801f0d39e  w1_bus_master1
# !-Wire Sensor testweise auslesen:
# Vorlauftemperatur:
pi@fhem:~ $ watch -n 0.5 cat /sys/bus/w1/devices/10-00080359c712/w1_slave
# Ruecklauftemperatur:
pi@fhem:~ $ watch -n 0.5 cat /sys/bus/w1/devices/10-00080359e7fe/w1_slave 
 
#
# Binding installieren:
  * Paper-UI -> Add-Ons -> Bindings -> OneWireGPIO Binding (binding-onewiregpio - 2.3.0)
  * Inbox -> Search for Things -> Choose Binding -> OneWireGPIO Binding -> Temperature Sensor -> ...
  * Name: Vorlauftemperatur
  * Location: Heizung
  * Device path: "/sys/bus/w1/devices/10-00080359c712/w1_slave"
  * Refresh time interval: 60s
  * -> OK ;-)

Heizung AN/AUS schalten

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

Quellen

Konfiguration

  • Paper-UI → Add-Ons → Bindings → MQTT Binding → Install
  • Paper-UI → Add-Ons → MISC → Embedded MQTT Broker → Install
echo "mqtt:localBroker.url=tcp://localhost:1883" >> /etc/openhab2/services/mqtt.cfg
echo "mqtt:localBroker.clientId=openHab" >> /etc/openhab2/services/mqtt.cfg
echo "mqtt:localBroker.qos=1" >> /etc/openhab2/services/mqtt.cfg
  • Paper-UI → Configurations → System → nothing to do ;-)
  • Paper-UI → Configurations → Bindings → nothing to do ;-)
  • Paper-UI → Services → MQTT → MQTT Embedded Broker → nothing to do ;-)
  • Paper-UI → Services → MQTT → MQTT system broker connection → nothing to do ;-)
  • Paper-UI → Inbox → Add → MQTT Thing Binding → Generic MQTT Thing
    1. Name „Shelly1.1@Heizung“
    2. Bridge Selection: „MQTT Broker - mqtt:broker:6da7dd4f“
  • Paper-UI → Configurations → Things → Shell1.1@Heizung → Channels Add →
    1. Channel Type: „On/Off Switch“
    2. Label: „Heizung Hauptschalter“
    3. Channel ID: „Heizung_Hauptschalter“
    4. MQTT state topic → shellies/shelly1-2C82FA/relay/0
    5. MQTT command topic → shellies/shelly1-2C82FA/relay/0/command
    6. Show more –> On/Open value → on
    7. Show more –> Off/Closed value → off
  • Paper-UI → Configurations → Things → Shelly1.1@Heizung → Channels → Heizung_Hauptschalter → Link Channel
    1. Name: „Shelly1.1Heizung_Hauptschalter“
    2. Label: „Heizung Hauptschalter“
    3. Type: „Switch“

QR-Code
QR-Code OpenHAB 2.x auf dem Raspberry Pi B (erstellt für aktuelle Seite)