Pentaho Reporting – Datenquelle einrichten

Der Pentaho Report Designer (PRD) lässt sich mit allen Datenbanken verbinden zu denen es JDBC Treiber gibt. Außerdem können einige weitere Datenquellen angebunden werden. Als NoSQL Datenbank wird die bekannte MongoDB unterstützt. Exemplarisch wird hier die Verbindung zu einer MySQL Datenbank gezeigt:

1. Treiber für die entsprechende Datenbank herunterladen und in das Verzeichnis“..\PenthaoReportDesigner\lib\jdbc\“ entpacken. Für MySQL heißt der Treiber Connector/J und kann hier als Plattform Independent Treiber in Form einer JAR-Datei (mysql-connector-java-5.1.30-bin.jar) heruntergeladen werden.

2. Im PRD oben rechts im Tab „Data“ einen Rechtsklick auf „Data Sets“ machen und JDBC wählen.

3. Im Fenster „JDBC Data Connection“ kann über das „+“ eine neue Verbindung hinzugefügt werden oder die „Custom Connection“ angepasst werden.

4. Im darauf folgenden Fenster wird die Datenbank ausgewählt und deren Zugangsdaten eingegeben. Für eine MySQL Datenbank sind dies die IP-Adresse des DB Server (127.0.0.1 oder localhost für eine lokale DB) und der Port 3306. Als Benutzer kann der root Benutzer mit entsprechenden Passwort gewählt werden.

5. Soll der Report in einem Pentaho BI Server oder einem Java Programm genutzt werden, sollte die Datenbankverbindung über einen JNDI Lookup erfolgen. So kann die DB-Verbindung für alle Reports zentral verwaltet werden.

Die JDBC Einrichtung zeigt folgender Screenshot:

Pentaho Report Designer - Datenbankverbindung einrichten

Die Verbindung zur Datenbank kann alternativ auch als „Generic Database“ hergestellt werden. Dazu wird der Connection String, Benutzer und Passwort der DB und der Name des Treibers angegeben. Einige Connection Strings sind unten aufgeführt:

