IoT, Linux und Firewall

Bei einer Abteilungsfeier zu der ich eingeladen war hat mir ein Arbeitskollege von einem neuen großen DNS-Resolver für Europa „aus Europa“ erzählt. Das hat sich alles sehr Interessant angehört, und mir sind da gleich allerhand Schandtaten dazu eingefallen.
Zuhause angekommen habe ich mich dann direkt mit DNS4EU beschäftigt. Details gibt es auf deren Website.

Für mich waren folgende Eckpunkte wichtig:

  • Unabhängig von Google, Cloudflare usw.
  • Verschiedene Filtertypen
    • TYP 1: Unfiltered Resolution
    • TYP 2: Protective Resolution
    • TYP 3: Protective Resolution with Child Protection
    • TYP 4: Protective Resolution with Ad blocking
    • TYP 5: Protective Resolution with Child Protection & Ad blocking

Das hat sich prima mit drei laufenden Aktivitäten ergänzt. Zum einen war ich dabei meine Infrastruktur für den kommenden Glasfaserausbau zu optimieren/erweitern. Zum anderen wollte ich meinen Raspberry-Pi mit Home Assistant rauswerfen und durch eine DIY Plattform ersetzen, da dieser mir schon 4 SD-Karten ruiniert hat. In diese Plattform wollte ich die Informationen meiner Homematic Zentrale mit einfließen lassen wo wir beim Punkt drei sind. Die CCU2 durch Raspberrymatic ersetzen.
Also habe ich zuerst zwei Gehäuse für die PI’s gedruckt.

Diese einbebaut und in Betrieb genommen.

Der erste ist für Raspberrymatic zuständig.

Hier werden alle Homematic Komponenten gesteuert, und über eine API zur Verfügung gestellt. Das neu Anlernen, Verknüpfen und Einstellen der 2 Millionen Aktoren und Sensoren war nervig und zeitraubend aber ist kein Hexenwerk.

Als nächstes habe ich Debian auf den zweiten Pi installiert. Dazu kamen dann einige Pakete, welche ich zur Verfügung haben wollte. Standard sozusagen ist SSH und Samba. Dazu wollte ich einen Apache2 Webserver inklusive php Lib, mySQL und phpMyAdmin zum lokalen Testen von Code. Als MQTT Broker läuft nun Mosquitto um den bereits überlasteten Broker auf meinem ESP32 zu ersetzen, und Node Red um die fertige Schnittstelle zur Raspberrymatic API zu nutzen.

Das war bis dahin nicht der Rede Wert und auch keinen Beitrag wert da im Prinzip alles fertiges Zeug war oder nur Polygone schupsen im Node Red.
Nun wollte ich die neuen Infos zu DNS4EU für mich nutzen und meine Ideen umsetzen.
Also habe ich zunächst die config meiner alten iptables Firewall aus ISDN Zeiten rausgesucht die Basti damals mit mir erstellt hat. Danach habe ich mir IP-Bereiche (Subnets) überlegt:

Bekannte Geräte Zone
Dürfen ins LAN und ins Internet und erhalten den DNS4EU: TYP 4
Bekannte Geräte Kinder Zone
Dürfen ins LAN und ins Internet und erhalten den DNS4EU: TYP 5
Bekannte Geräte Proxy Zone
Bspl. Onion Routing gegen Geoblocking und zum Anonymisieren
Bekannte Geräte IoT Geräte Zone
Dürfen nur ins IoT Zonen LAN
Unbekannte Gast Geräte
Dürfen nur ins Internet und erhalten den DNS4EU: TYP 2

