Details und Download des TWTransformer siehe hier.
CSV Testdaten Generator (Oder wer testet ist feige? NEIN) und mehr Tools für CSV to …
Mit dem CSV-Testdaten-Generator kann schnell und einfach jegliche Art von Testdaten erzeugt werden. Die dann leicht in JUnit und sonstwie weiterverwendet werden können.
Auch andere gute Tools für die Bearbeitung von CSVs sind dort zu finden. z.B.
- Convert CSV To Delimited – reformat, filter, and sort delimited data
- Convert CSV To Fixed Width or ASCII Table
- Convert CSV To GeoJSON
- Convert CSV To HTML Table or MediaWiki Table New
- Convert CSV To JSON
- Convert CSV To KML
- Convert CSV To Multi-line Data
- Convert CSV To SQL
- Convert CSV To XML
- Convert CSV To YAML
- Pivot CSV Tool
- Convert Fixed Width To CSV
- Convert GeoJSON To CSV
- Convert HTML Table To CSV
- Convert JSON To CSV
- Convert SQL To CSV
- Convert XML To CSV
- Convert YAML To CSV
Z.B. geben wir in der Eingabe Zeile folgende Schlüsselwörter an:
seq; first; last; name; email; latitude; longitude; domain; string
Wählen noch die Anzahl der zu erzeugenden Datensätze, z.B. 10 und klicken auf „Generate Test Data“.
Schon werden die Testdaten erzeugt, z.B.:
1 2 3 4 5 6 7 8 9 10 11 |
[seq;first;last;name;email;latitude;longitude;domain;string 1;Nevaeh;Flores;Layla Patton;funbecev@rud.gov;-37.83501;85.51261;es.com;X96yT8Ti*c10n2*Tq2$ 2;Raymond;Castillo;Madeline Austin;hewit@fedbi.net;-37.34585;81.91501;wiz.io;D%0B9 3;Alex;Vega;Tucker Harris;fedwicro@jizpusi.io;50.22157;80.15615;pehuflir.edu;VUXsuoQ^ 4;Emery;Chapman;Ruby Blake;sehudguj@havbeawi.edu;63.62601;177.62135;iwnego.co.uk;bqa6xwK1jHm 5;Ayla;Price;Alice Turner;are@ona.co.uk;71.88833;65.1077;usfevog.edu;UgHl&lqo*WA16B 6;Eden;Ortega;Presley Hunter;isozba@funoco.io;24.01598;15.27323;cuasve.gov;$R!hvnwUABHppwsN 7;Eva;Higgins;Paige Guzman;se@dok.com;69.97058;168.30766;ton.net;imsoYdGG7 8;Jaden;Maxwell;Amir Powell;keruduf@ig.co.uk;13.61097;109.48138;iwo.net;*LtbS&2g] 9;Bryson;Wood;Olivia Mathis;nofha@ufefic.edu;27.57553;144.73931;ozoum.co.uk;^L9gNMr 10;Gabriel;West;Esther Bush;mefzule@et.org;-9.7853;130.91952;ipebuake.net;6BK[GKSfz(c!v^] |
Mit klick auf „Save to Disk
“ können die Testdaten in eine Datei gespeichert werde.
Die Testdaten werden auf dem Client erzeugt, und werden also nicht an den Hersteller der Seite gesendet.
Nun können wir die CSV Testdaten auch in eine HTML Tabelle umwandeln, hier nur die Spalten 1,2,3 eingegeben:
[seq | first | last |
---|---|---|
1 | Nevaeh | Flores |
2 | Raymond | Castillo |
3 | Alex | Vega |
4 | Emery | Chapman |
5 | Ayla | Price |
6 | Eden | Ortega |
7 | Eva | Higgins |
8 | Jaden | Maxwell |
9 | Bryson | Wood |
10 | Gabriel | West |
Wer die CSV dann in XML umwandel möcht, kann dies auch leicht mit dem CSV to XML Converter tun. Hier mal die CSV die oben generiert wurde:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
<?xml version="1.0"?> <ROWSET> <ROW> <FIELD1>1</FIELD1> <FIELD2>Nevaeh</FIELD2> <FIELD3>Flores</FIELD3> <FIELD4>Layla Patton</FIELD4> <FIELD5>funbecev@rud.gov</FIELD5> <FIELD6>-37.83501</FIELD6> <FIELD7>85.51261</FIELD7> <FIELD8>es.com</FIELD8> <FIELD9>X96yT8Ti*c10n2*Tq2$</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>2</FIELD1> <FIELD2>Raymond</FIELD2> <FIELD3>Castillo</FIELD3> <FIELD4>Madeline Austin</FIELD4> <FIELD5>hewit@fedbi.net</FIELD5> <FIELD6>-37.34585</FIELD6> <FIELD7>81.91501</FIELD7> <FIELD8>wiz.io</FIELD8> <FIELD9>D%0B9</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>3</FIELD1> <FIELD2>Alex</FIELD2> <FIELD3>Vega</FIELD3> <FIELD4>Tucker Harris</FIELD4> <FIELD5>fedwicro@jizpusi.io</FIELD5> <FIELD6>50.22157</FIELD6> <FIELD7>80.15615</FIELD7> <FIELD8>pehuflir.edu</FIELD8> <FIELD9>VUXsuoQ^</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>4</FIELD1> <FIELD2>Emery</FIELD2> <FIELD3>Chapman</FIELD3> <FIELD4>Ruby Blake</FIELD4> <FIELD5>sehudguj@havbeawi.edu</FIELD5> <FIELD6>63.62601</FIELD6> <FIELD7>177.62135</FIELD7> <FIELD8>iwnego.co.uk</FIELD8> <FIELD9>bqa6xwK1jHm</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>5</FIELD1> <FIELD2>Ayla</FIELD2> <FIELD3>Price</FIELD3> <FIELD4>Alice Turner</FIELD4> <FIELD5>are@ona.co.uk</FIELD5> <FIELD6>71.88833</FIELD6> <FIELD7>65.1077</FIELD7> <FIELD8>usfevog.edu</FIELD8> <FIELD9>UgHl&amp</FIELD9> <FIELD10>lqo*WA16B</FIELD10> </ROW> <ROW> <FIELD1>6</FIELD1> <FIELD2>Eden</FIELD2> <FIELD3>Ortega</FIELD3> <FIELD4>Presley Hunter</FIELD4> <FIELD5>isozba@funoco.io</FIELD5> <FIELD6>24.01598</FIELD6> <FIELD7>15.27323</FIELD7> <FIELD8>cuasve.gov</FIELD8> <FIELD9>$R!hvnwUABHppwsN</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>7</FIELD1> <FIELD2>Eva</FIELD2> <FIELD3>Higgins</FIELD3> <FIELD4>Paige Guzman</FIELD4> <FIELD5>se@dok.com</FIELD5> <FIELD6>69.97058</FIELD6> <FIELD7>168.30766</FIELD7> <FIELD8>ton.net</FIELD8> <FIELD9>imsoYdGG7</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>8</FIELD1> <FIELD2>Jaden</FIELD2> <FIELD3>Maxwell</FIELD3> <FIELD4>Amir Powell</FIELD4> <FIELD5>keruduf@ig.co.uk</FIELD5> <FIELD6>13.61097</FIELD6> <FIELD7>109.48138</FIELD7> <FIELD8>iwo.net</FIELD8> <FIELD9>*LtbS&amp</FIELD9> <FIELD10>2g]</FIELD10> </ROW> <ROW> <FIELD1>9</FIELD1> <FIELD2>Bryson</FIELD2> <FIELD3>Wood</FIELD3> <FIELD4>Olivia Mathis</FIELD4> <FIELD5>nofha@ufefic.edu</FIELD5> <FIELD6>27.57553</FIELD6> <FIELD7>144.73931</FIELD7> <FIELD8>ozoum.co.uk</FIELD8> <FIELD9>^L9gNMr</FIELD9> <FIELD10></FIELD10> </ROW> <ROW> <FIELD1>10</FIELD1> <FIELD2>Gabriel</FIELD2> <FIELD3>West</FIELD3> <FIELD4>Esther Bush</FIELD4> <FIELD5>mefzule@et.org</FIELD5> <FIELD6>-9.7853</FIELD6> <FIELD7>130.91952</FIELD7> <FIELD8>ipebuake.net</FIELD8> <FIELD9>6BK[GKSfz(c!v^x</FIELD9> <FIELD10></FIELD10> </ROW> </ROWSET> |
Oder mal eben 1000 Passwörter die 20 Stellen haben generieren mit:
seq,string(20)
1 2 3 4 5 6 7 8 9 10 11 12 |
seq,string 1,6W50kn@61erS8r%5iPH5 2,RsAUg%3fa0#dM)$si9f1 3,[8aVDuuV#qo$U]If[vdx 4,)vfY$S7MMJrJ8hGLsG40 5,M92Ir1IZE#JxzIep)47T 6,Jj9uqhd@D2Yt&iDNEdN) 7,X0RU[l6sSnZq[zFnAavy 8,1ZZgdvuNNLBi6HC28$)7 9,p*dV^82rW&o0iK]ltA*[ ... 1000,JT*0PBq&dzaCBrB#G2cQ |
Weitere Ideen?
Wie können auf einem Mac OS X dmg (Apple disk image) Archive mit Maven und hdiutil erstellt werden?
Will man Java Programme ausliefern, benötigt man auf einem Apple ein dmg Archive. Das kann wie folgt erstellt werden.
In der pom.xml folgendes Plugin einfügen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<plugin> <groupId>sh.tak.appbundler</groupId> <artifactId>appbundle-maven-plugin</artifactId> <version>1.0.2</version> <configuration> <mainClass>de.wenzlaff.xmltransform.StartGui</mainClass> <iconFile>${basedir}/src/main/resources/tw.icns</iconFile> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>bundle</goal> </goals> </execution> </executions> </plugin> |
Die Main Klasse mit der Klasse ersetzen, die gestartet werden soll. Auch der Pfad zum Icon anpassen. Evl. noch eine eigene plist setzen mit:
1 |
<dictionaryFile>YourCustomInfo.plist</dictionaryFile> |
Dann das Maven Goal mvn package appbundle:bundle ausführen
und in das target Verzeichnis mit einer Konsole gehen und folgenden Befehl mit hdiutil ausführen:
1 2 |
# hdiutil create -srcfolder path/to/archive path/to/YourApplication.dmg z.B.: hdiutil create -srcfolder twcsvtocsv.app/ TW.dmg |
Schon wird das TW.dmg Archive im target Verzeichnis erzeugt. Wer das auch noch als Maven Task automatisieren möchte, trägt noch folgendes ein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<plugin> <artifactId>exec-maven-plugin</artifactId> <groupId>org.codehaus.mojo</groupId> <executions> <execution> <id>dmg-distro</id> <phase>package</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>/usr/bin/hdiutil</executable> <arguments> <argument>create</argument> <argument>-srcfolder</argument> <argument>target/${project.artifactId}-${project.version}</argument> <argument>-format</argument> <argument>UDZO</argument> <argument>-volname</argument> <argument>${project.artifactId}-${project.version}</argument> <argument>target/${project.artifactId}-${project.version}.dmg</argument> </arguments> </configuration> </execution> </executions> </plugin> |
Als Alternative könnte man auch das osxappbundle-maven-plugin verwenden. Das hat Abhängigkeiten zu Apple’s Java launcher, und ist nicht für Java Version 7 und größer.
Aber wer will, kann dann das als Alternative eintragen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>osxappbundle-maven-plugin</artifactId> <version>1.0-alpha-2</version> <configuration> <mainClass>de.wenzlaff.xmltransform.StartGui</mainClass> <iconFile>${basedir}/src/main/resources/tw.icns</iconFile> </configuration> <executions> <execution> <goals> <goal>bundle</goal> </goals> </execution> </executions> </plugin> |
TOP 9: Sicherheitshinweise für Java Entwickler
- Not Restricting Access to Classes and Variables
- Depending on Initialization
- Not Finalizing Classes
- Relying on Package Scope
- Minimize the Usage of Use Inner Classes
- Hard Coding
- Allow the Echoing Of Sensitive Data to the UI
- Not Paying Attention to Class Cloneability
- Overdoing of Serialization and Deserialization
Wie kann ein BE-Model (ecore) mit Eclipse Modeling Framework (EMF) unter Eclipse Luna 4.4.2 und Texo generiert werden?
Für die meisten Java Projekte braucht man ein BE-Model, das am besten automatisch generiert wird. Wie kann das innerhalb von Eclipse Luna mit dem EMF durchgeführt werden?
Wir wollen diese Modell Stuktur erzeugen. Eine Mindmap hat 0-* Zweige:
Zuerst Texo und EMF installieren.
Dann ein neues EMF Projekt anlegen über das Menü: File - New - Other
:
Nun erstellen wir ein ecore Model über das Menü: File - New - Other - Eclipse Modeling Framework-Ecore
Model:
So sieht das Projekt nun aus, mit der mindmap.ecore
Model Datei:
Nun erzeugen wir zwei Klassen mit ein paar Attribute über New Child - New EClass
über das Kontextmenü des Models (2.Zeile): „Wie kann ein BE-Model (ecore) mit Eclipse Modeling Framework (EMF) unter Eclipse Luna 4.4.2 und Texo generiert werden?“ weiterlesen
Wie kann eine MySQL Datenbank auf einem Mac OS X 10.10.3 (Yosemite) (Windows …) installiert werden, um mit Java von Eclipse (Java EE Luna 4.4.2) aus darauf zuzugreifen?
Wer eine MySQL Datenbank auf seinen Rechner installieren will, muss sich die Packages die zu installieren sind, auf der MySQL Homepage zusammen suchen.
Folgende drei Komponenten müssen für Mac OS X geladen und installiert werden (für Windows analog):
1. MySQL Community Server 5.6.24 von https://dev.mysql.com/downloads/mysql/
Für den Mac OS X 10.9 (x86, 64-bit), DMG Archive 5.6.24 167.6M mysql-5.6.24-osx10.9-x86_64.dmg. Installation.
2. MySQL Workbench 6.3.3 von http://dev.mysql.com/downloads/workbench/
mysql-workbench-community-6.3.3-osx-x86_64.dmg. Installation.
Die Workbench kann dann aus dem Programm Verzeichnis über das folgende Programm-Icon gestartet werden:
3. Connector/J 5.0.8 für Java für alle Betriebsysteme von https://dev.mysql.com/downloads/connector/j/5.0.html
Download mysql-connector-java-5.0.8.zip und z.B. in das Verzeichnis
/usr/local/mysql-5.6.24-osx10.8-x86_64/mysql-connector-java-5.0.8.jar kopieren.
Wenn alles installiert wurde, kann der DB Server über die Systemsteuerung mit dem MySQL Icon unten rechts gestartet werden:
„Wie kann eine MySQL Datenbank auf einem Mac OS X 10.10.3 (Yosemite) (Windows …) installiert werden, um mit Java von Eclipse (Java EE Luna 4.4.2) aus darauf zuzugreifen?“ weiterlesen
Eclipse Plug-in: Wie können Resourcen von einem Plug-in in einem anderen Plug-in gelesen werden?
Manchmal möchte man die Resourcen wie Bilder oder Dateien aus einem anderen Eclipse Plug-in lesen. Also wie können Resourcen von einem Plug-in, in einem anderen Plug-in gelesen werden?
1 2 |
URL url = new URL("platform:/plugin/de.wenzlaff.plugin.twusb/gif/beispiel.gif"); ... |
Siehe auch hier.
Raspberry Pi: Per Bash mit GPIO Lib wiringpi, per Phyton mit RPi.GPIO und Java mit pi4j ansteuern der Pins auf Kali
Um die Pins per Bash anzusteuern, kann die wiringpi Lib verwendet werden. Die GPIO Homepage oder auch die Pin Belegung des rPi ist hilfreich.
So, jetzt erst einmal alles installieren und testen mit einer LED mit Widerstand an Pin 7 (4. Pin von oben links) und Masse (ganz unten links).
Zuerst alles für die Bash, um von der Konsole auf die Pins zugreifen zu können: „Raspberry Pi: Per Bash mit GPIO Lib wiringpi, per Phyton mit RPi.GPIO und Java mit pi4j ansteuern der Pins auf Kali“ weiterlesen
Eclipse PlugIn: Wie kann Text im Konsolen Fenster ausgegeben werden?
Manchmal möchte man einfach nur Text in der Konsole ausgeben. Früher, d.h. vor Eclipse 3.0 musste man dazu eine eigene View erzeugen. Das braucht man nun nicht mehr, man kann die vorhandenen generic Log Konsole verwenden.
Aufrufen geht dann einfach so:
1 2 3 4 5 6 |
MessageConsole konsole = getKonsole("Konsole"); MessageConsoleStream out = konsole.newMessageStream(); out.println("Hallo sagt Thomas von der Konsole."); out.println("Wir schreiben einfach in die Konsole oder?"); out.println(); out.println("Ist das Cool?"); |
Hier die Methode, die die Konsole liefert bzw. erzeugt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/** * Liefert die Log Konsole. Wenn keine Konsole vorhanden ist, wird eine neu erzeugt. * * @param konsolenName * der Name der Konsole * @return MessageConsole */ private MessageConsole getKonsole(String konsolenName) { ConsolePlugin plugin = ConsolePlugin.getDefault(); IConsoleManager konsolenManager = plugin.getConsoleManager(); IConsole[] konsolen = konsolenManager.getConsoles(); for (int i = 0; i < konsolen.length; i++) { if (konsolenName.equals(konsolen[i].getName())) { return (MessageConsole) konsolen[i]; } } // keine Konsole gefunden, dann erzeugen wir eine MessageConsole konsole = new MessageConsole(konsolenName, null); konsolenManager.addConsoles(new IConsole[] { konsole }); return konsole; } |
Wir erhalten dann folgenden Ausgabe:
Um das zu erreichen, muss noch eine neue Abhängigkeit ( org.eclipse.ui.console) (Dependencies) ergänzt werden:
Eclipse PlugIn: Wie kann ein Logeintrag in der Error Log View erstellt werden?
Bei der PlugIn Programmierung unter Eclipse Luna kann leicht auf die Log-View zugegriffen werden. Hier mal ein kleines Beispiel mit den verschiedenen Loglevel:
1 2 3 4 5 6 7 8 9 10 11 |
IStatus status = new Status(IStatus.INFO, "TWPlugin", "Testeintrag im Log im Status Info"); StatusManager.getManager().handle(status, StatusManager.LOG); status = new Status(IStatus.ERROR, "TWPlugin", "Testeintrag im Log im Status Error"); StatusManager.getManager().handle(status, StatusManager.LOG); status = new Status(IStatus.WARNING, "TWPlugin", "Testeintrag im Log im Status Warning"); StatusManager.getManager().handle(status, StatusManager.LOG); status = new Status(IStatus.OK, "TWPlugin", "Testeintrag im Log im Status OK"); StatusManager.getManager().handle(status, StatusManager.LOG); |
Wie kann mit der neuen Java Zeit API 1.8 ein Zeitstempel (2014-01-31_15:12:00) erzeugt werden?
Java 1.8 gibt es ja nun schon einige Zeit. Warum nicht die neue Time API verwenden?
Vorteil, die meisten Time und Date Klassen sind immutable und thread-safe. Z.B die LocalDateTime, LocalDate und DateTimeFormatter.
Hier mal ein Beispiel, um einen Zeitstempel in der Form 2014-01-31_15:12:00 zu erzeugen:
1 2 3 4 5 |
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; private static final DateTimeFormatter ZEITSTEMPEL_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH:mm:ss"); |
1 2 3 4 5 6 |
private static String getZeitstempel() { // 2014-01-31_15:12:00 LocalDateTime heute = LocalDateTime.now(); String zeitstempel = ZEITSTEMPEL_FORMAT.format(heute); return zeitstempel; } |
Wie kann mit der neuen Java 1.8 Time Api einmal am Tag um Mitternacht ein Ereignis erzeugt werden?
Wie kann mit der neuen Java 1.8 Time Api einmal am Tag um Mitternacht ein Ereignis erzeugt werden? Natürlich geht auch jeder andere Zeitpunkt, aber hier mal das Beispiel um Mitternacht:
1 2 3 4 5 6 |
// Plant die Ausführungen ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // einmal am Tag um Mitternacht Long mitternacht = LocalDateTime.now().until(LocalDate.now().plusDays(1).atStartOfDay(), ChronoUnit.MINUTES); // und los.. scheduler.scheduleAtFixedRate(new AnzahlProTagAction(flugInfosProTag, parameter), mitternacht, 1440, TimeUnit.MINUTES); |
Hier die Beispiel Klasse.
Wichtig ist das sie von TimerTask
ableitet und die run()
Methode überschreibt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class AnzahlProTagAction extends TimerTask { private Parameter parameter; private FlugInfosProTag flugInfosProTag; public AnzahlProTagAction(FlugInfosProTag flugInfosProTag, Parameter parameter) { this.flugInfosProTag = flugInfosProTag; this.parameter = parameter; } @Override public void run() { // hier der auszuführende Code } } |
Java auf Platz 2 im aktuellen Tiobe Index 2015
Quelle: Tiobe Index
DUMP1090 Client TWFlug 0.1.0 für Raspberry Pi, Mac, Windows und Linux veröffentlicht
Habe soeben die 1. Version von dem DUMP1090 Client TWFlug kostenlos
veröffentlicht.
TWFlug liest die Daten von einem DUMP1090 Server und zeigt sie (optional) in einem Tacho an oder/und schreibt die Daten in eine Logdatei für die Auswertung mit z.B. Fhem. Es kann die Logdatei auch per sFTP an einen entfernten Rechner kopieren.
Das TWFlug Programm ist ein Java Programm und läuft somit auf allen Betriebssystem. Es können mit Fhem dann solche schönen Grafiken in Echtzeit angezeigt werden:

Installation:
Download der twflug-0.1.0.zip.
Dann das Archive auspacken.
Für das Starten gibt es zwei Möglichkeiten mit oder ohne GUI.
Ohne GUI mit Eingabe in der Konsole in dem TWFlug Verzeichnis mit:
1 |
java -jar twflug.jar -n --ip IP-VOM-DUMP1090-Server |
also z.B. java -jar twflug.jar -n --ip 192.198.1.2
oder mit GUI
1 |
java -jar twflug.jar --ip IP-VOM-DUMP1090-Server |
also z.B. java -jar twflug.jar --ip 192.198.1.2
Dann startet nach einigen Sekunden, die folgenden Anzeige von TWFlug:

Weiter Infos zu den Parametern erhält man durch Eingabe von
1 |
java -jar twflug.jar --help |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[main] DEBUG de.wenzlaff.twflug.TWFlug - Starte TWFlug ... usage: TWFlug -c,--copy-time <arg> copy time in Minuten (default: 60 Minuten) -d,--debug print debugging information (default: false) -dd,--ziel-datei <ziel-datei> destination file name (default: /home/pi/fhem/log/flugdaten-YYYY-MM.log) -dip,--ziel-ip <arg> ip adress for copy destination -dpsw,--ziel-passwort <arg> passwort from destination User -duser,--ziel-user <arg> destination User (default: pi -h,--help print help and exit -height,--window-height <arg> set window hight (default: 600) -i,--ip ip adress from DUMP1090 -k,--copy copy output file to destination (default: false) -max,--max-count <arg> set max count value (default: 50) -min,--min-count <arg> set min count value (default: 0) -n,--no-gui display no GUI. Only logfile output (default: false) -o,--outputfile <outputfile> use given file for DUMP output (default: flugdaten-YYYY-MM.log) -p,--port <arg> port from DUMP1090 (default: 30003) -r,--refresh-time <arg> refresh time in ms (default: 300000 ms = 5 Minuten) -v,--version print the version information and exit -width,--window-width <arg> set window with (default: 600) |
Weitere Anregungen, Bugs, Fix, Likes, Lob und Dank gerne als Kommentar hier auf der Seite.
Viel Spaß beim Planecounting.
Raspberry Pi: Wie können Flugzeugdaten in Fhem in real-time (Echtzeit) angezeigt werden?
Da bei mir ein Fhem Home-Server läuft, hatte ich die Idee, dort doch gleich die Flugdaten die von den Flugzeugtranspondern ausgesendet werden schön graphisch in Echtzeit anzuzeigen.
Also wie kann eine Grafik in Fhem erstellt werden, die die aktuelle Anzahl der gerade empfangenen Flugzeuge anzeigt.
Hier das Ergebniss, wo man deutlich sehen kann, das heute bis ca. 6 Uhr nur ca. 10 Flugzeuge flogen. Dann steigt der Flugverkehr rapide an:
Wie kann nun so eine Grafik, die sich automatisch aktualisiert erstellt werden.
Zuerst einmal die Architektur als BPMN 2.0 Diagramm:
Es werden zwei Raspberry Pi benötigt. Auf dem einen läuft der DUMP1090 Server mit der TWFlug Anwendung unter Java 1.8. Die TWFlug Anwendung läuft ohne Gui, und schreibt alle 5 Minuten die Anzahl der empfangenen Flugzeuge in eine Datei. Diese Datei wird dann jede halbe Stunde per sFTP an den anderen Raspberry Pi gesendet und von Fhem eingelesen und als Grafik ausgegeben.
TWFlug kann auch mit Gui auf einen Rechner gestartet werden und gibt dann als Tacho die Anzahl der Flugzeuge aus.
Das nötige GPlot Script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* myFlug.gplot Version 1.0 vom 17.12.2014 Dieses GNU-Plot Script zeigt die Flugdaten von den empfangenen Transpondern an. Copyright (C) 2014 Thomas Wenzlaff http://www.wenzlaff.de This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. */ # Die Logdatei sieht wie folgt aus: # 2014-12-05_07:05:58 flugdaten anzahl:29 # 2014-12-05_07:10:58 flugdaten anzahl:23 set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title 'Empfangene Flugzeuge' set ytics set y2tics set grid ytics y2tics set ylabel "Anzahl Flugzeuge" set y2label "Anzahl Flugzeuge" #FileLog 4:flugdaten anzahl:0: plot "<IN>" using 1:2 axes x1y2 title 'Anzahl Flugzeuge' ls l0 lw 2 with lines |
TWFlug schreibt die Daten in eine Logdatei mit folgenden Format, z.B.:
1 2 3 4 5 6 7 |
2014-12-17_17:31:08 flugdaten anzahl: 39 2014-12-17_17:36:08 flugdaten anzahl: 49 2014-12-17_17:41:08 flugdaten anzahl: 36 2014-12-17_17:46:08 flugdaten anzahl: 34 2014-12-17_17:51:08 flugdaten anzahl: 36 2014-12-17_17:56:08 flugdaten anzahl: 42 2014-12-17_18:01:08 flugdaten anzahl: 41 |
TWFlug kennt bisher die folgenden Parameter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
usage: TWFlug -c,--copy-time <arg> copy time in Minuten (default: 60 Minuten) -d,--dest-file <ziel-datei> destination file name (default: /home/pi/fhem/log/flugdaten-YYYY-MM.log) -h,--help print help and exit -height,--window-height <arg> set window hight (default: 600) -i,--ip ip adress from DUMP1090 (default: 0.0.0.0) -ip,--ziel-ip <arg> ip adress for copy destination (default: pi-home) -k,--copy copy output file to destination (default: false) -max,--max-count <arg> set max count value (default: 50) -min,--min-count <arg> set min count value (default: 0) -n,--no-gui display no GUI. Only logfile output (default: false) -o,--outputfile <file> use given file for DUMP output (default: flugdaten-YYYY-MM.log) -p,--port <arg> port from DUMP1090 (default: 30003) -psw,--ziel-passwort <arg> passwort from destination User -r,--refresh-time <arg> refresh time in ms (default: 300000 ms = 5 Minuten) -user,--ziel-user <arg> destination User (default: pi -v,--version print the version information and exit -width,--window-width <arg> set window with (default: 600) |
Welche fehlen noch?
Hinweise zu TWFlug und DUMP1090 können auf diesem Blog gefunden werden.
JUnit 4.12 erschienen
Nach über 2 Jahren ist nun eine neue Version von JUnit veröffentlicht worden. Die Releasenotes sind auf Github zu finden. In folgenden Bereichen gab es Ergänzungen:
- Assertions
- Command-line options
- Test Runners
- Exception Testing
- Timeout for Tests
- Parameterized Tests
- Rules
- Theories
- Categories
- Use with Maven
- Miscellaneous
Ok, dann mal gleich das aktuelle Maven Projekt TWFlug auf die neue Version 4.12 angepasst:
1 2 3 4 5 6 7 8 9 10 |
<properties> <junit.version>4.12</junit.version> </properties> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> |
Mehr über JUnit oder drei Gründe warum man keine JUnit-Tests schreiben sollte.
Testfreigabe: TWFlug 0.0.1 beta für DUMP1090 zur Auswertung von Flugdaten
Habe ein Java Programm für die übersichtliche Anzeige der empfangenen Flugzeuge erstellt.
Wer einen DUMP1090 Server laufen hat, kann das TWFlug Programm starten.
Es werden bisher folgende Funktione geboten:
- anzeige der Anzahl der sichtbaren Flugzeuge
- erstellen einer Log Datei im Fhem Format
Das TWFlug Programm läuft auf unterschiedlichen Plattformen (Win, Linux, Mac…), bisher habe ich Mac OS X Yosemite (10.10.1) getestet. Wer vor der ersten öffentlichen Version am Test teilnehmen möchte, kann mir eine E-Mail senden.
So sieht das TWFlug nach dem Start aus:

Folgendes Fhem-Format wird alle 5 Minuten geschrieben, damit in Fhem Grafiken erzeugt werden können:
1 2 3 4 5 6 7 8 9 10 |
2014-12-01_21:00:52 flugdaten anzahl:31 2014-12-01_21:05:52 flugdaten anzahl:31 2014-12-01_21:10:52 flugdaten anzahl:32 2014-12-03_06:11:56 flugdaten anzahl:7 2014-12-03_06:16:56 flugdaten anzahl:12 2014-12-03_06:21:56 flugdaten anzahl:10 2014-12-03_06:26:56 flugdaten anzahl:11 2014-12-03_06:31:56 flugdaten anzahl:9 2014-12-03_06:36:56 flugdaten anzahl:18 2014-12-03_06:41:56 flugdaten anzahl:20 |
Das Programmfenster läßt sich skalieren, so das es auf dem Desktop schön aussieht:
Der Quellcode liegt auf GitHub.
Top 4 Mindmap zum Thema Test-Tools
SelBlocks für Selenium installieren oder „Wer testet ist feige“
Das Plug-In SelBlocks für die Selenium IDE darf nicht fehlen. Also über diese Seite installieren und den Browser neu starten:
Das Plugin ist eine Erweiterung für die Selenium IDE und fügt der IDE die folgenden doch immer nötigen Befehle hinzu:
- if, elseIf, else
- try, catch, finally, throw
- for, foreach, while, continue, break
- call, function, return
- loadJsonVars, loadXmlVars, forJson, forXml
- exitTest
Die Selenium IDE muss natürlich vorhanden sein:
Eine ausführliche Beschreibung und auch Beispielen sind auf dieser Seite zu finden.
Wie kann OpenHab und eine Demo-Anwendung auf einem Raspberry Pi (Debian) installiert werden?
Wie kann OpenHab und eine Demo-Anwendung auf einem Raspberry Pi (Debian) installiert werden?
OpenHab läuft auch auf einem Raspberry Pi. Auf Wikipedia gibt es einen kurzen Überblick zu OpenHab.
Um erste Erfahrungen mit OpenHab zu machen, kann man die Demo Anwendung von OpenHab installieren. Als Basis dient die aktuelle Debian 7.6 Version, auf der schon Java installiert ist.
1. Zuerst checken ob Java installiert ist und läuft mit:
1 |
java -version |
Ausgabe:
1 2 3 |
java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode) |
2.Verzeichnis anlegen
1 2 |
mkdir OpenHab cd OpenHab |
3. Von hier die https://openhab.ci.cloudbees.com/job/openHAB/
die aktuelle Version 1.6.0 laden und auspacken (erst die runtime und später die demo)
1 2 3 4 5 6 7 |
wget https://openhab.ci.cloudbees.com/job/openHAB/lastSuccessfulBuild/artifact/distribution/target/distribution-1.6.0-SNAPSHOT-runtime.zip # Archiv auspacken unzip distribution-1.6.0-SNAPSHOT-runtime.zip # Optional: Archiv löschen rm distribution-1.6.0-SNAPSHOT-runtime.zip |
4. Usermod für User pi setzen und default openhab.cfg erstellen
1 2 3 4 5 6 |
sudo usermod -a -G dialout pi # Konfigdatei erstellen, alle default Einstellungen cd /configurations cp openhab_default.cfg openhab.cfg cd .. |
5. Demo zip laden uns auspacken (eine Readme Datei wird evl. überschrieben)
1 2 3 4 5 6 7 |
wget https://openhab.ci.cloudbees.com/job/openHAB/lastSuccessfulBuild/artifact/distribution/target/distribution-1.6.0-SNAPSHOT-demo.zip # Demo Anwendung auspacken unzip distribution-1.6.0-SNAPSHOT-demo.zip # Optional: Archive löschen rm distribution-1.6.0-SNAPSHOT-demo.zip |
6. Starten von OpenHab und im Browser aufrufen (ip anpassen)
1 |
./start.sh |
Dann im Browser die folgende URL der Demo Anwendung aufrufen:
1 |
http://raspberry-ip:8080/openhab.app?sitemap=demo |
Hier nun einige Fotos, von der Demoanwendung:
Wie nutzt Ihr OpenHab?