Datenbank Connection String Treiber Classname
IBM DB2 jdbc:db2://HOST:PORT/DB COM.ibm.db2.jdbc.app.DB2Driver
Microsoft SQL Server jdbc:weblogic:mssqlserver4:DB@HOST:PORT weblogic.jdbc.mssqlserver4.Driver
Oracle Thin jdbc:oracle:thin:@HOST:PORT:SID oracle.jdbc.driver.OracleDriver
Firebird (JCA/JDBC Driver) jdbc:firebirdsql:[//HOST[:PORT]/]DB org.firebirdsql.jdbc.FBDriver
Microsoft SQL Server (JTurbo Driver) jdbc:JTurbo://HOST:PORT/DB com.ashna.jturbo.driver.Driver
Microsoft SQL Server (Sprinta Driver) jdbc:inetdae:HOST:PORT?database=DB com.inet.tds.TdsDriver
MySQL (Connector/J) jdbc:mysql://HOST:PORT/DB org.gjt.mm.mysql.Driver
Oracle OCI 8i jdbc:oracle:oci8:@SID oracle.jdbc.driver.OracleDriver
Oracle OCI 9i jdbc:oracle:oci:@SID oracle.jdbc.driver.OracleDriver
PostgreSQL (v6.5 and earlier) jdbc:postgresql://HOST:PORT/DB postgresql.Driver
PostgreSQL (v7.0 and later) jdbc:postgresql://HOST:PORT/DB org.postgresql.Driver
Sybase (jConnect 4.2 and earlier) jdbc:sybase:Tds:HOST:PORT com.sybase.jdbc.SybDriver
Sybase (jConnect 5.2) jdbc:sybase:Tds:HOST:PORT com.sybase.jdbc2.jdbc.SybDriver
geposted: 12. Mai 2014 | aktualisiert: 13. Mai 2014 | Autor: Marcus Hottenrott
Kategorie(n): Business Intelligence

Pentaho Reporting – Installation und Einführung

Pentaho Reporting ist eine OpenSource Reporting Lösung. Sie erlaubt das Erstellen von Reports (Berichten) für alle Datenquellen für die es JDBC Treiber gibt. Dazu zählen nahezu alle bekannten relationalen Datenbanken wie MySQL, MS SQL und Oracle. Die Pentaho Reporting Engine unterstützt mit PDF, Excel, HTML, Text, Rich-Text-File, XML und CSV verschiedene Ausgabeformate. Die Reports werden mit dem Pentaho Report Designer (PRD) erstellt welcher kostenlos herunterladen werden kann.

In diesem Kickoff Artikel wird kurz die Installation beschrieben und auf die Programmoberfläche eingegangen. Die weiteren Artikel beschreiben die Arbeit mit dem Pentaho Report Designer. Folgende Artikel sind bereits erschienen:

Inhaltsverzeichnis

Installation

Der Pentaho Report Designer setzt eine Java JRE voraus. Sofern diese noch nicht vorhanden ist muss es zunächst auf dem Computer installiert werden. Die eigentliche „Installation“ des Pentaho Report Designers besteht lediglich darin den Designer mit einem Zip Programm zu entpacken. Der Start erfolgt unter Windows über die Datei „report-designer.bat“.



Programmoberfläche

Der PRD erlaubt das grafische Erstellen von Reports. Die einzelnen Datenfelder und Designelemente können per Drag and Drop auf den Report gezogen werden. Einige der wesentlichen Funktionen werden kurz in folgendem Screenshot vorgestellt:
Penatho Report Programmoberfläche

geposted: 11. Mai 2014 | aktualisiert: 17. Juni 2014 | Autor: Marcus Hottenrott
Kategorie(n): Business Intelligence

Raspberry Pi – GPS Empfänger einrichten und mit Java auswerten

Für einige Projekte, z.b: im CarComputer-Bereich, wird die aktuelle GPS Position benötigt. Dazu kann an den Raspberrry Pi ein USB GPS Empfänger angeschlossen und ausgewertet werden. Die meisten der für den USB-Port erhältlichen GPS-Mäuse melden sich als serielles Gerät an und werden von dem Raspberry Pi ohne Treiberinstallation automatisch erkannt. Empfehlenswert ist der GlobalSat BU-353-S4 GPS-USB-Empfänger. Er bietet mit dem SirfStar 4 Chip eine sehr gute Empfangsleistung. Der Zugriff auf die GPS Daten kann über die Tool Suite gpsd erfolgen.

GPS Empfänger einrichten

Wird der GPS-Empfänger an den Raspberry Pi angeschlossen muss er in der Liste der USB Geräte auftauchen. Diese kann mit dem Befehl „lsusb“ aufgerufen werden.

root@raspberrypi:~# sudo lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

Je nach Hersteller ist des GPS-Empfängers unterscheidet sich die Bezeichnung des Gerätes. In diesem Fall ist es das Gerät „Prolific Technology, Inc. PL2303 Serial Port“.
Raspbian weißt dem Gerät automatisch einen virtuellen USB Port zu. Welcher Port zugewiesen wurde kann aus dem Syslog gelesen werden mit dem Befehl: „sudo tail -f /var/log/syslog“. Hier wurde der Port „ttyUSB0“ zugewiesen. Die Logdatei kann wie die meisten Konsolen Programme mit Strg+C beendet werden:

root@raspberrypi:/dev# sudo tail -f /var/log/syslog
Apr  7 17:55:11 raspberrypi kernel: [4926303.396898] usb 1-1.3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Apr  7 17:55:11 raspberrypi kernel: [4926303.452197] usbcore: registered new interface driver usbserial
Apr  7 17:55:11 raspberrypi kernel: [4926303.454106] usbcore: registered new interface driver usbserial_generic
Apr  7 17:55:11 raspberrypi kernel: [4926303.455879] USB Serial support registered for generic
Apr  7 17:55:11 raspberrypi kernel: [4926303.455924] usbserial: USB Serial Driver core
Apr  7 17:55:11 raspberrypi kernel: [4926303.465107] usbcore: registered new interface driver pl2303
Apr  7 17:55:11 raspberrypi kernel: [4926303.465828] USB Serial support registered for pl2303
Apr  7 17:55:11 raspberrypi kernel: [4926303.465944] pl2303 1-1.3:1.0: pl2303 converter detected
Apr  7 17:55:11 raspberrypi kernel: [4926303.477427] usb 1-1.3: pl2303 converter now attached to ttyUSB0

Um die von dem GPS-Empfänger empfangen GPS-Koordinaten auszulesen empfehlen sich unter Linux die bereits angesprochenen gpsd Tools. Diese können mit folgendem Befehl installiert werden:

sudo apt-get install gpsd gpsd-clients python-gps

Der gpsd Daemon wird wie folgt gestartet:

sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock -G

Das Flag „-G“ sorgt dafür, das der Server unter allen IP-Adressen auf Port 2947 erreichbar ist und nicht nur unter localhost. Unter Windows kann dies z.B. mit Telnet getestet werden. (Telnet muss ab Windows 7 über „Programme und Funktionen“ in der Systemsteuerung nachinstalliert werden)

telnet IP_ADRESSE_RASPI 2947

Für den GlobalSat Empfänger kann es notwendig sein sein Binärprotokoll nach NMEA zu ändern damit dieses korrekt von gpsd verarbeitet wird. Dies kann mit dem Befehl „gpsctl -n“ erreicht werden.

Anzeige der GPS Daten

Die GPS-Daten können auf der Konsole mit dem Programm „cgps“ angezeigt werden. Dabei ist zu beachten das der GPS Empfänger freie Sicht zum Himmel benötigen um Daten zu empfangen.
cgps

sudo cgps -s

Mit dem Befehl „xgps“ steht ein grafische Programm zur Verfügung. Ist an dem Raspberry Pi kein Monitor angeschlossen kann die Ausgabe grafischer Programme auch über SSH erfolgen wie es in diesem Artikel beschrieben.
xgps

sudo xgps

Mit dem Programm „gpsmon“ der gpsd Toolsuite lassen sich die vom GPS Empfänger gesendet Rohdaten, meist in Form von NMEA Sätzen, live auf der Console sehen. Somit kann wunderbar überprüft werden ob Daten empfangen werden.

sudo gpsmon

NMEA_GPSMON

Auslesen der GPS-Daten in Java

Gpsd stellt die GPS-Daten in JSON codierter Form auf Port 2947 bereit. Dieses können über eine TCP/IP Socketverbindung auslesen werden. Vereinfacht wird dies unter Java mit der Library GPSd4java.

Allerdings war die Library bei mir nicht direkt lauffähig. Ich musste über die Socket-Verbindung zunächst einen Befehl schicken, der die JSON-Ausgabe der GPS-Daten startet.

?WATCH={"enable":true,"json":true};

java_gpsd_testclientDanach können mit der Library die Daten sehr gut ausgelesen werden. Dazu habe ich das kleine, auf dem Screenshot abgebildete, Java Programm geschrieben:

Download ausführbares Programm „jGpsdTest“:


Download des Source-Codes:

geposted: 3. Mai 2014 | aktualisiert: 22. Juni 2014 | Autor: Marcus Hottenrott
Kategorie(n): Raspberry Pi

Raspberry Pi – GPIO Pins grafisch schalten mit jgRaspiGPIO

Die GPIO Pins des Raspberry Pi lassen sich auf unterschiedlichste weise schalten. Richtig komfortable wird es aber erst mit einer grafischen Benutzeroberfläche. Dazu habe ich das Programm „jgRaspiGPIO“ geschrieben. Es bietet eine GUI mit Raspberry Pi Visualisierung wobei für jeden GPIO Pin einen Button vorhanden ist um den Schaltzustand zu Ändern. Der aktuelle Schaltzustand wird im Programm angezeigt. Der folgende Screenshot zeigt das Programm:

RaspiGPIOSwitcher

Der Weg zum Programmstart:
1. Programm herunterladen 😉

2. Wenn das Programm unter Windows heruntergeladen wird kann es mit WinSCP auf den Raspberry Pi übertragen werden. Dies ist hier beschrieben.

3. Voraussetzung für die Funktion von „jgRaspiGPIO“ ist eine Java JRE auf dem Raspberry Pi. Die aktuellen Versionen von Raspbian bringen Java bereits mit. Ob und welche Java Virtual Machine (JVM) installiert ist kann mit dem Befehl „java -version“ getestet werden.

4. Das Programm nutzt eine grafische Benutzeroberfläche. Wird der Raspberry Pi headless, d.h. ohne Monitor betrieben muss die Grafikausgabe über Netzwerk erfolgen. Dazu muss bei dem SSH Protokoll das X11 Forwarding aktiviert werden. Komfortabler ist der Zugriff von Windows auf den LXDE Desktop des Raspberry Pi mit xrdp.

5. Der Start der Software erfolgt mit Root-Rechten über folgenden Befehl in dem Verzeichnis in dem das Programm liegt:

sudo java -jar jgRaspiGPIO.jar

Hintergrundinformationen für Java Entwickler

Der „Raspi GPIO Switcher“ ist in Java geschrieben und nutzt die Pi4J Library. Um die GPIO Pins zu schalten werden nur wenige Befehle benötigt. Im wesentlichen sind dies folgende:

private static final GpioController gpioController = GpioFactory.getInstance();
// Pin als Ausgabe-Pin initialisieren
GpioPinDigitalOutput pin0 = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_00, PinState.LOW);       
// Schaltzustand ändern
pin0.toggle();

