BitBastelei #373 – uPoff – Akkusparen für Batterieanwendungen

BitBastelei #373 - uPoff - Akkusparen für Batterieanwendungen

(2 GB) 00:31:06

2020-02-23 11:00 🛈

Vor einiger Zeit hatte ich bei meiner Soundbox eine kleine Transistorschaltung gebastelt, welche dem genutzten ESP8266 nur dann Strom zuführt, wenn ein Taster gedrückt wurde. Im Anschluss kann der ESP seine Aufgaben erledigen und am Ende sich selbst den Strom wieder abschalten. Da so der Stromverbrauch deutlich geringer ist verbessert sich die Batterielaufzeit massiv. Diese Schaltung habe ich nun in eine Platine gegossen und erweitert. Mit einer RTC ist es nun zusätzlich zum manuellen Wecken auch möglich sich nach einer definierten Zeit wecken zu lassen um so z.B. auch ohne manuellen Trigger alle paar Stunden Präsenz und Akkuzustand übermitteln zu können. Der Verbrauch liegt mit ~10µA (0,01mA) deutlich unter den 1,3mA, welche ein unmodifizierter NodeMCU im Deep-Sleep erreicht.

Boarddaten und Software: https://github.com/adlerweb/uPoff

BitBastelei #372 – Pilz Zweihandschaltung

BitBastelei #372 - Pilz Zweihandschaltung

(1 GB) 00:20:43

2020-02-16 11:00 🛈

Bei der Bedienung von schweren Maschinen möchte man üblicherweise nicht seine Finger dazwischen haben. Um das sicherzustellen wird in Maschinensteuerungen oft eine Zweihandschaltung verbaut – man muss mit beiden Händen je einen Taster bedienen um so nachzuweisen, dass keine Finger dazwischen sein sollten. Eigentlich ja eine einfache Sache, aber bei solch sicherheitsrelevanten Aufgaben sollte sowas schon sicher funktionieren. In der Industrie nutzt man dazu spezielle Sicherheitsschaltungen. Was drin steckt schauen wir uns dann mal an.

BitNotice #153 – Intel-Videobeschleunigung (QSV) mit VAAPI unter Linux

BitNotice #153 - Intel-Videobeschleunigung (QSV) mit VAAPI unter Linux

(40 MB) 00:06:40

2020-02-12 11:00 🛈

Moderne Intel-Prozessoren besitzen mit “Intel Quick Sync Video” (QSV) eine Möglichkeit Videodateien in Hardware zu Codieren und Decodieren. Diese Hardwarebeschleunigung hat gegenüber einer reinen Softwarelösung einige Vorteile, so ist das Decoding beim Abspielen effizienter und kann so Leistung und Akku sparen. Beim Encoding, also dem Aufnehmen von Videos, ist es möglich deutlich höhere Frameraten zu erreichen und so Videos zum Teil in Echtzeit, z.B. für Live-Streams, zu verarbeiten. Leider sind diese Funktionen auf passende Software angewiesen. Unter Linux lässt sich dies mittels VAAPI nutzen, u.A. mit der Abspielsoftware MPV oder VLC oder der Streaming-Software OBS.

Mehr Informationen zu QSV und den Alternativen wie VDPAU (NVidia) oder VAAPI mit ATI-Grafikkarten: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

PostgreSQL-Update im Docker-Stil

Docker. Eigentlich ja ganz praktisch, wenn man “mal schnell” ein Softwarepaket trotz überschaubarer Wartbarkeit mit überschaubarem Aufwand ausrollen möchte, ab und an aber auch ein zuverlässiger Quell für Facepalm-Momente. So auch Heute: Nach dem Update einer mit docker-compose zusammengesetzten Anwendung ging nichts mehr. Der Maintainer hatte dort von postgres:10 auf postgres:11 aktualisiert. Kleines Update sollte man meinen, die PostgreSQL-Images für Docker sind jedoch technisch nicht in der Lage Daten älterer Installationen zu migrieren. Folglich zeigte sich im Log vor dem Absturz folgende Meldung:

postgres_1 | FATAL: database files are incompatible with server
postgres_1 | DETAIL: The data directory was initialized by PostgreSQL version 10, which is not compatible with this version 11.6.

Was auf “normalen” Servern mit pg_upgrade schnell geregelt und bei einigen Distributionen gar automatisiert ist, wird mit Docker ein paar Nummern komplizierter. Der Offizielle Weg: Backup machen, neu aufsetzen, importieren. Eigentlich wollte ich durch Docker Arbeit sparen, nicht mir weitere aufhalsen.

Glück im Unglück: Tianon Gravi hat auf GitHub und Docker Hub ein passendes System bereitgestellt, mit welchem man die Daten schnell zwischen verschiedenen PostgreSQL-Versionen migrieren kann.

Im Folgenden gehe ich davon aus, dass ein Named Volume “postgres-data” existiert und alle darauf zugreifenden Container gestoppt sind.

Achtung, Fallstrick: Nutzt man docker-compose, so ändern sich die Volume-Namen. Ein Named Volume “postgres-data” der Applikation “foobar” heißt in Wahrheit “foobar_postgres-data“. Im Zweifel nochmal mit “docker volume ls” prüfen.

  1. Fangen wir mit dem üblichen an: Backups. Bei Bind-Mounts kopiert man einfach den Quellordner passend zurecht, bei Named Volumes kann man diese üblicherweise unter /var/lib/docker/volumes/ finden oder mit docker-clone-volume duplizieren. Ich hatte postgres-data hierzu auf postgres-data-src und postgres-data-bck dupliziert.
  2. Weiter geht es mit dem Umwandeln der Datenbank. Hierzu nimmt man das Image mit den passenden Versionsnummern für Quell- und Zielversion.
    docker run --rm -v postgres-data-src:/var/lib/postgresql/10/data -v postgres-data-dst:/var/lib/postgresql/11/data tianon/postgres-upgrade:10-to-11
    Hiermit wird ein neues, mit PostgreSQL 11 kompatibles, Volume erzeugt, welches alle bisherigen Daten enthalten sollte.
  3. Leider gibt es in der aktuellen Version einen bekannten Bug, welche die Zugriffe in pg_hba.conf abweichend von den Dateien der offiziellen Images konfiguriert. Dies führt mit vielen Images zu Zugriffsfehlern. Um die Datei per hand zu editieren startet man entweder einen passenden Container oder greift über das Dateisystem des Hosts auf diese zu. In meinem Fall nutzte ich letztere Methode über die Datei /var/lib/docker/volumes/postgres-data-dst/_data/pg_hba.conf. An das Ende dieser wird folgende Zeile angefügt:
    host all all all md5
  4. Am Ende ändert man entweder den Volume-Eintrag seiner docker-compose.yml oder kopiert das neue Image passend zurück. In meinem Fall klang letzteres sinnvoller. Einen Befehl zum Umbenennen von Volumes ist Docker bis Heute nicht bekannt, daher bleibt hier nur das ursprüngliche Volume mit docker volume rm postgres-data zu löschen und postgres-data-dst – wie zuvor – mit docker-clone-volume oder im Dateisystem zum korrekten Volume-Namen zu klonen.

Warum man das nicht automatisiert erschließt sich mir nicht so ganz. Vermutlich beschränkt sich der Benutzerkreis hauptsächlich auf Entwickler, die ohnehin immer von 0 starten, und Enterprise-Häuser, die gemäß Fire-and-forget Systeme ohne Update bis zur Explosion betreiben.

BitBastelei #371: Messuhr-Innenleben

BitBastelei #371: Messuhr-Innenleben

(2 GB) 00:12:15

2020-02-09 11:00 🛈

