Herbsternte!
Alexander Dunkel
Problem Solver, Data Engineer, Landscape & Urban Planner, Programmer, Windsurfer, Photographer, Father; not always in this order
Works @ioer@wisskomm.social
Das hat wirklich Spaß gemacht: Teil 2 meiner Batterie-Automatisierungs Serie ist draußen. Diesmal mit Update für zwei Batterien und vielen interessanten Feintunings der Regelung. Keine Plugins notwendig - vollständig in Home Assistant's nativem yaml Syntax. 1:1 für Balkonkraftwerke nutzbar.
https://du.nkel.dev/blog/2026-07-26_dual_battery_automation/
Parenting kids often requires tricky compromises. When his friends started getting gaming consoles, we wanted to give our son the same opportunity so he wouldn't feel left out. However, we have a small apartment, no TV, and I wasn't keen on buying hot, loud hardware or getting locked into walled gardens. Working in sustainability sciences, I also try to avoid unnecessary resource consumption. I wanted to see if I could build a viable alternative to buying a dedicated console.
I ended up buying a used 4U Supermicro server on eBay (I lucked out and broke even by selling the included Tesla V100S GPU) and installed a 24GB RTX 4000 Blackwell. This machine sits 130km away, running on remote PV-solar power. I set up a cloaked Windows 11 VM with GPU passthrough, streaming via Sunshine over a rock-solid IPsec (IKEv2) tunnel.
For his device, I rescued an old 2017 Galaxy Tab S3. I flashed a clean ROM, set up TimeLimit via F-Droid (allowing 30 mins/day, 2 hrs on weekends), and attached a GameSir G8 controller.
I also wanted him to be somewhat independent, so I created a simple Home Assistant dashboard. When he wants to play, he taps a single button that sends an IPMI Redfish command to boot the remote server. A minute later, he opens Moonlight and is playing Forza Horizon 5 fluidly. A 2024 game running flawlessly on a 9-year-old tablet!
The flexibility is absolutely great. Whether we are traveling with an old laptop, using my Pixel phone (greetings #Graphene), or visiting his grandmother's TV, the setup just works. Best of all, I only have one central OS to maintain. The Xeon CPU has 72 cores and barely hits 9% usage during gameplay, so I'm planning to add a second GPU to share the server with a friend's family.
I am aware that having the technical capacity to build this is a unique privilege. I still wanted to share this to show that alternatives to constant hardware consumption exist. By pooling resources and reusing old tech, we can escape walled gardens without sacrificing the experience.
#HomeLab #Parenting #ScreenTime #Upcycling #SolarPunk #CloudGaming #Moonlight #Sustainability
@zendis@social.bund.de Grist (https://www.getgrist.com/) ist eine unglaublich ausgereifte, souveräne Software. Der Französische Staat hat kritische Komponenten finanziert (z.B. SSO). Die kleine Firma mit wenigen Angestellten strauchelt (oder "kämpft"?) trotzdem gerade und sucht nach Möglichkeiten, sich zu finanzieren. Wäre das nicht ein tolles Kooperations-Projekt (mit der franzsösischen DINUM oder ANCT), um souveräne Europäische Software auch weiterhin unabhängig zu halten? Ich weiß, Ihr habt genauso viele Probleme. Aber es wäre aus meiner Sicht wichtig, sich mit den Nachbarn zusammen zu tun, um langfristig die nötige kritische Masse für solch wichtige Infrastruktur-Komponenten zu haben.
(After a brief moment..) ... I really like the new Funkwhale 2.0.0 Layout/Colors! Many thanks @funkwhale@social.funkwhale.audio!
The update from 1.4.0 to 2.0.10 required more preparation, but overall it was a smooth experience. I only had to fix my nginx Content-Security-Policy list and a few .env updates.
There was a minor UI bug showing a horizontal scroll bar, but I was able to quick-fix it [1].
[1]: https://dev.funkwhale.audio/funkwhale/funkwhale/-/work_items/2763
#funkwhale #self-hosted
Beautiful routing alternative: #Organicmaps on #grapheneos. I had to look up on how to add intermediate stops. Everything else is very intuitive. Refreshing to see a viable alternative to gmaps!
Was für ein spaßiges, kleines Projekt! Ich habe meinen Blog Post zur Open Source Automatisierung des Marstek Batteriespeichers jetzt doch noch auf Deutsch übersetzt:
https://du.nkel.dev/blog/de/2026-01-11_marstek-batterie-homeassistant/
@balkonsolar@freiburg.social @energy_charts_d@wisskomm.social @eeMag@mastodon.no2nd.earth @AgoraEW@mastodon.energy
@ccc@chaos.social
#batterie #pv #eeg #energiewende #opensource #automatisierung #devops
Norway is really uncomplicated as far as the word goes. We are on a camping/car trip. Camping registration is just pay & stay. I don't need to provide my name, Id, or address. WiFi? Free guest sign in everywhere, no acceptance of ToS or anything. All things appear thought through. Thirsty? The next public tap water is likely just metres away. Everyone cleans up after staying in public places. It is just easy and worry free, especially when traveling with small kids. Awesome first time, #Norway!
Wir hatten immer Probleme die Handys im VW T4 beim langen Stehen auf Stellplätzen zu laden.
Heute habe ich eine 12 Volt Steckdose und ein USB Ladegerät eingebaut, versteckt unten hinter dem Fahrersitz. Die Stromversorgung läuft über die Zweitbatterie (unter dem Fahrersitz). Um das System abzusichern, habe ich einen kleinen Sicherungskasten genommen. Die Steckdose ist dauerhaft mit 15 Ampere abgesichert. Das USB Ladegerät wird über einen eigenen Schalter bedient und ist separat mit 5 Ampere gesichert. Das Verlegen und Crimpen der Kabel war eine kleine Herausforderung, wenn man vorher nur PV-Anlagen gecrimpt hat - Fummelarbeit!
Nachdem der Stromkreis erfolgreich getestet war, habe ich die freiliegenden Kontakte am Sicherungskasten isoliert und den Kasten mit Kabelbindern fixiert. Einem Kurzschluss durch Vibrationen ist damit vorgebeugt.
Die nächste Reise kann kommen!
I wanted to add a button to Home Assistant that would turn on my remote server via IPMI. I also did not want to add the ipmitool dependencies to my #HASS container. Since IPMI supports redfish, a simple rest command in home assistant is enough. Add this to your `configuration.yaml`:
```yaml
rest_command:
# Command to turn the server ON
server_power_on:
url: "https://192.168.100.111/redfish/v1/Systems/1/Actions/ComputerSystem.Reset"
method: post
username: "hass"
password: "eX4mP13p455w0Rd"
verify_ssl: false
headers:
Content-Type: "application/json"
payload: '{"ResetType": "On"}'
# Command to gracefully shut down the OS via IPMI (ACPI signal)
server_power_off:
url: "https://192.168.100.111/redfish/v1/Systems/1/Actions/ComputerSystem.Reset"
method: post
username: "hass"
password: "eX4mP13p455w0Rd"
verify_ssl: false
headers:
Content-Type: "application/json"
payload: '{"ResetType": "GracefulShutdown"}'
sensor:
- platform: rest
name: "Server Power State"
resource: "https://192.168.100.111/redfish/v1/Systems/1"
method: GET
username: "hass"
password: "eX4mP13p455w0Rd"
verify_ssl: false
scan_interval: 10 # Checks every 10 seconds
value_template: "{{ value_json.PowerState }}"
template:
- switch:
- name: "Server"
state: "{{ is_state('sensor.server_power_state', 'On') }}"
icon: >-
{% if is_state('sensor.server_power_state', 'On') %}
mdi:server-network
{% else %}
mdi:server-network-off
{% endif %}
turn_on:
action: rest_command.server_power_on
turn_off:
action: rest_command.server_power_off
```
Make sure to create a separate IPMI user with "Operator" privileges (allowed to start/shutdown, but not to modify settings). If you have e.g. #Proxmox on the server, it will receive the IPMI Graceful Shutdown command and cleanly stop all VMs before exiting.
Works great!
#hass #homeassistant #redfish #api #ipmi #supermicro #homelab
@grapheneos_de@mastodon.social Allein das wäre ein Hauptgrund, keinen VW zu kaufen. Im Vergleich dazu: Ich habe zwei chinesische Produkte (Marstek Hausbatterie, Huawei Wechselrichter). Beide haben vollen support für standardisierte, lokale Schnittstellen (Modbus TCP). Keine Netzwerkverbindung oder Internet notwendig. Alle Daten abrufbar, alles frei einstellbar über die Software, die ich möchte (Home Assistant). So muss das sein, #VW.
We’re rethinking the conference #Hackathon format by launching a HaCLAthon (C=Collaborative, L=Long-term, A=Asynchronous) [1] for the #IOER 2026 conference. [2]
The goal is a living #JupyterBook that becomes a citable publication with a DOI. Here is the stack I built to make it actually work:
1. The Problem: Jupyter Notebooks are great for #DataScience, but a difficult for collaborative #Git diffs and non-technical domain experts. Solution: We use #Jupytext to maintain a bidirectional sync between .ipynb (for code) and .md (for text stories).
2. The Problem: Inviting external contributions usually means a security/privacy black box if you use 3rd-party CMS brokers to link into Github/Gitlabs. Solution: I deployed a self-hosted #Golang OAuth broker to handle the GitHub handshake on our servers as a microsservice. 100% #DSGVO compliant and sovereign. [3]
3. The Problem: We want domain experts to write, but we don't want to force them to learn Git. Solution: Integrated a browser-based visual editor (#DecapCMS/#SveltiaCMS). Edits enter a Kanban-style editorial workflow as PRs. We review/merge on Github, and our #GitLab CI/CD builds the book.
4. The Result: Developers get #Jupyter4NFDI or local #Docker environments. Writers get a WYSIWYG browser editor. Everyone gets listed as an author on a persistent scientific artifact.
Documentation is also about building inclusive pipelines!
Want to contribute a "hack" or spatial data story?
We are looking for contributions on urban resilience, circularity, and land-use change. 🌍
Github: https://github.com/ioer-dresden/ioer-conference-2026-haclathon
Book: https://hack.conference.ioer.info/
Background: https://ad.vgiscience.org/links/posts/2026-05-07-haclathon/
Slides: https://slides.ad.ioer.info/haclathon/
#OpenScience #OpenData #Sustainability #Jupyter #DevOps #GIS #Infrastructure #HaCLAthon
@ioer@wisskomm.social @diegorybski.bsky.social
[1]: https://hack.conference.ioer.info/
[2]: https://conference.ioer.info/
[3]: https://gitlab.hrz.tu-chemnitz.de/ioer/fdz/tools/cms-auth
[4]: https://slides.ad.ioer.info/haclathon/
Finally installed 9 nesting boxes for the common swift! / Endlich haben wir 9 Mauersegler Nistkästen installiert.
If you look to the right, you will see a stove vent hole. For about six years, this hole has served as a nest for a pair of common swifts. The same pair has returned from Africa every year since then. Their nest was very small, so we bought them a couple of luxury apartments. The first swifts are expected to arrive from Africa on or after 15 April. I'm excited to see their reaction!
---
Auf der rechten Seite seht ihr ein Loch einer E-Herd-Entlüftung. Seit etwa sechs Jahren diente diese Loch einem Paar Mauerseglern als Nistplatz. Seitdem kehrt dasselbe Paar jedes Jahr aus Afrika zurück. Da das Nest sehr klein war, haben wir ein paar Luxuswohnungen besorgt. Die ersten von den Mauerseglern kehren ab dem 15. April aus Afrika zurück. Ich bin gespannt auf die Reaktion!
I added an #S3-compatible Storage backend to a #selfhosted #Grist [1] instance. This allows creating forms with "Attachements" in Grist (e.g. users can upload photos). I experimented with several and settled on Zenko Scality #CloudServer [2]:
- #MinIO [3] is somewhat deprecated and not really open source anymore. Its future is unsure.
- #GarageHQ [4] looks pretty great and I wished I could have used this, but it is not yet feature-complete with S3 protocol and specifically missing the versioning feature (I reported this [5])
- #Zenko Scality works out of the box; it is a bit too "big" for my context (aimed at thousands of parallel users) and uses 500MB memory; but it does the job for now.
The S3 Storage protocol is needed in many situations for data infrastructure and allows to decouple persistend data from ephemeral base images (I am considering adding this to my #Mastodon instance, too).
I posted my compose here [6].
[1]: https://github.com/gristlabs/grist-core
[2]: https://github.com/scality/cloudserver
[3]: https://www.min.io/
[4]: https://garagehq.deuxfleurs.fr/
[5]: https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/166
[6]: https://github.com/scality/Zenko/discussions/1779#discussioncomment-15869532
IOER FDZ Carto-Lab Docker v1.1.0 is released [1].
The main addition in this version is the integration of #JupyterGIS. It is a stunning project that brings a full web-based GIS suite directly into the Jupyter environment, complete with real-time collaborative editing for team projects [2].
I also expanded the documentation to cover advanced developer workflows. This includes new guides on persistent SSH client authentication for Git [3] and the templates I use for setting up automated, reproducible research pipelines [4].
Available via our Gitlab Chemnitz Registry (internal) and publicly via Quay.io:
https://quay.io/repository/ioer-fdz/carto-lab-docker?tab=info
#GIS #Jupyter #SpatialDataScience #ReproducibleResearch #Docker #RDM
[1]: https://github.com/ioer-dresden/carto-lab-docker/releases/tag/v1.1.0
[2]: https://cartolab.fdz.ioer.info/jupytergis/
[3]: https://cartolab.fdz.ioer.info/use-cases/ssh-client-auth/
[4]: https://cartolab.fdz.ioer.info/use-cases/automated-research-setup/
Two things happened yesterday. First, I found a broken MC4-Connector on my 5-year-old solar panel installation. I noticed this last week when looking at pv string volatages/current, where one of the five strings was suddenly dropping under load. I used a thermal imaging camera to check on pv modules and found two hotspots. One was directly above the broken connector.
This is no sign of aging! The installer likely caused this from the beginning. I could identify the missing string current in all my logs going backward to the date of installation in 2020.
Shoddy construction! From now on, I will crimp all my PV cables myself. It is apparently impossible to trust construction companies with this. I will replace the broken MC4-Connector next week...
Giscus [1] is awesome for adding comments to static sites using the Github discussion feature. However, relying on GitHub always felt like a double-edged sword.
I just saw BeBlog that allows comments to be integrated with self-hosted Gitlab instances. Nice! Here's a blog post [3]. I haven't tried it. Anyone?
[1]: https://github.com/giscus/giscus
[2]: https://gitlab.com/antonbelev/beblob
[3]: https://belev.me/2025/02/20/Introducing-BeBlob-A-GitLab-Powered-Comment-Section-for-Static-Websites/
#comments #static #pages #blog #integration #community #feature
@radim@mastodon.social Danke für die Aufklärung! Interessant:
Wer die Tracer-Flüssigkeit freigesetzt hatte, wird noch von der Stadtentwässerung nachgeprüft: Das muss vorab bei der Unteren Wasserbehörde angemeldet werden. In diesem Fall war das nicht geschehen.
Heute früh gesehen am Kaitzbach in Dresden an der 71. Grundschule. Ist bekannt, was die Ursache für die Grünfärbung ist?
@lfulg@social.sachsen.de @BitsUndBaeumeDresden@dresden.network
Mal wieder ein "Digitalisierungs-Moment": Um sich bei huk24.de mit Keepass Auto-type einzuloggen, lautet das Muster (nach einigem probieren) so:
```
{USERNAME}{TAB}{TAB}{TAB}{TAB}{TAB}{ENTER}{DELAY 3000}{PASSWORD}{ENTER}
```
Liebe @huk24: Denkt doch bitte an die Menschen, die nicht nur mit der Maus unterwegs sind.
Danach muss man natürlich noch auf den sms code warten, weil TOTP nicht unterstützt wird.
At #IOER_FDz we faced a common challenge: as our technical workflows, data publication guidelines, and infrastructure grows, we realized colleagues rarely read through our extensive documentation. Attention is limited, and when someone needs to solve a specific problem, large guides are rarely read. We needed a communication agent that could bridge the gap between individual questions and our shared internal knowledge base.
To address this, we now have an embedded #AnythingLLM assistant into our Material for MkDocs documentation. It works great! Here are a few interesting technical infos:
- To keep internal data locally and avoid commercial APIs, the inference is handled on university HPC hardware via ScaDS.AI API (TU Dresden). We paired `meta-llama/Llama-3.3-70B-Instruct` with `Qwen/Qwen3-Embedding-4B` to bypass the context window bottlenecks of smaller default embedders.
Feeding raw documentation into a RAG vector database was not _so_ trivial:
1. Ingesting raw repository Markdown caused the LLM to hallucinate URLs. It outputted broken relative `.md` paths, lacked awareness of the actual navigation hierarchy, and character-based chunking cut long tables off from metadata headers.
2. We rely on a number of mkdocs plugins (macros, live database tables pulled in CI&CD, `gen-files`). This meant that the raw repository files do not contain the final compiled text, so the LLM was first missing part of the information.
I added a native MkDocs build hook (`mkdocs_llm_hook.py`). The hook intercepts the compiled Markdown after macros are executed, resolves internal relative links to absolute production URLs, semantically pre-chunks content along Markdown headings (`#`, `##`, `###`), and produces hash-anchored links for the LLM. Metadata (`Canonical_URL` and `Document_Hierarchy`) is added to each chunk before syncing with the AnythingLLM API during `mkdocs build`.
I documented the hook script, system prompt, model parameters, and UI fixes in a Gist for those interested here:
https://gist.github.com/Sieboldianus/8c14da1370891ba2fcdf09882bd78daf
It is a nice way to help colleagues find needed information faster and with better relevance filtering. Accessibility bonus: You can ask it in any language!
#MkDocs #AnythingLLM #RAG #ScaDS #Python #DevOps #OpenSource
A very minimal member count growth svg, generated via CI&CD in plain python [1] from Keycloak API (read-only, limited scope). See it in action: https://lausitzer-surfer.de/#mitglieder
🤙 Hang Loose!
I've updated the documentation for Carto-Lab Docker [1]. Maintaining open source software in spatial data science requires documenting reliable research workflows. I find this even more important than package and feature updates.
New sections cover specific setups for reproducible spatial data processing, such as connecting VS Code to remote Jupyter containers [2], managing long-running spatial jobs in the background [3], and configuring SSH agent support for automated Git authentication [4].
#SpatialDataScience #OpenScience #Reproducibility #JupyterLab
[1]: https://cartolab.fdz.ioer.info/
[2]: https://cartolab.fdz.ioer.info/use-cases/vscode-remote/
[3]: https://cartolab.fdz.ioer.info/use-cases/long-running-jobs/
[4]: https://cartolab.fdz.ioer.info/use-cases/ssh-client-auth/
@dalai@toots.ch Good catch! Luckily this one is about as real as foo and bar. It’s just a leet-speak example password.
Artemis II picture of earth (left) compared to an image from 1972 (right). I am not sure if the dusty look for today’s image is a deliberate photo settings choice (e.g. night side) or partly explained by physical changes? Anyway, great pictures.
