. Raspberry – Smarthome

bookmark_borderLogs im Browser mit frontail

Manchmal ist es praktisch, wenn man sich die Logs einfach kurz im Browser ansehen kann. Damit könnte man Sie dann z.b. auch in einer Visualisierung einbauen. Dies ist dank frontail auch relativ einfach umzusetzen. Zuerst muss nodejs und npm installiert werden. Danach kann dann frontail installiert werden

sudo apt-get install nodejs 
sudo apt-get install npm

npm i frontail -g

Anschließend erstellen wir einen Service

cd /lib/systemd/system/
sudo nano frontail.service

Hier das Script

#!/bin/sh -

[Unit]
Description=Frontail

[Service]
ExecStart=/usr/local/bin/frontail --ui-highlight -t dark /var/log/openhab2/openhab.log /var/log/openhab2/events.log
Restart=always
User=pi
Group=pi
Environment=PATH=/usr/bin/
Environment=NODE_ENV=production
WorkingDirectory=/usr/bin/

[Install]
WantedBy=multi-user.target
Alias=frontail.service

Nun machen wir das Script ausführbar und lassen systemctl die Konfiguration neu lesen. Anschließend setzen wir den Service auf enable damit er beim booten gestartet wird und starten ihn manuell

sudo chmod 644 /lib/systemd/system/frontail.service
sudo systemctl daemon-reload
sudo systemctl enable frontail.service
sudo systemctl start frontail.service

Frontail ist nun unter http://ip_des_rapsi:9001 erreichbar

Unter /usr/local/lib/node_modules/frontail/preset/ können wir noch das Design der Ausgabe beeinflussen. Dazu die Datei default.json entsprechend ändern.

{
  "words": {
    "[ERROR]": "color: red;",
    "[WARN ]": "color: orange;",
    "[INFO ]": "color: green;",
    "Node is DEAD": "color: red;",
    "GroupItemStateChangedEvent": "color: #0026FF; font-weight: bold;",
    "ItemStateChangedEvent": "color: #3F55D1;",
    "ItemCommandEvent]": "color: #00137F;",
    "hingStatusInfoChangedEvent": "color: #007F46;",
    "ON": "color: green; font-weight: bold;",
    "OFF": "color: red; font-weight: bold;",
    "received command": "color: yellow;"
  },
  "lines": {
    "": "font-size: 1.2em; color: #FBFBFB",
    "/var/log/openhab2/openhab.log": "text-align: right; font-size: 1.5em; font-weight: bold; color: #FBFBFB; border-top: 2px solid #F8F8F8;",
    "/var/log/openhab2/events.log": "text-align: right; font-size: 1.5em; font-weight: bold; color: #FBFBFB; border-top: 2px solid #F8F8F8;",
    "ERROR": "font-size: 1.2em; color: #FBFBFB; background-color: #990808;",
    "model.script": "font-size: 1.2em; color: #FBFBFB; background-color: #1B0CA6; font-weight: bold;"
  }
}

bookmark_borderUmzug auf OpenHAB 2.5 und RasPi 4

Nach langer Zeit der Funkstille hier ein paar kurze Infos zu meinem Umzug auf OH 2.5 und den neuen PI. Den RasPi 2B wollte ich schon seit längerem ablösen da er doch häufig zu langsam ist und selbst die simple OpenHAB Basic UI lange zum Laden braucht.
Der Umstieg hat auch sehr gut funktioniert. Ich habe den neuen PI neu installiert und mich dabei hieran gehalten. Nach der Installation von OH habe ich das das Backup-Script von OH genutzt um alles wieder auf dem bisherigen Stand zu haben. So weit so gut.
Anschließend wollte ich mein Backup wieder einrichten und plötzlich waren die Backups 3 mal so groß wie vorher. OK. Ich habe auch eine größere SD-Karte verbaut aber eigentlich ist da ja nicht mehr drauf?
Nur war die SD Karte vorher schonmal in Betrieb und da ich nicht richtig (alles mit 0en überschreiben) formatiert hatte führte das ganze dennoch zu einem großen Backup da dd ja direkt auf der Karte liest ohne das Dateisystem („Inhaltsverzeichnis“) zu beachten. Die Lösung war die Karte einmal mit 0en zu radieren und das dann wieder zu löschen

