Donnerstag, 3. August 2017

Erstinstallation openHAB2 auf raspi3, Backupeinrichtung auf NAS via Samba, Installation Eclipse Smarthome Designer

OpenHAB2 wurde von mir als Grundlage für meine Heimautomatisierung ausgewählt. Es stand bereits ein eingerichteter Raspberry PI 3 Model B zur Verfügung. Die Schritte, die zur Einrichtung notwendig sind, sind großteils unter
http://docs.openhab.org/installation/linux.html#mounting-locally

sehr gut beschrieben. Allerdings fehlte mir im Detail:
  • beim Backup die Einrichtung einer CIFS-Freigabe zum Backup auf mein Synology-NAS sowie der cronjob, der das Backup regelmäßig durchführt.  
  • Außerdem bedarf es bei dem vorgegebenem Script einer Anpassung, um das Script auch auf einer gemounteten Freigabe anwenden zu können und 
  • das lokale mounten der Configuration zur Programmierung per Eclipse SmartHome Deisgner unter meinem Ubuntu 14.04 wird nicht behandelt.

Installation


Die Installationsschritte per Paketmanager (Stable Release) unter Raspbian 8 (Jessie) kurz Zusammengefasst:

wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
sudo apt-get install apt-transport-https  
echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.listsudo apt-get update 
sudo apt-get install openhab2sudo systemctl start openhab2.service 
sudo systemctl status openhab2.servicesudo systemctl daemon-reloadsudo systemctl enable openhab2.service


Anmerkung: 
Da ich keinen Offlinebetrieb plane, habe ich mir die Installation aller Add-Ons via  sudo apt-get install openhab2-addons erspart.


Danach wechselt man im Browser auf seine Installation entweder per IP oder per Hostnamen https://10.0.0.100:8443 - ich habe mich für die Standard-Installation entschieden.

Backup


Wenn das vorüber ist, richtet man das Backup ein. Zuerst legt man - in meinem Fall auf meinem Synology DS216j - einen Benutzer (z.B. backupusr ) inkl. Passwort an und erstellt eine Freigabe, welche man diesem Benutzer zuteilt.

Samba-Freigabe auf NAS

Zum mounten und automatischem Verbinden der Freigabe benötigt man nun 3 Teile:
  1. einen Mountpoint
  2. einen fstab-Eintrag
  3. einen crontab-Eintrag
1. Mountpoint

ganz einfach angelegt per
sudo mkdir /mnt/backup


2. einen fstab-Eintrag

Wichtig: cifs-utils muss installiert sein! (sudo apt-get install cifs-utils)
Diese Zeile fügt man in die Datei /etc/fstab hinzu (sudo vi /etc/fstab):

//10.0.0.100/Backup/ /mnt/backup cifs username=backupusr,password=XXXyyyXXX,_netdev,uid=1000,gid=1000,iocharset=utf8, 0 0
3. einen crontab-Eintrag

 diese Zeile fügt man in die Datei /etc/crontab hinzu (sudo vi /etc/crontab):

@reboot         root    (sleep 30; /bin/mount /mnt/backup-auf-nas1.abtenau.comhome.at)&
Dieser sorgt dafür, dass die Freigabe beim Starten des Raspberrys automatisch gemounted wird. Der sleep von 30s ist notwendig, da es sonst sein kann, dass der raspberry noch nicht alles nötige gestartet hat, bevor er versucht die Verbindung aufzubauen.

Backupscript und Autostart 

Nun da die Freigabe eingerichtet ist, machen wir uns an das Backup-Script. Hier wird nun cp zum Kopieren verwendet. Dies führt zu vielen Fehlern ala:
cp: failed to preserve ownership for ‘/mnt/backup/openhab2-backup-20170803_112450/userdata/jsondb/backup/1501759478056--org.eclipse.smarthome.core.thing.link.ItemThingLink.json’: Permission denied
Bei der Suche nach der Fehlerbehebung stoß ich auf rsync. Also wurde das Script kurzerhand von cp -arv abgeändert auf (sudo vi /opt/backup/openhab2backup.sh):



# stop openhab instance (here: systemd service)
sudo systemctl stop openhab2.service

# prepare backup folder, replace by your desired destination
BACKUPDIR="/mnt/backup/openhab2-backup-$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUPDIR

# backup current installation with settings
rsync -a --no-owner --no-group "/etc/openhab2" "$BACKUPDIR/conf"
rsync -a --no-owner --no-group "/var/lib/openhab2" "$BACKUPDIR/userdata"
#cp -arv --preserve=mode,timestamps /etc/openhab2 "$BACKUPDIR/conf"
#cp -arv --preserve=mode,timestamps /var/lib/openhab2 "$BACKUPDIR/userdata"
rm -rf "$BACKUPDIR/userdata/cache"
rm -rf "$BACKUPDIR/userdata/tmp"

# restart openhab instance
sudo systemctl start openhab2.service
Änderungen am "Smarthome" haben für mich die Eigenschaften, dass sie auf einmal viel sind (wenn ich wieder an einem Wochenende eine neue Komponente dazuschließe oder Fehler behebe) und sich sonst nichts oder nur wenig ändert. Daher stelle ich mir ein Backup "vorsichtshalber" einmal im Monat ein und mache immer vor groben Änderungen ein manuelles Backup.
Das automatische habe ich in der /etc/crontab eingestellt (sudo vi /etc/crontab):

00 3    1 * *   root    bash /opt/backup/openhab2backup.sh

Mit diesen Einstellungen wird am Monatsersten ein Backup und 3 Uhr früh durchgeführt. 

Sonstige -notwendige- Einstellungen

Lokale Berechtigungen

Um auf USB- und GPIO-Pins zugreifen zu köennen fügt man den openhab-User der gruppen dialout und tty hinzu:

sudo adduser openhab dialout
sudo adduser openhab tty
Will man etwas mit Audio machen sollte man den Benutzer openhab auch der Gruppe audio hinzufügen:

sudo adduser openhab audio 
Um der Java-Umgebung die Ansteuerung der Schnittstellen ebenfalls zu ermöglichen, entfernt man das #-Zeichen in der Zeile

EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB0:/dev/ttyS0:/dev/ttyS2:/dev/ttyACM0:/dev/ttyAMA0"
 in der /etc/default/openhab2.

Samba Share für Konfiguration

Etwas überrascht war ich, als ich hier gelesen habe, dass die empfohlene Entwicklungsumgebung Eclipse SmartHome Designer voraussetzt, dass man zugriff auf die Dateien hat. Hätte mir an dieser Stelle eine Standard-Empfehlung per SSH gewünscht (SFTP z.B) - aber wenns so Empfohlen ist, richt ichs mal so ein. Dazu:

sudo apt-get install samba samba-common-bin
Ist die Installation abgeschlossen konfiguriert man die Freigabe in:
sudo vim /etc/samba/smb.conf
 und fügt folgende Zeilen hinzu:

[openHAB2-userdata]
  comment=openHAB2 userdata
  path=/var/lib/openhab2
  browseable=Yes
  writeable=Yes
  only guest=no
  public=no
  create mask=0777
  directory mask=0777

[openHAB2-conf]
  comment=openHAB2 site configuration
  path=/etc/openhab2
  browseable=Yes
  writeable=Yes
  only guest=no
  public=no
  create mask=0777
  directory mask=0777

Weiters den Benutzer openhab als Sambabenutzer hinzufügen und ein Passwort vergeben:

sudo smbpasswd -a openhab
und noch sicherstellen, dass die Berechtigungen passen und die Samba-Konfiguration testen bevor man den smbd neu startet um die neue Konfiguration zu übernehmen:

sudo chown -hR openhab:openhab /etc/openhab2 /opt/openhab2/conf 
testparm
sudo systemctl restart smbd.service

Nun kann man als Ubuntu-Benutzer den Dateimanager (nautilus) öffen, per Strg+L die Eingabezeile aktivieren und mit der Eingabe

smb://openhab@10.0.0.100/
die Freigabe kontrollieren. Unter anderen Systemen hier die Erklärung.

Lokales Mounten unter Ubuntu 14.04

Zum automtischen Mounten der config-Pfade gibt es mehrere Optionen:
  1. Mounten bei Systemstart für alle Benutzer (fstab & script)
  2. Mounten bei Anmeldung eines Benutzers (fstab & script)
  3. Mounten erst bei Zugriff (autofs)