Zunächst habe ich also die Zonen und alle MAC Adressen meiner Geräte in die dhcpd.conf eingetragen. In erster Linie wollte ich dafür sorgen das erstens die IoT Geräte in einer eigenen Zone sind, in der ich bestimme wer nach draußen darf. Zum anderen wollte ich für die Zukunft vorsorgen und eingrenzen, wo später die Kinder rumsurfen können. Dann habe ich mir überlegt was ich so als Jüngling getrieben habe, und dem wollte ich dann auch einen Riegel vorschieben. So bekommen Beispielsweise nur IP-Adressen die vom DHCP Server vergeben wurden einen accept-Flag. Das nennt sich Dynamic IP Hook.
Dann ging es ans Eingemachte. Die Konfiguration von nftables welches iptables ablöst. Hier muss man zuallererst beachten, das die Ports 67 und 68 zum Linux Router frei sind und der Loopback (localhost) auf accept steht, sonst kommen die Clients beim connect nicht zum DHCP und somit bekommen sie keine IP und kein Lease. Es müssen die erlaubten (dynamic hook) DHCP-Clients eingebunden werden. Dann erst kommt der Forward-Chain (Packete von einer in eine andere Zone Leiten) und folgend die NAT-Tabelle (Network Address Translation) zum WAN. Hier ist an mancher Stelle einiges an Ausprobieren nötig bis alles funktioniert. Als Tüpfelchen auf dem i kommt noch ein Logging hinzu welches alle gedroppten Packete aufführt. Das geht nicht direkt. Die logs landen im Syslog (var/log/kern.log) und müssen mit rsyslog abgefangen und in die gewünschte Datei umgeleitet werden. Es ist erstaunlich wie viele ungewünschte Pakete an der Firewall verbrennen. Das war damals schon so, und ist heute nicht besser.

Anders als jetzt wäre ich mit meinem damaligen Wissen nicht an meiner heutigen Absicherung vorbei und mit eigenem DNS Server ins Internet gekommen, um nicht vom Jugendschutz ausgebremst zu werden. Wer mir Face2Face eine Möglichkeit aufzeigt, bekommt von mir ein Bier bezahlt 😉

Ein paar Anmerkungen noch:

  • By Default ist das syslog bei dem von mir gewählten Raspbeery OS (Debian) ausgeschaltet um nicht auf der SD-Karte rumzuschreiben wenn es nicht nötig ist. Beim Einschalten sollte man dafür sorgen das die Logs über eine Harte Verknüpfung auf einem USB-Stick landen.
  • Alle Files sind anonymisiert und nicht meine IP-Bereiche.
  • Alle Messwerte laufen nun über den neuen MQTT Broker und werden in meine IONOS SQL Datenbank geschrieben. Nun kann ich an meinem Backend mit Dashboards arbeiten.
  • der Datendurchsatz vom Pi und der Firewall liegt bei 260Mbit
  • die Stromaufnahme beider Pi`s zusammen liegt in Schnitt bei 5,6W
  • Von Fragen zu TOR, Mullvad oder redsocks ist Abstand zu nehmen!

Howto AI

Vom aktuellen Hype bezüglich Artificial Intelligence kurz AI oder auf deutsch KI kann man halten was man will. Die Produkte die auf Basis künstlicher neuronaler Netze entstanden sind liefern unumstritten erstaunliche Ergebnisse. Diese nicht zu nutzen wäre dumm.

Um diese Aussage einzuordnen möchte ich kurz meine Sichtweise auf die aktuell als künstliche Intelligenz gehandelten Computerprogramme erläutern. Meiner Ansicht nach handelt es sich nicht um künstliche Intelligenz. Ich vertrete den Standpunkt von Alan Turing. Dieser meinte das eine Maschine dann intelligent ist, wenn das Denkvermögen nicht von dem eines Menschen zu unterscheiden ist. Eine Gewichtung über eine Milliarde Datenpunkte ist eben nicht denken. Nun könnte man mit dem Argument kommen, das ChatGPT den Turing Test bestanden hat. Hier sollte die Frage erlaubt sein, ob ein Test der vor 70 Jahren ersonnen wurde um die damaligen Maschinen/Computer zu bewerten, heute der richtige Ansatz ist. Ich sage nur „Moore‘s law“. Für mich ist klar, das es durchaus Diskussionen zum Thema AI gibt und geben muss. Es muss auch viel mehr Regulierung stattfinden was man sehr gut beim Thema Suno-AI in den Medien verfolgen kann. Mit diesem Hintergrund und dem Wissen das nicht Cyberdyne Systems die KI entwickelt, plädiere ich dafür, AI zu nutzen, solange man nicht das Gefühl hat anderen zu schaden.

Folgend möchte ich zeigen wie man ohne Fachwissen zu KNN oder deep learning kostenlos AI Tools nutzen kann. Zunächst meldet man sich bei openAI an und startet ChatGPT. Zum Thema generative KI gibt es unzählige Fachbegriffe. Der erste für uns wichtige hier nennt sich Prompt. Das ist die Beschreibung dessen was man als Ergebnis haben will. Nun fordert man ChatGPT auf, einen Prompt zu erstellen, von dem was man auf seinem Bild sehen will. Das geht auch auf deutsch ganz gut. Ist man mit dem Text zufrieden kann man diesen Prompt ins englische übersetzen lassen, da die diversen Tools hier die genauesten Ergebnisse liefern. Mein simpler Prompt lautet:

a wide untouched snow surface in the foreground and the caves in the ross ice shelf in the background

Nun bitten wir ChatGPT aus diesem Prompt ein Bild zu erstellen. Aus dem Chat heraus wird DALL-E (openAI’s Bildgenerator) in der aktuellsten Version aufgerufen, welcher das Bild zurück liefert.

Ein wie ich meine beeindruckendes einzigartiges Bild. Folgend ein paar wichtige Informationen. Die Bildgeneratoren liefern das Ergebnis in 1024×1024, 1024×1792 oder 1792×1024. Die gewünschte Größe muss mit angegeben werden. Fordert man Chat-GPT ein weiteres mal auf, aus dem Prompt ein Bild zu erzeugen, wird man ein neues anderes Bild als Ergebnis bekommen.

Also kann man nicht an einem Ergebnis weiterarbeiten. Hier kommen wir zum zweiten Begriff, dem sogenannten Samen (seed) der bei DALL-E nicht zur Verfügung steht.

Hierzu gibt es andere spezialisierte KI-Tools. Um die Tools zu nutzen muss man diese nicht installieren oder bezahlen. Beispielsweise kann man sich bei Prompthero anmelden. Dort sucht man sich die Engine aus, mit der man arbeiten will. Beispielsweise Stable Diffusion. Nun bittet man ChatGPT den Prompt dafür zu optimieren. Der Prompt an sich bleibt meistens gleich wobei man für Stable Diffusion eine Liste mit Einstellungen bekommt die man vornehmen kann. Hiermit lässt man sich nun Bilder erstellen. Ist ein Bild dabei auf dessen Basis man weiterarbeiten will, kopiert man sich den Samen und fügt diese mehrstellige Nummer in das „Samen-Feld“ ein. Nun kann man das Originalbild verändern. Beispielsweise eine zweite Sonne einfügen oder Nebel.

Die Ergebnisse werden besser, um so genauer der Prompt das Bild beschreibt. Dabei leistet ChatGPT phantastische Arbeit. Hier ein Beispiel für Midjourey:

A vast, flat snow-covered plain stretching endlessly to the horizon. The snow is fresh and untouched, yet appears somewhat somber under the overcast sky. Thick clouds shimmer in soft pink and violet tones, casting a surreal glow over the landscape. In the background, the majestic Ross Ice Shelf rises, with its massive frozen structures and deep, shadowy ice caves. The caves subtly reflect the faint light, adding depth and mystery. The entire environment is still and quiet, evoking a contemplative and serene wintery scene. --ar 9:16 --v 6 --style raw --q 2

Nun haben wir unser Wunschbild, aber in einer Qualität die schon im Jahr 2000 nicht mehr „State of the Art“ war. Deshalb geht es nun zu Nero-AI. Die waren früher für was anderes bekannt. Nun bietet Nero einen ausgezeichneten AI Image Upscaler an. Bild hochladen, Upscale Rate auf x4 einstellen, warten und staunen.

An dieser Stelle möchte ich noch erwähnen, das dieser Guide auf mehrfachen Wunsch von Lesern meines Blogs entstanden ist. Das Thema AI ist momentan permanent im Wandel. Jeden Tag gibt es etwas neues. Und so ist auch bei diesem Artikel fraglich wie lange er aktuell ist. Trotzdem wünsche ich viel Spaß beim rumprobieren.

Whirlpool

Betriebssoftware

Nachdem ich die EMV-Probleme mit meinem Frequenzumrichter gelöst habe, konnte ich die Sensoren in Betrieb nehmen.
Somit geht nun die pH und Redox Messung tadellos.

Folgend hat nun der ESP32 auf dem die Poolsteuerung läuft ein Update bekommen.
Auf dem ESP32 läuft ein Webserver, über den ich den Pool steuern kann.
Es können hier sämtliche Parameter eingestellt, und die pH und ORP Sonde kalibriert werden.

Über MQTT kann der Pool auch automatisiert gesteuert werden, je nachdem wieviel Solar-Energie vorhanden ist.

Heartbleed

heartbleed

Nachdem immer wieder mal Fragen zu Heartbleed auftauchen, hier eine kurze Info!
Das Geotrust SSL Zertifikat dieser Website war und ist nicht betroffen.
Auf folgender Seite könnt ihr eure Webserver testen: https://filippo.io/
Diese Seite ist vertrauenswürdig und wurde mir von Geotrust empfolen.
Unter http://mashable.com/ könnt ihr nachschauen, bei welchen Diensten ihr eure Passwörter ändern, und bei welchen ihr mit der Änderung noch warten solltet.

Slotcar Controller V2

Inzwischen ist mein neuer Slotcar Controller fertig.

Die Elektronik ist in ihrem Gehäuse.
Alle benötigten Steuerelemente und Stecker sind eingebaut.

Nachdem die Hardware komplett getestet ist, und alles läuft, habe ich das Gehäuse inzwischen geschlossen.

Mein erstes eigenes Mikrocontrollerprojekt (Software) wächst auch.
An der ein oder anderen Stelle hängt es zwar noch beim c++ Programmieren, und ich muß zum Nachhilfeunterricht.
Beispielsweise habe ich Chan’s FAT32 Treiberpacket nicht zum laufen bekommen.

Aber es geht voran, und inzwischen komme ich ganz gut mit dem GCC und Atmel Studio 6 klar.

Die Basisfunktionen laufen.
Das Display zeigt die diversesten Informationen.
Man wird durch den Kalibrierablauf für den angeschlossenen Controller geführt.
Die gewünschte Drückerkennlinie wird dynamisch berechnet.
Es wird zwischen Poti und SD-Karten Betrieb unterschieden.
Im Poti Betrieb werden die Parameter, die nicht an den Potis eingestellt werden, aus dem EEProm geladen.
Alle Parameter können über die Buttons geändert werden.
Alle Parameter können über USB abgefragt und geändert werden.
Die SD-Karte wird initialisiert, und Dateien können ausgelesen werden.
Die Struktur auf der SD-Karte ist festgelegt.
Man kann die User und Fahrzeug auswählen.

In der Software fehlt jetzt noch:
ASR Berechnung
Motor Preload
SD-Karten Modus
Anzeige der Fahrzeugnummer (danke für die Idee Markus)

Übersicht aller Parameter:

preload
// 0-255 Motorspannung bei 0 power_out; 0 = OFF
zero_brake
// 0-1 Nullpunktbremse ON/OFF
zero_brake_release
// 0-255 *1000 ms Nullpunktbremse loslassen; Wenn preload ON
motion_brake
// 0-255 Bremsintensität der Bremse beim Fahren; 0 = OFF
motion_brake_duretion
// 0-255 *1 msec Bremsdauer; Wenn motion_brake ON
motion_brake_delta
// 0-255 Eingreifgrenze bei negativer PWM-Änderung; Wenn motion_brake ON
motion_brake_msec
// 0-255 Zeit für motion_brake_delta; Wenn motion_brake ON
motion_brake_dynamic
// 0-1 Dynamisches verhalten der Fahrbremse in Intensität und Dauer
boost
// 0-255 Boostintensität des Turbos (PWM); 0 = OFF
boost_duretion
// 0-255 msec Boostdauer; Wenn boost ON
boost_delta
// 0-255 Eingreifgrenze bei positiver PWM-Änderung; Wenn boost ON
boost_msec
// 0-255 Zeit für boost_delta; Wenn boost ON
boost_dynamic
// 0-1 Dynamisches verhalten des Turbos in Intensität und Dauer
asr
// 0-255 maximal x PWM-Schritte pro msec steigern; 0 = OFF
asr_max
// 0-255 ASR verwenden bis x PWM; Wenn asr ON
asr_dynamic
// 0-1 Dynamisches Verhalten der ASR

Nun noch ein paar Bilder

Die Blenden

Das Innenleben

Frontseite

Rückseite

CNC Projekt

Version 3.0

Fräsen von Standard TrueType Schriften hinzugefügt.

TrueType Fonts, SingleLine Fonts, Kerning, Variabler Zeichenabstand, Innencontourberechnung, Füllen, Rotieren, etc…

Version 3.1 (Bugfixes)

Änderung: Splines mit 2 Punkten ergeben eine Gerade.
Änderung: Wenn Fräse unten, wird der erste Punkte einer Lochschiene nicht gebohrt, da schon vorhanden.
Fehlerbeseitigung: Splines bei denen alle X-Punkte oder alle Y-Punkte 0 sind, müssen funktionieren.
Fehlerbeseitigung: Durch einen Typo wurde ein Button im Handmodus nicht deaktiviert.

CNC Projekt

Inzwischen bin ich mit dem Update der Fräsensoftware etwas weiter gekommen.
Ich kann Fonts laden, auf Endmaß skalieren, Abstände festlegen, usw.
Es werden aktuell erst mal nur die Stützpunkte angezeigt, und mit Geraden verbunden. So kann ich mit dem nächsten Schritt, dem Rotieren und berechnen der Konturen zum Füllen besser weiterarbeiten, da ich so auf die Vektoren schließen kann.
Splines ersetzen später die Geraden.

Beim Programmieren und prüfen der Kernings (hierbei werden unschöne Buchstabenkombinationen eingerückt) habe ich dann festgestellt, das dieses zwar in der Spec von Microsoft definirt sind, allerdings nicht zur Anwendung kommen.

Von oben nach unten:
Microsoft Word Arial 146pt
Berechnung ohne Kerning
Berechnung mit Kerning

XML Font Cleaner

Da ich mit meiner Fräse unter anderem auch Beschriften will, habe ich nach einer Lösung gesucht, wie ich normale Windows Fonts über Koordinaten „Zeichnen“ kann.
Dabei bin ich auf diversen Seiten über etwas interresantes gestolpert.
TrueType Schriftarten bestehen aus Koordinaten, die über Splines verbunden sind.
Nachdem ich bei Microsoft auf eine Spec gestoßen bin, in der erklärt wurde, wie das genau funktionieren soll, mußte ich erst mal Basti mit ins Boot holen.

Mit seiner Hilfe und einem Tag diskutieren und Kopf zerbrechen, hatte ich die erste verwendbare Datei. Durch manuelles editieren des in XML dargestellten Codes, konnte ich mit dem G-Code Tool meiner Fräsensoftware schonmal die Koordinatenpunkte darstellen.

Ich habe zum Testen ein B verwendet.
Das verbinden der Koordinaten war ein Kinderspiel. Das nutzen der Koordinaten, um sie über Splines zu verbinden wiederum, hat mir einiges abverlangt. Man kann keine 3 nicht linear angebrachte Punkte über eine Spline verbinden und bekommt eine Gerade heraus.
Inzwischen allerdings habe ich schon die ersten erfolgreichen Tests hinter mich gebracht.

Allerdings stand nun eine andere Herausforderung vor der Tür.
Basti hat mir 2 Gigabyte an TrueType Fonts gegeben. Die Dateien sind mir viel zu wuchtig, um sie in meiner Fräsensoftware abzulegen. Hierzu habe ich ein Programm erstellt, um die Dateien abzuspecken und als XML zu speichern.

Nun nachdem die Fonts eine angenehme Größe aufweisen, gehts daran, eine Funktion in meine Fräsensoftware einzubauen, mit der ich die Fonts auswählen, skalieren und rotieren kann, um sie per Knopfdruck ins CNC Programm einzufügen.