IoT, Linux und Firewall – VPN

Vorwort

Eigentlich ist dies ein Beitrag, den ich nie schreiben wollte.

Ich hatte eine einfache Grundregel: Auf diesem Blog erkläre ich keine Systeme oder Werkzeuge, die — unabhängig von ihrer technischen Legitimität — auch gezielt von Kriminellen eingesetzt werden, um Straftaten zu verschleiern. Nicht, weil ich diese Werkzeuge ablehne, sondern weil mir bewusst ist, dass Wissen Verantwortung bedeutet.

Und dennoch schreibe ich heute über die Einrichtung von Mullvad VPN.

Der Grund dafür ist kein technischer, sondern ein politischer.

Was für mich das Fass zum überlaufen gebracht hat, war vor ein paar Tagen die Aussage von Bundeskanzler Friedrich Merz auf einer Konferenz in Trier, in der er das Internet ausdrücklich als politischen Debattenraum bezeichnete und daraus die Notwendigkeit einer Klarnamenspflicht ableitete. Spätestens an diesem Punkt wurde mir klar, dass sich ein grundlegendes Missverständnis festgesetzt hat: Das Internet wird von Teilen der Politik offenbar nicht als Infrastruktur verstanden, sondern als eine Art öffentlicher Marktplatz.

Doch das World Wide Web ist kein Marktplatz.

Es ist der größte, offenste und zugleich gefährlichste Kommunikationsraum, den es gibt. Dort bewegen sich Staaten, Unternehmen, Nachrichtendienste, Betrüger, Datensammler und organisierte Kriminalität zugleich. Wer sich verbindet, exponiert sich technisch. Diese Realität verschwindet nicht dadurch, dass man sie politisch anders bezeichnet.

Deshalb bin ich der Meinung nicht die Nutzung von Schutzmaßnahmen ist erklärungsbedürftig, sondern ihre Nichtnutzung.

  • Die Entwicklung der letzten Jahre

(EU) 2016/679 – Ein Teil dieser Entwicklung begann mit der Datenschutz-Grundverordnung. Die DSGVO hatte ein legitimes Ziel: Bürgern bewusst zu machen, dass ihre personenbezogenen Daten nicht herrenlos sind und dass sie ein einklagbares Recht darauf haben, dass Daten gelöscht werden können. Dieser Gedanke ist richtig. Gleichzeitig waren die wirtschaftlichen Folgen erheblich. Zurückhaltende Schätzungen gehen davon aus, dass allein die Umstellung die deutsche Wirtschaft 50 Milliarden Euro gekostet hat, ohne die laufenden Kosten zu betrachten. Kosten, die letztlich über die Preise beim Bürger landen. Man muss festhalten: Die DSGVO hat nicht das grundlegende Problem gelöst, nämlich den technischen Selbstschutz des Einzelnen im Netz.

§ 188 StGB – Parallel dazu wurde § 188 erweitert, der besondere Ehrschutz für Personen des politischen Lebens. Kritiker sehen darin eine Ungleichbehandlung im strafrechtlichen Schutz persönlicher Ehre. In der Praxis hat sich zudem ein neues Phänomen entwickelt: automatisierte Auswertung öffentlicher Äußerungen im Internet und daraus resultierende juristische Verfahren. Unabhängig von der Bewertung zeigt das vor allem eines — Äußerungen im Internet sind längst kein flüchtiges Gespräch mehr, sondern dauerhaft verwertbare Information.

§ 113 TKG – Schon heute müssen alle Telekommunikationsanbieter Verbindungs- und Metadaten für 14 Tage speichern. Über Jahre wurde politisch über die anlasslose Speicherung gestritten – offiziell aus Gründen der Strafverfolgung und Gefahrenabwehr, faktisch aber ein Generalverdacht gegenüber allen Nutzern. Geplant ist nun eine Ausweitung auf drei Monate, was nicht nur zusätzliche Kosten für die Verbraucher bedeutet, sondern den praktischen Nutzen infrage stellt: Überlastete Gerichte können die Daten kaum zeitnah auswerten. Gleichzeitig steigt das Risiko, dass sich auch hier eine Klageindustrie entwickelt, die automatisiert auf kleinste Verstöße reagiert, da die geplanten Änderungen neue Angriffspunkte schaffen.