Da auf meinem PC mehrere Benutzer arbeiten und sonst niemand Zugriff haben soll bzw. diesen auch keiner Benötigt, habe ich mich für die Variante 2 entschieden, denn wenn die Freigabe erst bei Zuriff in Nautilus geöffnet wird, starte ich sicher öfter die Entwicklungsumgebung und bemerke erst dann, dass ich den mount vorher erst "aktivieren" muss.

Um das durchzuführen muss man folgende Schritte befolgen:
  1. Eintrag in der fstab mit den Optionen noauto und users sowie der Datei smbcredentials
  2. Ein kleines Mountscript anlegen
  3. Einen Eintrag in "Startprogramme" setzen
1. fstab + .smbcredentails Login

zuerst legt man die Logindatei an. In diese wird Benutzer und Passwort gespeichert und die Zugriffsberechtigungen so gesetzt, dass nur der Besitzer (und der Benuzter einer Live-CD!) die Dateien sehen kann.

vi ~/.smbredentialsopenhab

die Datei sieht so aus:


username=
password=
 die Datei speichert man ab und gleich danach setzt man die Berechtigungen so, dass man nur mehr selber an die Datei rankommt und erstellt auch gleich die nötigen Mountpoints (Ordner):

chmod 600 ~/.smbcredentialsopenhab
sudo mkdir /mnt/openhab /mnt/openhab2-conf /mnt/openhab2-user

der Eintrag sieht folgendermaßen aus (sudo vi /etc/fstab):
//10.0.0.100/openhab /mnt/openhab cifs noauto,users,credentials=/home/user/.smbcredentialsopenhab  0 0
//10.0.0.100/openhab2-conf /mnt/openhab2-conf cifs noauto,users,credentials=/home/user/.smbcredentialsopenhab  0 0
//10.0.0.100/openhab2-userdata /mnt/openhab2-userdata cifs noauto,users,credentials=/home/user/.smbcredentialsopenhab  0 0 
Falls noch nicht vorhanden, muss nun cifs-utils installiert werden:

sudo apt-get install cifs-utils
Standardmäßig wird das SUID-Bit, welches dafür verantwortlich ist, dass auch ein User ohne root-Rechte mounten darf, gesetzt. Man kann es so überprüfen und die Ausgabe sollte so aussehen:

user@pc:~$ ls -lah /sbin/mount.cifs
-rwsr-xr-x 1 root root 35K Jun 01  2017 /sbin/mount.cifs
ist es nicht gesetzt kann man dies einfach nachholen:

sudo chmod +s /sbin/mount.cifs 
 Nun erstellt man ein kleines Script zum mounten der Freigaben beim Start (vi ~/openhabmount.sh):

#! /bin/bash
#
mount /mnt/openhab 
mount /mnt/openhab2-conf
mount /mnt/openhab2-userdata

nun muss man das Scipt ausführbar machen:

chmod +x ~/openhabmount.sh

Danach legt man den Autostart an. Dazu geht man zu den Startprogrammen per
 gnome-session-properties
(evtl. andere Distributionen: HIER. Dort wählt man Hinzufügen, vergibt einen namen, Wählt bei Befehl das Script aus und vergibt optional einen Kommentar.


Ohne Neustart kann man die Freigaben nun per
bash ~/openhabmount.sh
mounten.

Installation Eclipse SmartHome Designer unter Ubuntu 14.04

Zuerst muss man das Archiv herunterladen ( akutell: wget http://eclipse.org/downloads/download.php?file=/smarthome/releases/0.8.0/eclipsesmarthome-incubation-0.8.0-designer-linux64.zip ) und es dann z.B unter /opt/eclipsesmarthome entpacken:

cd ~/Downloads
sudo mkdir /opt/eclipsesmarthome/
sudo unzip eclipsesmarthome-incubation-0.8.0-designer-linux64.zip -d /opt/eclipsesmarthome/
Nun muss man die Berechtigungen noch setzen, sonst startet das Programm mit Fehlern:

sudo chown -R USERNAME:USERNAME /opt/eclipsesmarthome

Dann kann man das Programm öffnen:

/opt/eclipsesmarthome/SmartHome-Designer

und mit Klick auf das Ordnersymbol links oben den conf-ordner "/mnt/openhab2-conf" mit den Unterordnern items, rules,... auswählen.