2019: OpenHAB Rules durch NodeRed Flow auf dem Raspberry Pi ersetzen oder „Simplify your Homeautomatisation“

Homeautomatisation ist bei mir schon Jahre im Einsatz. Das Thema hat mich schon immer sehr interessierte.

Die Dinge einfacher machen. Simplify your life oder besser: Simplify your Homeautomatisation.

Da die Bude wieder mal kalt war, weil die Heizung ausgefallen ist, habe ich den Homatic Raumthermostat und auch das Heizungsventil entfernt und wieder ein Manuelles Ventil eingebaut. Das Homatikventil werde ich bei Gelegenheit mal zerlegen. Alle Jahre wieder, war die Batterie leer, dann musste alles wieder neu angelernt (gepeert, gepairt …) und Programmiert werden usw. Und das immer dann, wenn man gerade keine Zeit oder Lust hat, oder Besuch da ist und der dann im kalten sitzt. Das war auch so bei Fhem. Bin aber schon lange auf openHAB umgestiegen.

Und zum Jahreswechsel von openHAB auf openHAB 2. Da ist auch wieder alles anders. Auch einige Anpassungen in den *.rules sind nötig. Bei der Gelegenheit habe ich alle gelöscht und habe für die relevanten Rules NodeRED Flows erstellt. Das geht ziemlich gut wenn man schon mit NodeRED Erfahrung hat.

Hier mal ein Beispiel, die vorhandene Regel, die beim öffnen der Tür eine Pushover auf unsere Handys sendet. Und für die musste auch für openHAB nach openHAB 2 einige Anpassungen gemacht werden (imports, pushover Methode …).

Hier der NodeRED Flow, der für zwei Türen und ein Fenster bei jeder Aktion eine Pushover Nachricht versendet.

Die openHab2 Nodes sind echt cool. „2019: OpenHAB Rules durch NodeRed Flow auf dem Raspberry Pi ersetzen oder „Simplify your Homeautomatisation““ weiterlesen

GnuRadio Beispiel Script mit gnuradio-companion erstellen

Wenn auf einem im Netz laufenden Raspberry Pi per tcp zugegriffen werden soll, wie hier beschrieben um gnuradio Flows zu erstellen geht das durch starten von:

gnuradio-companion

Dieses kann zuvor mit sudo port install gnuradio installiert werden.

Dann den ersten Flow eines SDRs erstellen. Download des Beispiel Scriptes aus meinen GitLab Projekt. Nur noch die IP-Adresse des Pis anpassen. Es steht dort ein TODO. Oder zur Übung selbst erstellen:

Nach klick auf Start, sind die beiden Tabs mit der Zeit und der Frequenz sichtbar:

„GnuRadio Beispiel Script mit gnuradio-companion erstellen“ weiterlesen

Wie können SDR Signale vom Raspberry Pi SDR-Server per tcp im ganzen Netzwerk auf den Mac (Windows) übertragen werden?

Wir können auf dem Raspberry Pi die Signale empfangen werden und dann per tcp die Darstellung auf dem Mac (Window analog) mit gqrx durchgeführt werden. Der Raspberry Pi wird dann nicht mit GUI usw. belastet. Die Signale werden also im Netz verteilt.

Der Raspberry PI kann also zum SDR Server im Netzwerk werden und damit Funksignale an einen Client über IP senden. Dafür reicht ein einfacher DVB-T USB-Stick mit dem RTL2832U-Chipsatz. Wichtig ist beim Betrieb als Server, dass der Raspberry Pi nur das Signal empfängt und über tcp IP bereitstellt. Die eigentliche Verarbeitung, die CPU-Last kostet, erfolgt erst auf dem Client dem Mac-Rechner (Windows analog).

Auf dem Raspberry Pi das rtl_tcp installieren wie in diesem Block schon mal beschrieben. Das aktuelles Script liegt im GitLab Projekt. Dann starten mit

sudo rtl_tcp -a Adresse-des-Pi -P 48

wobei der Korrekturfaktor optional ist:

Gqrx auf dem Mac installieren über sudo port install gqrx das Gqrx installieren.

Dann gqrx starten. Es erscheint der Dialog (nachdem man auf ja geklick hat):

Dort den Verbindungsstring von oben in Device string eingeben: rtl_tcp=10.0.0.0:1234 und die anderen Parameter, es erscheint dann die GUI des gqrx Programms.

Wenn man noch nichts hört, das müsste ja bei 96.2 MHZ NDR2 sein, dann Mode und Gain wie oben auf dem Foto einstellen.

So Radio mit UKW und FM läuft. Jetzt kommen die interessanteren Frequenzen 😉

Raspberry Pi: Wie kann für ein SDR Empfänger die Frequenz Korrektur ermittelt werden um den Frequenzdrift zu kompensieren?

Da die Empfangs DVB-Sticks mit der Zeit einen Frequenzdrift haben, kann ein Korrektur-Faktor in ppm ermittelt werden. Das geht auch mit rtl_test und so brauch nicht ein extra Programm (kal) installiert werden.

Einfach rtl_test -p aufrufen und ein paar Minuten warten …

… wenn der Wert ganz aussen rechts sich nicht mehr groß ändert, kann der Faktor für diesen einen Stick verwendet werden. Das Programm dann mit Strg-C abbrechen. In meinem Fall 48 ppm.

Das kann dann bei vielen Programmen als Faktor übergeben werden, z.B. bei DUMP1090: ./dump1090 –ppm 48 –interactive

Debian Package (*.deb) auf dem Raspberry Pi mit oder ohne Abhängigkeiten (zależności) installieren

Will man *.deb Archive bzw. Programme auf dem Raspberry Pi installieren gibt es mind. zwei Möglichkeiten:

1. Installation ohne Abhängigkeiten
dpkg löst die Abhängigkeiten der zu installierenden Pakete nicht automatisch auf. Installiert man daher ein Paket, das von anderen abhängt, so kommt es zu Fehlermeldungen. Hier ein Beispiel mit dem twkaffee-0.0.1.deb, das für Testzwecke hier geladen werden kann.

Das geht dann auch schneller als mit Abhängigkeiten „Debian Package (*.deb) auf dem Raspberry Pi mit oder ohne Abhängigkeiten (zależności) installieren“ weiterlesen

Build Pipeline mit YAML Script zum erzeugen eines *.deb Archives mit Maven und jdeb für Debian auf Raspberry Pi mit GitLab

Build Pipeline mit YAML Script zum erzeugen eines *.deb Archives mit Maven für Debian auf Raspberry Pi.

Oder wie kann man ein *.deb Archive mit Maven Plugin erzeugen?
Oder wie verpackt man ein JAR in ein deb Archive, um es einfach auf einem Raspberr Pi zu installieren?
Oder wer braucht ein Template für das erzeugen von Maven Artefacten mit einer automatischen Pipeline in GitLab?
Oder wie validiere ich die Build-Scripte der Build-Pipeline?

Auf diese ua. Frage gibt dieser Blog-Artikel Auskunft.

Wir wollen eine Build-Pipeline mit mehreren Javaversionen, test und build bzw. deploy erstellen. Hier der Flow der Pipeline:

So sieht die Pipeline mit den drei Stages aus: „Build Pipeline mit YAML Script zum erzeugen eines *.deb Archives mit Maven und jdeb für Debian auf Raspberry Pi mit GitLab“ weiterlesen

Raspberry Pi: Der Kaffee (кофе) ist fertig

Habe ja schon einige Artikel über die Erfassung des Kaffee قهوة  verbrauches mit dem Raspberry Pi geschrieben. Jetzt aber mal eine kleine Auswertung  nach 612 Tage oder fast 2 Jahren. Erfasst wurden 2467 Tassen an 555 Tagen. Das macht einen Durchschnitt von etwas mehr als 4 Tassen Kaffee pro Tag die gekocht wurden, Tendenz steigend, aber nicht nur von mir getrunken wurde. Hier die ganzen Messwerte.

Details zum Aufbau mit Pushover benachrichtigung siehe in diesen Artikel.


Java 8 Quickie: Zeitzonen Umwandlung mit ZonedDateTime: UTC nach Europas Zeitzone

Zeitzonen

Manchmal hat man Zeitangaben z.B. aus IOT Geräten in der Form eines Strings „2018-12-10 12:14:15 UTC“. Nun müssen die Zeitangaben die in UTC verwendet werden in die lokale Zeitzone für Europa/Berlin umgewandelt werden. Das ist in der Regel eine Stunde plus. Wie geht das aber mit der Java 8 API?

„Java 8 Quickie: Zeitzonen Umwandlung mit ZonedDateTime: UTC nach Europas Zeitzone“ weiterlesen

Java 8 Quickie: Alle Zeitzonen mit getAvailableZoneIds mit Java ermitteln

Zeitzonen?

Wie können alle Zeitzonen mit Java ermittelt werden? Das geht mit der Methode getAvailableZoneIds der Klasse ZoneId. Die Methode ist thread save und der Set kann zukünftig noch erweitert werden. Bei mir ist er heute 600 Einträge (IDs) groß, wie dieser JUnit Test zeigt:

@Test
public void testGetAlleZeitzonen(){
List zeitZonen = new ArrayList<>(ZoneId.getAvailableZoneIds()); zeitZonen.stream().sorted().forEach(zone -> System.out.println(zone)); assertEquals(600, zeitZonen.size());
}

Das sind die Zeitzonen IDs:

„Java 8 Quickie: Alle Zeitzonen mit getAvailableZoneIds mit Java ermitteln“ weiterlesen

Jubiläum: 20 Jahre Homepage wenzlaff.de!

Heute vor 20 Jahren, am 1.12.1998 ging die Domain wenzlaff.de zum ersten mal ans Netz. Wie die Zeit vergeht.

Es war eine statische Webseite mit Freeware und Sprüche Datenbank mit Newsletter und einigen C++ und Java Programmen zum kostenlosen Download aus meiner Hand. Hier ein etwas unvollständiges Bildschirmfoto, mehr habe ich leider nicht mehr gefunden:

Aber auch schon lange vor dieser Zeit, hatte ich eine Homepage, die aber dann auf den Servern der UNI-Bremen kostenlos gehostet wurde. Da hatte ich als Informatiker einen Zugang mit Akustikkoppler mit 300 Baud und Lochkarten hatten wir da auch noch. Das war wenigstens etwas zum anfassen, batches mit Lochkarten schreiben, cool!

Und es gab keine Werbung im Internet.

Die schöne alte Zeit. Und in der Zwischenzeit gab es immer mal neue Technologie. Vom statischen html zum xhtml und JavaScript über einen eigenen Java html Generator mit Templates bis heute zu den Content-Management-System mit eigener Datenbank.

Bis heute konnte ich auch auf dieser Webseite immer auf Werbung verzichten. Juhu …

Wie soll es weiter gehen? Gibt es noch Themen nach über 1000 Beiträgen? Ideen habe ich noch genug, was fehlt ist die Zeit!

In diesem Sinne, vielen Dank an alle Leser und für das viele Feedback (die über 1000 Kommentare mit Kommentarfunktion habe ich ja abgeschaltet…DSGVO läßt grüßen) das auch nach wie vor erwünscht ist, aber eben über E-Mail 😉

Thanks Mindmap
Danke Mindmap

Keine Flugzeuge in Hannover (EDDV, HAJ)? Liegt das an der eingestellten CEBIT?

Mein Raspberry Pi empfängt seit ein paar Stunden keine Flugzeudaten mehr:

So ein Bild habe ich noch nie gesehen:

Was war da los? Ist der Pi abgeraucht in Haj (EDDV)?

Dann mal bei der Gelegenheit ein update und reboot.

Ah, welche Version habe ich noch am laufen?

cat /etc/os-release
PRETTY_NAME=“Raspbian GNU/Linux 8 (jessie)“
NAME=“Raspbian GNU/Linux“
VERSION_ID=“8″
VERSION=“8 (jessie)“
ID=raspbian
ID_LIKE=debian
HOME_URL=“http://www.raspbian.org/“
SUPPORT_URL=“http://www.raspbian.org/RaspbianForums“
BUG_REPORT_URL=“http://www.raspbian.org/RaspbianBugs“

Ah, das alte Jessie. Das date ich aber mal nicht ab. Nur ein „Keine Flugzeuge in Hannover (EDDV, HAJ)? Liegt das an der eingestellten CEBIT?“ weiterlesen

Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions und Filter

Wenn man mit Lambda über eine Collection iteriert, kann man auch gleich einen Filter verwenden. Was das mit der 20 zu tun hat, kommt am 1.12.2018 hier auf dem Blog 😉

Jetzt aber hier erst mal ein Beispiel zum Filter:

Und die nötige Mindmap BE Klasse: „Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions und Filter“ weiterlesen

Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions

Ab Java 8 kann mit der forEach Methode über einen Stream iteriert werden und das mit Lambdas.

