Wie kann ein Tür- und Batteriezustand gPlot für Fhem (HM-Sec-SC) erstellt werden?

Um die digitalen Werten, wie Tür auf oder zu in einem Plot mit dem Batterie Zustand auszugeben, kann wie folgt vorgegangen werden. Der HM-Sec-SC Funk-Tür-/Fensterkontakt gibt die Werte ja zurück. Die rote Linie gibt den Türzustand aus ob die Tür auf oder zu ist bzw. war.

Plot der Schaltzustände der Tür und der Batterie aus Fhem
Plot der Schaltzustände der Tür und der Batterie aus Fhem

Diese /fhem/www/gplot/myTerrassenTuer.gplot Datei speichern:


/*
   myTerrassenTuer.gplot Version 1.0 vom 07.09.2013

   Dieses GNU-Plot Script (myTerrassenTuer.gplot) gibt zwei Zustaende des Tuerkontakt als Kurven aus und zwar
   den Batterie-Zustand, den Status der Tuer.

   (C) 2013 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/}.
*/

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 'Terrassen Tuer'

set ytics ("Zu" 0, "Ok" 0.8, "Auf" 1)
set y2tics ("Zu" 0, "Ok" 0.8, "Auf" 1)
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]
set ylabel ""
set y2label ""

#FileLog 3:wz_Tuerschalter:0:$fld[2]=~"open"?1:0
#FileLog 4:wz_Tuerschalter:0:$fld[2]=~"ok"?0:0.8

plot \
       "< awk '/wz_Tuerschalter/ {print $1, $3~/open/? 1 : 0; }' <IN>"\
       using 1:2 title 'Tuer' with steps
       "< awk '/wz_Tuerschalter/ {print $1, $3~/ok/? 1 : 0; }' <IN>"\
       using 1:2 title 'Batterie' with steps

Folgende Einträge sind in der fhem.cfg Datei noch nötig:

# TW Tuerschalter
define wz_Tuerschalter CUL_HM 000000
attr wz_Tuerschalter .devInfo 000000
attr wz_Tuerschalter .stc 80
attr wz_Tuerschalter actCycle 028:00
attr wz_Tuerschalter actStatus alive
attr wz_Tuerschalter expert 2_full
attr wz_Tuerschalter firmware 2.1
attr wz_Tuerschalter model HM-SEC-SC
attr wz_Tuerschalter peerIDs 
attr wz_Tuerschalter room Wohnzimmer
attr wz_Tuerschalter serialNr KEQ0000000
attr wz_Tuerschalter subType threeStateSensor

define FileLog_wz_Tuerschalter FileLog ./log/wz_Tuerschalter-%Y.log wz_Tuerschalter
attr FileLog_wz_Tuerschalter logtype text
attr FileLog_wz_Tuerschalter room Wohnzimmer

define SVG_FileLog_wz_Tuerschalter_1 SVG FileLog_wz_Tuerschalter:myTerrassenTuer:CURRENT
attr SVG_FileLog_wz_Tuerschalter_1 room Wohnzimmer

Wie kann auf einem WR-703N unter OpenWrt ein Server für USB tunnel per TCP eingerichtet werden?

Anleitung von OpenWrt „USB durch IP-Tunnel„.

Zuerst die USB Kernel Module und USBIP Server Package installieren mit:

opkg update
opkg install kmod-usb-ohci usbip-server

Dann die lokalen USB Geräte auflisten mit
usbip list -l
Bei mir wir diese Ausgabe geliefert:

[root@OpenWrt ~]# usbip list -l
Local USB devices
=================
- busid 1-1 (0451:1446)
1-1:1.0 -> hub

- busid 1-1.1 (0403:6001)
1-1.1:1.0 -> ftdi_sio

- busid 1-1.4 (090c:1000)
1-1.4:1.0 -> usb-storage

Wie man sieht, habe ich einen USB Hub, an diesem habe ich den Arduino Nano (ftdi_sio) und einen USB-Stick mit 8GB (usb-storage) angeschlossen.

In der Datei /etc/rc.local vor dem exit 0 diese Zeilen einfügen wenn der Server autom. gestartet werden soll. Evl. noch die BusID anpassen:

# TW Tunnelt den USB-Stick per TCP
usbipd -D &
sleep 1
usbip bind -b 1-1.4 # bindet die BusID vom USB Stick

Diese Methode habe ich aber erstmal nicht mehr verwendet da schon autom. ein Fhem-Server läuft.

Nach einem reboot kann mit netstat geschaut werden ob alles läuft.
netstat -alpt.