Für Maven Nutzer ist noch interessant, das die Library „pi4j-native“ ausgeschlossen wird. Ansonsten kann das Projekt nicht kompiliert werden, da versucht wird die nativen Zugriffskomponenten, die nicht in Java geschrieben sind, mit dem Java Kompiler zu kompilieren.

	<dependencies>
		<dependency>
			<groupId>com.pi4j</groupId>
			<artifactId>pi4j-core</artifactId>
			<version>0.0.5</version>
			<exclusions>
				<exclusion>
					<groupId>com.pi4j</groupId>
					<artifactId>pi4j-native</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

Der Quellcode kann hier heruntergeladen werden:

geposted: 16. März 2014 | aktualisiert: 8. August 2014 | Autor: Marcus Hottenrott
Kategorie(n): Raspberry Pi

Notepad++ Tipps und Plugins

Notepad++ ist ein kostenloser (GPL Lizenz) Texteditor der Syntaxhighlighting verschiedener Programmiersprachen ermöglicht und besonders für Entwickler interessant ist. Er bietet viele Funktionen, wobei der Funktionsumfang durch Plugins noch erweitert werden kann. Der integrierte Plugin Manager erlaubt das installieren/deinstallieren der Plugins und bietet eine Übersicht über die integrierten Plugins. (Menü -> Erweiterungen-> Plugin Manager) Die Plugins können alternativ auch aus dem Web heruntergeladen und in das Verzeichnis „C:\Program Files (x86)\Notepad++\plugins“ entpackt werden. Einige nützliche Tipps und Plugins werden hier vorgestellt.

