RSSAmplifier

Blog

Michael Malura

Mein persönlicher Blog

malura.deRSS feed ↗57 posts

Latest posts

Meine Defizit-Skala kannte meine eigenen Einstellungen nicht

Fast jeder Tag im Kalorien-Kalender war gelb oder rot, weil die Farbskala noch auf festen Schwellen von 700 und 300 kcal stand. Beim Umbau musste ich erst rausfinden, ab wann ein Defizit eigentlich zu hoch ist, und danach war das Ergebnis ein anderes als erwartet.

Radfahren durchgerechnet: 95 Prozent Grundumsatz und eine Route mit 0 km neuer Strecke

23 GPX-Tracks, ein Physikmodell und ein Routenplaner, der mir erst eine Runde ohne einen einzigen neuen Kilometer vorgeschlagen hat. Was beim Durchrechnen meiner Feierabendrunde rauskam.

Media Markt Geschenkkarten Manager

Mein Arbeitgeber gibt mir jeden Monat einen 50-Euro-Gutschein für Media Markt als PDF. Nette Sache, aber wenn man online bestellt und mehrere Gutscheine einlösen will, wird es nervig: PDF öffnen, Kartennummer rauskopieren, PIN rauskopieren, im Shop eintragen, nächste PDF öffnen, wieder kopieren. Bei vier oder fünf aufgesparten Gutscheinen macht das keinen Spaß.

Zigbee Steckdosen, Grafana Sankey und Wasserverbrauch

Nachdem ich mich mit den Zigbee Thermostaten und Temperatursensoren so angefreundet habe, hab ich mir jetzt vier Zigbee Steckdosen zum Testen geholt. Sonoff S60ZBTPF, die haben neben dem schaltbaren Relay auch einen Stromzähler eingebaut. 53 Euro für alle vier, also gut 13 Euro pro Stück.

Anthbot Genie 600 Mähroboter gehackt - hardcodierte AWS-Keys und PIN im Klartext

Ich hab mir einen Anthbot Genie 600 Mähroboter gekauft und wollte wissen was der so treibt. Nach ein paar Stunden nmap, tcpdump und Python-Scripting hatte ich Zugriff auf den kompletten Gerätestatus, alle Sensordaten und kann Befehle senden. Dumm nur dass Anthbot in ihrer App hardcodierte AWS-Credentials verwendet die jeder auslesen kann. Damit kann jeder der eine Seriennummer kennt jeden…

Grafana Dashboards aufgeteilt und ADS-B Windrose gebaut

Mein Grafana-Dashboard war eine einzige riesige Seite mit allem drin: Server-Stats, Fritzbox, Heizung, Strom, PV - alles in collapsed Rows. Das war nervig zu navigieren. Also hab ich einen Nachmittag investiert und das Ding in 5 spezialisierte Dashboards aufgeteilt. Dabei ist mir aufgefallen dass die Brennerstarts meiner Heizung verdächtig hoch sind, aber das ist eine andere Geschichte.

Viessmann vcontrold: 4 Jahre falsche Adressen und zu viel Taktung

Beim Aufräumen meiner Grafana-Dashboards ist mir aufgefallen dass meine Viessmann Vitoladens 300-C viel zu oft taktet: 17-52 Brennerstarts pro Tag, durchschnittlich nur 9 Minuten pro Lauf. Das ist viel zu kurz für einen Öl-Brennwertkessel. Also bin ich tiefer eingestiegen und hab dabei einen massiven Bug in meiner vcontrold-Config gefunden. Seit 2022 las und schrieb ich Heizkreis 1 statt Heizkreis…

Zigbee Smart Heating: Telegraf crasht und TRVs lügen

Ich hab 6 Zigbee-Geräte für die Heizungssteuerung: 4 Sonoff Thermostate (TRVs) und 2 Temperatursensoren. In InfluxDB tauchten aber nur 3 davon auf. Telegraf lief, zigbee2mqtt auch, aber irgendwas dazwischen war kaputt. Also hab ich debuggt.

VHF/UHF Multi-SDR Setup - Eine Antenne für viele Frequenzen

Nach dem Flightradar ADS-B Setup war klar: RTL-SDR macht Bock und ich will mehr empfangen. Flugfunk, ACARS, NOAA-Wettersatelliten, Marine VHF, ISM-Band - alles im VHF/UHF Bereich zwischen 100 MHz und 500 MHz. Eine Discone-Antenne kann das alles, aber mit einem Dongle kann ich immer nur eine Frequenz gleichzeitig hören. Also plane ich mir einen LNA, einen 4-fach Splitter und vier RTL-SDR Sticks zu…

Smart Home Heizung mit Zigbee - Altbau effizienter heizen

Ich heize gerade mein 1980er Altbau kaputt und hab keine Ahnung ob die Heizungskurve stimmt. Die Viessmann läuft auf Neigung 1.2 / Niveau 3.0 und das ist vermutlich viel zu hoch. Ich hab keine Sensoren in den Räumen, also keine Daten. Also hole ich mir Zigbee Thermostate und Temperatursensoren für jeden Raum, alles ins Grafana, dann kann ich sehen wo ich zu viel heize.

Flightradar ADS-B Feeder - Flugzeuge tracken vom Dach

Ich wollte wissen was da oben so rumfliegt und hab mich erst für ein kostenloses Flightradar24 Empfänger-Kit beworben. Die haben mich abgelehnt. Also hab ich einen alten RTL-SDR Dongle ausgegraben, ein Stück Draht als Notantenne angesteckt und ans Fenster gestellt. Hat erstaunlich gut funktioniert, schon mit diesem Provisorium hab ich Flugzeuge bis ~150km Umkreis tracken können.

RimWorld: Ein vollständiger Step-by-Step Guide zum Durchspielen

Dieser Leitfaden bietet eine klare, praktische Schritt-für-Schritt-Struktur, um eine stabile Kolonie aufzubauen und das Spiel über das klassische Raumschiff-Ending erfolgreich abzuschließen. Der Fokus liegt auf einem Standardspiel mit Crashlanded-Start und mittlerem Schwierigkeitsgrad. Phase 1 – Sta…

Wie ich mit Nginx Umleitungen realisiere und mit Python teste

Ich brauchte für meinen Blog eine Möglichkeit leicht und schnell ganz viele Redirects zu definieren. In diesem Post möchte ich meine Lösung vorstellen. Zuerst muss eine .map File erstellt werden. Jede Zeile stellt ein Redirect dar und sollte folgendes Format haben VON NACH;. Wichtig ist es jede Zeil…

Automatischer Export meiner Viessmann Heizung

Ende 2017 haben wir die 40 Jahre alte Ölheizung durch eine neue Anlage von Viessmann ersetzt. Das moderne Gerät stellt viele verschiedene Datenpunkte bereit und ich erkläre wie ich diese auslese und verarbeite. Das Ganze läuft mit vcontrold über die serielle Schnittstelle, die Daten landen in Influx…

Data logging meines SMA Tripower 6.0 Inverters

Mein neuer Inverter bietet eine Vielzahl von Datenpunkten welche ich aktiv mitlogge. Ich erkläre wie ich diese auslese und verarbeite. Das System holt sich täglich die CSV-Exporte vom Inverter per API, parst die Daten und schreibt sie in InfluxDB. Grafana zeigt dann Produktion, Umsatz und Peak-Leist…

Mein vernetztes Haus

Ich möchte in den nächsten Posts erklären welche Daten ich in meinem Haus sammle und wie diese verarbeitet werden. Warum ich Daten sammle Vor ein paar Monaten ist einer meiner beiden SMA Photovoltaik Wechselrichter kaputtgegangen und musste ersetzt werden. Da die beiden schon ein paar Jahre auf dem…

Noch mehr Docker Container

Wie versprochen gibt es wieder ein paar Docker Container aus meinem Homelab. Gogs version: 2 services: postgres: image: postgres:9.5 restart: always environment: - "POSTGRES_USER=gogs" - "POSTGRES_PASSWORD=gogs" - "POSTGRES_DB=gogs" volumes: - "db-data:/var/lib/postgresql/data" networks: - gogs go…

Fingerprint eines SSH Keys auslesen

Ich musste nachschauen welcher SSH Key auf Github hinterlegt ist. Dort wird aber nur der Fingerprint und nicht der Public Key angezeigt. Folgender Command liefert mir die Antwort. cd ~/.ssh ssh-keygen -l -E md5 -f id_rsa # 2048 MD5:ab:cd:ef:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff michael@malura.de (R…

Bilder mit Exiftool sortieren

Bisher habe ich unsere Fotos von Hand in folgende Ordnerstruktur einsortiert: Jahr/Monat/Tag/Bildname-Nummer.format Mit der Zeit wird sowas aber anstrengend und fehleranfällig. Darum habe ich mir ein Script geschrieben welches per cronjob aufgerufen wird und jeden Abend neue Bilder einsortiert. #!/b…

Ich lerne wieder C++

Lange ist es her, dass ich wirklich ernsthaft mit C++ gearbeitet hab. Jetzt möchte ich mir den aktuellen C++17 Standard anschauen und mich mehr mit den modernen Konzepten beschäftigen. Besonders interessiert bin ich an Smart Pointern, Lambda-Ausdrücken, strukturiertem Binding und den neuen STL-Featu…

Meine liebsten Docker Container

Die folgenden Docker Container laufen aktuell in meinem Homelab. Deluge Deluge ist ein Torrent Server. Ich lade meine Linux ISOs am liebsten über Torrent und möchte der Community natürlich auch etwas zurückgeben. Darum seede ich meine lieblings ISOs von meinem Homeserver aus in die weite Welt hinaus…

Das 6. Gamedev Gathering

Heute habe ich mich komplett auf Blender konzentriert und gelernt damit zu arbeiten. Blender ist einfach ein super Tool. Bis zu diesem Tag war ich ziemlich davon eingeschüchtert aber nach ein paar Videos und einem "Open Mind" lief alles wie geschmiert.

Ich wurde gekündigt

Tja das wars. Heute wurde ich von meinem Arbeitgeber angerufen und gekündigt. Laut seiner Aussage haben wir für unser aktuelles Projekt keinen Investor gefunden und müssen es somit einfrieren. Das kam ziemlich überraschend, auch wenn die wirtschaftliche Situation in letzter Zeit angespannt war. Jetz…

Anti cheat tricks - Variable offset

Eine kleine Klasse die zeigt wie manche Developer Werte in ihren Games obfuskieren um Memory-Editing zu verhindern. Diese Technik fügt einen zufälligen Offset zu gespeicherten Werten hinzu, was sie schwerer in Memory-Scannern zu finden und zu modifizieren macht. #include template<typename…

Base Building Beispiel - Früher Prototyp

Spiele gerade viel Rimworld und wollte einen kleinen Proof of Concept vom Base-Building-System erstellen. Mehr über das Projekt findest du hier [[img:1]]

Ramda - Duplikate in Array finden