Siehe auch diese Anleitung

[root@OpenWrt ~]# usbip list -local
Local USB devices
=================
- busid 1-1 (0451:1446)
1-1:1.0 -> hub

- busid 1-1.1 (0403:6001)
1-1.1:1.0 -> ftdi_sio

- busid 1-1.4 (090c:1000)
1-1.4:1.0 -> usb-storage


[root@OpenWrt ~]# usbip bind -b 1-1.1
bind device on busid 1-1.1: complete


[root@OpenWrt ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0451:1446 Texas Instruments, Inc. TUSB2040/2070 Hub
Bus 001 Device 007: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) 64MB QDI U2 DISK
Bus 001 Device 008: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 001: I

Hab noch keinen USBIP Client für Mac OS X gefunden. Gibt es da einen der läuft?
Für Windows und Linux gibt es passende.

Wie kann unter Mac OS X das Terminal screen verwenden?

Um Kontakt zur seriellen Schnittstelle aufzubauen kann unter Mac OS X das Programm: screen
verwendet werden. Einfach auf der Kommandozeile aufrufen
screen [ -optionen] [ Kommando [Argumente]] wie hier gezeigt um die USB Schnittstelle anzusprechen:

screen /dev/cu.usbserial-A9YLHVRN

Bildschirmfoto 2013-08-31 um 15.01.40

bitlash unter screen
bitlash unter screen

Beendet kann das Terminal mit: ctrl+a k werden

Wie kann eine Kommando Shell (bitlash) für Arduino verwendet werden?

Es gibt für Arduino eine Kommando Shell mit Namen Bitlash. Auch eine Anleitung ist auf Hompage des Entwicklers zu finden.

Hier die nötigen Schritte, um ein Arduino (Nano) damit zu bestücken.

Zuerst einmal die neueste Version (2.0) von bitlash installieren, dazu in das Libraries Verzeichnis von Arduino wechseln und per git die Neueste Version holen:

cd ~/Documents/Arduino/Libraries
git clone https://github.com/billroy/bitlash.git

oder auch als ZIP und dann auspacken.

Dann die Arduino IDE (1.5.2) starten und über das Menü: Datei-Beispiele-bitlash-Bitlashdemo das Beispiel Sketch laden, compilieren und auf den Arduino hochladen.

Wenn dann der Serielle-Monitor aufgemacht wird, ist es bei mir mit dem Nano abgestürzt.
Deshalb habe ich die Geschwindigkeit auf 9600 geändert. Hier das angepasste Beispiel Sketch:

/**
twbitlash.pde Thomas Wenzlaff http://www.wenzlaff.de Version 1.0 vom 31.08.2013

        Beispiel einen einfachen Kommandointerpreter für den Arduino Nano.
        
        Basis Beispielprogramm von:

Bitlash is a tiny language interpreter that provides a serial port shell environment
for bit banging and hardware hacking.

This is an example demonstrating how to use the Bitlash2 library for Arduino 0015.

Bitlash lives at: http://bitlash.net
The author can be reached at: bill@bitlash.net

Copyright (C) 2008-2012 Bill Roy

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
**/

#include "bitlash.h"

void setup(void) {

// Initialisierung und setzen der Baud Rate 57000 bricht beim Nano ab
// Startet den Kommandozeileninterpreter und führt den startup Makro aus
initBitlash(9600);
}

void loop(void) {
runBitlash();
}

und dann läuft dieses Beispiel.

Nach öffnen des Seriellen Monitors in der IDE (1.5.2) erscheint:

Bitlash Startbildschirm
Bitlash Startbildschirm

Alle Kommandos lassen sich mit help anzeigen:
Bitlash 2.0 Online Hilfe
Bitlash 2.0 Online Hilfe

Wie dann die erste Funktion erstellt wird, steht hier.
Kurz, um die LED 13 blinken zu lassen folgende Befehle eingeben:

function toggle13 {d13 = !d13;}
function startup {pinmode(13,1); run toggle13,1000;}
startup
boot

Funktionen lassen sich mit ls anzeigen:
Erstes Beispiel
Erstes Beispiel

Weitere Doku hier.

Das JavaMagazin mit meinen Artikel zum Thema: Ansteuerung von USB-Schnittstellen mit Java via javahidapi

Das Java Magazin Ausgabe 9-2013 ist jetzt am Kiosk nicht mehr erhältlich erhältlich. Die Ausgabe kann aber noch Online nachbestellt werden.

Das Magazin erscheint in einer Auflage von ca. 20000 Exemplaren und ist damit das am weitesten verbreitet Magazin zum Thema JAVA.