Notepad++

Tipps

In Dateien suchen

Notepad++ bietet über die Tastenkombination Strg+F wie viele Texteditoren eine Textsuche. Diese ermöglicht das Finden, und wenn gewünscht auch Ersetzen, von Text in dem geöffneten Dokument. Eine sehr nützliche Funktion die Notepad++ darüber hinaus bietet ist das durchsuchen von Dateien in einem beliebigen Verzeichnis auf der Festplatte. Dies kann beispielweise in der Programmierung zum Durchsuchen eines Workspaces genutzt werden.

Makros

Mithilfe von Makros können häufig benötigte Abläufe aufgezeichnet (rote Record Button) werden und beliebig oft abgespielt werden.Notepad++_Makros So kann z.B. am Anfang jeder Zeile etwas eingefügt werden, indem ein Makro nach folgendem Schema aufgezeichnet wird (Text am Anfang derersten Zeile einfügen -> Pos1 Taste -> Pfeil nach unten Taste). Wird dieses Makro nach dem Aufzeichnen bis zur letzten Zeile laufen gelassen sind alle Zeilen mit dem eingegebenen Präfix versehen.

Plugins

Explorer-Plugin

Das Explorer Plugin integriert einen Dateibrowser in Notepad++. Besonders wenn mehrere Dateien bearbeitet werden spart das Plugin den Wechsel in den Windows Explorer. Neben dem Explorer Plugin gibt es auch ein FTP-Explorer-Plugin welches die Bearbeitung von Textdateien auf einem FTP-Server erlaubt.
Download Explorer Plugin
Notepad++ Explorer