Aus den beschriebenen Entwicklungen ergibt sich ein grundlegender Widerspruch: Während Bürger zunehmend verpflichtet werden, identifizierbarer zu werden, wächst gleichzeitig die Bedrohungslage im Netz gerade in Zeiten von KI enorm. Daten und Identitätsdiebstahl, Social-Engineering-Angriffe und automatisierte Betrugssysteme sind Alltag.

  • Verhältnismäßigkeit und Realität

Wenn ich das Internet mit einem physischen Ort vergleichen müsste, dann wäre es kein offener Marktplatz — sondern eher eine dunkle, unübersichtliche Gasse sichtbarer und unsichtbarer Akteure. In einer solchen Umgebung dürfte niemand ernsthaft fordern, das ein Kind ein Schild tragen muss auf dem steht: „Ich bin Susi, 12 Jahre alt“

In der analogen Welt existierten schon vor dem Internet Schutzprinzipien:

• das Briefgeheimnis (Art.10 GG),
• die Vertraulichkeit der Telekommunikation (TKG §88-91),
• das Recht sich frei zu versammeln (Art.8 GG),
• das Recht auf Anonymität abgeleitet aus (Art.2 Abs.1 Grundgesetz)

Niemand verlangt, dass auf jedem Brief außen der vollständige Lebenslauf steht. Niemand würde akzeptieren, dass jede Postverbindung pauschal protokolliert wird. Und doch bewegen wir uns im Internet zunehmend in genau diese Richtung.

Die eigentliche Fehleinschätzung ist daher nicht technischer, sondern struktureller Natur: Das Internet ist keine Debattenplattform — es ist Infrastruktur. Und Infrastruktur benötigt Sicherheit.

  • Warum dieser Artikel existiert

Ich breche mit meiner eigenen Regel, weil sich die Rolle verschoben hat.

Früher bedeutete die Erklärung von Anonymisierungs- oder Schutztechniken jemandem beim Verbergen zu helfen. Heute bedeutet das Weglassen dieser Informationen zunehmend, Menschen ungeschützt zu lassen. Zwischen Verschleierung und Selbstschutz besteht ein entscheidender Unterschied.

Meine persönliche Schlussfolgerung ist daher einfach:

Sobald ich eine Verbindung mit dem World Wide Web herstelle, öffne ich eine Tür zu einem potenziell gefährlichen Raum. Das muss jedem bewusst sein — auch politischen Entscheidungsträgern. In diesem Raum geht es um Sicherheit und vor allem um Eigenschutz. Und wenn staatliche Maßnahmen diesen Schutz nicht gewährleisten oder ihn sogar verringern, dann bleibt nur eine Konsequenz:

Ich muss mich und meine Familie selbst schützen.

Vorbereitung

Im folgenden erkläre ich unabhängig meines eigenen VPN-Gateways die Einrichtung von Mullvad VPN auf einem Raspberry PI mit nur einem Netzwerkadapter.

Voraussetzungen:
• Router 192.168.100.1
• Raspberry PI 192.168.250.250, 192.168.100.250
• Raspberry PI OS (Debian) vorinstalliert
• A klitzeklois bissle Ahnong vo Linux du Dackel

Zunächst muss die Möglichkeit geschaffen werden, dem Client den Raspberry PI als Gateway vorzugeben. Eine Möglichkeit ist es, IP Adresse, Gateway sowie DNS am Client fest einzustellen. Ich möchte eine flexiblere Lösung aufzeigen. Der D-Link DAP2695 beispielsweise bietet dafür eine Ausgezeichnete Möglichkeit. Zunächst legt man eine Zusätzliche SSID an, in meinem Fall sycotec-secvpn. Danach ein virtuelles logisches Teilnetzwerk, hier VLAN10. Diesem weist man über SSID-to-VLAN Mapping die neue SSID zu. Danach muss noch der DHCP konfiguriert werden.

Bei dieser Konfiguration ist es nun so, das der WLAN-Client bei der default SSID die Netzwerksettings vom DHCP des Routers bekommt. Verbindet man sich über die SSID sycotec-secvpn erhält man die Netzwerksettings vom DHCP des Accesspoints, landet im Segment 192.168.250.0 und bekommt den Raspberry Pi als Gateway.

Einrichtung des VPN Gateways

Idealerweise macht man zunächst ein Update der Paketliste und des Betriebssystems

sudo apt update
sudo apt upgrade -y

um danach die neusten Pakete von wireguard, nftables, dnsmasq und curl zu installieren, falls noch nicht vorhanden.

sudo apt install wireguard dnsmasq iptables-persistent curl -y

Folgend muss der Pi in die beiden Netze IN (192.168.250.250) und OUT (192.168.100.250). Dazu wird /etc/network/interfaces wie folgt geändert:

auto eth0
iface eth0 inet static
    address 192.168.100.250
    netmask 255.255.255.0
    gateway 192.168.100.1      # IP des Routers
    dns-nameservers 192.168.100.1

# Virtuelles Interface für secvpn Subnetz
auto eth0:1
iface eth0:1 inet static
    address 192.168.250.250
    netmask 255.255.255.0

Der DNS Server spielt an dieser Stelle für den VPN keine Rolle. Damit Linux Routen kann, muss IP Forwarding unter /etc/sysctl.conf aktiviert werden.

net.ipv4.ip_forward=1

Danach meldet man sich mit seinen Zugangsdaten unter https://mullvad.net/ an, und wählt dort „WireGuard configuration“. Ich habe mich für einen Ausgang in Island entschieden da diese eine Hervorragende Infrastruktur haben, und dort die Privatsphäre sehr hoch aufgehängt ist. Dafür wählt man

• Server location: Iceland
• Device: Linux
• Tunnel: WireGuard

aus und startet den Download. Den Inhalt der mullvad.conf kopiert man nun in die Datei /etc/wireguard/wg0.conf welche dann folgende Struktur hat:

[Interface]
PrivateKey = XXXXX
Address = 10.x.x.x/32
DNS = 10.64.0.1

[Peer]
PublicKey = XXXXX
AllowedIPs = 0.0.0.0/0
Endpoint = xx-is.mullvad.net:51820
PersistentKeepalive = 25

Wichtig ist hier das AllowedIPs auf 0.0.0.0/0 steht, damit sämtliche Packete durch den Tunnel gezwungen werden. Nun können wir WireGuard probehalber schonmal starten und schauen ob der Tunnel funktioniert.

sudo wg-quick up wg0
curl https://am.i.mullvad.net/ip

Hier sollte nun Country: Iceland stehen. Wenn der VPN nicht läuft bekommt man lediglich die aktuelle Internet IP angezeigt. Wenn’s nicht geht, gehe zurück zum Start, gehe nicht über Los und ziehe nicht 200 Mark ein. Alles Punkt für Punkt überprüfen und schauen ob alle Dienste laufen. Ansonsten … weiter geht’s. Da wir nicht wollen, das uns der DNS verrät zwingen wir diesen auch durch den Tunnel und nehmen den DNS von Mullvad. Dazu editieren wir die Datei /etc/dnsmasq.conf

interface=eth0
listen-address=192.168.250.250
server=10.64.0.1
no-resolv

Nun kommt die Konfiguration von nftables NAT und Forward

sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -s 192.168.250.0/24 -o wg0 -j ACCEPT
sudo iptables -A FORWARD -i wg0 -d 192.168.250.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT

Das sollte selbsterklärend sein. Nun bauen wir noch einen Killswitch ein, damit nichts durchrutscht.

sudo iptables -A OUTPUT ! -o wg0 -m addrtype ! --dst-type LOCAL -j REJECT

Alle Pakete die nicht an wg0 also den VPN Tunnel gehen und die nicht im lokalen Netz adressiert sind, werden zurückgewiesen.

Nun fehlt nur noch der Härtetest: https://dnsleaktest.com/

Epilog

Wichtig bei der Nutzung eines VPN Gateways als „Router“ ist es sich vorher genau zu überlegen welche Endgeräte man durch den Tunnel schicken will und welche nicht. Darauf aufbauend muss man sich das Konzept überlegen.
Hier gibt es für fast alles eine Lösung. Aber Achtung, Streaming Anbieter sind bei „Geo Blocking“ sehr empfindlich und auch die VPN Tunnel von Arbeitgebern mögen es zuweilen überhaupt nicht ihrerseits getunnelt zu werden. Ganz paranoide haben noch die Möglichkeit ihre DNS Abfragen mit dnscrypt-proxy über DoH (DNS over HTTPS) laufen zu lassen. Über diesen Vorschlag gab es bei ein paar Bierchen einen angeregten Austausch. Danke dafür.

Noch ein paar wichtige Tips:
Wenn an den config-files von laufenden Diensten etwas geändert wird, müssen die Dienste zumeist neu gestartet werden.
Die Regeln von iptables-persistent und netfilter-persistent müssen gespeichert werden um sie nach einem reboot noch zur Verfügung zu haben.

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 eingebaut 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