Für mein aktuelles Projekt muss ich checken dass eine Liste von Transaktionen keine Duplikate enthält (basierend auf der Transaction-ID). Zeige hier wie ich nach Duplikaten in Listen suche, basierend auf einer Property. const R = require( ramda ); const data = { transactions : [{ // Transactions ha…

Ramda - Zahlensequenz validieren

Ich musste sicherstellen dass ich keine Events verpasse. Deshalb hab ich ein Konzept mit einer Nummer gebaut die bei jedem Event hochzählt. Wenn die Nummern nicht aufeinanderfolgend sind, weiß ich dass die Collection nicht valide ist. Die Lösung nutzt Ramda für funktionale Validierung: Events werden…

Viertes Gamedev Gathering

Paar Game-Developer treffen sich jeden Monat um Spiele zu coden, zu trinken, zu reden und eine gute Zeit zu haben. Am 27.10.2018 war wieder so ein Tag. Haben uns wieder in der Toolbox Bodensee getroffen, ein großer Hackspace hier in Süddeutschland. Um 10 Uhr mit Club Mate gestartet und viel über akt…

Mein erstes Kaitai Struct

Hab ein Kaitai-Struct für .chr Files in Silver erstellt. Den Code findest du hier. [[img:1]] Thanks to othias, he created the initial file parser.

Mein erster Window Patch

Erster Versuch bei Binary Patching. Die Idee ist simpel: Öffne die Executable, finde die Bytes die du ändern willst und überschreib sie direkt. In diesem Fall hab ich einen Conditional Jump gepatched um einen Check komplett zu skippen. Das ist der straightforwardste Weg um Programm-Behavior permanen…

Silver Trainer nochmal

Wieder am Silver-Trainer gebastelt. Hab ihn von Grund auf neu gebaut und diesmal liest und schreibt er viel mehr Werte: Level, HP, Gold, Strength, Agility und ein paar andere. Der Hex-Dump links zeigt die rohe Memory-Region, das Overlay rechts zeigt die geparsten Stats in Echtzeit. Viel cleaner als…

Komische Phrasen in Silver gefunden

Als ich den Memory von Silver inspiziert hab, fand ich diese Phrasen. [[img:1]]

Mein erster DLL Proxy

Hab zum ersten Mal einen DLL-Proxy zum Laufen gebracht. Die Idee: Du ersetzt eine DLL die die Ziel-Applikation lädt mit deiner eigenen Version. Deine Proxy-DLL leitet alle Original-Funktionsaufrufe zur echten DLL weiter während sie gleichzeitig deinen Custom-Code ausführt. Sauberer Weg um sich in ei…

Ich habe eine Game-Funktion aufgerufen

Hab es geschafft eine interne Game-Funktion direkt aus injiziertem Code aufzurufen. Mit einem Disassembler hab ich die Funktionsadresse gefunden, die Calling-Convention und das Parameter-Layout rausgefunden, dann aus meiner DLL aufgerufen. Das gibt dir basically volle Kontrolle über die interne Game…

Mein erster Trainer

Hab meinen ersten Game-Trainer in C++ gebaut. Der scannt den Memory vom Zielprozess, findet die relevanten Adressen und lässt dich Werte wie Health oder Ammo zur Laufzeit modifizieren. Der Trainer attachted sich per OpenProcess ans Spiel, scannt Memory nach spezifischen Patterns um Player-Datenstruk…

Meine erste DLL Injection

Hab zum ersten Mal eine eigene DLL in einen laufenden Prozess injected. Der Injector in C++ nutzt CreateRemoteThread um die DLL ins Target zu laden. Einmal drin hookt die DLL ein paar Funktionen und schreibt Debug-Output. Der Injector öffnet den Zielprozess, allokiert Speicher für den DLL-Pfad, schr…

GOG Library downloaden

Wollte alle meine Games von GOG sichern. Also hab ich dieses praktische Tool gefunden. Du brauchst den lgogdownloader entweder von Github oder via deinem Package-Manager $ lgogdownloader # provide your email, password and code $ lgogdownloader --language=de,en --update-cache $ cd YOUR_DOWNLOAD_DIREC…

Debian Sound-Probleme beheben

Wenn ich Debian benutze höre ich manchmal ziemlich krasse Verzerrungen, Lags und Knackser beim Spotify hören oder Spiele spielen. Diese Einstellungen haben mir geholfen das Problem zu fixen. $ sudo nano /etc/pulse/daemon.conf # search for ; default-fragment-size-msec # remove the ; and set its value…

Android Emulator vom Terminal starten

Ich brauchte einen Weg den Android Emulator zu starten ohne Android Studio öffnen zu müssen. Zuerst hab ich das Standard-Emulator-Command versucht aber das hat nicht funktioniert. $ emulator -avd Pixel_XL_API_25 PANIC: Missing emulator engine program for x86 CPU. Also hab ich im Web gesucht und ra…

Turbo Mage - Früher Prototyp

Früher Screenshot von Turbo Mage, ein kleines Game gebaut während einem Gamedev Gathering. Du spielst einen Mage der durch Level kämpft. Das Ganze wurde übers Wochenende zusammengehackt. Das zeigt einen der ersten spielbaren States mit basic Movement und Spell-Mechanics die funktionieren. [[img:1]]

Pirates - Früher Prototyp

Früher Prototyp von einem Piraten-Game. Die Kernidee war ein Top-Down Segel- und Kampf-Spiel wo du zwischen Inseln navigierst. Noch sehr rough zu diesem Zeitpunkt. Nur basic Movement und eine Tilemap. Aber das Konzept war spaßig zum Rumspielen. [[img:1]]

CSV Dateien splitten

Musste ein CSV mit 14k Einträgen in mehrere Files splitten weil der Import auf einem unserer Server crashte wenn ich alles auf einmal importiert hab. # split -l lines file_to_split output/ $ split -l 4000 export.csv export/venues $ ls venues venuesaa venuesab venuesac venuesad $ cd export # append .…

MySQL Import/Export

Mit diesen Snippets kann ich einen kompletten Dump einer MySQL-Datenbank erstellen. dump mysqldump --host="xyz" \ --user="xyz" --password="xyz" \ --default-character-set=latin1 \ --result-file="./dump.sql" \ --lock-tables --add-locks --create-options \ --extended-insert --add-drop-table --disable-ke…

SSH Tunnel erstellen

#ssh -f user@remotehost -L localport:127.0.0.1:remoteport -N $ ssh -f root@database -L 3307:127.0.0.1:3306 -N Jetzt kann man sich über den Tunnel mit einer entfernten MySQL-Datenbank verbinden.

Trading Cards mit OpenCV erkennen

Prototyp zur automatischen Erkennung von Trading Cards per Kamera. OpenCV erkennt die Karten im Bild und gleicht sie mit einer Datenbank ab. Funktioniert schon ganz gut, solange die Beleuchtung halbwegs stimmt. [[img:1]] [[img:2]] [[img:3]]

Trading Bot - Strategien lernen

Weiterentwicklung des Trading Bots: Jetzt kann er verschiedene Strategien auf historischen Daten testen. Die Charts zeigen die Performance der einzelnen Strategien im Vergleich. So lässt sich sehen, welche Ansätze überhaupt Sinn machen, bevor man echtes Geld riskiert. [[img:1]] [[img:2]] [[img:3]] […

Trading Bot - Früher Prototyp

Erster Prototyp eines Trading Bots für Ripple. Die UI zeigt Live-Charts und Orderbuch-Daten. Alles in Node.js gebaut, noch ohne echte Strategie-Logik. [[img:1]] [[img:2]] [[img:3]] [[img:4]] [[img:5]] [[img:6]] [[img:7]]

King Marshmallow - Mehr Funktionen

Neue Features für King Marshmallow eingebaut. Das Spiel läuft mit Love2D und Lua. Hier sind ein paar Screenshots vom aktuellen Stand mit neuen Leveln, Mechaniken und UI-Elementen. Stück für Stück wird es spielbarer. [[img:1]] [[img:2]] [[img:3]] [[img:4]] [[img:5]] [[img:6]] [[img:7]] [[img:8]] [[im…

King Marshmallow - Früher Prototyp

Ende des Jahres und ich hatte die Idee ein simples Idle-Game zu erstellen. [[img:1]]

Tetris mit LÖVE

Ein Kumpel hat mich herausgefordert, ein Tetris-Spiel zu bauen. Ein paar Stunden später abgeliefert. [[img:1]] [[img:2]] [[img:3]]