In der Ausgabe findet Ihr einen Artikel vom mir zum Thema „Ansteuerung von USB-Schnittstellen via javahidapi mit Java“ inkl. einem Eclipse Beispielprojekt.

Hier ein Foto meines Belegexemplares:

Java Magazin 9 2013
Java Magazin 9 2013

Wie findet Ihr den Artikel? Würde mich über Feedback freuen.

Wie kann mit Arduino die serielle Ausgabe über TCP ausgegeben werden auf dem TP-WR703N Gerät?

Der Arduino (NANO) wird per USB an den TP-WR703N (12.09) angeschlossen. Wie kann nun von einem anderen Rechner darauf per TCP (Telnet) zugegriffen werden?

Dazu erst socat auf den WR703 installieren mit

opkg update
opkg install socat

Socate (Version 1.7.2.1) kann bidirektionale Verbindungen aufbauen. Es verbindet den USB Port mit dem TCP Port.
Dann das folgende Script erstellen start-temp.sh, und evl noch die Schnittstelle DEV und den PORT und BAUD anpassen.

#!/bin/bash

DEV=/dev/ttyUSB0
PORT=1234
BAUD=9600

while true; do
if [ -e $DEV ]
then
socat tcp-l:$PORT,reuseaddr,fork file:$DEV,nonblock,raw,echo=0,waitlock=/var/run/tty,b$BAUD
else
sleep 2
fi
done

und ausführbar machen mit

chmod +x start-temp.sh

Dann kann das Script mit ./start-temp.sh & im Hintergrund auf dem WR703N gestartet werden.

Nun kann von einem anderen Rechner mit
telnet ip-adresse 1234 die Ausgabe ausgegeben werden.

Will man das das Script autom. beim hochfahren des WR703N startet, muss es noch in der /etc.rc.local eingetragen werden (aber vor exit 0). Das geht auch über Luci:

Luci Startskripte
Luci Startskripte

Evl. muss der USB Port einmal reconnected werden.

Wie kann GoogleCl (0.9.14) installiert werden um per Kommandozeile auf Google-Dienste zuzugreifen?

Die Kommandozeile für folgende Google-Dienste:

  • Blogger
  • Calendar
  • Contacts
  • Docs
  • Finance
  • Picasa
  • Youtube

Unter Mac tut es ein

sudo port install googlecl
und für andere Betriebssysteme (Win, Linux) hier schauen.

Dann ist für jeden Dienst eine einmalige Autorisierung nötig. Dazu auf der Komandozeile

google calendar list

eingeben. Es wird nach der E-Mail Addresse des Google-Account gefragt. Als Antwort gibt es einen Link, der im Browser nach eingabe des Passwortes bestätigt werden muss.

Ein

google contacts list Thomas

gibt dann alle Kontakte mit Namen Thomas aus. Will man die dann noch in eine Datei schreiben geht das z.B. mit

google contacts list Thomas > kontakte.txt

Ein

google calendar add "Testeintrag"
fügt einen Kalendereintrag am heutigen Tag hinzu und ein

google calendar today
gibt die Kalendereinträge auf der Konsole von heute aus. Eine Liste aller Kalendereinträge gibt es mit
google calendar list.

Weitere Beispiele und Syntax gibt es im Manual oder jeweils mit
help, z.B.
google help calendar.

Wie installiere ich MiniPwner auf OpenWrt 12.09 das auf einem TP-Link TL-WR703N Router läuft?

MiniPwner bietet…

Nmap – Netzwerk Scanner
Tcpdump – Sniffer
Netcat – Daten kopieren über Netzwerk
aircrack Wireless – Netzwerk Analyse
kismet – WiFi Analyse
perl – Programmier Sprache Perl
openvpn – VPN Client und Server
dsniff – Sniffing und spoofing Tools, mit arpspoof
nbtscan – NetBIOS Netzwerk Scanner
snort – Sniffer, Packet Logger, Intrusion Detection System
samba2 client – Windows File Sharing Client
elinks – Text Based Web Browser
yafc – FTP Client
openssh-sftp-client – Secure File Transfer Client
mc – Dateimanager für Kommandozeilen und Mausunterstüzung
luci-theme-bootstrap – Sprachunterstüzung und Thema für Luci
htop – Prozessmanger zum anzeigen und kill von Prozessen und Resouren
iftop – Netzwerk Interface Anzeige
ettercap – Netzwerk Penetrations Tool
mdk3 – Netzwerk Penetrations Tool
aircrack-ptw – Netzwerk Penetrations Tool

