Archive for the ‘Linux’ Category.

FHEM: serielle Devices über Netzwerk anschliessen

Zu Testzwecken brauche ich ab und an neben meinen Haupt FHEM System ein zweites FHEM System, zB auf meinem Netbook. Nun sind drei Devices (nanoCUL 433MHz, nanoCUL 868MHz und ein Jeelink) direkt am Hauptserver über USB (serial) angeschlossen. Wenn ich diese in einem Testsystem benötige, müsste ich die Geräte vom Hauptserver trennen. Wie praktisch wäre es, wenn ich diese USB Devices über das Netzwerk anbinden könnte, so wie dies über EspLink mit dem angschlossenen Arduino Nano mit SignalDuino Firmware möglich ist.

Nun zur Anbindung von seriellen Geräten an das Netzwerk gibt es für Linux ser2net. Leider ist die Original-Version nicht multi-Client tauglich und würde nur einem Client die Verbindung erlauben. Bei EspLink sind jedoch mehrere Clients möglich. Obwohl die meisten ser2net Quellen nur einen Client unterstützen, gibt es ein oder zwei Quellen, deren Implementierung mehrer Clients unterstützen.

Nachdem ich einen Quellcode von ser2net mit multi-Client Support geladen und nach geringen Modifikationen auch erfolgreich implementieren konnte, kann ich nun alle Geräte, die am Haupt FHEM Server angeschlossen sind auch über mein Netzwerk nutzen. Die Geräte mussten nur in der ser2net conf Datei mit verschiedenen Netzwerkports eingetragen werden:

2301:raw:0:/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9YDLRJV-if00-port0:38400,8DATABITS,NONE,1STOPBIT
2302:raw:0:/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A94BBD91-if00-port0:38400,8DATABITS,NONE,1STOPBIT

In der fhem.cfg wurden die Geräte entsprechend umdefiniert:

#define nanoCUL433 CUL /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9YDLRJV-if00-port0@38400 1234
define nanoCUL433 CUL 192.168.0.40:2301 1234
#define nanoCUL868 CUL /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A94BBD91-if00-port0@38400 3421
define nanoCUL868 CUL 192.168.0.40:2302 4321

Die original EspLink Anbindung des Arduino Nano mit SignalDuino Firmware:

define sduinoIP SIGNALduino 192.168.0.99:23

Mit diesen Änderungen kann ich diese USB Geräte nun auch über das Netzwerk benutzen.

Meine Abwandlung von ser2net findet sich auf Github.

Enigma2 OpenEmbedded Enhanced Movie Center Trashfolder CleanUp

We own a great VuPlus Solo2 Linux based Satelit Receiver. We record some series and films and then delete them. The deleted media files are not deleted directly when using EMC to view and delete. The media files are moved to a trash folder first and should be automatically deleted after x days. But that does not work for whatever reason.

Recently I checked the trash folders I found, as I wondered why the box’s hard disk is getting filled up. And I found many, many old ‘deleted’ files, that are not removed from the hard disk.

I decided to write my own script (/home/root/deltrasholder7days.sh, yes, there is a typo ;-)) ) to finally remove ‘deleted’ files after 7 days. The script was then added to the root’s crontab.

#!/bin/sh
# delete old files
# delete trash files older than 7 days
/usr/bin/find /mnt/hdd/movie_trash -type f -mtime +7 -delete
/usr/bin/find /mnt/hdd/movie/trashcan -type f -mtime +7 -delete
cd /mnt/hdd/movie_trash/
rm last_cleanup*
touch last_cleanup_$( date '+%Y-%m-%d_%H-%M-%S' )
cd /mnt/hdd/movie/trashcan/
rm last_cleanup*
touch last_cleanup_$( date '+%Y-%m-%d_%H-%M-%S' )

The script deletes all files at /mnt/hdd/movie_trash and /mnt/hdd/movie/trashcan with a modification date of 7 days before current day. Then it adds a file with a timestamp as name to let me know, that the script has worked at what time.
… and the crontab (/etc/cron/crontabs/root):

1 1 * * * /home/root/deltrasholder7days.sh

This starts the script every day at 1pm.

That’s all, thank’s to the author of the find utility.

WICD does not reconnect after suspend: obtaining IP address

My Debian 8 Jessie installed Acer Aspire One netbook had problems reconnecting after suspend resume.