XML Tools – Extensible Markup Language bearbeiten

Das XML Tool Plugin erleichtert die Arbeit mit XML Dateien. Insbesondere das automatische Schließen von Tags und die Pretty-Print-Funktion, welche die XML-Daten sauber mit Einrückungen und Zeilenumbrüchen versieht, erleichtern die Arbeit.
Download XML Tools
Notepad++ XML Tools

JS Tools – JavaScript und JSON bearbeiten

Einige Funktionen:
– Formatierung von Javascript und JSON Code
– Douglas Crockford’s JSMin Algorithmus um Javascript code zu minimieren
– JSON data Viewer
Download JSTool
Notepad++ JSTool

JS Lint

Bei JS Lint handelt es sich um ein JavaScript Code Quality Tool. Es zeigt u.a. Fehler in Java Script Code auf.
Download JS Lint
Notepad++ JSLint

Compare Plugin

Das Plugin erlaubt das einfache Vergleichen zweier Textdokumente. Dabei werden diese parallel nebeneinander dargestellt und Unterschiede farblich markiert.
Download Compare Plugin
Notepad++ Compare Plugin

Hex Editor

Mit diesem Plugin verwandelt sich Notepad++ in einen Hex Editor.
Download Hex Editor
Notepad++ Hexeditor

MultiClipboard

Mit dem MultiClipboard können mehrere, oft benötigte Textschnipsel in der Zwischenablage geparkt werden.

Colorpicker

Der Colorpicker erlaubt das Ermitteln von Farbwerten. Dies ist besonders praktisch wenn HTML Code geschrieben wird.
Download Color Picker
Notepad++ ColorPicker

TextFX

TextFX rüstet zahlreiche Textbearbeitungsfunktionen nach. Für Entwickler besonders Interessant sind die Funktionen zum automatischen Schließen von HTML Tags und Klammern. Die Optionen ist neben jeder Menge weiteren Optionen über den neuen Menüeintrag TextFX -> TextFXSettings verfügbar. Siehe Screenshot:
Download TextFX
Notepad++ TextFX

Falling Bricks

Für die Entspannung zwischendurch sorgt der Tetris Clone Falling Bricks.
Download Falling Bricks
Notepad++ Falling Bricks

geposted: 5. März 2014 | aktualisiert: 22. Juni 2014 | Autor: Marcus Hottenrott
Kategorie(n): Diverses

Raspberry Pi – Remotedesktopverbindung

Wer Windows Server administriert kennt die in Windows integrierte Remotedeskopverbindung zur Administration entfernter Rechner über das RDP (Remote Desktop Protocol). Sie ermöglicht die komfortable Übertragung der Bildschirmausgabe des entfernten Computers. Das Programm xrdp implementiert das Remote Desktop Protokol für Linux, so das mit Windows Bordmitteln auf den Linux Desktop zugegriffen werden kann. Die Software kann in Raspbian Linux einfach mit apt-get installiert werden:

sudo apt-get install xrdp

Eine Konfiguration ist für den Benutzer pi nicht erforderlich. Unter Windows wird der integrierte Client Remotedesktopverbindung genutzt um die Verbindung zum Linux Desktop herzustellen. Er ist unter „Programme -> Zubehör -> Remotedesktopverbindung“ verfügbar oder kann über den Befehl „mstsc“ gestartet werden. Danach wird eine Verbindung zum Raspberry Pi über seine IP Adresse oder Hostnamen hergestellt:

Remotedesktopverbindung

Als Benutzeraccount wird der Benutzer pi verwendet. (Standarpasswort: raspberry)

XRDP Login

Nach kurzer Ladezeit erscheint dann der LXDE Desktop:

Raspbian LXDE Desktop über xrdp

geposted: 9. Februar 2014 | aktualisiert: 22. Juni 2014 | Autor: Marcus Hottenrott
Kategorie(n): Raspberry Pi

Raspberry Pi – Bildschirmausgabe über SSH

Der Raspberry Pi wird häufig ohne einen angeschlossenen Monitor betrieben, da dieser für Serveraufgaben nicht nötig ist. Die Administration erfolgt dann über das SSH Protokoll mit einem SSH Client wie z.B. Putty für Windows wie es hier beschrieben ist.

Es gibt aber Situationen wo eine grafische Oberfläche in Form eines Desktops erforderlich ist. Linux verwendet für diese Grafikausgabe ein Netzwerkprotokoll und Softwaresammlung namens X11. Ein X-Server übernimmt dabei die Grafikausgabe und verarbeitet die Eingaben der Maus und Tastatur. So ein X-Server gibt es auch für Windows. Hier kann beispielsweise Xming verwendet werden. Die Software kann mit den Standardeinstellungen installiert werden. Nach dem Start von Xming zeigt ein Programmicon neben der Uhr das der X-Server gestartet ist.

Nach dem Start des X-Server muss noch der SSH Client so eingestellt werden, dass er den lokalen X-Server nutzt. Bei Putty sind diese Einstellungen unter Connection -> SSH -> X11 zu finden. Hier wird „Enable X11 forwarding“ aktiviert und als „X Display location“ localhost:0 eingegeben. Siehe Screenshot:
Putty x11 Einstellung

Damit ist die Konfiguration bereits abgeschlossen. Bei der Raspbian Linux Distribution ist keine weitere Konfiguration nötig. Werden Programme mit grafischer Programmoberfläche durch den User pi in der Shell gestartet erfolgt die Ausgabe automatisch in einem Windows Fenster. Testweise kann dazu der Browser Midori gestartet werden:

pi@raspberrypi ~ $ midori

Midori Browser unter Windows mit Putty und X11

Ebenso ist es möglich den integrierten LXDE Desktop zu starten. Allerdings werden hier beim Beenden ggf. nicht alle Resourcen wieder korrekt freigegeben. Eine komfortablere Möglichkeit den Desktop von Windows aus zu nutzen ist die Verwendung des RDP (Remote Desktop Protokolls) und der xrdp Software auf dem Raspberry Pi. Wie dies funktioniert wird hier beschrieben.

startlxde
geposted: 9. Februar 2014 | aktualisiert: 22. Juni 2014 | Autor: Marcus Hottenrott
Kategorie(n): Raspberry Pi

Maven – JAR mit allen Dependencies erstellen

jarWenn mit Maven eine JAR-Datei erzeugt wird werden die abhängigen Libraries im Normalfall nicht mit in das JAR aufgenommen. Soll jedoch ein lauffähiges Programm ausgeliefert werden, so müssen alle Dependencies zu einem JAR zusammengefasst werden. Diese Aufgabe übernimmt das Maven Assembly Plugin. In der POM-Datei des Hauptprojektes wird es als Plugin aufgenommen und ihm mitgeteilt wo sich die Klasse mit der Main-Methode befindet. Über das Attribut „finalName“ kann der Name der zu erzeugenden JAR-Datei festgelegt werden. Abschließend wird Assembly Plugin über die Execution-Einstellungen an die Package-Phase des Maven Lebenszyklus gebunden. Ein JAR mit allen abhängigen Klassen kann dann über den Package-Befehl erstellt werden:

mvn clean package

POM Inhalt:

<build>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
				    <finalName>JAR_NAME</finalName>
				    <appendAssemblyId>false</appendAssemblyId> 
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>net.it_adviser.test.MainClass</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>attached</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
geposted: 27. Januar 2014 | aktualisiert: 15. August 2014 | Autor: Marcus Hottenrott
Kategorie(n): Maven

Raspberry Pi – Hausautomatisierung mit Domoticz und Home Easy

RaspberryPi_RFXCOMRFXCOMDer folgende Artikel stellt den Aufbau einer Hausautomatisierung mit dem Raspberry Pi vor. Das System nutzt die Open Source Software Domoticz, die über einen 433 Mhz Transceiver der Firma RfxCom unterschiedlichste Hausautomatisierungs-Komponenten aus der Serie Home Easy der Firma ELRO steuern kann. Dazu zählen insbesondere Funksteckdosen, Thermometer, Bewegungsmelder oder Helligkeitssensoren.

Domoticz-Installation

Home Easy Funksteckdose