dd if=/dev/zero of=/home/pi/delete_me
rm -f /home/pi/delete_me

bookmark_borderRaspberry PI – Backup Strategie

Bisher habe ich immer nur meine Config Files von OpenHAB gebackupt. Jedoch möchte ich nun immer ein komplettes Image als Backup haben damit ich im Fehlerfall einfach eine SD-Karte auf Basis des Images erzeugen kann um direkt wieder alles lauffähig zu haben.

Schritt 1: Backup Verzeichnis mounten

Ich habe einen entsprechenden Ordner auf meinem NAS erstellt. Dieser kann gemountet werde. Darüber hinaus muss man auch einen Ordner auf dem PI erstellen: z.B.:

sudo mkdir /mnt/backup

Dies wäre dann der LOCAL_FOLDER. 

sudo mount -t cifs //NAS_IP/NAS_FOLDER LOCAL_FOLDER -o username=USER,password=PASSWORD,vers=1.0

Vers=1.0 war bei meiner Synology notwendig. Ihr könnt aber auch zuerst mal ohne probieren.
Hat alles geklappt kann man das mount in fstab einbinden damit bei jedem Start automatisch das Verzeichnis eingebunden wird.

sudo nano /etc/fstab

Danach am Ende folgendes einfügen und die Änderungen speichern

//NAS_IP/NAS_FOLDER LOCAL_FOLDER cifs username=USER,password=PASSWORD,vers=1.0 0 0

Der mount erfolgt damit automatisch beim Neustart. Man kann aber auch mit folgendem Befehl ohne Neustart mounten.

sudo mount -a

Manchmal kommt es vor, dass beim Neustart der mount nicht klappt da das Netzwerk noch nicht verfügbar ist oder ähnliches. Dagegen hilf es via Crontab nochmal mount -a auszuführen. Sollte das Laufwerk bereits da sein passiert nichts und sonst erfolgt dann der mount. Dazu crontab aufrufen

sudo crontab -e

und am Ende folgendes anfügen und speichern.

# Mount zur Sicherheit falls FSTAB nicht funktioniert hat
@reboot sleep 120 && mount -a

Schritt 2: Backup Scripte

Ich möchte ein mit gzip gepacktes Image mit Hilfe des Standard Befehls dd erstellen. Der Befehl sieht dann wie folgt aus. Zunächst einmal müsst ihr herausfinden wie euer Laufwerk heißt welches Ihr sichern wollt. Das geht mit dem Befehl:

lsblk

Meine SD- Karte heißt beispielsweise /dev/mcblk0 . Dann könnt ihr das ganze einmal testen. Achtung, je nach belegtem Speicher und Systemperformance kann das eine ganze weile dauern da auch direkt mit gzip verkleinert wird.

sudo dd if=/dev/mmcblk0 | gzip > LOCAL_FOLDER/raspi_backup_$(date +%Y%m%d_%H%M%S).img.gz

Hat dies funktioniert sind wir bereit das Skript anzulegen. Dazu verwenden wir nano

sudo nano /home/pi/backup.sh

Und kopieren den folgenden Teil in die Datei:

#!/bin/bash
 
# Backup mit Hilfe von dd erstellen und im angegebenen Pfad speichern
dd if=/dev/mmcblk0 bs=1M | gzip > LOCAL_FOLDER/raspi_backup_$(date +%Y%m%d_%H%M%S).img.gz
 
# Alte Sicherungen nach X (hier 5) neuen Sicherungen entfernen
pushd LOCAL_FOLDER; ls -tr LOCAL_FOLDER/raspi_backup_* | head -n -5 | xargs rm; popd

Das ganze dann noch nach /usr/local/bin/ verschieben und ausführbar machen