Voraussetzung:
1. Ein formartierter USB-Stick mit drei Partitionen. Ich habe einen 8 GB Stick so formatiert:

sda1 - sys (80 MB oder mehr) ext2 primary
sda2 - swap (64 MB oder mehr) linux-swap primary
sda3 - data (der Rest des Speichers) ext2 primary

2. OpenWrt Version 12.09 (kein trunk) auf OpenWrt geflasht
downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/

Installation
1. Passwort setzen

2. Über WEB-Frontend Luci zu Network->WiFi gehen und das Netzwerk scannen. Auswählen des erkannten Homenetzwerk. Eingabe des Passwort und als Firewall-Zone WAN auswählen. Speichern.
Unter den erweiterten Einstellungen den Country Code auf DE und HT Mode setzen, wenn er nicht schon da ist.
Speichern.

3. Reboot

4. USB-Stick anschließen

5. Einloggen per SSL folgende updates ausführen:

opkg update
opkg install kmod-usb-storage
opkg install kmod-fs-ext4
opkg install block-mount

Kontrolle mit

dmesg

es muss in einen der letzten Zeilen die Partitionen sda, sda1, sda2, sda3 angezeigt werden.

6. Die Datei /etc/config/fstab wie folgt bearbeiten damit der USB-Stick eingebunden wird.

config global automount
option from_fstab 1
option anon_mount 1

config global autoswap
option from_fstab 1
option anon_swap 1

config mount
option target /overlay
option device /dev/sda1
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0

config mount
option target /home
option device /dev/sda3
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0

config swap
option device /dev/sda2
option enabled 1

Nach dem mounten ist /overlay die SYS Partition.
Das /home Verzeichnis ist die Daten-Partition die für alles was benötigt wird verwand werden kann.

7. Mounten des USB-Sticks und kopieren der SYS Partition auf den Stick:

mkdir /mnt/sda1 /home
mount /dev/sda1 /mnt/sda1
tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -

8. Reboot

9. Per SSL verbinden und Testen ob der Stick eingebunden wurde mit

df

Testen ob der Swap funktioniert mit

swapon /dev/sda2

Wenn „swapon: /dev/sda2: swapon failed: Device or resource busy“ kommt, ist alles ok.

10. Instalation von dsniffer vom derbycon Repo und anderer Tools mit:

opkg update
opkg install http://minipwner.com/20120514/downloads.openwrt.org/snapshots/trunk/ar71xx/packages/dsniff_2.4b1-2_ar71xx.ipk

opkg install luci-theme-bootstrap mc htop iftop ettercap tar openssh-sftp-client mdk3 nmap tcpdump aircrack-ng aircrack-ptw kismet-client kismet-server perl openvpn nbtscan snort karma samba36-client elinks yafc

Fertig.

Alles was fehlt, kann über opkg noch installiert werden.

Diese Anleitung ist der Anleitung von megal0maniac (engl.) gefolgt.

Arduino Mega Projekt: Ansteuerung der besuchten Urlaubsorte auf einer Weltkarte mit Arduino Mega mit LEDs

Wollte lange schon mal, zur Erinnerung an schöne Urlaube eine Markierung auf der Weltkarte anbringen wo wir waren. Als IT-Berater muss es dann aber schon eine Micro-Computer gesteuerte Version sein. Ein roter Punkt reicht da nicht.

Also hier das Ergebnis als Video, und weiter unten dann die Details:

Also so sieht die Weltkarte von vorne aus:

Die Weltkarte in einem Bilderrahmen
Die Weltkarte in einem Bilderrahmen

Hier die Rückseite. Ein Arduino Mega wurde verwendet, weil der bis zu 60 Ausgänge hat, die einzeln angesteuert werden können.

Die ganze Rückseite, es fehlen noch die analogen Eingänge die als digitale Ausgänge geschaltet werden
Die ganze Rückseite, es fehlen noch die analogen Eingänge die als digitale Ausgänge geschaltet werden

An jedem besuchten Urlaubsort wurde ein 3 mm Loch gebohrt und eine LED reingesteckt. An einen Pin der LED wurde jeweils noch ein 220 Ohm Widerstand angelötet. Ja, es sieht etwas wild aus:

An jede LED kommt noch ein Widerstand
An jede LED kommt noch ein Widerstand

Eine Nahaufnahme des Arduino Mega.

Weltkarte5

Ein Reed-Kontakt habe ich noch an einem Interrupt-Eingang des Arduino geschaltet, so kann man von vorne mit einem Magnet über den Null-Meridian fahren, und schon leuchten unsere TOP 3 Urlaubsorte (Hawaii, Tokio, Seychellen) permanent.

