This is the personal homepage of Daniel Friesel / derf / derfnull (depending on context and nickname availability). Every now and then, I write software and take pictures, which you can find here. There's also some hosted services.
Daily list of IC trains with Bimz wagons
Provides random music genres
CLI password safe
Interface to EFA-based itinerary services
> efa Essen Martinstr Düsseldorf Hbf 14:34 ab Essen Martinstr.: Bstg. 1 Straßenbahn 108 Essen Altenessen Bf Schleife 14:38 an Essen Hauptbahnhof: Bstg. 1 14:47 ab Essen Hauptbahnhof: 2 R-Bahn RE11 (RRX) Düsseldorf Hbf 15:24 an Düsseldorf Hbf: 10
Interface to Deutsche Bahn Wagon Order API
> db-wagenreihung 'Essen Hbf' 723 ▏ G ▕▏ F ▕▏ E ▕▏ D ▕▏ C ▕▏ B ▕▏ A ▕ > 39 38 37 36 35 33 32 31 29 28 27 26 25 23 22 21 >
Interface to HAFAS-based arrival/departure monitors
> hafas-m 'Messegelände, Leipzig' 14:32 STR 16 Lößnig, Leipzig 14:40 STR 16 Sportforum Süd, Leipzig 14:43 ALT 86 S-Bahnhof Messe, Leipzig 14:47 STR 16 Lößnig, Leipzig
Interface to the Deutsche Bahn IRIS arrival/departure monitor
> db-iris 'Dortmund Hbf' 14:38 +16 IC 2027 Passau Hbf 11 14:39 ABR RE11 Kassel-Wilhelmshöhe 8 14:41 RE 57 Winterberg(Westf) 2 └──── RE 57 Brilon Wald 2 14:41 S 5 Hagen Hbf 5 14:42 S 2 Dortmund Hbf 6 14:45 +1 RE 1 Aachen Hbf 16
Interface to URA-based realtime departure monitors
> ura-m Talbot 14:49:41 52 Aachen Bushof 15:04:47 11 Lichtenbusch 15:05:00 52 Eschweiler Bushof 15:18:00 1 Aachen Bushof 15:19:56 11 Hoengen Markt 15:35:00 1 Schevenhütte
Interface to EFA-based departure monitors
> efa-m Dortmund 'Universität S' 08:32 +1 02 445 Dortmund Am Kai 08:35 3 HB1 Dortmund Technologiezentrum 08:36 3 HB1 Dortmund Eichlinghofen H-Bahn 08:38 02 447 Dortmund Bandelstraße 08:39 2 S1 Dortmund Hbf 08:40 01 447 Dortmund Hacheney
vcs-home inspired dotfile manager
> ct a mutt mutt: retrieving package Cloning into 'mutt'... [..] created .muttrc -> /home/derf/packages/mutt/etc/muttrc
Electrocardiograph-like graphical and audible ping
> ekgping ccc.de __________^________^__________^________^______
save and restore environment variables
imlib2 based image viewer
Publish multiple MQTT messages at once
Firmware and Hardware
RGB cat moodlight
8x8 LED board with audio-based programmer
Light and power remote control
USB ↔ I²C adapter
These projects are neither developed nor maintained any more. Some do offer basic functionality, though.
Icinga1 Commandline Interface
Project status overview
automated mirrorer for webcomics and image galleries
Create thumbnail index for a set of images
Whitelist remote commands via ssh config
- Update stations list, prune duplicates and outdated entries (251 additions, 155 deletions). Incorporates patches by Moritz Schlarb and @Knuspel -- Thanks!
- Update documentation to reflect that EVA IDs used by DB IRIS are not the same as UIC station IDs (they just happen to be identical in 99% of cases)
- Stations are now stored in share/stations.json. See README.md for station management hints.
“Deep Sleep” allows an ESP8266 microcontroller to enter a very low-power sleep mode with less than 1mA sleep current. It works by connecting GPIO16 (which can be controlled from deep sleep) to the reset pin (RST) and programming the ESP8266 to provide a falling edge on GPIO16 after a specific amount of time, causing a system reset and thus a wakeup.
Here is how to use it on an ESP8266 controller (e.g. NodeMCU board or Wemos D1 mini) running the NodeMCU Lua firmware:
- Connect pin D0 (ESP8266 GPIO16) to RST (ESP8266 reset). Note that as long as D0 and RST are connected, you need to manually push the reset button when uploading new firmware using esptool – if that's too much of a hassle, consider using a jumper or another kind of reversible connection. Uploading NodeMCU applications is not affected by this, as it relies entirely on in-band signaling via UART.
- Do not use any GPIO functions operating on pin D0.
- Call rtctime.dsleep to go to sleep. When the sleep time has elapsed, execution will not continue normally -- instead, the ESP8266 will be reset and start over.
- You might also be able to use node.dsleep