sudo chmod 755 /home/pi/backup.sh
sudo mv /home/pi/backup.sh /usr/local/bin/backup.sh

So weit so gut. Zusätzlich möchte ich noch die OpenHAB Einstellungen um schneller an ein Backup z. B. des Sitemaps zu kommen. OpenHAB liefert bereits ein passendes Script mit welches wir nur noch aufrufen müssen (liegt bei mir hier: /usr/share/openhab2/runtime/bin/ ) . Dazu erstellen wir analog zum obigen vorgehen die Datei backup_oh.sh mit folgendem Inhalt verschieben diese entsprechend und machen sie ausführbar

sudo nano /home/pi/backup_oh.sh
#!/bin/bash

# Backup mit Hilfe von OH Script erstellen und im angegebenen Pfad speichern
/usr/share/openhab2/runtime/bin/backup LOCAL_FOLDER/openhab_backup_$(date +%Y%m%d_%H%M%S).zip

# Alte Sicherungen nach X (hier 10) neuen Sicherungen entfernen
pushd LOCAL_FOLDER; ls -tr LOCAL_FOLDER/openhab_backup_* | head -n -10 | xargs rm; popd
sudo chmod 755 /home/pi/backup_oh.sh
sudo mv /home/pi/backup_oh.sh /usr/local/bin/backup_oh.sh

Schritt 3: Backup einplanen (Cronjob)

Zu Schluss planen wir die beiden Backups noch ein. Das Image erstelle ich einmal wöchentlich immer Sonntags um 1 Uhr und das schlankere OpenHAB Backup einmal täglich um 0:30 Uhr. Dazu wieder die Crontab bearbeiten

sudo crontab -e

Hier dann die Skripte einplanen

# Image Datei 1 mal pro Woche erstellen
00 01 * * 0 /usr/local/bin/backup.sh
# Tägliches OpenHBA Backup
30 00 * * * /usr/local/bin/backup_oh.sh

Um im Image auf einzelne Dateien in Windows zugreifen zu können kann man die Datei mit z. B. 7ZIP entpacken und anschließend diesen Linux Reader verwenden.

Da ich mich nicht mit fremden Lorbeeren schmücken möchte hier die Quellen aus denen die meisten Infos stammen welche ich hier nur passend zusammengebaut habe:

bookmark_borderRaZberry – Firmware Update

Mein heutiges Thema dreht sich rund um die Aktualisierung der Firmware auf dem RaZberry Board. Eigentlich ist dies ganz einfach und auch schnell erledigt, sobald man weiß was zu tun ist. Zunächst einmal bringen wir alles auf den aktuellen Stand. Bei mir musste ich danach die OpenHAB Bindings wieder nachinstallieren, was aber Problemlos über die PaperUI zu machen ist.

sudo apt-get updat
sudo apt-get upgrade

Danach widmen wir uns dem eigentlichen Thema. Dazu stoppen wir OpenHAB und starten den RaZberry Z Way Service

sudo systemctl stop openhab2.service
sudo systemctl start z-way-server

Hier wählen wir uns dann mit dem während der Installation erstellten Passwort ein oder erstellen ein neues Passwort (IP des Raspberry und Port 8083). Dann klicken wir oben rechts auf das Zahnrad (Configuration), dann Devices und in der Zeile Z-Wave auf Manage with Expert UI. Dort können wir dann unter Configuration das Update durchführen. Dies lief bei mir problemlos. Sind wir fertig, so stoppen wir den Z Way Service und starten einmal durch. OpenHAB sollte wieder automatisch starten da es ja im Autostart ist, zumindest, wenn Ihr nach meiner Installationsanleitung vorgegangen seid.

sudo systemctl stop z-way-server
sudo shutdown -r now

 

bookmark_borderRaZberry – openHAB 2 & Z-Wave.Me auf dem Raspberry

Nachdem es mich einige Zeit gekostet hat den Raspberry inklusive des RaZberry Moduls und OpenHAB 2 ans Laufen zu bringen möchte ich nun zusammenfassend beschreiben wie ich vorgegangen bin. Die einzelnen Webseiten auf denen ich die Infos gefunden habe sind weiter unten verlinkt.