Hier mal eine Gegenüberstellung als JUnit Test:

Und das Mindmap BE: „Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions“ weiterlesen

Java Quickie: Ist eine Domain erreichbar?

Mit der Methode isReachable aus der Klasse InetAddress kann seit Java 1.5 leicht überprüft werden (via Echo) ob ein Rechner bzw. Domain erreichbar ist oder „lebt“. Als Parameter wird die Timeout Zeit in Millisekunden übergeben, hier also 1000 für eine Sekunde:

Eine IOException gibt es bei Netzwerkfehler. Und eine IllegalArgumentException wenn ein negativer Wert für den Timeout angegeben wird, das macht man ja auch nicht 😉

Java Quickie: Liefere die IP vom Domain Namen

Wie kann die IP von einem Domain Namen ermittelt werden? Das geht mit einer Zeile InetAddress.getByName aus dem java.net.InetAddress Package schon seit JDK 1. Wenn die Domain unbekannt ist gibt es eine UnknownHostException wie diese JUnit Tests zeigen:

Wie kann auf einem Raspberry Pi angeschaut 觀看 werden, was in einem tar.gz Archive ist?

Wie kann angeschaut werden, was in einem Archive ist? Mit tar.


Z.b.

tar -tvf das-tar-archive.tar.gz

-t = listet den Inhalt eines Archivs auf
-v = verbose (ausführlich), listet verarbeitete Dateien ausführlich auf
-f = file, verwendet Archivdatei oder Geräte-ARCHIV
„Wie kann auf einem Raspberry Pi angeschaut 觀看 werden, was in einem tar.gz Archive ist?“ weiterlesen

Raspberry Pi FreeMarker Java and Maven Project goes to 去 يذهب إلى GibLab and not to GitHub

Bisher hatte ich alle öffentlichen Repositorys in GibHub liegen. GitHub ist nun aber an Microsoft verkauft worden. Wenn das kein Grund ist, das nächste Repo mal in GitLab anzulegen. GitLab hat auch den Vorteil, das private Repos kostenlos sind und …

Also das FreeMarker-Maven-Java-Projekt nach GitLab hochladen.

Was etwas suche und Anpassung benötigte, war der CI-Prozess. Aber wenn man die Syntax der .gitlab-ci.yml kennt, geht es mit zwei Zeilen.
Also einen Docker-Container mal mit Java 11 und Maven, wie folgt erstellt: „Raspberry Pi FreeMarker Java and Maven Project goes to 去 يذهب إلى GibLab and not to GitHub“ weiterlesen

Wie können auf einem Raspberry Pi die 3 größten Dateien in einem Verzeichnis rekursiv ausgeben werden? Oder wie können alias angelegt werden?

Wie können auf einem Raspberry Pi die 3 größten Dateien in einem Verzeichnis rekursiv ausgeben werden? Z.B. aus dem aktuellem Verzeichnis mit

Das kann man sich aber schwer merken. Deshalb legen wir uns ein bash Alias an mit:

Das wird aber nach einem restart vergessen. Deshalb tragen wir diese Zeile in der ~/.bash_aliases Datei ein. Wenn es sie noch nicht gibt, legen wir sie an mit diesem Inhalt:

Schon können wir auch nach einem Restart dudrei eingeben und erhalten die 3 größten Dateien im Verzeichnis, z.B. „Wie können auf einem Raspberry Pi die 3 größten Dateien in einem Verzeichnis rekursiv ausgeben werden? Oder wie können alias angelegt werden?“ weiterlesen

Es muss ja nicht immer Apache Velocity sein, Apache FreeMarker geht auch!

Es gibt unterschiedliche Template Engine, wie zum Beispiel Apache Velocity aber auch Apache Freemarker.

Bei der Verwendung von Templates, kann man sich einfach auf die Präsentation der Daten konzentrieren. Das läuft nach dem MVC (Model View Controller) Pattern. Die Templats können auch über diesen Online FreeMarker Template Tester ohne Aufwand getestet werden.

Heute mal ein kleines Beispiel, mit Freemarker. Wir wollen Verzeichnisse nach Mindmaps durchsuchen, und alle gefundenen Mindmaps in eine HTML-Seite ausgeben.

Fangen wir mit einem JUnit Test an: „Es muss ja nicht immer Apache Velocity sein, Apache FreeMarker geht auch!“ weiterlesen