Archiv der Kategorie: programmiertes

openhab2 und homematic

Als Gateway für Homematic wurde das Modul https://www.elv.de/homematic-funkmodul-fuer-raspberry-pi-bausatz.html zusammengelötet und Raspberrymatic auf einem Raspberry 2 installiert.

Nachdem das System mit aufgesetzem Modul hochgefahren wurde konnte über die URL http://homematic-raspi auf die Webgui zugegriffen werden. Über die Oberfläche können diverse Einstellungen vorgenommen und neue Aktoren angelernt werden.

Damit die Geräte im Openhab genutzt werden können, muss in der Paperui unter das Homematic Binding hinzugefügt werden. Im Anschuss unter Configuration => Thing das Homematic Lan Gateway hinzufügen. Wenn openhab eine Verbindung zum Lan-gateway herstellen konnte, wird das Gateway mit dem Status grün(online) dargestellt und bereits eingebundene Homematic Sensoren werden in der Inbox aufgeführt.

Der Sensor kann nun über Add Thing eingebunden werden und über das angelegte Thing können einzelne Items angelegt werden.

Ich ziehe jedoch das bearbeiten und Verwalten der Items in einer Datei vor.

Die Items Datei sieht bei mir wie folgt aus:
Group kontakte
Contact Wintergarten_Tuer "Wintergarten Tür[MAP(kontakte.map):%s]" <contact> (kontakte){channel="homematic:HM-Sec-SCo:63f2dc68:NEQ0941168:1#STATE"}

Damit der Zustand des Kontakts in der Sitemap auf deutsch dargestellt wird, wurde die Datei kontakte.map angelegt.
CLOSED=geschlossen
OPEN=offen
TILTED=gekippt
undefined=unbekannt
NULL=keine Daten
-=keine Daten

Mit einer einfachen Regel kann man per Mail darüber informiert werden, wenn sich der Status ändert.

rule kontaktestatus
when
Item Wintergarten_Tuer changed
then

sendMail("emailadresse", "betreff", "Wintergarten Tür " + Wintergarten_Tuer.state)
end

SSH Keys verwalten

Ich finde ein ssh-keymanager ist sinnvoll wenn man mehrere Benutzer und Linuxserver verwalten muss. Angenommen man hat um die 40 Entwickler die auf bis zu 100 verschiedene Server zugreifen müssen. Für jeden Entwickler ein Benutzerkonto auf dem jeweiligen System zu erstellen ist sehr zeitaufwendig und bedarf auch einer guten Dokumentation. Meine Idee ist es ein Benutzerkonto zu erstellen zum Beispiel ewl , unter diesem Benutzer können sich alle Entwickler anmelden. Vorraussetzung ist das der Publickey des Entwickler in der authorized_keys hinterlegt wurde. Das hinterlegen des Keys würde in diesem Fall der ssh-keymanager übernehmen.

Installation
Die Inbetriebnahme des ssh-keymanagers ist recht einfach. Den Ordner entpacken und in ein entsprechendes Verzeichniss ablegen, auf den der Apache zugreifen kann. Eine Mysqldatenbank erstellen, den mitgelieferten Dump einspielen und die Zugangsdaten in der inc/connect.inc.php hinterlegen. Nun die Webseite aufrufen und mit admin / itbasic anmelden.

Damit die Keys verteilt werden können muss der Apache Benutzer in der Lage sein eine shell auszuführen, gegebenenfalls muss dafür die /etc/passwd angepasst werden. Zusätzlich muss unter dem Apache Benutzer ein Public key erstellt werden, dieser wird in der Mysqldatenbank(Tabelle systemkey) hinterlegt.

Host und Linuxbenutzer anlegen
Ein neuer Host wird über „Host => hinzufügen“ hinzugefügt, wichtig ist hierbei das die korrekte IP Adresse angegeben wird. Nachdem der Host angelegt wurde, kann über „Host => anzeigen“ ein neuer Linuxbenutzer für den Host angelegt werden. Der Linuxbenutzer muss nun jedoch noch manuell auf dem eigentlichen System angelegt werden und der zuvor erstellte public key des Apache muss in der authorized_keys abgelegt werden.
Bevor der erste Abgleich der Keys stattfinden kann, muss man sich über den Apache Benutzer an dem neuen Host anmelden. Durch die Anmeldung wird der Neue Host zu den known_hosts hinzugefügt.

Benutzer / Benutzergruppe
Unter Benutzer gibt es die Möglichkeit einen neuen Benutzer anzulegen bzw sich alle Benutzer anzuzeigen zu lassen.
Für die einfachere Verwaltung können Benutzer zu Gruppen zusammengefasst werden, diese Benutzergruppe wird dann dem entsprechendem Linuxbenutzer zugewiesen.

Abgleich
Unter Abgeich => Systemkey wir lediglich für den einfachen Zugriff der Public Key des Apache Benutzers dargestellt.
Bei dem Punkt anzeigen werden alles Linuxbenutzer aufgelistet die aktualisiert werden müssen. Ändert zum Beispiel ein Benutzer seinen Public Key, wird der entsprechende Linuxbenutzer hier aufgeführt. Ein klick auf den Pfeil stößt den Abgleich der Keys an.

Das Layout könnte man sicherlich noch überarbeiten, aber ich denke fürs erste sollte es reichen. Wenn jemand einen Fehler findet oder einen Änderungswunsch hat, einfach eine email schreiben.

 