Home Easy Funksteckdose

Domoticz gibt es für Windows und Linux. Für den Raspberry Pi existiert ein vorkonfiguriertes Linux Images das mit der Software Win32 Imager auf eine SD Karte geschrieben werden kann. Soll Domoticz auf einem bestehenden Debian / Raspbian Linux installiert werden folgen Sie am besten der Anleitung im Domoticz Wiki. Detaillierte Informationen bietet auch das Domoticz Handbuch

Domoticz-Konfiguration

Domoticz bringt eine moderne HTML 5 Web Oberfläche mit, die sich dynamisch an das jeweilige Gerät (Desktop, Tablet, Smartphone) anpasst. Dazu wird ein aktueller Browser benötigt. IE User benötigen die Version 10+. Die Domoticz Web GUI ist über Port 8080 des Raspberry Pi erreichbar:

http://IP_ADRESSE_RASPI:8080

Auf der Startseite können die wichtigsten Komponenten des Hausautomatisierungssystems in Form von Kacheln abgelegt werden:

Domoticz - Dashboard

Domoticz – Dashboard

Als erstes sollte nach der Installation von Domoticz in den Einstellungen der RfxCom Sender konfiguriert werden. Im Normalfall ist der 433 Mhz Sender an den USB Port „dev/ttyUSB0“ angeschlossen und ermöglicht dem System die Verbindung zu den Funksteckdosen und weiteren Hausautomatisierungs-Komponenten.

Domoticz - Hardware RfxCOM

Domoticz – Hardware RfxCOM

Anlernen der Funksteckdosen

1. Zunächst muss eine Home Easy Fernbedienung mit der Steckdose verbunden werden. Dazu drücken Sie die „LEARN“ Taste bei eingesteckter Dose für 3 Sekunden. Die Status LED der Funksteckdose blinkt danach und signalisiert damit die Empfangsbereitschaft für einen neuen Sendercode.
2. Anschließend wird auf der Funkverbindung die On und danach die Off Taste gedrückt die mit der Funksteckdose verbunden werden sollen.
3. Die Funksteckdose muss nun über die Fernbedienung schaltbar sein. Sollen alle angelernten Codes in der Funksteckdose gelöscht werden, so muss die „LEARN“-Taste für 6 Sekunden gedrückt werden.

Integration in Domoticz:

4. Um die Funksteckdose in Domoticz zu integrieren gibt es im Tab „Switches“ einen Button „Learn Light/Switch“. Dieser wird gedrückt und anschließend die Taste der Steckdose auf der Fernbedienung die in das System integriert werden soll.

Die Funksteckdosen können mit dem System auch zeitgesteuert geschaltet werden:

Domoticz - zeitgesteuert Schalten

Domoticz – zeitgesteuert Schalten

Temperaturwerte erfassen und visualisieren

In dem Temperatur-Tab der Software werden die Temperaturen mehrerer Funk Temperatursender in Form Diagrammen dargestellt. Die Temperaturen werden im Tages-, Monats- und Jahresverlauf dargestellt. DerTemperatursender TFA 30.3150 wird von Domoticz automatisch erkannt.

Domoticz - Temperaturdiagramme

Domoticz – Temperaturdiagramme

Fazit

Das System ist bei mir bereits mehrere Monate im Einsatz und funktioniert sehr gut. Durch die Kombination von dem fertigen RfxCom Transmittter / Receiver und der Open Source Software ist schnell eine lauffähige Hausautomatisierung aufgebaut. Domoticz bietet eine API mit einer Rest-Schnittstelle über die mit JSON-Formatierten-Befehlen der Status einzelner Komponenten abgefragt und geändert werden kann. Dadurch sind eigene Entwicklungen die an das System „andocken“ möglich.
Wer gerne etwas mehr bastelt und Zeit investieren möchte kann auch einen günstigen 433 Mhz Sender nehmen und diesen an die GPIO Pins des Raspberry Pi anschließen. Als Software bietet sich dafür die Open Source Software pilight an.

geposted: 26. Januar 2014 | aktualisiert: 9. Oktober 2015 | Autor: Marcus Hottenrott
Kategorie(n): Raspberry Pi

Java – Dateien lesen -> zippen -> speichern

