Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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.
Stretch
.
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
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
- Name „Shelly1.1@Heizung“
- Bridge Selection: „MQTT Broker - mqtt:broker:6da7dd4f“
- Paper-UI → Configurations → Things → Shell1.1@Heizung → Channels Add →
- Channel Type: „On/Off Switch“
- Label: „Heizung Hauptschalter“
- Channel ID: „Heizung_Hauptschalter“
- MQTT state topic → shellies/shelly1-2C82FA/relay/0
- MQTT command topic → shellies/shelly1-2C82FA/relay/0/command
- Show more –> On/Open value → on
- Show more –> Off/Closed value → off
- Paper-UI → Configurations → Things → Shelly1.1@Heizung → Channels → Heizung_Hauptschalter → Link Channel
- Name: „Shelly1.1Heizung_Hauptschalter“
- Label: „Heizung Hauptschalter“
- Type: „Switch“