Los geht es also mit meinem Raspberry Pi 2 der mit einer 8GB SD-Karte mit Raspbian ausgestattet ist. Für neue Installationen sollten die folgenden Punkte entweder über (sudo) raspi-config oder über die GUI eingestellt werden:

  • Tastaturlayout anpassen
  • Sprache anpassen
  • Zeitzone anpassen
  • SSH aktivieren
  • Den Autostart der GUI deaktivieren

Initial muss die Z-Wave.me Software installiert werden, da sonst später der Zugriff auf den Controller nicht funktioniert. Wenn jemand eine andere Lösung hat würde ich mich sehr über eine Info freuen.

sudo wget -q -O - https://storage.z-wave.me/RaspbianInstall | sudo bash

Dann entfernen wir die Software aus dem Autostart und starten den Pi einmal durch. Wer möchte vorher auch einmal die Software starten. Diese ist unter der IP eures Raspberry am Port 8083 erreichbar. Hier muss beim ersten Mal ein Passwort vergeben werden, das man sich am besten notiert. Man benötigt die Software z.B., wenn man ein Firmware Update des Boards durchführen möchte.

sudo systemctl disable z-way-server
sudo shutdown -r now

Nun bringen wir alles auf den neusten Stand und installieren ein paar praktische/benötigte Pakete.

sudo apt-get updat
sudo apt-get upgrade

sudo apt-get install screen mc vim git htop apt-transport-https

Normalerweise ist Java installiert, falls nicht muss es nachinstalliert werden. Im Zweifel einfach die Installation starten.

sudo apt-get install oracle-java8-jdk

Dann kann es losgehen mit openHAB 2. Ich installiere hier das online Snapshot Release um die an neuen Entwicklungen zu partizipieren, wenn man eine produktiv genutzte Lösung aufbauen will ist OH2 sowieso noch mit Vorsicht zu genießen (OH2 ist mitlerweile offiziell und keine Beta mehr). Hier gehen wir für die Tests auf den Snapshot. Online heißt, dass nicht gleich alles in der Installation enthalten ist und im Bedarfsfall nachgeladen wird. Zunächst einmal machen wir OH2 für den Paketmanager verfügbar:

sudo nano /etc/apt/sources.list.d/openhab2.list

Im Texteditor tragen wir dann die folgenden Zeilen ein und speichern die Datei.

deb https://dl.bintray.com/openhab/apt-repo2 stable main

Dann brauchen wir noch den Repository Key.

wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -

Updaten die Pakete.

sudo apt-get update

und installieren die online Version des Snapshots

sudo apt-get install openhab2

Nun müssen wir dem User openhab noch Zugriff auf das RaZberry Board gewähren

sudo usermod -a -G tty openhab
sudo usermod -a -G dialout openhab

Damit der Port für unseren Z-Wave Controller zur Verfügung steht setzen wir noch die Umgebungsvariable. Dazu öffnen wir nano:

sudo nano /etc/default/openhab2

In der Datei steht bereits folgendes:

EXTRA_JAVA_OPTS=""

und wir machen daraus

EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0"

Danach starten wir einmal durch.

sudo shutdown -r now

OpenHAB2 kann dann mit den folgenden Befehlen gestartet oder beendet werden

sudo systemctl start openhab2.service
sudo systemctl status openhab2.service

Oder einfach in den Autostart aufgenommen werden

sudo systemctl enable openhab2.service

Nachdem ihr OH2 gestartet habt ist es über http://raspberrypi:8080 erreichbar. Achtung, der erste Start kann etwas dauern. Damit ist das initiale Setup abgeschlossen. Mehr zum weiteren Vorgehen folgt in einem meiner nächsten Posts

Nachtrag:

Es gibt auch noch eine alternative Lösung mit dem Z-Way Binding welches Openhab mit der Z-Way Software verbindet. Dies habe ich jedoch nicht getestet. Alle Infos dazu findet ihr hier.

Quellen: