Archiv der Kategorie: linux

Mongodb unter Mac nutzen

Ich wollte mich in nächster Zeit ein wenig mit mongodb und nodejs beschäftigen. Hierfür habe ich Mongodb von der Seite https://www.mongodb.com/download-center/community heruntergeladen.

Die tgz Datei wurde mit tar -zxvf mongodb-osx-ssl-x86_64-<version>.tgz entpackt und unter /usr/local/bin abgelegt. Für den Speicherort der Daten habe ich mich für das Standardverzeichnis /data/db entschieden. Das Verzeichnis wurde unter dem root Benutzer angelegt und der Besitzer der Verzeichnisse wurde auf meinen Benutzer mit dem ich auf dem Mac arbeite geändert.

Zum starten der mongodb muss folgendes auf der Kommandozeile ausgeführt werden

export PATH=/usr/local/bin/mongodb-osx-x86_64-4.0.6/bin:$PATH
mongod

Um sich die Eingabe des Export Befehls zu sparen, wurde dieser in der .bash_profile hinterlegt

[openhab] Installation auf dem Synology NAS

Bei der Installation von Openhab auf einem Synology NAS kommt es zu dem folgendem Fehler:

Fehlermeldung aus der angegebenen Log Datei
The User Home service is not enabled. Please enable this feature in the User control panel in DSM.

In den Systemeinstellungen für Benutzer musste unter dem Reiter Erweitert der Benutzer-Home-Dienst aktiviert werden.

Im Anschluss konnte die Installation durchgeführt werden.

[puppet] Benutzer anlegen

Wird ein Benutzer auf einem node benötigt, müssen nur folgende Zeilen in der Konfiguration hinterlegt werden:

user { 'stefan':
ensure => present,
comment => 'Entwickler Projekt 1',
home => '/home/stefan',
managehome => true,
shell => '/bin/bash',
}
ssh_authorized_key { 'stefan_ssh':
user => 'stefan',
type => 'rsa',
key => 'djdjdjdjdj',
}

Da der Benutzer und vermutlich auch die Benutzer der Kollegen auf verschiedenen Servern benötigt werden, wurde hierfür ein Modul /etc/puppetlabs/code/environments/production/modules/ewl_gruppe1/manifests/init.pp erstellt in dem die Mitglieder aufgeführt sind:
class ewl_gruppe1 {

group {'ewl_gruppe1':
ensure => 'present',
}

user { 'stefan':
ensure => present,
comment => 'Entwickler Projekt 1',
home => '/home/stefan',
managehome => true,
shell => '/bin/bash',
gid => 'ewl_gruppe1',
}
ssh_authorized_key { 'stefan_ssh':
user => 'stefan',
type => 'rsa',
key => 'djdjdjdjdj',
}

user { 'heino':
ensure => present,
comment => 'Entwickler Projekt 1',
home => '/home/heino',
managehome => true,
shell => '/bin/bash',
gid => 'ewl_gruppe1',
}
ssh_authorized_key { 'heino_ssh':
user => 'heino',
type => 'rsa',
key => 'dlwfjwdcweiufwiecniwefn',
}

}

Damit die weitere Verwaltung bzw Berechtigung über eine Gruppe erfolgen kann, wurde die Gruppe ewl_gruppe1 erstellt. Die Benutzer wurden über den Eintrag gid => ‚ewl_gruppe1‘ hinzugefügt.

Die Application auf dem Node läuft unter dem Benutzer application1, es ist nun für die Mitglieder der ewl_gruppe1 notwendig mittels su in den Benutzer zu wechseln.

Für die Anpassung der /etc/sudoers wurde das folgende Modul installiert:
puppet module install saz-sudo --version 5.0.0

In der Konfiguration des Nodes wird für die sudoers Anpassung folgendes hinterlegt:

sudo::conf { 'ewl_grupp1':
priority => 10,
content => "%ewl_gruppe1 ALL= NOPASSWD:/bin/su - application1",
}

