Was sagt Google Trend zu diesem Vergleich: Cubieboard vs. Raspberry Pi
Der Sieger, ganz eindeutig der Raspberry Pi!

Wenzlaff.de – Rund um die Programmierung
mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Blender, KI, Statistik, Krypto und Blockchain
Alles was mit Hardware zu tun hat.
Was sagt Google Trend zu diesem Vergleich: Cubieboard vs. Raspberry Pi
Der Sieger, ganz eindeutig der Raspberry Pi!
Wie können Temperatur, LaCrosse und andere Sensoren mit JeeLink abgefragt und mit Node-RED weiter verarbeitet werden. Den JeeLink mit diesem LaCrosseITPlusReader Sketch flashen:
Dann noch für Node-RED den Node serial installieren. Den serialport Node wie folgt installieren:
|
1 |
npm install node-red-node-serialport |
Hier der ganze Flow, der die Daten auf der Debug-Konsole ausgibt:
Diese Einstellungen sind für den Node nötig: „Raspberry Pi: Wie können Daten mit JeeLink mit Node-RED eingelesen werden?“ weiterlesen
Quicktest des 5 Euro Router:
Erst mal checken ob ein Zugang per Telnet geht. Dazu den Router mit Strom über den kleinen USB-Port (weißes Kabel) versorgen und den Netzwerkanschluss anklemmen. Es leuchtet nun die blaue LED.
Auf dem Gerät sind die default Zugangsdaten angebracht:
Ok, dann mal los, „Quicktest: 5 Euro Router – A5-V11 3G/4G Router“ weiterlesen
Soeben ist mein Router mit Kabel für 5 Euro aus der Bucht (China) inkl. Versand eingetroffen. Hat zwar ein paar Wochen gedauert, aber bei dem Preis kann man auch ein paar Wochen warten. Es ist auch eine Anleitung in chinesisch und englisch dabei.
Hier ein paar Daten des SoC – Mediatek/Ralink RT5350F MIPS processor @ 360MHz mit System Memory 32MB RAM (W9825G6EH-75), 4MB NAND flash (Pm25LQ032) „3G/4G Router (A5-V11 3G/4G Router) für 5 Euro inkl. Versand aus der Bucht“ weiterlesen
Habe nun mal ein anders Netzteil verwendet, aber auch nach 3 Tagen ist der Cubi wieder abgestürzt. An der Stromversogung kann es also wohl nicht liegen!
Dann habe ich mir mal den Speicherverbrauch angeschaut, da ich die Vermutung hab, das der Apache2 oder die Mysql den Speicher vollaufen lassen und es zu einem Speicherüberlauf mit Absturz kommt.
Ich habe nun mal Testweise einen CRON Job angelegt, der einmal am Tag ein Reboot durchführt, in der Hoffnung das er dann länger als 3 Tage läuft. Das behebt zwar nicht die Ursache, aber wenn es läuft ist das mal ein Workaround (siehe Bild mit der Telefonzelle) … 😉
Der Cron-Job kann wie folgt angelegt werden und zwar mit root Zugang:
|
1 |
crontab -e |
und in der letzten Zeile folgenden Eintrag ergänzen. „Auf der Suche, warum der Cubieboard mit Debian Jessie nach ein paar Tagen abstürzt. Teil 3: Workaround tägliches rebooten“ weiterlesen
[bpmn url=“http://blog.wenzlaff.de/wp-content/uploads/2016/08/raspberry-pi-update.bpmn“]
Wie können Flugdaten von MQTT Servern empfangen und in openHAB angezeigt werden? Hier ein Beispiel, wie von einem öffentlichen Testserver (test.mosquitto.org) die Anzahl von Flugzeuge in Hannover per MQTT empfangen, und alle 5 Minuten in realtime in openHAB angezeigt wird.
Das geht ganz einfach mit dem MQTT-Binding das in das addon Verzeichnis kopiert werden muss ( Datei: org.openhab.binding.mqtt-1.8.3.jar ). Dann den MQTT-Broker in der openhab.cfg eintragen: „Wie können Flugdaten von MQTT Servern empfangen und in openHAB angezeigt werden?“ weiterlesen
Auf dem Raspberry Pi läuft openHAB. Einmal am Tag bekomme ich per Pushover eine Nachricht mit dem Systemstatus auf das Handy gesandt:
Ups, da ist ja die Systemtemperatur nach dem Komma etwas lang.
Obwohl der Eintrag in der items Datei wie folgt lautet:
|
1 2 |
// Über ein Script die Systemtemperatur des Raspberry Pis auslesen Number systemTempPi "System Temperatur [%.1f °C]" (System) { exec="<[./configurations/scripts/getSystemTemp.sh:600000:REGEX((.*?))]" } |
Damit man die OpenHAB Konfigurationsdateien einfach bearbeiten kann, gibt es den openHAB Designer (aktuelle Version 1.8.3). Der kann von dieser Seite für den Mac, Linux oder Windows kostenlos geladen werden. Diese Datei dann installieren.
Tip: Erscheint bei der Installation bei Mac OS X eine Fehlermeldung: „… das Archive bzw. das Programm ist defekt und soll in den Papierkorb verschoben werden…“
liegt es daran, das das Archive nicht signiert ist. Dann wählen Sie „Apple“ > „Systemeinstellungen“
und klicken Sie auf „Sicherheit“ und danach auf „Allgemein“ für die App zulassen.
Dann noch einmal versuchen, und es müsste laufen. Die Einstellung kann dann wieder zurück gesetzt werden, wenn der Designer einmal erfolgreich gestartet wurde.
Den openHAB Designer nun starten, es erscheint eine schöne auf Eclipse basierende GUI.
Da der openHAB Server auf einem Raspberry Pi läuft, muss das OpenHAB Konfigurationsverzeichnis /etc/openhab/configurations noch Freigegeben werden um vom Mac aus darauch zuzugreifen. Zu dem openHAB Designer erst mal eine Mindmap
„Wie wird der openHAB Designer 1.8.3 für einen Mac optimal installiert mit Freigaben für einen Raspberry Pi?“ weiterlesen
Manche SDKarten die im Raspberry Pi laufen, hinterlassen den Eindruck, das sie defekt sind. Das kann man aber auch mit einem Mac überprüfen. Nachdem die SDKarte in den Kartenleser gesteckt wird, kann für den ersten Test, erst einmal die Karte gelöscht werden.
Dazu das Festplattendienstprogramm aufrufen. Dann links, unter den Punkt APPLE SD Card Reder die darunter liegende SDKarte selektieren und oben in der Menüleiste auf Löschen klicken.
Dann als Format „MS-Dos-Dateisystem (FAT) “ wählen und auf den Button „Sicherheitsoptionen“ klicken.
Hier können jetzt die Anzahl der Löschversuche eingestellt werden. Hier für einen ausführlichen Test, den Schieber ganz nach links schieben. Das heißt es wird 7 Mal gelöscht.
Auf OK, klicken und dann auf „Löschen„. Das kann dann für eine 16 GB SDKarte schon mal 3 Stunden dauern.
Während des löschen, kann auch parallel dazu die Aktivitätsanzeige gestartet werden. Wenn keine anderen aufwendigen Schreib/Lese Aktivitäten laufen, kann die Geschwindigkeit der Karte abgelesen werden:
Hier bei mir zw. 9-11,4 MB/s das ist für eine Class 10 Karte ok.
Wen das alles ohne Fehler läuft, ist der erste Test der Karte schon mal ok. Hier mal das Ergebniss:
Dann gibt es noch ein kostenloses externes Programm mit GUI für den Mac, welches alle Sektoren der Karte beschreibt und wieder einließt. Das f3x Programm:
Da kann einfach die SDKarte ausgewählt werden und auf „Start Test“ geklick werden. Der Download des Programmes geht hier.
Wenn alles OK ist, gibt das Programm diesen Dialog aus:
Ich bevorzuge aber das Kommandozeilen Programm f3 da bekommt man dann eine schöne Logdatei bei dem Aufruf:
./log-f3wr 16-GB-SDKarte-.log /Volumes/SDKARTE/
|
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 |
Free space: 14.97 GB Creating file 1.h2w ... OK! Creating file 2.h2w ... OK! Creating file 3.h2w ... OK! Creating file 4.h2w ... OK! Creating file 5.h2w ... OK! Creating file 6.h2w ... OK! Creating file 7.h2w ... OK! Creating file 8.h2w ... OK! Creating file 9.h2w ... OK! Creating file 10.h2w ... OK! Creating file 11.h2w ... OK! Creating file 12.h2w ... OK! Creating file 13.h2w ... OK! Creating file 14.h2w ... OK! Creating file 15.h2w ... OK! Free space: 0.00 Byte Average writing speed: 9.83 MB/s SECTORS ok/corrupted/changed/overwritten Validating file 1.h2w ... 2097152/ 0/ 0/ 0 Validating file 2.h2w ... 2097152/ 0/ 0/ 0 Validating file 3.h2w ... 2097152/ 0/ 0/ 0 Validating file 4.h2w ... 2097152/ 0/ 0/ 0 Validating file 5.h2w ... 2097152/ 0/ 0/ 0 Validating file 6.h2w ... 2097152/ 0/ 0/ 0 Validating file 7.h2w ... 2097152/ 0/ 0/ 0 Validating file 8.h2w ... 2097152/ 0/ 0/ 0 Validating file 9.h2w ... 2097152/ 0/ 0/ 0 Validating file 10.h2w ... 2097152/ 0/ 0/ 0 Validating file 11.h2w ... 2097152/ 0/ 0/ 0 Validating file 12.h2w ... 2097152/ 0/ 0/ 0 Validating file 13.h2w ... 2097152/ 0/ 0/ 0 Validating file 14.h2w ... 2097152/ 0/ 0/ 0 Validating file 15.h2w ... 2041216/ 0/ 0/ 0 Data OK: 14.97 GB (31401344 sectors) Data LOST: 0.00 Byte (0 sectors) Corrupted: 0.00 Byte (0 sectors) Slightly changed: 0.00 Byte (0 sectors) Overwritten: 0.00 Byte (0 sectors) Average reading speed: 18.45 MB/s |
Immer noch auf der Suche, warum der Cubi nach ein paar Tagen abstürzt, wie hier schon im Teil 1 beschrieben.
Dann erscheint im /var/log/syslog jede Stunde noch dieser Eintrag:
|
1 |
ntpd[549]: frequency file /var/lib/ntp/ntp.drift.TEMP: Permission denied |
Der ntp Client läuft unter dem User ntp wie htop zeigt.
Ein
|
1 |
service ntp status |
gibt die Meldungen auch aus:
|
1 2 3 4 5 6 7 8 9 |
● ntp.service - LSB: Start NTP daemon Loaded: loaded (/etc/init.d/ntp) Active: active (running) since Fri 2016-07-22 15:03:19 CEST; 18h ago Process: 508 ExecStop=/etc/init.d/ntp stop (code=exited, status=0/SUCCESS) Process: 529 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS) CGroup: /system.slice/ntp.service └─549 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -c /var/lib/ntp/ntp.conf.dhcp -u 104:110 Jul 22 21:03:43 server ntpd[549]: frequency file /var/lib/ntp/ntp.drift.TEMP: Permission denied |
Ok, dann kurzerhand NTP entfernen „Auf der Suche, warum der Cubieboard mit Debian Jessie nach ein paar Tagen abstürzt. Teil 2: Fix NTP: frequency file /var/lib/ntp/ntp.drift.TEMP: Permission denied“ weiterlesen
Es muss nicht immer MQTT.fx sein um MQTT Daten zu empfangen. Der Java-Client Mqtt-Spy hat viel mehr Optionen. Es braucht nur das JAR von Github geladen zu werden und dann ein doppelklick auf das JAR, und schon läuft der MQTT-Client unter Mac, Windows, Linux …
Es braucht nur der Server test.mosquitto.org und als Topic /Anzahl/Flugzeuge/Hannover eingegeben zu werden und schon werden meine Flug-Daten die von einem Raspberry Pi empfangen werden alle 5 Minuten aktualisiert.
„Flugdaten aus Hannover von einem Raspberry Pi per MQTT mit Mqtt-Spy empfangen“ weiterlesen
Fussball? Wie kann man per Java einen MQTT Client mit Paho schreiben, der z.B. die Anzahl Flugzeuge in Hannover anzeigt? Und das innerhalb der ersten Halbzeit, da nur 2 Klassen benötigt werden.
Mein Raspberry Pi sendet an den öffentlichen Testserver test.mosquitto.org unter den Topic /Anzahl/Flugzeuge/Hannover alle 5 Minuten die aktuelle Anzahl, so das dieses Beispiel jeder nachvollziehen kann.
Hier die Architektur:
Wir brauchen zuerst ein Eclipse Maven Projekt mit Java 1.8 mit dieser pom.xml und einen Eintrag des Paho Repo, da es in Maven Central nicht vorhanden ist: „Besser als Fussball: MQTT Java Client mit Paho“ weiterlesen
Nach dem ssh Login, kommt bei mir diese oder ähnliche Fehlermeldungen auf der Konsole:
|
1 2 3 |
-bash: /usr/share/bash-completion/bash_completion: line 1942: unexpected EOF while looking for matching `"' -bash: /usr/share/bash-completion/bash_completion: line 1957: unexpected token `�' in conditional command -bash: /usr/share/bash-completion/bash_completion: line 1957: syntax error: unexpected end of file |
Wie können die Fehler gefixt werden?

Einfach das bash_completion Package neu installieren mit:
|
1 |
sudo apt-get install bash-completion |
Schnell und einfach!
Normalerweise habe ich die Antenne drinnen. Da es heute aber so schön ist, wird sie mal draußen angebracht
und schon ist der Empfang fast doppelt so groß und fast 300 Km weit:
oder hier
Hier auf Twitter kann jeder in Echtzeit mit 5 Minuten Verzögerung die Anzahl ablesen, da ein Raspberry Pi über node-red die Ergebnisse postet:
Anzahl #Flugzeuge in #Hannover (#HAJ #EDDV) 51 angefragt per #ADSB am Sat Jun 04 2016 17:26:28 GMT+0200 (CEST) per #Raspberry #Pi
— Thomas Wenzlaff (@twusb) 4. Juni 2016
Wie können Flugdaten mit dem Raspberry PI und node-RED auf Twitter alle 5 Minuten ausgegeben werden? Und wie kann eine einfach Gui erstellt werden?
Mit diesen Node-RED Flow, werden die Flugdaten von thinkspeak.com eingelesen (die Daten kommen von eine meiner Raspberry Pis und können frei verwendet werden) und alle 5 Minuten an Twitter gesendet.
Die Funktion die den Text für Twitter erstellt, kann diesen Inhalt haben:
|
1 2 3 4 5 6 7 |
var newMsg = { payload: msg.payload + " #Flugzeuge im Umkreis von #Hannover (#HAJ #EDDV #Airport) Abfrage per #ADSB am " + new Date() + " mit #Raspberry Pi" }; return newMsg; |
Hier die node-red GUI, die über die Url http://pi-adresse:1880/ui/ geöffnet wird:
Hier werden an Twitter die Daten alle 5 Minuten hingesendet, bitte folgen:
Anzahl #Flugzeuge in #Hannover (#HAJ #EDDV) 18 angefragt per #ADSB am Tue May 31 2016 21:50:48 GMT+0200 (CEST) per #Raspberry #Pi
— Thomas Wenzlaff (@twusb) 31. Mai 2016
Hier kann der Flow importiert werden:
Einen solchen Flow mit node-RED erstellen:

Die Ausgabe der Flugzeuge in Hannover wird rechts im Debug Reiter und auf der Console des Raspberry Pi ausgegeben.

Oder über import - clipboard diesen Flow aus der Datei flow.json importieren: „Raspberry Pi mit node-red: Wie können Flugdaten automatisch alle 5 Minuten abgefragt werden?“ weiterlesen
Meine Hausautomatisation die auf einen Raspberry Pi mit Debian Linux läuft, arbeitet mit Openhab.
Wie können da nun die Transpondersignale von den Flugzeugen in Hannover (EDDV) angezeigt werden?
Das geht mit der REST Schnitstelle von ThinkSpeak.
So sieht die Seite von Openhab aus.
Oben wird die aktuelle Anzahl von Flugzeugen und der Zeitpunkt der Daten die gerade empfangen werden angezeigt. Eine automatisch Aktualisierung ist bei mir auf 15 Minuten eingestellt. Der Feed wird alle 5 Minuten aktualisiert und wenn man die letzten Daten angezeigt bekommen will, braucht man nur auf den „aktualisieren“ Schalter klicken.
Die Daten kann jeder abfragen, da die API von ThinkSpeak öffentlich ist!
Was ist nötig?
Ein Eintrag in der Sitemap Datei:
|
1 2 3 4 5 6 7 8 9 10 11 |
Frame { Group item=gFlug label="Fluginfos" icon="flugzeug"{ Frame label="Hannover HAJ (EDDV)" { Text item=flugzeugeAnzahl icon="flugzeug" Text item=flugzeugeUpdate icon="flugzeug" Switch item=flugzeugeAktualisieren icon="flugzeug" Text item=flugzeugeZeitpunkt icon="flugzeug" } } } |
Eine neue Datei im Items Verzeichnis Flug.items mit diesm Inhalt:
|
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 |
// // Steuerung des Fluginformationen via OpenHAB // // (c) 2016 Thomas Wenzlaff http://www.wenzlaff.info // // Liefert aus den Feed die Anzahl Flugzeuge als Json Feed // https://api.thingspeak.com/channels/44177/feeds/last.json // // z.B. // {"created_at":"2016-05-16T14:05:02Z","entry_id":80051,"field1":"15"} Group gFlug // alle 15 Minuten abfragen String flugzeugeAnzahl "Anzahl Flugzeuge [%s]" { http="<[https://api.thingspeak.com/channels/44177/feeds/last.json:900000:JS(getAnzahlFlugzeuge.js)]" } // Zeitpunkt der letzten aktualisierung des Feeds String flugzeugeUpdate "Letztes Feed update [%s]" // Zeitpunkt der letzen aktualisierung String flugzeugeZeitpunkt "Letzte aktualisierung [%s]" // Schalter zum aktualisieren der Anzahl der Flugzeuge Switch flugzeugeAktualisieren "aktualisieren" |
Eine neue Datei im Transform Verzeichnis mit Namen getAnzahlFlugzeuge.js mit diesem Inhalt
|
1 |
JSON.parse(input).field1; |
Und noch eine Flug.rules im Rules Verzeichnis, die bei klick auf den Schalter aktiv wird:
|
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 |
import org.openhab.core.library.types.* import org.openhab.model.script.actions.* import java.util.Date import java.text.SimpleDateFormat // // Fluginfos für OpenHAB // // (c) 2016 Thomas Wenzlaff http://www.wenzlaff.info // //------------------------------------------------------------------------ // Aktualisiert die Fluginfos, d.h die Anzahl der Flugzeuge aus ThingSpeak //------------------------------------------------------------------------ rule "Aktualisiert die Fluginfos von ThingSpeak" when Item flugzeugeAktualisieren received command ON then logInfo("Flug","aktualisiere Fluginfos ...") var String result = sendHttpGetRequest("https://api.thingspeak.com/channels/44177/feeds/last.json") // {"created_at":"2016-05-16T16:10:02Z","entry_id":80076,"field1":"11"}' by the function '$.field1' logInfo("Flug", "nur das Ergebnis der Abfrage: " + result) var String anzahl = transform("JSONPATH", "$.field1", result) logInfo("Flug", "Anzahl der Flugzeuge, update auf: " + anzahl) var String createdAt = transform("JSONPATH", "$.created_at", result) logInfo("Flug", "Letztes update um: " + createdAt) // aktualisierungs Datum setzen flugzeugeUpdate.postUpdate(createdAt) // aktualisiere Anzahl der Flugzeuge flugzeugeAnzahl.postUpdate(anzahl) // Schalter wieder zurücksetzen flugzeugeAktualisieren.postUpdate("OFF") var SimpleDateFormat df = new SimpleDateFormat( "HH:mm:ss dd.MM.YYYY" ) var String timestamp = df.format( new Date() ) flugzeugeZeitpunkt.postUpdate(timestamp); end |
Und noch das von mir erstellte Icon des Flugzeuges:
Dies super Icon kann kostenlos von hier geladen und frei verwendet werden. Wer kann ein besseres zur freien Verwendung zeichnen?