Wie wird der USB 9097 unter OpenWrt auf einem WR-703N mit owfs installiert?

Der USB-Stick USB9097 mit zwei One-Wire Klinkenstecker Anschlüssen (3,5mm – 5v – Data – GND).

USB9097
USB9097

Der USB-Stick ist ein kostengünstiger Busmaster (DS2480B) mit USB-Serial-Adapter (CH341) für USB Bus (2.0) mit Konverter Chip CH341 im syncronen seriellen (SCL, SDA) Modus.

Er wird vollständig von OWFS unterstützt (… aber als serieller Busmaster S9097U-Type mit USB Port!).

Was muss getan werden um einen One-Wire Temperatursensor DS18B20 anzuschließen und die Temperatur auszugeben?

Folgende Package installieren und reboot.

opkg update
opkg install kmod-usb-serial-ch341 kmod-usb-serial
opkg install owfs owhttpd owshell owserver

OWFS wird dann in der Version 2.8p13-1 installiert, es gibt aber schon 2.9.p1 wer die haben will, muss das Package selbst compilieren und installieren.

Ein Verzeichnis erstellen:
mkdir /mnt/1wire

USB-Stick anstecken und Kernel-Meldungen checken mit dmesg ob er erkannt wurde:
dmesg
Ausgabe ua:

...
[ 36.330000] USB Serial support registered for ch341-uart
[ 36.330000] ch341 1-1.2:1.0: ch341-uart converter detected
[ 36.350000] usb 1-1.2: ch341-uart converter now attached to ttyUSB0
...

Oder mit lsusb
Ausgabe ua:

...
Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
...

Jetzt können wir den USB-Stick an das erstellte Verzeichnis binden mit:

owfs -d /dev/ttyUSB0 -m /mnt/1wire/

Jetzt werden alle Eigenschaften und Daten als Dateisystem unter dem gemounteten Verzeichnis abgebildet.
Wenn wir dann in das /mnt/1wire Verzeichnis gehen, können wir uns von dort mit cat die Temperatur ausgeben lassen.

cd /mnt/1wire
ls

Ausgabe der Verzeichnisse:

28.A29D8A040000 bus.0 simultaneous structure uncached
alarm settings statistics system

Die Verzeichnis Nr. die mit 28…. startet ist das Verzeichnis des Temperatur Sensors.

cat 28.A29D8A040000/temperature
Ausgabe nach ca. 1 Sekunde mit 12-Bit Genauigkeit in Grad Celsius:
24.375

Oder der Type des Sensors
cat 28.A29D8A040000/type
Ausgabe:
DS18B20

Oder die einmalige ID:
cat r_address
Ausgabe z.B.
2B0000048A9DA228

Oder

Habt ihr noch Fragen oder Anregungen?


Wie kann OpenVPN auf einem WR-703N unter OpenWrt eingerichtet werden?

Nach dieser guten Anleitung wie folgt vorgehen.

opkg update
opkg install openvpn openvpn-easy-rsa openssh-sftp-server

Zertifikate erstellen:

Optional die
vi /etc/easy-rsa/vars
für default vorbelegungen anpassen:

export KEY_COUNTRY="DE"
export KEY_PROVINCE="Niedersachsen"
export KEY_CITY="Langenhagen"
export KEY_ORG="TWSoft"
export KEY_EMAIL="mail@email.de"
export KEY_EMAIL=mail@email.de
# Der KEY_CN mus EINDEUTIG und EINMALIG sien
export KEY_CN=server.email.de
export KEY_NAME=server.email.de
export KEY_OU=TWSoft
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

In das /etc/easy-rsa Verzeichnis wechseln.
./clean-all
ausführen. Löscht das ganze /etc/easy-rsa/keys Verzeichnis

build-ca

Erzeugt diese Fragen:
Country Name (2 letter code) [DE]:
State or Province Name (full name) [DE]:Langenhagen
Locality Name (eg, city) [Langenhagen]:
Organization Name (eg, company) [TWSoft]:
Organizational Unit Name (eg, section) [TWSoft]:
Common Name (eg, your name or your server’s hostname) [EINDEUTIG.wenzlaff.de] www.wenzlaff.de
Name [server.wenzlaff.de]:www.wenzlaff.de
Email Address [mail@email.de]:

Erstellt in /etc/easy-rsa/keys die Dateien:
ca.key
ca.crt

Dann
build-dh
und ein paar Minuten warten bis in /etc/easy-rsa/keys die
dh1024.pem
erzeugt wurde.

Jetzt noch die Server Key erzeugen mit:
build-key-server server

Und einige Fragen beantworten:
Country Name (2 letter code) [DE]:
State or Province Name (full name) [DE]:Hannover
Locality Name (eg, city) [Langenhagen]:
Organization Name (eg, company) [TWSoft]:
Organizational Unit Name (eg, section) [TWSoft]:
Common Name (eg, your name or your server’s hostname) [server]:
Name [server.wenzlaff.de]:
Email Address [mail@email.de]:

Please enter the following ‚extra‘ attributes
to be sent with your certificate request
A challenge password []:1234
An optional company name []:TWSoft
Using configuration from /etc/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’DE‘
stateOrProvinceName :PRINTABLE:’Hannover‘
localityName :PRINTABLE:’Langenhagen‘
organizationName :PRINTABLE:’TWSoft‘
organizationalUnitName:PRINTABLE:’TWSoft‘
commonName :PRINTABLE:’server‘
name :PRINTABLE:’server.wenzlaff.de‘
emailAddress :IA5STRING:’mail@email.de‘
Certificate is to be certified until Oct 2 18:00:57 2023 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Nun gibt es in /etc/easy-rsa/keys auch die
server.crt
server.csr
server.key

Alle erzeugten Key in eine .p12 Datei packen mit:

build-key-pkcs12 thomas

Und wieder die gewohnten Fragen beantworten:

Country Name (2 letter code) [DE]:
State or Province Name (full name) [DE]:Hannover
Locality Name (eg, city) [Langenhagen]:
Organization Name (eg, company) [TWSoft]:
Organizational Unit Name (eg, section) [TWSoft]:
Common Name (eg, your name or your server’s hostname) [thomas]:
Name [server.wenzlaff.de]:
Email Address [email@mail.de]:

Please enter the following ‚extra‘ attributes
to be sent with your certificate request
A challenge password []:4567
An optional company name []:TWSoft
Using configuration from /etc/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’DE‘
stateOrProvinceName :PRINTABLE:’Hannover‘
localityName :PRINTABLE:’Langenhagen‘
organizationName :PRINTABLE:’TWSoft‘
organizationalUnitName:PRINTABLE:’TWSoft‘
commonName :PRINTABLE:’thomas‘
name :PRINTABLE:’server.wenzlaff.de‘
emailAddress :IA5STRING:’mail@email.de‘
Certificate is to be certified until Oct 2 17:59:08 2023 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Enter Export Password: 0000
Verifying – Enter Export Password: 0000

So jetzt sind auch in /etc/easy-rsa/keys die
thomas.csr
thomas.crt
thomas.key
thomas.p12

Dateien für den Client erstellt worden.

Jetzt müssen die Keys noch auf den Server und den Client verteilt werden.

cd /etc/easy-rsa/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/

Hier noch eine kleine Zuordungstabelle, welche Zertifikate wo hinkommen:

Dateiname Speicherort Beschreibung geheim
ca.crt Server + Clients Root CA Zertifikat Nein
ca.key im Safe :) Root CA Schlüssel Ja
dh{Wert}.pem Server Diffie Hellman Nein
server.crt Server Server Zertifikat Nein
server.key Server Server Schlüssel Ja
vpnclient01.crt Client 1 Client 1 Zertifikat Nein
vpnclient01.key Client 1 Client 1 Schlüssel Ja

Server Konfigurieren vi /etc/config/openvpn

