Eclipse Neon hat nun einen eingebauten Json Editor, es braucht nun kein anderes Json Plugin installiert werden.
Welche Möglichkeiten der Java Objekt-Erzeugung gibt es?
Meistens erzeugt man Objekte in Java mit new. Es gibt aber noch ein paar andere Möglichkeiten.
Wir haben diese Farbe Testklasse:
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 |
package de.wenzlaff.mqtt.client; import java.io.Serializable; /** * Farben Klasse. * * @author Thomas Wenzlaff * */ public class Farbe implements Cloneable, Serializable { private static final long serialVersionUID = 8660877851154300583L; private String farbe = "rot"; public Farbe() { System.out.println("Konstruktor aufruf"); } public String getFarbe() { return farbe; } public void setFarbe(String farbe) { this.farbe = farbe; } @Override public String toString() { return "Farbe: " + farbe + " mit HashCode=" + hashCode() + "\n"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((farbe == null) ? 0 : farbe.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Farbe other = (Farbe) obj; if (farbe == null) { if (other.farbe != null) return false; } else if (!farbe.equals(other.farbe)) return false; return true; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } |
und haben diese Möglichkeiten Objekte zu erzeugen. „Welche Möglichkeiten der Java Objekt-Erzeugung gibt es?“ weiterlesen
Java 1.8 hat einen schöne String Join Methode
In Java 1.8 gibt es einen neue schöne static join Methode, es braucht nur ein Begrenzer angegeben zu werden und schon wird ein schöner String zusammengebaut.
Hier mal ein kleines Beispiel:
Was für neue schönen Methoden hast Du entdeckt?
Eclipse Neon mit Java 1.8: default Methoden
In Java 1.8 gibt es das neue Schlüsselwort default. In Eclipse Neon wird dies auch unterstüzt.
So kann eine default Methode in einen interface erstellt werden:
Sie kann dann so verwendet werden:
In Eclipse ist sie an dem kleinen D erkennbar. Die default implementierung kann auch vererbt werden.
List to CSV mit Java 1.8 und Eclipse Neon
UML 2 Diagramme mit Eclipse Neon 4.6.0 schnell erstellen
Ein Herz für GIT!
Wie werden tags und commits mit git signiert?
Anzahl der Flugzeuge mit 3 Zeilen Java Code ausgeben via REST API mit Jersey und JDom 2.0
Mit Java ist es nicht schwer, einen REST Client zu erstellen. Das geht mit Jersey und JDom in 3 Zeilen.
Hier nun mal ein Beispiel.
Die Anzahl der Flugzeuge in Hannover wird von mir mit einem Raspberry Pi empfangen und an thingspeak gesendet.
Diese Daten kann jeder leicht abfragen. „Anzahl der Flugzeuge mit 3 Zeilen Java Code ausgeben via REST API mit Jersey und JDom 2.0“ weiterlesen
Node-RED von IBM für den Raspberry Pi auf Jessie
Node-RED, ein Tool von IBM mit einem grafischer Editor als Herzstück. Damit geht Programmiern sehr flink.
Node-RED läuft auf dem Raspberry Pi (BPlus) ziemlich gut. Die Installation ist gut auf der node-RED Homepage beschrieben oder auch hier auf deutsch. Man muss nur darauf achten, das die richtige Version für den Raspberry Pi gewählt wird. Ich hatte nicht die Version für die B Version installiert, das führte dann beim starten zu einer Fehlermeldung.
Also für den Raspberry Pi (B) wie hier beschrieben vorgehen: „Node-RED von IBM für den Raspberry Pi auf Jessie“ weiterlesen
Fritzbox Telefonbuch (Phonebook) mit Java bearbeiten via JDom und SAXBuilder
Wer eine Fritzbox hat, kann dort auch Telefonbücher anlegen, so das beim Anruf eine E-Mail versendet wird. Bei mir wird bei Anruf auch eine Pushover Nachricht auf das Handy gesendet und der Name und die Nummer mit openHAB via Karotz angesagt, so das ich schon hören kann, wer anruft.
Das läuft über das openHab Fritzbox 064 Binding ganz gut. Von dem Bindig wird aber bisher nur das erste Telefonbuch aus der Fritzbox ausgelesen. Wer ein anderes benutzt muss die Daten exportieren und in dem ersten Telefonbuch wiederherstellen, da es keine löschen Funktion in der Fritzbox gibt.
Bei mir war noch das Problem, das viele Telefonnummern (über 600) Blanks, Bindestriche und Klammern enthielt. Z.B. (0)511-123 456 und die wird bisher in dem Binding nicht erkannt. Deshalb habe ich einen kleinen Konverter geschrieben, der alle Blanks, (,),- löscht und auch alle Nr. die kein +49 haben und mit 0 beginnen mit dem gültigen prefix +49 ohne 0 ergänzt. Weitere Regeln können leicht angepasst werden.
In diesem Java Programm, kann man auch sehen, wie mit einem SAXBuilder ein JDom Dokument erzeugt gelesen und verändert werden kann. Hier das Programm: „Fritzbox Telefonbuch (Phonebook) mit Java bearbeiten via JDom und SAXBuilder“ weiterlesen
Wie kann auf einem Raspberry Pi mit OpenHAB ein Zitat des Tages mit Karotz angesagt und per Pushover versendet werden?
Auf der Website taeglicheszit.at gibt es täglich ein Zitat des Tages. Für diesen Service gibt es auch eine JSON Schnittstelle.
Die kann wie folgt genutzt werden, um täglich das Zitat anzusagen und per pushover zu versenden.
Voraussetzung ist das OpenHAB installiert ist und läuft.
Dann eine Karotz.items Datei im items Verzeichnis anlegen mit dem Inhalt von zwei Variablen für das Zitat und den Autor:
1 2 |
String ZitatDesTages "[%s]" { http="<[http://taeglicheszit.at/zitat-api.php?format=json:86400000:JS(getZitatDesTages.js)]" } String ZitatDesTagesAutor "[%s]" { http="<[http://taeglicheszit.at/zitat-api.php?format=json:86400000:JS(getZitatDesTagesAutor.js)]" } |
Die Variablen werden einmal am Tag automatisch aktualisiert.
Dann brauchen wir noch zwei Dateien im transform Verzeichnis für die JSON Auswertung: getZitatDesTages.js mit dem Ihhalt
1 |
JSON.parse(input).zitat; |
und getZitatDesTagesAutor.js mit dem Inhalt
1 |
JSON.parse(input).autor; |
UML Designer 5.0 für Eclipse Mars.1 installieren
Für die aktuelle Eclipse Mars.1 Version
gibt es einen kostenlosen UML 2.5 Designer. Mit ihm können ua. folgende Diagramme modelliert werden, wie auf der Homepage zu sehen:
- Package Hierarchy Diagram
- Class Diagram
- Component Diagram
- Composite Structure Diagram
- Deployment Diagram
- Use Case Diagram
- Activity Diagram
- State Machine Diagram
- Sequence Diagram
- Profile Diagram
„UML Designer 5.0 für Eclipse Mars.1 installieren“ weiterlesen
Raspberry Pi: COBOL in 5 Minuten installieren oder „Back to the Future“
Mal was anderes als Java. Die Programmiersprache COBOL läuft auch auf dem Raspberry Pi. Es gibt eine kostenlose Version, GnuCobol das in 5 Minuten installiert werden kann.
1 2 3 |
sudo apt-get update sudo apt-get upgrade sudo apt-get install open-cobol |
Es wird die Version 1.1.0 von GnuCobol (OpenCobol) installiert. Dass kann man leicht auf der Konsole testen mit:
1 |
cobc -V |
So, nun wollen wir wie üblich erst einmal ein erstes COBOL Programm compilieren. Dazu erstellen wir die hello.cob Datei mit diesem Inhalt:
1 2 3 4 5 6 |
000100* hallo.cob GnuCobol Beispiel 000200 IDENTIFICATION DIVISION. 000300 PROGRAM-ID. hallo. 000400 PROCEDURE DIVISION. 000500 DISPLAY "Hallo Welt". 000600 STOP RUN. |
„Raspberry Pi: COBOL in 5 Minuten installieren oder „Back to the Future““ weiterlesen
Eclipse PlugIn SortIt zum schnellen sortieren nach Länge, Buchstaben oder Nummern
Sortierung von Text ist doch hin und wieder mal nötig. Das Eclipse Plugin SortIt ist zwar schon älter, läuft aber immer noch mit der aktuellen Eclipse Mars 4.5.0 Version. Es kann wie alle anderen Plugins installiert werden.
Die Updateseite die unter dem Menü: Help->Install new Software eingetragen werden muss lautet:
1 |
http://www.stateofflow.com/UpdateSite/ |
Dann durch den Installationsvorgang gehen:
„Eclipse PlugIn SortIt zum schnellen sortieren nach Länge, Buchstaben oder Nummern“ weiterlesen
Raspberry Pi: MQTT Server mosquitto installieren und Daten in Fhem über MQTT empfangen oder „Wie werte ich Haustür klingeln aus?“
Installieren eines mosquitto Servers auf dem Raspberry Pi geht in 10 Minuten aber die weitere Konfiguration dauert dann schon ein wenig. Ziel dieses Blog Eintrags soll es sein, das Fhem über den MQTT-Server liest.
Später kommt dann ein ESP8266 der das Klingelsignal an der Haustür aufnimmt und drahtlos an Fhem via MQTT sendet. Hier mal die Architektur:
Aber jetzt erst einmal die Vorarbeiten:
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 |
sudo apt-get update sudo apt-get upgrade # die schnelle Version, installiert den mosquitto Broker in Version 0.15 und den Client sudo apt-get install mosquitto mosquitto-clients python-mosquitto libmodule-pluggable-perl mosquitto-clients # Optional, wer den aktuellsten 1.4.5 MQTT Broker haben will, muss ihn wie folgt aus dem mosquitto Repo installieren: wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list # oder für jessie sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list sudo apt-get update sudo apt-get install mosquitto # Test ob der Server läuft sudo service mosquitto status # Starten und Stopen geht so sudo service mosquitto stop sudo service mosquitto start # Perl Version ausgeben perl -v # Ausgabe: This is perl 5, version 14, subversion 2 (v5.14.2) built for arm-linux-gnueabihf-thread-multi-64int # Perl MQTT Module installieren, das dauert ein wenig sudo cpan install Net::MQTT:Simple sudo cpan install Net::MQTT:Constants # In der Fhem.cfg das Gerät wie folgt angeben define klingel dummy define mqtt MQTT 127.0.0.1:1883 define mqtt_klingel MQTT_BRIDGE klingel attr mqtt_klingel subscribeSet fhem/flur/klingel/set attr mqtt_klingel publishState fhem/flur/klingel attr mqtt_klingel room Flur # Fhem restart sudo /etc/init.d/fhem stop sudo /etc/init.d/fhem start |
So, nun ist das MQTT Gerät vorhanden:
„Raspberry Pi: MQTT Server mosquitto installieren und Daten in Fhem über MQTT empfangen oder „Wie werte ich Haustür klingeln aus?““ weiterlesen
Wie kann LUA vom Mac in den ESP8266 geflasht werden um einen Reedkontakt per WLAN abzufragen?
Wollte schon immer mal LUA in den ESP8266 flashen. Um billig mit einem Reed-Kontakt und einem Server den Status des Schalters drahtlos über WLAN abzufragen.
Also erst einmal eine LUA Firmware für den ESP8266 „bestellt„, da ich keine Lust hatte es selbst zu kompilieren.
Dazu hier einfach die E-Mail Adresse angeben und die default Einstellungen absenden. Nach ein paar Minuten kommt der Link per E-Mail: „Wie kann LUA vom Mac in den ESP8266 geflasht werden um einen Reedkontakt per WLAN abzufragen?“ weiterlesen
Wie kann PySerial und Esptool auf einem Mac OS X El Capitan zum flashen einer neuen Firmware für den ESP8266 installiert werden?
Wie kann das Flashen eines ESP8266 von einem Mac laufen?
Wie hier beschrieben brauchen wir pyserial und esptool. Die werden wie folgt installiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# pyserial # Verzeichnis erstellen und rein wechseln mkdir pyserial cd pyserial/ # Aktuelles Archive holen von https://pypi.python.org/pypi/pyserial wget https://pypi.python.org/packages/source/p/pyserial/pyserial-2.7.tar.gz # auspacken sudo tar -xzf pyserial-2.7.tar.gz # in das Verzeichnis wechseln cd pyserial-2.7 # Installieren sudo python setup.py install # in das Verzeichnis wechseln cd pyserial-2.7 # Testen, mal alle Ports ausgeben python -m serial.tools.list_ports # Ergebnis: die Seriellen-Ports des Systems # ... # /dev/cu.usbserial # 3 ports found # Es gibt auch ein kleines Konsolen Terminal Programm, Miniterm, das kann wie folgt aufgerufen werden: python -m serial.tools.miniterm /dev/cu.usbserial -b 115200 # Ausgabe der AT Befehle: |
1 2 3 4 5 6 7 8 9 |
# esptool # Verzeichnis erstellen und rein wechseln mkdir esptool cd esptool # Esptool landen git clone https://github.com/themadinventor/esptool.git cd esptool # Testen, ausgeben der Programm Parameter python esptool.py -h |
Flashen einer neuen Firmware
Erster Versuch soll mal die MicroPython Firmware von hier sein.
So nun kann die Firmware geflasht werden. Dazu das Archive downloaden und in das Verzeichnis des esptool kopieren.
Vor dem Flashen muss der ESP noch in den Flash Modus geschaltet werden. Dazu den GPIO 0 auf Masse mit einem Pullup von 1KOhm gegen Plus schalten.
Dann das flashen starten:
1 2 3 4 5 6 |
python esptool.py -p /dev/cu.usbserial write_flash 0x00 firmware-combined.bin Connecting... Erasing flash... Wrote 318464 bytes at 0x00000000 in 31.0 seconds (82.2 kbit/s)... Leaving... |
Ok, das Flashen hat geklappt. Nun den Pin GPIO 0 wieder mit einem 10 KOhm an Plus 3,3 Volt legen und starten.
Nun mit einem Terminal Programm verbinden:
1 |
python -m serial.tools.miniterm /dev/cu.usbserial -b 115200 |
und schon haben wir MicroPython auf dem ESP. Ein erster Check mit
1 2 |
print("Hallo Welt, ich bin MicroPython vom ESP8266") Hallo Welt, ich bin MicroPython vom ESP8266 |
Oder ein Soft-Reset mit den Tasten Ctrl+D ausführen:
1 2 3 4 5 |
PYB: soft reset >>> Micro Python v1.4.2-99-g6738c1d on 2015-05-12; ESP module with ESP8266 Type "help()" for more information. >>> |
Welche Firmware ist noch gut? Oder welches Python Script ist nützlich?
Wie kann der ESP8266 mit dem Raspberry Pi verwendet werden?
Wie kann der ESP8266 mit dem Raspberry Pi verwendet werden. Das Teil gibt es für ein paar Euros in der eBucht. Habe nun auch so eine Platine liegen. Dazu erst einmal eine Mindmap (ESP8266) erstellt, für den schnellen Überblick.
Es gibt schon viele Seiten zu dem Thema. Welche sind wichtig? Was kann man da mit machen? Ideen?
Oder doch besser am Arduino verwenden?
Vorschläge gern als Kommentar.
Ecore & EMF: Wie kann eine bidirektional Verbindung in Eclipse zwischen zwei Klassen im ecore-Model modelliert werden?
Hier am Beispiel von einem Arzt und einer Adresse. Wenn nun von der Adresse auf den Arzt und umgekehrt navigiert werden soll, kann die bidirektionale Verbindung im Feld EOpposite wie folgt eingetragen werden (rechts auf den Pfeil der Combobox klicken):
„Ecore & EMF: Wie kann eine bidirektional Verbindung in Eclipse zwischen zwei Klassen im ecore-Model modelliert werden?“ weiterlesen
Ecore: Wie kann ein Java Attribut für die Hibernate Suche im Ecore Modell annotiert werden?
Wie kann in einer Java Klasse ein Attribut für die Hibernate-Suche wie folgt annotiert werden?
1 2 |
@Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) private String klinik_name = null; |
Dazu folgende EAnnotation als Value mit den voll qualifizierter Namen einfügen, damit auch die imports aufgelöst werden können
1 |
@org.hibernate.search.annotations.Field(index=org.hibernate.search.annotations.Index.YES, analyze=org.hibernate.search.annotations.Analyze.YES, store=org.hibernate.search.annotations.Store.NO) |
Und für die Maven pom.xml
, den folgenden Eintrag, damit die Hibernate Klassen auch gefunden werden können:
1 2 3 4 5 6 |
<!-- Für die Hibernate Volltext-Suche --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-orm</artifactId> <version>5.3.0.Final</version> </dependency> |
Eclipse EcoreTools: Wie können *.aird (*.ecore) Modelle per UML unter Eclipse Mars bearbeitet werden?
Mit den Ecore Tools können gut Modelle per UML modelliert und das Java-Modell generiert werden. Die Ecore Tools können leicht über den Menüpunkt: Hilfe -> Eclipse Marketplaces … installiert werden:
Nach einem Neustart können die *.aird (ecore) Dateien über das Menü: Windows-Show View … Model Explorer geöffnet werden:
„Eclipse EcoreTools: Wie können *.aird (*.ecore) Modelle per UML unter Eclipse Mars bearbeitet werden?“ weiterlesen
Ecore mit Texo: Wie kann im Annotationsmodell die Spalte für EString vergrößert werden?
Default wird für EString eine Länge von 255 Zeichen verwendet. Wie kann die Spalte nun vergrößert werden wenn ein:
Error Code: 1406. Data too long for column … at row …
kommt?
Einfach das Annotationsmodel um diesen Eintrag ergänzen:
Dann das Modell einmal neu generieren, schon ist die Spalte wie gewünscht annotiert:
1 2 3 4 5 6 7 8 |
/** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Basic() @Column(length = 1024) private String behandlungen = null; |
Eclipse go to Mars 4.5 Release oder wie wird Eclipse Mars auf dem Mac OS X installiert?
Heute ist die Mars 4.5 Version von Eclipse veröffentlich worden. Was gibt es neues?
Ok, dann mal auf die Mars Download Seite und das Programm laden. Ich war übrigens der 6,666 Download!
Für den Mac geht es jetzt super einfach.
Installation
Download des eclipse-jee-mars-R-macosx-cocoa-x86_64.tar.gz oder andere gewünschte Version.
Dann einen doppelklick auf die Datei zum entpacken. Nun noch die Eclipse.app in das Programme Verzeichnis verschieben. Dann das Programm starten durch einen doppelklick auf Eclipse.app. Das geht gefühlt schneller als vorher!
Mehr ist für die installation auf einem Mac nun nicht mehr nötig. Hier die IDE, mit den Versions Dialog:
Mars, das war’s. That’s it. Happy coding!
Mac OS X: TWTransformer für CSV to CSV veröffentlicht
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> |
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
Raspberry Pi: SNMP (Simple Network Management Protocol) installation in einer Stunde und Abfrage der CPU Temperatur per SNMP
Wie kann net-snmp auf dem Raspberry Pi installiert werden? Da es noch kein fertiges Package für den Raspberry Pi (Kali) gibt, ist selbst compilieren angesagt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# System updaten sudo apt-get update sudo apt-get upgrade # Nötige libs sudo apt-get install libperl-dev mkdir net-snmp cd net-snmp # Download von aktuelles Archive von http://sourceforge.net/projects/net-snmp wget http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.3/net-snmp-5.7.3.tar.gz # auspacken tar -xvzf net-snmp-5.7.3.tar.gz cd net-snmp-5.7.3/ # setup, es kommen drei Fragen, beantworten oder mit Return den default wählen sudo ./configure # warten ... |
Wenn diese Bestätigung kommt:
Dann weiter mit compilieren und installieren. Das kann eine Stunde dauern … „Raspberry Pi: SNMP (Simple Network Management Protocol) installation in einer Stunde und Abfrage der CPU Temperatur per SNMP“ weiterlesen
Arduino: Neue Arduino IDE Version 1.6.2 veröffentlicht
Die neue Arduino IDE steht nun seit ein paar Tagen kostenlos zum Download für Mac OS X, Linux und Windows bereit.
Hier ein paar Highlights:
1 2 3 4 5 6 7 8 9 10 |
* Boards and libraries managers, for one click install of additional boards and libraries * In platform.txt, pre and post build hooks can now be specified. * Windows and MacOSX JVM Xmx halved to 512M * Introduced starting splashscreen with progress status: will be used for notifying user of long running startup tasks * Available ports list is now generated in background: hence "tools" menu is much faster * MacOSX: appbundler merged our contribution, switching to upstream version https://bitbucket.org/infinitekind/appbundler/ * EEPROM: Replaced existing library with more complete implementation * SD: fixed endless timeout on 32bit core (Due) * SPI: do not influence state of SS pin if it's already been set as output by user sketch ... |
So sieht die IDE nach dem Start aus:
Also, dann mal los.
Raspberry Pi: Wie kann der Kismet-Server sauber rauf und runter gefahren werden zum WarWalking (WarDriving)?
Wenn ein Kismet-Server auf dem Raspberry Pi läuft, muss der Server sauber rauf und runter gefahren werden, sonst werden die *NETXML Dateien wegen einem fehlenden sync nicht vollständig auf die SD-Karte geschrieben. Das Problem ist aber, wie kann der Raspberry Pi eingerichtet werden, so das der gpsd und Kismet automatisch hoch und auch sauber wieder runter fahren, ohne das ein Bildschirm bzw. Konsole angeschlossen wird? Und wie kann vom GPS Empfänger die Systemzeit gesetzt werden, da der Raspberry Pi ja keine Systemuhr hat und es beim WarWalking kein Internet mit NTP gibt ?
Die Lösung des Problems wird in dieser Anleitung beschrieben.
Wir brauchen ein Script zum automatischen hochfahren und ein Script das auf einen Tastendruck wartet. „Raspberry Pi: Wie kann der Kismet-Server sauber rauf und runter gefahren werden zum WarWalking (WarDriving)?“ weiterlesen
GIT: TOP 10
Hier die immer wieder benötigten TOP 10
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 |
# Name und E-Mail setzen git config --global user.name "Thomas Wenzlaff" git config --global user.email "no@spam.de" # Repo lokal kopieren git clone benutzername@host:/pfad/zum/repository # Eine Datei von GitHub laden wget https://github.com/IT-Berater/tw-scripte/blob/master/start-gps.sh # Eine Datei dem Repo hinzufügen git add warte.py # oder alle git add . # Änderungen in das lokale Repo übertragen git commit -m "Meine Änderungen." # Änderungen in das GitHup Repo senden git push origin master # Lokalen stand mit Repo aktuallisieren git pull # Status anzeigen git status |
Welche Befehle nutzt Ihr noch häufig?
Wie können Extension Points und Plug-ins in Eclipse gefunden werden?
Wie kann der Plug-in Spy für UI Teile oder der Menü Syp auf dem Mac (Win) von Eclipse aufgerufen werden?
Wenn man in Eclipse sehen will, welche UI Komponenten gerade selektiert bzw. aktiv sind, kann der Plug-in Spy verwendet werden. Mit dem kann auch mit nur einen klick auf den Quellcode des jeweiligen aktiven Plug-ins zugegriffen werden. Wie kann der aber auf einem Mac aufgerufen werden (Vier Tasten gleichzeitig): fn+shift+alt+F1 (auf Windows Alt+Shift+F1)
Es erscheint dann solch ein PopUp-Dialog:
und noch ein Beispiel:
Analog dazu gibt es auch einen Spy für die Menüs, der wird mit fn+shift+alt+F2 (auf Windows Alt+Shift+F2) aufgerufen und dann ein Menüpunkt auswählen, es kommt dann z.B. dieser Dialog:
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); |
So sieht es dann aus:
OpenWrt Barrier Breaker 14.07: Wie kann Dump1090 auf einem TP-WR703N Router unter OpenWrt zum Airplanespotting installiert werden?
Hatte noch einen TP-WR703N rumliegen. Wenn dort die aktuelle Version von OpenWrt (14.07) installiert ist, geht es mit LuCI sehr schnell.
Auf die Seite System – Software gehen. Im Filter dump1090 eingeben und auf Find package
klicken. Dann unten mit klick auf Install
das fertige Package installieren.
„OpenWrt Barrier Breaker 14.07: Wie kann Dump1090 auf einem TP-WR703N Router unter OpenWrt zum Airplanespotting installiert werden?“ weiterlesen
Arduino: Wie können RFID Tags eingelesen und drahtlos empfangen werden?
Wie hier schon beschrieben, können mit einem Arduino und eine RFID-Reader leicht RFID-Tags eingelesen werden.
In dieser Anleitung, werden nun die eingelesenen RFID Daten drahtlos versendet und empfangen. Dazu wird ein zweiter Arduino und ein Sender und Empfänger ( < 2 Euro) verwendet. Hier der schematische Aufbau: „Arduino: Wie können RFID Tags eingelesen und drahtlos empfangen werden?“ weiterlesen
Arduino: Wie können RFID Tags eingelesen werden?
Wie können RFID-Tags eingelesen werden?
Das geht ganz einfach mit einem Arduino Nano und ein 125 kHz EM4100 RFID card reader module (RDM630 UART) das keine 5 Euro inkl. Versand kostet.
Die Belegung des RFID-Readers:
Die PINs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
1.Pin Definition (WEIGAND26): 2. Pin definition (TTL interface RS232 data format): P1: P1: PIN1 DATA0 PIN1 TX PIN2 DATA1 PIN2 RX PIN3 PIN3 PIN4 GND PIN4 GND PIN5 +5V(DC) PIN5 +5V(DC) P2: P2: PIN1 ANT1 PIN1 ANT1 PIN2 ANT2 PIN2 ANT2 P3: P3: PIN1 LED PIN1 LED PIN2 +5V(DC) PIN2 +5V(DC) PIN3 GND PIN3 GND |
Spec RDM630: Baud Rate: 9600bps,N,8,1, Frequenze: 125 kHz, DC 5V (+-5%), <50 mA, Empfangsbereich: 2 bis 5 cm, Checksum card 10byte Data mit XOR So sieht der Aufbau aus:
Es sind nur 3 Verbindungen zwischen dem Arduino und dem RDM630 nötig und zwar:
1 2 3 4 5 |
Arduino Nano: D6 auf PIN 1 des RDM630 (TX) +5v auf PIN 5 des RDM630 (+5 Volt) GND auf PIN 4 des RDM630 (GND) Antenne auf P2 PIN 1 und 2 des RDM630 |
Dann folgende Software RFIDReader.ino auf den Arduino laden, die den Vorteil hat, das die serielle Konsole frei bleibt.
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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
/* RFIDReader Beschreibung: Dieses Programm liesst RFID-Tags von Transponer ein und ueberprueft die Checksumme (XOR) und gibt die Nummer auf der Seriellen-Konsole aus wenn die Nummer erkannt wurde gefolgt von einem OK. Folgende Verbindungen sind noetig: Arduino Nano: D6 auf PIN 1 des RDM630 +5v auf PIN 5 des RDM630 (+5 Volt) GND auf PIN 4 des RDM630 (GND) Antenne auf P2 PIN 1 und 2 des RDM630 Serielle Konsole auf 57000 Baud stellen. Compile mit Arduino 1.5.8 IDE. Einstellung: Board Arduino Nano, Prozessor Arduino ATMega328, Programmer USBtinyISP Der Sketch verwendet 8.216 Bytes (26%) des Programmspeicherplatzes. Das Maximum sind 30.720 Bytes. Globale Variablen verwenden 378 Bytes (18%) des dynamischen Speichers, 1.670 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes. Dieses Programm basiert auf dem Beispielprogramm von maniacbug https://maniacbug.wordpress.com/2011/10/09/125khz-rfid-module-rdm630/ Copyright (C) 2015 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/}. */ #include <SoftwareSerial.h> // Pin definitions // Specifies a function to call when an external interrupt occurs. Replaces any previous function that was attached to the interrupt. // Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3). // The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18). const int rfid_irq = 0; // PIN 6 ist auf dem Nano der D6 oder der Pin 9 von rechts, wenn die Stecker rechts liegen const int rfid_tx_pin = 6; // RX wird nicht benoetigt const int rfid_rx_pin = 7; // Untertrueckung von Rauschen bzw. leer Ausgaben, evl. aendern const long LEER = 16843009L; // Baud Rate zum Host PC, evl. aendern const long baudRate = 57600L; // For communication with RFID module SoftwareSerial rfid(rfid_tx_pin, rfid_rx_pin); // Indicates that a reading is now ready for processing volatile bool ready = false; // Buffer to contain the reading from the module uint8_t buffer[14]; uint8_t* buffer_at; uint8_t* buffer_end = buffer + sizeof(buffer); void rfid_read(void); void setup(void) { // Oeffnet die Serielle Verbindung zum Host PC um die Ausgabe der RFID-Tags zu sehen // Geschwindigkeit kann angepasst werden Serial.begin(baudRate); Serial.println("Starte RFID-Reader V. 1.0 von wenzlaff.info"); // Open software serial connection to RFID module pinMode(rfid_tx_pin,INPUT); // muss fest fuer das Modul auf 9600 stehen rfid.begin(9600); Serial.println("OK"); // Listen for interrupt from RFID module. Fallingfor when the pin goes from high to low. attachInterrupt(rfid_irq,rfid_read,FALLING); } void loop(void) { if ( ready ) { // Convert the buffer into a 32-bit value uint32_t result = 0; // Skip the preamble ++buffer_at; // Accumulate the checksum, starting with the first value uint8_t checksum = rfid_get_next(); // We are looking for 4 more values int i = 4; while(i--) { // Grab the next value uint8_t value = rfid_get_next(); // Add it into the result result <<= 8; result |= value; // Xor it into the checksum checksum ^= value; } // Pull out the checksum from the data uint8_t data_checksum = rfid_get_next(); // evl. die Nummer anpassen, oder die if abfrage loeschen if (result != LEER){ if ( checksum == data_checksum ){ Serial.print(result); Serial.println(" OK"); } } // We're done processing, so there is no current value ready = false; } } // Convert the next two chars in the stream into a byte and // return that uint8_t rfid_get_next(void) { // sscanf needs a 2-byte space to put the result but we // only need one byte. uint16_t result; // Working space to assemble each byte static char byte_chars[3]; // Pull out one byte from this position in the stream snprintf(byte_chars,3,"%c%c",buffer_at[0],buffer_at[1]); sscanf(byte_chars,"%x",&result); buffer_at += 2; return static_cast<uint8_t>(result); } void rfid_read(void) { // Only read in values if there is not already a value waiting to be // processed if ( ! ready ) { // Read characters into the buffer until it is full buffer_at = buffer; while ( buffer_at < buffer_end ) *buffer_at++ = rfid.read(); // Reset buffer pointer so it's easy to read out buffer_at = buffer; // Signal that the buffer has data ready ready = true; } } |
Compile mit der Arduino 1.5.8 IDE.
Einstellung in der IDE:
Board Arduino Nano, Prozessor Arduino ATMega328, Programmer USBtinyISP
Serielle Konsole auf 57000 Baud stellen
und einen RFID-Tag an die Antenne halten:
Es wird eine Reichweite von ca. 4 cm erreicht. Wenn die Antenne unter der Schreibtischplatte montiert wird, kann der RFID-Tag sicher gelesen werden, wenn der Tag oben drauf liegt (Anwesendheitskennung).
Habt ihr eine Idee, wie die Reichweite vergrößert werden kann?
Oder einen guten Anwendungsfall?
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; } |
Raspberry Pi: Einfaches steuern der Ports, Kamera, System usw. über Browser mit BerryIO V. 1.12.0
Einfaches steuern der IO Ports, Kamera, LCD, SPI, Network, Systemstatus usw. des rPi geht mit BerryIO, das in ein paar Minuten installiert ist.
Zuerst einmal ein kleiner Überblick als Mindmap:
Und nun die Installation:
1 2 3 4 5 6 7 8 9 10 11 |
# System aktualisieren sudo apt-get update sudo apt-get upgrade # Download der aktuellen Version wget -N https://raw.github.com/NeonHorizon/berryio/master/scripts/berryio_install.sh # Script ausführbar machen chmod +x berryio_install.sh # Installation starten sudo ./berryio_install.sh # Programm Hilfe aufrufen berryio help |
Ausabe der Hilfe:
1 2 3 4 |
BerryIO V1.12.0 (2014-08-02) USAGE: sudo berryio <command> [<option>] [<option>] [....] |
Es gibt auch eine Kommandozeilen API. Cool mit der Api, man kann auch alles über das Terminal abfragen und evl. scripten. Da kommt mir doch gleich eine Idee zum Fhem Server.
Aber die Gui ist auch schön.
Aufruf im Browser: http://pi-adresse
dann eingabe des Users: pi und Passwort.
Schon erscheint der Dialog:
Über das Menü können leicht die anderen Reiter angezeigt werden. Hier mal eine kleine Auswahl: „Raspberry Pi: Einfaches steuern der Ports, Kamera, System usw. über Browser mit BerryIO V. 1.12.0“ weiterlesen
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.
OPML Mindmap und erzeugen von OPMLs
Hier ein kleiner Überblick in Form einer Mindmap:
OPMLs können leicht mit dem OPML Builder in ein paar Sekunden erstellt werden.
Einfach z.B. die URL http://www.wenzlaff.de eingeben und auf „Get links“ klicken:
Und auf „Create OPML“ klicken, schon wird diese OPML erzeugt:
Wie kann der Terminalmultiplexer Screen auf einem Raspberry Pi installiert werden?
Screen gibt es nicht nur für den Mac, wie hier schon mal beschrieben. Es ist hilfreich um eine Sitzung von mehreren Personen zugleich zu benutzen oder um Progamme parallel zu nutzen.
Installiert ist es schnell mit:
1 2 3 |
sudo apt-get update sudo apt-get upgrade sudo apt-get install screen |
Folgende Abhängigkeiten werden installiert, wie diese Mindmap zeigt:
Ein
1 |
screen -help |
gibt die Syntax und Verwendung aus:
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 |
Use: screen [-opts] [cmd [args]] or: screen -r [host.tty] Options: -4 Resolve hostnames only to IPv4 addresses. -6 Resolve hostnames only to IPv6 addresses. -a Force all capabilities into each window's termcap. -A -[r|R] Adapt all windows to the new display width & height. -c file Read configuration file instead of '.screenrc'. -d (-r) Detach the elsewhere running screen (and reattach here). -dmS name Start as daemon: Screen session in detached mode. -D (-r) Detach and logout remote (and reattach here). -D -RR Do whatever is needed to get a screen session. -e xy Change command characters. -f Flow control on, -fn = off, -fa = auto. -h lines Set the size of the scrollback history buffer. -i Interrupt output sooner when flow control is on. -l Login mode on (update /var/run/utmp), -ln = off. -ls [match] or -list Do nothing, just list our SockDir [on possible matches]. -L Turn on output logging. -m ignore $STY variable, do create a new screen session. -O Choose optimal output rather than exact vt100 emulation. -p window Preselect the named window if it exists. -q Quiet startup. Exits with non-zero return code if unsuccessful. -Q Commands will send the response to the stdout of the querying process. -r [session] Reattach to a detached screen process. -R Reattach if possible, otherwise start a new session. -s shell Shell to execute rather than $SHELL. -S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>. -t title Set title. (window's name). -T term Use term as $TERM for windows, rather than "screen". -U Tell screen to use UTF-8 encoding. -v Print "Screen version 4.02.01 (GNU) 28-Apr-14". -wipe [match] Do nothing, just clean up SockDir [on possible matches]. -x Attach to a not detached screen. (Multi display mode). -X Execute <cmd> as a screen command in the specified session. |
Oder aber die Tastaturbefehle können mit ctrl+A + ?
wie folgt ausgegeben werden:
Beispiel: Wir starten in einer Konsole einen Prozess der länger dauert, hier mal htop
um den Speicher und CPU Verbrauch anzuzeigen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
screen -S Beispiel htop # Tasten ctrl+a -> d # htop wird in den Hintergrund gesendet, läuft noch weiter, es kommt diese Meldung: [detached from 4605.Beispiel] # Nun ein neues Terminal Fenster öffnen und screen -ls # alle laufenden screen Prozesse anzeigen # Ausgabe: # There is a screen on: # 4605.Beispiel (01.11.2014 11:49:03) (Detached) # 1 Socket in /var/run/screen/S-pi. # Nun verbinden wir uns mit dem im Hintergrund laufenden htop Prozess mit screen -r Beispiel # Es erscheint das laufende Programm htop |
Einige weitere Beispiele für den Einsatz findet man hier.
Raspberry Pi: Neue Firmware vom 17.10.2014 (Version 3.12.30) installieren
Vor ein paar Tagen ist eine neue Firmware für den Raspberry Pi erschienen. Wie kann die installiert werden? Wie kann die installierte Version angezeigt werden?
Am einfachsten benutzt man den update Befehl sudo rpi-update
mit dem Hexxeh updater. Wenn es eine neue Firmware gibt, wird die in ein paar Minuten installiert. Wenn die Firmware schon aktuell ist, wird auch eine Meldung ausgegeben.
So läuft der Updateprozess:
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 |
sudo rpi-update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7635 100 7635 0 0 26509 0 --:--:-- --:--:-- --:--:-- 27967 *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Downloading specific firmware revision (this will take a few minutes) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 168 0 168 0 0 291 0 --:--:-- --:--:-- --:--:-- 298 100 22.9M 100 22.9M 0 0 295k 0 0:01:19 0:01:19 --:--:-- 1153k *** Updating firmware *** Updating kernel modules *** depmod 3.12.30+ *** Updating VideoCore libraries *** Using HardFP libraries *** Updating SDK *** Running ldconfig *** Storing current firmware revision *** Deleting downloaded files *** Syncing changes to disk *** If no errors appeared, your firmware was successfully updated to 11bfdffaca95e630b1fed0a8992fee880c17c26d *** A reboot is needed to activate the new firmware |
Wie oben steht, ist nun noch ein sudo reboot
nötig und die neue Firmware ist aktualisiert.
Ist die Firmware schon aktuell, gib es folgende Meldung:
1 2 3 4 5 6 7 8 9 |
sudo rpi-update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7635 100 7635 0 0 21159 0 --:--:-- --:--:-- --:--:-- 21876 *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Your firmware is already up to date |
Aber wie kann nun die aktuelle Version angezeigt werden?
Mit
1 |
uname -a |
Ergebnis:
1 |
Linux pi-entw 3.12.30+ #717 PREEMPT Fri Oct 17 18:46:31 BST 2014 armv6l GNU/Linux |
Oder auch mit mehr Details:
1 |
/opt/vc/bin/vcgencmd version |
Ergebnis:
1 2 3 |
Oct 17 2014 17:56:05 Copyright (c) 2012 Broadcom version 845092531e360acd37f2f1964157f8079c77edfb (clean) (release) |
Dabei ist der lange Sting hinter Version der Hashwert der Version.
Sollte der rpi-updater nicht vorhanden sein, kann er leicht wie auch hier beschrieben mit
1 |
sudo apt-get install rpi-update |
installiert werden. Er wird dann diese Abhängigkeiten, wie in dieser Mindmap verwenden:
Die aktuellste Firmware gibt es auf Github. Dort gibt es auch die Beschreibung, was es neu gibt. Zitat:“
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
kernel: Bump to 3.12.30 kernel: bcm2708: Eliminate i2s debugfs directory error Qualify the two regmap ranges uses by bcm2708-i2s ('-i2s' and '-clk') to avoid the name clash when registering debugfs entries. kernel: Improve __copy_to_user and __copy_from_user performance Provide a __copy_from_user that uses memcpy. On BCM2708, use optimised memcpy/memmove/memcmp/memset implementations. kernel: bcm2708-dmaengine: nobble peak throughput to prevend SD host lockups Artificially throttling DMA throughput to/from the SD host prevents errors seen on very high-spec UHS-1 cards.See: http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=5057&start=275#p626694 firmware: dpi: Add options to alter dpi settings through dpi_output_format See: http://www.raspberrypi.org/forums/viewtopic.php?f=100&t=86658&p=628061#p628061 firmware: arm_loader: Avoid gpioman spam when POWER_LOW is not defined" |
Raspberry Pi BPMN 2.0 update Prozess Diagramm als Grafik exportieren
Dieser BPMN 2.0 Prozess wurde mit Eclipse modeliert und dann als Grafik exportiert.
Diese BPMN 2.0 Diagramme können auch leicht als Grafik exportiert werden. Dazu in dem Diagramm mit rechts klick und dann im Kontexmenü auf „Export Diagram…“.
Es öffnet sich dann der Export Dialog, dort können nun im BMP, GIF, JPG, PNG oder RLE Format die BPMN 2.0 Diagramme exportiert werden.
Raspberry Pi: Karotz liest über Fhem das Betreff eintreffende E-Mails (IMAP) vor
Es währe doch toll, wenn man bei eintreffender E-Mail benachrichtigt würde oder?
So braucht man nicht immer die 148 Mails checken, und kann die Welt retten.
In diesem Projekt, beschreibe ich wie das Betreff jeder eintreffende E-Mail per Sprachausgabe ausgegeben wird. Dazu wird der Karotz benutzt, der nicht nur für Sprachausgabe nützlich ist.
Zuerst das System aktuallisieren und die nötigen cpan Packages installieren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
sudo apt-get update sudo apt-get upgrade sudo cpan install Mail::IMAPClient # bei Nachfrage mit ja antworten: # yes # bei der nächsten Nachfage mit return bestätigen # local::lib # ... Stunden später ... sudo cpan install IO::Socket::SSL sudo cpan install IO::Socket::INET # und optional damit Umlaute auch dargestellt werden sudo cpan install MIME::Parser # und optional GnuPG wenn nur signierte E-Mails gelesen werden sollen sudo cpan install Mail::GnuPG |
Folgende Zeile in der Datei fhem.cfg
ergänzen:
1 |
define name mailcheck host user password |
z.B. der IMAP von Strato:
define mailcheck mailcheck imap.strato.de e-mail-von@wenzlaff.de passwort
Nach einem restart von Fhem steht die letzte Betreffzeilen der E-Mails als Reading bereit. So sieht es dann in Fhem aus:
Jetzt fehlt noch den Subject als userReadings zu setze und eine notify Funktion in der fhem.cfg die das Subject liest und an eine Funktion übergibt. Diese Funktion macht die Sprachausgabe des Karotz und wurde an anderer stelle hier im Blog beschrieben.
1 2 3 4 5 6 7 8 |
# Folgende events werden generiert # # 2014-10-11 19:13:02 mailcheck mailcheck Subject: Ohne Umlaute # define mailcheckAnsage notify mailcheck:Subject.* {\ my $betreff=ReadingsVal("mailcheck", "Subject", "E-Mail ohne Betreff");;\ Set_Karotz_Nachricht('karotz-token',"$betreff");;\ } |
Nach einem reread von Fhem, wird jetzt jedesmal das Betreff von Karotz angesagt.
Mögliche Fehler:
1. Wenn dieser Fehler im Log steht, wurden die obigen cpan Packages nicht oder nicht richtig installiert:
1 2 3 4 5 6 |
2014.10.11 15:58:46 1: reload: Error:Modul 32_mailcheck deactivated: Can't locate Mail/IMAPClient.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM ./FHEM/lib) at ./FHEM/32_mailcheck.pm line 11, <> line 85. BEGIN failed--compilation aborted at ./FHEM/32_mailcheck.pm line 11, <> line 85. 2014.10.11 15:58:46 0: Can't locate Mail/IMAPClient.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM ./FHEM/lib) at ./FHEM/32_mailcheck.pm line 11, <> line 85. BEGIN failed--compilation aborted at ./FHEM/32_mailcheck.pm line 11, <> line 85. |
2. Wenn der MIME::Parser nicht installiert ist, wird aus diesem Betreff:
mit üüüüääää
dann
Wenn der MIME Parser aber installiert wurde, und Fhem restartet wurde, klappt es auch mit den Umlauten:
3. Fhem aktualisieren.
Habe festgestellt, das Fhem mit einem update
nicht mehr die Scripte autom. aktualisiert. Mit einem update force
hat es nach ein paar Fehlermeldungen wieder geklappt. Es waren an einigen Dateien nicht mehr die nötigen Userrechte gesetzt.