Serverübersicht

 

Benutzerübersicht

 

Download

Kleine Anmerkung
Da meine grafischen Fähigkeiten leider nur reichen um Bilder mit Hilfe von Gimp zurechtzuschneiden, benutze ich folgende Buttons: http://fortawesome.github.io/Font-Awesome/

wissen für unterwegs

Zwischendurch erstelle ich für mich kleine Anleitungen und Scripte. Um die Anleitungen etc. zwischen Rechnern auszutauschen, hatte ich mir Anfangs ein Subversionrepository angelegt. Das Repository lief auf meinem heimischen Rechner und mit Hilfe von Dyndns konnte ich von überall darauf zugreifen. Irgendwann störte es mich jedoch das der Rechner die ganze Zeit laufen mußte, also habe ich nach Alternativen gesucht.
Anfangs hatte ich verschiedene Notizbücher getestet, leider fehlten Möglichkeiten für den Abgleich oder es gab nur eine Windows bzw. Linux Version. An ein Wiki hatte ich auch gedacht, nur für einen Zugriff benötige ich dann immer Zugang zum Internet.

Also habe ich mir selber ein kleines Script gebastelt, das im Endeffekt eine einfache html Seite erstellt.
Die eigentlichen Texte müssen wie folgt abgelegt werden. Unter dem Ordner daten müssen die Hauptkategorien als weitere Ordner ablegt werden wie z.B. Linux, Windows und / oder Datenbanken. Hierunter kommen die Unterpunkte( ebenfalls als Ordner ) wie z.B. unter Linux Shellscripte, Firewall.

Aufbau:

daten/Linux/Shellscripte/backup/artikel.txt
daten/Linux/Shellscripte/backup/backup.sh
daten/Linux/Shellscripte/backup/folders.txt
daten/Windows/Powershell/Beispiele/artikel.txt
daten/Windows/Powershell/Postfach_export/artikel.txt

Das Script bastel.sh erstellt aus den Hauptordnern sowie den Unterordner das Menü. In der jeweiligen artikel.txt ist der Text enthalten, im Text kann [[ ]] für code Darstellung verwendet werden und [§ §] für Überschriften.
Alle Dateien die in zum Beispiel daten/Windows/Powershell/Postfach_export liegen werden mit in die Seite eingebunden.

Wenn nun der wissen Ordner zum Beispiel in Dropbox hinterlegt wird, wird er auf den verschiedenen Rechnern abgeglichen.

Download: wissen

websuche für archivierte Medien

Hin und wieder lagert man seine zur Zeit nicht mehr Dateien / Ordner aus auf externe Medien wie cd, DVD oder externe Festplatte aus. Benötigt man nun wieder eine Datei geht das suchen los.
Deswegen habe ich mir eine kleine Möglichkeit gebastelt um eine kleine Inhaltsübersicht zu erstellen und diese per Weboberfläche auszugeben.

Damit man die Weboberfläche und die Scripte nutzen kann sollte man Linux verwenden, da die shell benötigt wird und ein Apache + mysql Datenbank.
Die Datei archiweb.tar.gz entpacken und in den entsprechenden vhost Ordner legen. In der Datei inc/connect.inc.php, bin/index.sh und bin/einzel.sh müssen die mysql Zugangsdaten hinterlegt werden. Um die Datenbankstruktur zu erstellen kann die archive.sql Datei verwendet werden.

Informationen welche Dateien sich auf dem Medium befinden werden in der mysql Datenbank gepeichert. In der Datenbank gibt es nur 2 Tabellen, eine für die Auflistung der Medien und eine Weitere in der die Dateien aufgelistet sind.
Um neue Medien in die Datenbank aufzunehmen muß eine Textdatei auf wie folgt erstellt werden.

cd /das/medium
du --time -ah * >> /anderes/laufwerk/Platte1.txt

Die Textdatei heißt in diesem Beispiel Platte1.txt, somit wird das entsprechende Medium in der Weboberfläche mit Platte1 angelegt.

Zum importieren das txt Datei gibt es zwei Möglichkeiten.

Version 1
Die txt Datei in dem Ordner upload ablegen. Per shell in den Ordner bin wechseln und die Datei ./index.sh ausführen, je nach Größe der txt Datei kann der Import unterschiedlich lange laufen. Damit der Import auch noch läuft wenn die Session abgebrochen wird, den Import starten mit nohup ./index.sh & oder das ganze als cronjob einrichten. Das Script löscht alle vorherigen Einträge in der Datenbank passend zu dem Medium, nach dem Import wird die txt Datei gelöscht.
Wichtig ist das die index.sh Datei ausgeführt wird, wenn man sich im Ordner bin befindet.

Version 2
Die txt Datei kann auch mit Hilfe der einzeln.sh importiert werden.
Hier müssen jedoch weitere Parameter mit angegeben werden
einzeln.sh -d liste.txt -n DVD001 -l 0

-d Datei die importiert werden soll
-n unter dem Namen wird die txt Datei importiert
-l 0 löscht alle vorherigen Einträge zu dem Medium, 3 löscht die ältesten drei Versionen

Das Script legt jeweils eine neue Version des Mediums an, somit hat man die Möglichkeit nachzusehen ob das Gesuchte evtl. mal auf dem Medium war.

Dateiupload
Eine einfache Möglichkeit txt Dateien hochzuladen ist die upload.php .

Viel Spaß damit
archivweb.tar.gz