config 'openvpn' 'lan'
option 'enable' '1'
option 'port' '1194'
option 'proto' 'udp'
option 'dev' 'tap0'
option 'ca' '/etc/openvpn/ca.crt'
option 'cert' '/etc/openvpn/server.crt'
option 'key' '/etc/openvpn/server.key'
option 'dh' '/etc/openvpn/dh1024.pem'
option 'ifconfig_pool_persist' '/tmp/ipp.txt'
option 'keepalive' '10 120'
option 'comp_lzo' '1'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'status' '/tmp/openvpn-status.log'
option 'verb' '3'
option 'server_bridge' '192.168.2.123 255.255.255.0 192.168.2.122 192.168.2.111'
option 'push' 'redirect-gateway def1'
list 'push' 'dhcp-option DNS 192.168.2.123'

Server Starten mit:
/etc/init.d/openvpn start
und:
/etc/init.d/openvpn stop
Restart
/etc/init.d/openvpn restart

Und für Autostart einmal oder über Luci:
/etc/init.d/openvpn enable

Nur wenn der VPN-Server läuft, ist über Luci das tap0 Device erreichbar.

Im Firewall vi /etc/config/firewall den Port 1194 freischalten:

config 'rule'
option 'target' 'ACCEPT'
option 'dest_port' '1194'
option 'src' 'wan'
option 'proto' 'tcpudp'
option 'family' 'ipv4'

/etc/init.d/firewall restart

Adressbereich setzen vi /etc/config/dhcp

config dhcp lan
option interface lan
option ignore 0
option start 150 # von .150 bis .199 = 49 Adressen
option limit 49
option leasetime 12h

reboot

IPhone Client Konfiguration.
Dafür brauchen wir eine OpenWrt.ovpn Datei. Die müssen wir uns aus den Zertifikaten und Key zusammenbauen:

# TW OpenWrt Configuration für xxx.no-ip.org IP:
remote xx.xxx.xxx.xxx 1194
client
tls-client
dev tun # tap geht nicht mit OpenVpn App 1.01 build 88
proto udp
remote-cert-tls server
resolv-retry infinite
nobind
persist-tun
persist-key
pkcs12 thomas.p12
comp-lzo
verb 3

# hier die Zertifikate von ca.crt, thomas.crt, thomas.key einfügen:

—–BEGIN CERTIFICATE—–
MIIEBDCCA22gAwIBAgIJAgg/WZdmAp

+6VIFdXmjy19eZQJzEJFxO5+iqZ6EZhs
—–END CERTIFICATE—–


—–BEGIN CERTIFICATE—–
MIIEQDCCA6mgAwIBAgIBAjANB

jGlI9+MUzx3nHhhU1W1F3s4zeeS3TFmjb7xhori4J7JZugOS
—–END CERTIFICATE—–


—–BEGIN PRIVATE KEY—–
gYBxm4LOI4uFPgBmS/9zjEZ1TGyE

JUe0BUfOhe4x
—–END PRIVATE KEY—–

An dieser Stelle habe ich gemerkt, das der OpenVPN 1.01 build 88 Client für das iPhone, kein TAP unterstützt.
Die von mir oben gewünschte Bridge über TAP-Device (virtuelle Netzwerkkarte, ethernet Adapter) ist also nicht möglich.

Also umkonfigurieren so das zumindestenst ein OpenVPN TUN läuft.
Also ist kein Layer 2 Tunnel mit dieser App und dem iPhone möglich. Schade!

vi /etc/config/openvpn

config 'openvpn' 'lan'
option 'enable' '1'
option 'port' '1194'
option 'proto' 'udp'
option 'dev' 'tun'
option 'ca' '/etc/openvpn/ca.crt'
option 'cert' '/etc/openvpn/server.crt'
option 'key' '/etc/openvpn/server.key'
option 'dh' '/etc/openvpn/dh1024.pem'
option 'ifconfig_pool_persist' '/tmp/ipp.txt'
option 'keepalive' '10 120'
option 'comp_lzo' '1'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'status' '/var/log/openvpn-status.log'
option 'verb' '3'
option 'server' '10.0.0.0 255.255.255.0'
list 'push' 'redirect-gateway def1'
list 'push' 'dhcp-option DOMAIN lan'
list 'push' 'dhcp-option DNS 192.168.2.1'