Java ZIP TestDas folgende Beispiel zeigt die Verwendung der JFileChooser Klasse zum Öffnen und Speichern von Dateien sowie das Erstellen von ZIP Archiven. Dabei wird für die Dateien ein „Umweg“ über ein Byte-Array gegangen bevor diese in eine ZIP-Datei geschrieben werden. Byte-Arrays können in BLOB (Binary large Object) Spalten von Datenbanktabellen geschrieben werden, so das dieses Beispiel den Weg zum Byte-Array mit aufzeigt. Der Quelltext ist unten aufgeführt und als Maven Projekt angehängt:

/**
 * File open -> ZIP -> save
 *
 */
public class App {
	
	private class SelectedFile {
		private String fileName;
		private byte[] rawData;
	}

	private List<SelectedFile> filesToZip = new ArrayList<SelectedFile>();
	
	public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                new App().createUI();
            }
        };
        EventQueue.invokeLater(r);
    }

	/**
	 * Creates an zip archive with all entries from List<SelectedFile> filesToZip
	 */
	private void createZipFile(String pathWithFilename) {
		byte[] buffer = new byte[1024 * 4];

		pathWithFilename = pathWithFilename.toLowerCase();
		if(!pathWithFilename.endsWith(".zip")){
			pathWithFilename += ".zip";
		}
		
		try {
			String outputFileName = pathWithFilename;
			FileOutputStream fos = new FileOutputStream(outputFileName);
			ZipOutputStream zos = new ZipOutputStream(fos);

			for (SelectedFile file : filesToZip) {
				ZipEntry ze = new ZipEntry(file.fileName);
				zos.putNextEntry(ze);

				ByteArrayInputStream bis = new ByteArrayInputStream(file.rawData);

				int len;
				while ((len = bis.read(buffer)) > 0) {
					zos.write(buffer, 0, len);
				}
				bis.close();
			}
			zos.closeEntry();
			zos.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		JOptionPane.showMessageDialog(null, "Die Datei(n) wurde(n) gezipt...",
				"Info", JOptionPane.INFORMATION_MESSAGE);
	}
	
    private void createUI() {
        final JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        JButton btnOpen = new JButton("Datei öffnen");
        JButton btnSave = new JButton("ZIP speichern");

        btnOpen.addActionListener(new ActionListener() {
        	@Override
        	public void actionPerformed(ActionEvent ae) {
        		JFileChooser openDialog = new JFileChooser();
        		int openDialogReturn = openDialog.showOpenDialog(frame);
        		openDialog.setMultiSelectionEnabled(false);
        	        if(openDialogReturn == JFileChooser.APPROVE_OPTION)
        	        {
        	        	SelectedFile sf = new SelectedFile();
        	        	sf.fileName = openDialog.getSelectedFile().getName();
        	        	String pathToFile = openDialog.getSelectedFile().getAbsolutePath();
        	        	try {
							sf.rawData = Files.readAllBytes(Paths.get(pathToFile));
						} catch (IOException e) {
							e.printStackTrace();
						}
        	        	filesToZip.add(sf);
        	        }
        	}
        });

		btnSave.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ae) {
				JFileChooser saveDialog = new JFileChooser();
			    FileNameExtensionFilter zipExtensionFilter =
			            new FileNameExtensionFilter("ZIP File(*.zip)", "zip");
			    saveDialog.addChoosableFileFilter(zipExtensionFilter);
			    int saveDialogReturn = saveDialog.showSaveDialog(frame);
				
			    if (saveDialogReturn == JFileChooser.APPROVE_OPTION) {
					createZipFile(saveDialog.getSelectedFile().getAbsolutePath());
				}
			}
		});

        frame.add(new JLabel("Bitte zu zippende Datei auswählen:"), BorderLayout.NORTH);
        frame.add(btnOpen, BorderLayout.CENTER);
        frame.add(btnSave, BorderLayout.SOUTH);
        frame.setTitle("ZIP Files");
        frame.pack();
        frame.setLocationRelativeTo(null); // Desktop mittig
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
geposted: 8. Dezember 2013 | aktualisiert: 3. Oktober 2014 | Autor: Marcus Hottenrott
Kategorie(n): Java