Damit das Modul genutzt werden kann muss zunächst auf dem Puppet Master die folgende Zeile ausgeführt werden:
puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp --modulepath=/etc/puppetlabs/code/environments/production/modules/ $*
Auf dem Node reicht ein puppet agent --test und die Mitglieder der Gruppe ewl_gruppe1 können über sudo su – application1 zum entsprechenden Applicationsbenutzer wechseln.

[openhab2] Sicherheitskamera im Habpanel einbinden

Im Habpanel können die unterschiedlichsten Aktoren oder Widgets für Informationen hinterlegt werden. Eigentlich war es geplant das Live Bild einer Überwachungskamera von Foscam ebenfalls einzubinden. Leider bietet die eingesetzte Kamera nicht die Option das Livebild per URL abzurufen, hierfür muss die Handyapp oder das webfrontend verwendet werden. Beim suchen nach einer geeigneten Lösung für das Problem bin ich in dem openhab Forum auf einen funktionierenden Ansatz gestoßen. Die Kameras bieten zwar kein Livebild per URL, jedoch kann ein Standbild abgerufen werden. In dem Image Widgets des Habpanels kann die entsprechende URL hinterlegt werden und das Widget bietet die Option das Bild in bestimmten Intervallen neu zu laden.

Die hinterlegte Url lautet http://ipadresse:88/cgi-bin/CGIProxy.fcgi?cmd=getDevState&usr=benutzer&pwd=kennwort, das Intervall wurde auf 2 Sekunden gesetzt.

[openhab2] Habpanel

Neben der App, der Website oder Integration in Amazon Alexa kann für das Schalten der Aktoren auch das Habpanel genutzt werden. Auf dem Habpanel können verschiedene Seiten erstellt werden, unter den Seiten können Schalter angelegt werden oder Kacheln in denen Informationen ausgegeben werden. Für einen schaltbaren Aktor verwende ich folgende Einstellung im Habpanel:

Das Ergebnis sieht wie folgt aus:

Hier ein Beispiel um den Zustand von Kontakten in einer Kachel auszugeben, es wurde dafür ein Template verwendet:


<div class="row" ng-repeat="item in itemsInGroup('kontakte')">
<div class="col-xs-8 text-right">{{item.name}}</div>
<div class="col-xs-4 text-left" ng-style="{ color: itemValue(item.name)=='OPEN'?'red':'green' }">
{{itemValue(item.name)}}
</div>
</div>

Ebenfalls können im Habpanel die Zeiten ausgegeben werden, wann zum Beispiel ein Fensterkontakt das letzte Mal den Status geändert hat.

Hierzu wurde ein entsprechendes Item angelegt, in dem per Rule die Zeit geschrieben wird sobald sich der Status des Items ändert.

Innerhalb der Rule wird wie folgt der Timestamp geschrieben
var local_time = java::util::Calendar::getInstance(TimeZone::getTimeZone("Europe/Berlin"))
postUpdate(Wohnzimmer_Tuer_rechts_bewegung, new DateTimeType(local_time))

Am Anfang der rules Datei wurden noch folgende Zeilen eingefügt:
import org.openhab.core.library.types.*
import java.util.Calendar
import java.util.Date
import java.util.TimeZone

Vermutlich gibt es noch weitere Möglichkeiten die Uhrzeit bzw den Timestamp in einem Item zu hinterlegen, wenn einfachere oder andere Möglichkeiten bekannt sind würde ich mich über einen entsprechenden Kommentar freuen.

Für die Ausgabe der Zeiten im Habpanel wurde ein Template mit folgendem Inhalt verwendet:

 

<div class="row" ng-repeat="item in itemsInGroup('bewegung')">
<div class="col-xs-8 text-right">{{item.name}}</div>
<div class="col-xs-4 text-left" ng-style="{ color: itemValue('item.name') }">
{{itemValue(item.name) | date:'dd.MM HH:mm' }}
</div>
</div>