Eine Messuhr erlaubt es Abstände und deren Differenzen zu ermitteln. Praktisch, wenn man z.B. das Druckbett eines 3D-Druckers prüfen möchte. Mein Modell hatte leider eine unpassende Halterung. Wenn ich ohnehin zerlegen muss, dann werfen wir doch gleich noch einen Blick auf das Innenleben und die Funktion eines solchen Messinstrumentes.

BitBastelei #370 – WTV020: Wählerisches Soundmodul

BitBastelei #370 - WTV020: Wählerisches Soundmodul

(414 MB) 00:18:24

2020-02-02 11:00 🛈

Aktuell bin ich auf der Suche nach einem neuen Soundmodul für Arduino & Co. Mein in der Vergangenheit verwendetes JQ8400 ist zwar praktisch, aber durch den kleinen Speicher nur für kleinere Projekte zu gebrauchen. Das WTV020 verspricht hier Abhilfe: Dank Micro-SD-Slot können deutlich mehr Daten gespeichert werden. Leider aber mit einigen Eigenheiten, die für mich das Modul eher weniger nutzbar erscheinen lassen.

BitBastelei #369 – Lötübung “Sanduhr”

BitBastelei #369 - Lötübung "Sanduhr"

(2 GB) 00:24:36

2020-01-26 11:00 🛈

Kalt, dunkel, meh. Wenn die Motivation für eigene Basteleien fehlt, schauen wir halt auf eine einfache Lötübung. Dieses Kit einer “digitalen Sanduhr” gibt es an vielen Stellen zu kaufen und soll Einsteigern genügend Lötstellen zum Üben geben. Leider in meinem Fall ohne beiliegende Anleitung, aber bauen wir einfach mal auf und versuchen die Funktionsweise zu verstehen.

Weiterführende Links

BitBastelei #368 – ESP LCD-Adapter

BitBastelei #368 - ESP LCD-Adapter

(391 MB) 00:11:11

2020-01-19 11:00 🛈

Vor einiger Zeit hatte ich gezeigt wie man ein HD44780-Display mit Arduino an einen ESP8266 anbinden kann. Diese Konstruktion nutze ich noch immer um einen schnellen Überblick zu bekommen. Leider war die Verkabelung etwas wacklig, sodass ich immer wieder nachstecken und neu starten musste. Da noch etwas Platz in einem Paket war soll es nun dank KiCAD eine separate Platine richten. Kleine Arbeit, großer Stabilitätsgewinn.

BitBastelei #367 – Reingeschaut: Feuerwehr-Bedienfeld (FBF)

BitBastelei #367 - Reingeschaut: Feuerwehr-Bedienfeld (FBF)

(2 GB) 00:22:55

2020-01-12 11:00 🛈

Das Feuerwehr-Bedienfeld ist Teil von Brandmeldeanlagen (BMA), welche in vielen großen Gebäuden Feuer erkennen und automatisch die Feuerwehr alarmieren. Dieser Kasten hat an allen Anlagen das gleiche Aussehen, ist nur der Feuerwehr zugänglich und erlaubt es den Einsatzkräften den aktuellen Alarmstatus sowie einige Aktionen wie das Abschalten der Werkssirenen zu steuern. Ein solches ist mir hier zugeflogen, also schauen wir mal rein und prüfen, ob man das Ganze anderweitig weiternutzen kann.

BitBastelei #366 – Live-Debugging von Mikrocontrollern mit PlatformIO

BitBastelei #366 - Live-Debugging von Mikrocontrollern mit PlatformIO

(117 MB) 00:13:19

2020-01-05 11:00 🛈

Wenn es bei µC-Projekten darum geht Fehler zu suchen endet es meist mit dutzenden unübersichtlichen Serial.println-Zeilen im Code. Aktuelle Prozessorgenerationen erlauben es jedoch live die Ausführung zu überwachen, die CPU anzuhalten und den Inhalt von Variabeln und Registern zu beobachten. Mit PIO ist diese Funktion nun auch für Einsteigen recht einfach Nutzbar.

Nerd Inside