Reed-Kontakt für die TOP 3 Urlaubsorte
Reed-Kontakt für die TOP 3 Urlaubsorte

Hier das C-Programm, welches in den Arduino geflasht wird und die Ansteuerung durchführt.

Das ist die 1. Version, da werde ich noch einiges ergänzen.
„Arduino Mega Projekt: Ansteuerung der besuchten Urlaubsorte auf einer Weltkarte mit Arduino Mega mit LEDs“ weiterlesen

Autor Thomas Wenzlaff hat im Java Magazin September 2013 einen Artikel veröffentlicht zum Thema: „Per Java auf USB Schnittstellen zugreifen mit javahidapi“

Das Java Magazin Ausgabe 9-2013 ist jetzt überall erhältlich (Inhalt). Das Magazin erscheint in einer Auflage von ca. 20000 Exemplaren und ist das am weitesten verbreitet Magazin für JAVA.

In der Ausgabe findet Ihr einen Artikel vom mir zum Thema „Ansteuerung von USB-Schnittstellen via javahidapi mit Java“ inkl. einem Eclipse Beispielprojekt zum downloaden.

Hier ein Foto meines Belegexemplares:

Java Magazin 9 2013
Java Magazin 9 2013

Wie findet Ihr den Artikel? Würde mich über Feedback freuen.

Installieren der Bourne-again shell (bash) auf WR-TR703N anstatt der Almquist-Shell (ash)

Nach dem Installieren von OpenWrt ist die Almquist-Shell (ash) installiert. Da die ash im Vergleich zu anderen modernen Shells sehr geringe Ansprüche an Speichergröße und Rechnergeschwindigkeit stellt, wird sie in OpenWrt und anderen Embedded-Linux-Systemen verwendet.

Welche Shell aktiv ist kann mit

echo $SHELL

auf der Konsole angezeigt werden. Obwohl der Befehl ja nur den Inhalt der Variable SHELL ausgibt, und die muss ja nicht immer richtig gesetzt sein.
Es reicht auch ein
echo $0

welches dann
-bash
oder je nach Shell einen Wert ausgibt.

So nun wollen wir die bash installieren weil sie komfortabler und gebräuchlicher ist.
opkg update
opkg install bash

in /etc/passwd
in der ersten Zeile, der root Zeile die bash eintragen:
root:x:0:0:root:/root:/bin/bash

dann eine Datei .bash_profile anlegen mit folgenden Inhalt:

echo ". $HOME/.bashrc" > /root/.bash_profile

dann eine eigene .bashrc Datei mit den User-Einstellungen anlegen, oder diese verwenden:

wget -P /root/ http://wenzlaff.de/download/linux/.bashrc

Nach dem ausloggen und einloggen steht die bash zur Verfügung, was leicht mit

$ echo $SHELL
getestet werden kann, es wird dann ausgegeben:
/bin/bash

Wie kopiere ich nun vom Mac OS X Dateien auf den WR703N?

Das geht mit scp – Secure copy to copy files to/from a remote computer.

Zum Beispiel wenn im aktuellen Verzeichnis die Datei TWSerial.jar lieg und die in das Root Verzeichnis des WR703N kopiert werden soll.
Wobei der User: root und die IP des WR703: 192.168.2.122 ist (evl. noch anpassen):

scp TWSerial.jar root@192.168.2.122:/root

Das Ergebnis:
TWSerial.jar 100% 170KB 169.8KB/s 00:00

Weiter Infos zu scp:

