Minimalistische „Hausautomation“ auf Basis eines Raspberry Pi Modell B (2011), openHAB 2.x und einer kleinen selbst entwickelten Leiterplatte mit folgenden Funktionen:
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.
/var/lib/openhab2/persistence/rrd4j/
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.
Buster
.
ssh
(ohne Endung) in der boot
-Partition abzulegen - sonst kann man sich nicht per SSH über das Netzwerk einloggen 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
… 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
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
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 #
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
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
touch /etc/openhab2/things/lacrosse.things chown -R openhab:openhab /etc/openhab2/things/lacrosse.things
// 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" ]
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
//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"}
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.
Full path: /etc/openhab2/items/gaszaehler.items
touch /etc/openhab2/items/gaszaehler.items chown -R openhab:openhab /etc/openhab2/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"
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
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
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
#!/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
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
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" } }
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
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] } } } }
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
// 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 }
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
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
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" }
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.
Full path: /etc/openhab2/items/mqtt.things
touch /etc/openhab2/things/mqtt.things chown -R openhab:openhab /etc/openhab2/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" ] } }
Full path: /etc/openhab2/items/mqtt.items
touch /etc/openhab2/items/mqtt.items chown -R openhab:openhab /etc/openhab2/items/mqtt.items
Switch Heizung_Hauptschalter "Heizung Hauptschalter" <switch> [ "Heizung Hauptschalter" ] { channel="mqtt:topic:embedded_broker:Heizung_Hauptschalter:power" }
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
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
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
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
// 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 }
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
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>" #