vi /etc/config/firewall

config 'include'
option 'path' '/etc/firewall.user' config 'rule'
option 'target' 'ACCEPT' option 'name' 'VPN'
option 'src' 'wan'
option 'proto' 'udp'
option 'dest_port' '1194'

vi /etc/firewall.user
iptables -t nat -A prerouting_wan -p udp --dport 1194 -j ACCEPT
iptables -A input_wan -p udp --dport 1194 -j ACCEPT
iptables -I INPUT -i tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -j ACCEPT
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT

Connect im iPhone läuft schon mal.

Wie kann der verwendete Speicher auf dem WR703N mit OpenWrt und Fhem angezeigt werden?

Das geht mit dem Linux Befehl:
top
der nach der Anmeldung per SSH eingegeben werden kann. Man sieht gut, das fhem das unter Perl läuft und am meisten (37%) virtuelle Prozessgröße in KB (VSZ) verbraucht.

Linux Befehlt "top" zum Anzeigen der Auslastung
Linux Befehlt „top“ zum Anzeigen der Auslastung

free und ps geben auch noch einige Größen an.

Die Spalte STAT oder S zeigt den Prozesszustand an und bedeutet:

  • R – running (Prozess wartet auf den Prozessor)
  • S – sleeping (Prozess schläft)
  • D – Prozess ist in einem ununterbrechbaren Schlaf
  • I – idle (Prozess wird gerade erzeugt)
  • L – locked (eine Seite im Hauptspeicher wurde gesperrt)
  • O – Prozess, der gerade die CPU beansprucht
  • Z – Zombie (Prozess wurde beendet, aber Elternprozess hat noch nicht aufgeräumt)
  • X – Prozess wartet auf freien Speicher
  • T – Unterbrochen (gestoppt)
  • W – Prozess ist ausgelagert

Wie kann auf den TL-WR703N Fhem installiert werden?

Dazu muss erst einmal mehr Speicher per USB-Stick bereitgestellt werden.

Dann gem. dieser Anleitung vorgehen.

Also kurz:
1. OpenWrt installieren
2. USB-Stick vorbereiten und an WR703N anschließen
3. Perl installieren
4. Fhem aus Subversion ausschecken
5. mit make install Fhem erstellen
6. nun kann Fhem gestartet werden in /usr/src/fhem mit: perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg
7. im Browser http://192.168.2.122:8083/fhem (ip anpassen) aufrufen, es kommt:

Fhem Startbildschirm auf WR-703N mit OpenWrt
Fhem Startbildschirm auf WR-703N mit OpenWrt

8. Autostart für Fhem einrichten. Datei /etc/init.d/fhem anlegen mit folgenden Inhalt:

#!/bin/sh /etc/rc.common
# FHEM Init Script
START=11
STOP=15
start() {
# cd /usr/src/fhem/
# perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg
# auf neue Verz. angepasst:
cd /etc/src/fhem/
perl /etc/src/fhem/fhem.pl /etc/src/fhem/fhem.cfg
}
stop(){
echo "shutdown" | nc localhost 7072
}

Dann noch die /etc/init.d/fhem Datei ausführbar machen und aktivieren.
chmod +x /etc/init.d/fhem
/etc/init.d/fhem enable
/etc/init.d/fhem start

Nach reboot startet nun Fhem automatisch.

9. Fhem weiter konfigurieren

10. z.B. den ersten Plot anzeigen. Dazu z.B in das Verzeichnis /fhem/www/log die eine Test-Datei temp.log mit Messwerten kopieren. In der /etc/src/fhem.cfg
diese Anpassungen machen:

define Test dummy
define FileLog_Test FileLog /usr/src/fhem/log/temp.log Test
attr FileLog_Test logtype temp4:Plot,text
attr FileLog_Test room Test
define wlTest weblink fileplot FileLog_Test:temp4:CURRENT
attr wlTest room Test

Und schon wird dieses schöne Diagramm angezeigt. Es ist noch nicht viel, da die Testdaten nur ein paar Zeilen sind:

1. Test Plot
1. Test Plot