usage: scp [-12346BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2

Oder auf dem Mac Dateien vom WR703N kopieren, z.B. alle my*.gplot Dateien im lokalen Verzeichnis sichern:

scp root@192.168.2.122:/usr/src/fhem/www/gplot/my*.gplot .

Wie kann eine Java VM auf TP WR 703N installiert werden?

Über den Paketmanager jamvm installieren (jamvm_1.6.0-git-2_ar71xx.ipk).
Dazu ja* eingeben und suchen klicken. Anschließend das Paket installieren:

Gui von OpenWrt - Luci - Paketverwaltung
Gui von OpenWrt – Luci – Paketverwaltung

Anschließend testen ob die Version richtig installiert ist mit:
jamvm -version
es wird dann folgendes ausgebeben:

JamVM - Java VM - Ausgabe der Version mit: jamvm -version
JamVM – Java VM – Ausgabe der Version mit: jamvm -version

Wie kann die Java VM verwendet werden:
jamvm
ergibt folgendes:

Verwendung von jamvm - Java VM
Verwendung von jamvm – Java VM

Weiter tests folgen …

Startpunkt zu embeddet Java.

Was kann die Ursache sein, das von OpenWrt kein Internet Zugriff möglich ist?

Was kann die Ursache sein, das von OpenWrt kein Zugriff auf das Internet möglich ist?
Checken ob: ping wenzlaff.de geht, wenn nicht,
dann in der /etc/confi/network Datei überprüfen,
ob der folgende Eintrag mit dem DNS und Gateway vorhanden ist:

config interface ‚lan‘
option ifname ‚eth0‘
option type ‚bridge‘
option proto ’static‘
option ipaddr ‚192.168.2.122‘
option netmask ‚255.255.255.0‘
option ip6assign ’60‘
option dns ‚xxx.xxx.xxx.xxx‘ # IP-Adresse aus Router eintragen
option gateway ‚192.168.2.1‘

Das Netzwerkkabel muss am Router angeschlossen werden und nicht an der Netzwerkkarte des Rechners.

Wie schreibe ich die Daten mit minicom aus der der seriellen USB-Schnittstelle in eine Datei unter Mac OS X?

Das Terminal-Programm minicom muss erste installiert werden.
Dann muss minicom auf den USB Port eingestellt werden.
Aufruf:
sudo minicom -s

Dann unter Konfiguration – Einstellungen zum seriellen Anschluss den USB Port angeben z.B. bei mir:
/dev/tty.usbserial-A501U7KD
Geschwindigkeit auf: 9600

Bildschirmfoto-Minicom-Menue

Bildschirmfoto-Minicom-Einstellungen
Unter Konfiguration – Dateinamen und Pfade die Verzeichnisse für Download und Upload setzen.

Und alles speichern mit Konfiguration – Speichern als „dfl“
Minicom beenden.

Als User starten mit:
minicom -C logdateiname.txt

Ab sofort wird die ganze Ausgabe in die logdateiname.txt geschrieben.

Beenden kann man die Ausgabe mit:
Ctrl+A und dann Q

Hier ein Beispiel mit den gelesenen Luftdruck und Temperatur Parametern über den USB Port:

Minicom Terminal
Minicom Terminal

Arduino Nano Relais Ansteuerung (Relay test)

Mit dem Arduino kann leicht auch 230 Volt geschaltet werden. Dazu kann ein Relais an den digitalen Pin 7 und + VCC und – Masse verbunden werden.

In diesem Video kann man hören und sehen, wie das Relais alle 5 Sekunden an und wieder aus geschaltet wird.

Folgendes Sketch ist in den Arduino Nano hochzuladen.
/*
TWRelais

Dieses Programm schaltet das Relais alle 5 Sekunden an und aus.

Thomas Wenzlaff 02.07.2013

Das Relais wir an den digitalen Pin 7 angeschlossen und VCC 5 V und Masse verbunden

Größe des compilierten Programm: 1108 Byte
*/

// An Pin 7 ist eine Relais angeschlossen,
const int RELAIS = 7;

// Die setup Methode wird nur einmal ausgeführt und bei reset
void setup() {
// Digitaler PIN 7 mit der RELAIS ist ein Ausgang
pinMode(RELAIS, OUTPUT);
}

// Die Endlosschleife
void loop() {
digitalWrite(RELAIS, HIGH); // RELAIS anschalten
delay(5000); // 5s warten
digitalWrite(RELAIS, LOW); // RELAIS ausschalten
delay(5000); // 5 Sekunden warten
}

Vergleich zweier Temperatursensoren DS18B20 mit gnuplot

Eine kurze Messung mit zwei an das Arduino-Board angeschlossene Temp.-Sensoren DS18B20 ergibt diese Daten.

Daraus läßt sich mit diesen gnuplot Befehlen

set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [26:28] # die y-Achse geht von:bis
set terminal png
set output "temperaturverlauf.png"
plot "temperatur.log" using 1:2 title "Innen Sensor" with lines, "" using 1:3 title "Aussen Sensor DS18B20" with lines

diese Grafik plotten:

gnuplot zweier Temperatursensoren
gnuplot zweier Temperatursensoren

Die Sensoren sind mit +-0,5 Grad Celsius bei -10 bis +85 Grad angegeben.
Die Differenz beider Werte ergibt mit diesen gnuplot Befehlen:

set title "Temperatur Differenz zweier Sensoren"
set ylabel "Temperatur Differenz in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-1:1] # die y-Achse geht von:bis
set zeroaxis # die 0 Linie
set terminal png # erzeugt eine PNG Datei
set output "differenztemperaturverlauf.png" # Name der PNG Datei
plot "temperatur.log" using 1:($2-$3) title "Temperatur-Differenz" with lines
set terminal aqua # wieder auf Terminal
replot # nochmal in Terminal plotten

folgendes Ergebnis.

Differenz zweier Temperaturmessungen
Differenz zweier Temperaturmessungen

Mit welchem gnuplot Befehl bekomme ich eine horizontale Linie bei 0,5 und -0,5 Grad hin, die mit min und max Beschriftet ist? Ok, hier die Lösung.

Wie können mit gnuplot Temperatur-Diagramm erstellt werden?

Habe mit dem Arduino und dem Temperatursensor DS18B20 mal zwei Stunden die Temperatur mit einem Java Programm gemessen.

Die erzeugte Logdatei hat folgenden Aufbau:
[Messzeitpunkt] [Gemessener Wert in Grad/Celsius]
Z.b.:

2013.06.22_17:56:18 29.25
2013.06.22_17:56:23 29.25
2013.06.22_17:56:29 29.25
# ...
2013.06.22_20:15:00 27.56
2013.06.22_20:15:06 27.56
2013.06.22_20:15:12 27.56

Folgende gnuplot Befehle sind nötig (guter Überblick zu gnuplot):

set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [27:30] # die y-Achse geht von:bis
set terminal png
set output "temp-verlauf.png"
plot "log-temp.txt" using 1:2 title "Sensor DS18B20" with lines

Um folgendes Ergebnis zu erhalten. Der peek am Anfang, ist entstanden, weil ich den Sensor kurz angefasst haben.

Mit gnuplot erstellt Grafik zum Temperaturverlauf eines DS18B20
Mit gnuplot erstellt Grafik zum Temperaturverlauf eines DS18B20

Oder hier mit points anstatt lines:

Gnuplot Temperaturverlauf mit Messpunkte
Gnuplot Temperaturverlauf mit Messpunkte

Temperatur Messung mit dem DS18B20 und Arduino Nano

Habe heute einen One-Wire DS18B20 Temperatursensor erhalten und ihn mit dem Arduino Nano verbunden. Der Messbereich des Sensors beträgt von -55°C bis +125°C bei ± 0,5°C Genauigkeit.

Mit den OneWire 2.2 und Dallas Temperature Control Library 3.7.2 Bibliotheken ist die
Temperaturmessung schnell zusammengebaut.

Hier das Foto des Aufbaus mit Schaltplan:

Arduino Nano Temp. Messung via 1-Wire
Arduino Nano Temp. Messung via 1-Wire

Das Programm (8038 byte) gibt zuerst die eindeutige ID des Sensors aus, (28-A2-9D-8A-04-00-00-2B) und dann jede Sekunde den neuen Messwert:


/* 
TWTemp Version 1.0 vom 14.06.2013 

8038 bytes

Thomas Wenzlaff http://www.wenzlaff.de

Temperature Sensor DS18B20 an Digitalen Port Pin 2 wie folgt verbunden
Links=Masse, 
Mitte=Data, 
Rechts=+5V, 
3300 to 4700 Ohm Widerstand von +5V nach Data.

Es wird erst die Adresse des 1-Wire-Device ausgegeben und dann wird die Temperaturmessung gestartet.

*/

/* Benötigte Bibliotheken importieren */
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2 /* Digitalport Pin 2 definieren */

OneWire ourWire(ONE_WIRE_BUS); /* Ini oneWire instance */

DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */

void setup()
{
delay(1000);
Serial.begin(9600);
Serial.println("Temperatur Messprogramm");
Serial.println("TWTemp 1.0 vom 14.06.2013");
Serial.println("http://www.wenzlaff.de");
delay(1000);

sensors.begin();/* Inizialisieren der Dallas Temperature library */

adresseAusgeben(); /* Adresse der Devices ausgeben */

Serial.print("Starte Temperatur abfragen ...");
}

void loop()
{
Serial.println();

sensors.requestTemperatures(); // Temp abfragen

Serial.print(sensors.getTempCByIndex(0) );
Serial.print(" Grad Celsius");
}

void adresseAusgeben(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  Serial.print("Suche 1-Wire-Devices...\n\r");// "\n\r" is NewLine
  while(ourWire.search(addr)) {
    Serial.print("\n\r\n\r1-Wire-Device gefunden mit Adresse:\n\r");
    for( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n\r");
      return;
    }
  }
  Serial.println();
  ourWire.reset_search();
  return;
}

Um die höchstmögliche Genauigkeit des Sensors auszulesen ist im Setup noch dieser Befehl nötig, damit dauert die Messung aber etwas länger: „Temperatur Messung mit dem DS18B20 und Arduino Nano“ weiterlesen

Das erste „Blink“ Programm für das Arduino Nano Board, es muss ja nicht immer „Hallo Welt“ sein.


/*
  TWBlink 
  
  Beschreibung: Die rote Leuchtdiode (LED) auf dem Arduino Board blinkt alle 10 Sekunden
  kurz für 50ms auf.
 
  Dieses Beispiel ist Freeware und basiert auf dem Beispielprogramm Blink.
  
  Thomas Wenzlaff 12.05.2013
  
  Größe des compilierten Binary: 1108 Byte
 */

// An Pin 13 ist eine LED angeschlossen, die auf den meisten Arduino Boards vorhanden ist
const int LED = 13;

// Die setup Methode wird nur einmal ausgeführt und bei reset
void setup() {
  // Digitaler PIN mit der LED ist ein Ausgang
  pinMode(LED, OUTPUT);
}

// Die Endlosschleife
void loop() {
  digitalWrite(LED, HIGH); // LED anschalten
  delay(50); // 50 ms warten
  digitalWrite(LED, LOW); // LED ausschalten
  delay(10000); // 10 Sekunden warten
}

Jar2UML Plugin für Eclipse

Cooles Plugin für Eclipse. Verwandelt ein JAR in ein UML.

Install: Per drag and drop diesen Button in den Workspace Juno Workspace (Console) verschieben.

Nach der Installation über das Menü: File-Import-Jar2Uml eines der vier import Filter wählen und die nötige UML Datei erzeugen lassen.

Weitere Details.

Wie können gemachte Änderungen in einen bestimmten Zeitraum in Subversion angezeigt werden?

svn log -r {2011-01-01}:{2013-01-30}

oder lang:

svn log –revision {2011-01-01}:{2013-01-30}

Gibt alle Änderungen in dem Zeitraum von/ bis aus.

Kann auch mit Limit kombiniert werden z.B.

svn log -r {2011-01-01}:{2013-01-30} -l 3

oder lang:

svn log -r {2011-01-01}:{2013-01-30} --limit 3

Zeigt nur 3 Änderungen an.

Geht natürlich auch mit verbose, um ausführliche Meldungen auszugeben:

svn log -r {2013-01-01}:{2013-01-12} -v

oder lang:

svn log -r {2013-01-01}:{2013-01-12} --verbose

Quick-Howto für die Coole Java Template-Erstellung (JaMoPP) mit CommentTemplate ldt. JavaMagazin 1-2013

Oder was ist JaMoPP? Damit es auch unter Eclipse Kepler SR1 läuft (Update: läuft auch unter Eclipse Luna 4.4.0 und Eclipse Mars 4.5.0), zuerst über Eclipse Marketplace den CommentTemplate 0.9.2 installieren:
Bildschirmfoto 2014-05-01 um 21.17.45
Dann diesen Beispiel Code ausführen:

package de.wenzlaff;

import java.util.Date;

import de.devboost.commenttemplate.CommentTemplate;

/**
* 1. Installieren über Eclipse Update oder Marketplace (suchen nach CommentTemplate)
* 2. New PlugIn Projekt
* 3. Add new Dependencies de.devboost.commenttemplate-Version.jar
* 4. Klasse mit Extension Source.java erstellen
* 5. Annotation @CommentTemplate an String Methode mit return null
* 6. JavaDoc Formatierung in Eclipse für das Projekt ausschalten
* 7. Save erzeugt in src-gen-comment-template die generierte Klasse
* 8. Run as
*
* Beispiel Video: http://jamopp.org/index.php/JaMoPP_CommentTemplate
* Anleitung: http://reuseware.org/publications/2012_ACME_CommentTemplate.pdf
*/
„Quick-Howto für die Coole Java Template-Erstellung (JaMoPP) mit CommentTemplate ldt. JavaMagazin 1-2013“ weiterlesen

Wie kann bei JAXB marshal verhindert werden das „ “ geschrieben wird?

Das geht mit der Property: Marshaller.JAXB_FRAGMENT
Wenn die auf true gesetzt wird, erscheint der XML Tag nicht mehr.

Hier ein komplettes Beispiel für die Serialisierung:


JAXBContext jaxbContext = JAXBContext.newInstance(Map.class);
Marshaller marshaller = jaxbContext.createMarshaller();

// Verhindern des tags:
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(freemindMap, outFile);