WICD showed obtaining IP address for a long time and finally gave up or so. Tried dhclient and dhcpcd, no change. Tried debug mode, which results in the netbook sometimes did not resume to the OS and I had to do a hard reset :-(. Disabled debug logging option in wicd.conf again. Could not live with hard resets.

Changed dhcp server from integrated one in router (tested with different models) to my Linux Debian SID server, no change.

I added the option nolink (for buggy interfaces, found in man dhcpcd and dhcp.conf and inspried by LinuxQuestions.Org) to /etc/dhcpcd.conf and now WICD reconnects fine and fast after setting dhcpcd as external DHCP Client. WICD is version 1.7.24.

Issue solved 🙂

UPDATE 31.8.2016:

Bad news: WICD still does not resolve DHCP address. I mostly have to Cancel the ‘Obtaining IP address…’ process and manually connect. Some times it connects on first time but some times on second or thrird attempt.

Now tested connman. But it behaves alsoe strange. After first install everything looked fine. But after reboot it stated no services available or other strange errors about no wifi and sh.. After some more tests I relaized that connman is not really integrated into Debian. Maybe it is good for ArchLinux? Fortunately I always got a connection using ifdown/ifup for wlan0.

Finally I switched to network-manager and network-manager-gnome. And that impressed me. It connects very, very fast. Hopefully that will be reliable. Suspend and resume also works fine without fiddeling in any conf files so far.

BTW: I am running two Cisco APs with same SSID/WPA2 passphrase, so the devices can roam (no AP controller, just the Cisco APs). Possibly that makes WICD nervous?

FHEM: Flugdaten mit py1090 loggen

Nun kann ich ja Flugdaten mit Hilfe von Jonas Lieb’s py1090 und adsbox in FHEM aufzeichnen. Dies wollte ich immer um die Aufzeichnung des aktuellen Geräuschpegels erweitern. Das Ergebnis sind Erweiterungen der py1090 Klassen und bessere python Ausgaben der aktuellen Daten.

Angefangen habe ich mit einfachen print-Anweisungen und einer seriellen Verbindung zu einem Arduino Nano, der als ADC Wandler für den Geräuschpegel diente. Nun läuft ein nodeMCU mit espEasy. Dadurch (wireless) kann ich den Geräuschpegel ‘Sensor’ unabhängig positionieren. Die Daten lese ich in Python über json vom espEasy. Die aktuellen ‘Lärm’-Daten werden alle x Minuten über einen Python Telnet Client Code an FHEM übermittelt.

Aufbau

Geräuschpegel-Sensor => nodeMCU mit ESPeasy =(WLAN)=> Python Script => FHEM-Logfile + Telnet FHEM

Anfangs habe ich versucht den ‘Sender’-Code direkt in LUA auf dem nodeMCU zu schreiben. Man stösst aber sehr schnell an Speichergrenzen und der Code läuft sehr unzuverlässig. Dagegen ist ESPeasy total einfach einzurichten und bietet direkt einen ADC Sensor. Nun kann man den Wert via MQTT weiterverarbeiten. Da ich aber den Geräuschpegel zusammen mit dem aktuell ‘nächsten’ Flugzeug versenden will, lese ich die Daten via JSON von ESPeasy in Python und versende sie dann zusammen mit den Flugzeugdaten via Telnet an FHEM.

Das erste Python Script verwendet nur einfache Print-Ausgaben für die aktuellen Aktivitäten. Der Inhalt scrollt ständig über den Bildschirm und man hat keine Übersicht.

dump1090

Daher habe ich den Python-Code so geändert, dass er zur Ausgabe curses verwendet:

dump1090term

Leider ‘zerschiesst’ es ab und an den Bildschirm und die Hervorhebung für das ‘nächste’ Flugzeug erstreckt sich dann auch mal über andere Zeilen. Ausserdem kann man das Terminal Fenster nicht in der Größe ändern. Meistens bricht dann der Curses Code und das Python Script ab.

Dann habe ich es noch mit der Python blessings Erweiterung versucht:

dump1090term_blessings

Nun kann man das Terminalfenster zwar im laufenden Betrieb in der Größe ändern, allerdings muß ich die Ausgabe noch besser anpassen (Kopfzeilen).

Ich habe in diesem Python Projekt möglichst mit Klassen und externen Modulen zu arbeiten. Dadurch kann man das Ganze leicht erweitern und anpassen.

Source Code