
Now with firmware!
All of my programs for the Lilygo LoRa Pager on https://github.com/Tinkerpete now have downloadable firmware.

All of my programs for the Lilygo LoRa Pager on https://github.com/Tinkerpete now have downloadable firmware.
I keep getting emails from M5 even though I think I've already ordered the Cardputer Zero with a camera. It's listed with the black transparent case and accessories like LoRa, but I can't order it at all. I'd like to order the "Ultimate Set," but the "Pledge" button is grayed out.
Weil das bestimmt auch wieder gleich kommt: Den Text habe ich zusammen mit einer KI geschrieben, die ihn genau wie ich das will für mich formuliert hat.
Ich möchte eine möglichst autarke Stromversorgung, weil ich meinen eigenen Strom möglichst einfach selbst erzeugen, speichern und verbrauchen will. Es geht mir nicht darum, Stromhändler zu werden. Es geht mir auch nicht darum, eine Anlage zu besitzen, die ständig mit Netzbetreiber, Herstellerclouds, Portalen, Registrierungen und wechselnden Regeln verknüpft ist. Ich möchte Strom auf meinem Dach erzeugen und ihn in meinem Haus nutzen.
Das bedeutet nicht, dass ich grundsätzlich keinen überschüssigen Strom abgeben möchte. Im Gegenteil: Wenn meine Anlage mehr Strom erzeugt, als ich gerade verbrauchen oder speichern kann, wäre es sinnvoll, diese Energie anderen zur Verfügung zu stellen. Ich hätte kein Problem damit, überschüssige Energie ins Netz abzugeben, wenn das einfach, fair und ohne dauerhafte Zusatzprobleme möglich wäre. Mein Problem ist nicht das Abgeben von Strom, sondern das System, das daran hängt.
Bei einer normalen netzparallelen PV-Anlage ist genau das der Knackpunkt. Die Anlage wird Teil des öffentlichen Stromsystems. Dann kommen Anmeldung, Marktstammdatenregister, Netzbetreiber, Zähler, Messkonzept, technische Vorgaben und zugelassene Geräte ins Spiel. Vieles davon ist aus Sicherheitsgründen nachvollziehbar. Eine Anlage darf bei Netzausfall nicht ins öffentliche Netz zurückspeisen. Trotzdem macht es das Projekt komplizierter, als es für einen privaten Hausbesitzer eigentlich sein müsste.
Mein Problem ist nicht, dass es Sicherheitsregeln gibt. Mein Problem ist, dass man sehr schnell in ein System hineingerät, das man kaum noch überblickt. Man möchte den eigenen Strom nutzen und gelegentlich Überschuss abgeben, wird aber behandelt wie ein kleiner Stromerzeuger mit Melde-, Anschluss- und Dokumentationspflichten. Selbst wenn man gar kein Geschäftsmodell daraus machen will, ist oft unklar, welche Pflichten entstehen und wie sich die Regeln in Zukunft verändern.
Dazu kommt das fehlende Vertrauen in stabile Rahmenbedingungen. Energiepreise, Inflation, Förderungen, Steuern, Abgaben und technische Regeln ändern sich. Eine PV-Anlage baut man aber für viele Jahre. Ich möchte nicht heute viel Geld investieren und später feststellen, dass neue Vorgaben, neue Messsysteme, neue Steuerungsmöglichkeiten oder neue Abgaben hinzukommen.
Ich behaupte nicht, dass es einen belegten Plan gibt, private Solarbetreiber gezielt auszunehmen. Aber man sieht, dass private Stromerzeugung immer stärker registriert, gemessen und steuerbar gemacht wird. Marktstammdatenregister, Netzbetreiberanmeldung, intelligente Messsysteme, Steuerboxen, Einspeisebegrenzungen und Fernsteuerbarkeit sind einzeln erklärbar. Zusammengenommen entsteht aber der Eindruck, dass private Eigenversorgung nicht einfach frei stattfindet, sondern immer stärker in ein reguliertes System eingebunden wird.
Steuerlich ist die Lage heute zwar besser als früher. Bei vielen privaten Dachanlagen ist die Einspeisevergütung inzwischen einkommensteuerfrei. Man muss also oft keine jährliche Gewinnermittlung und keine Anlage EÜR mehr machen. Das nimmt einen Teil des Problems weg. Die eigentliche Bürokratie bleibt aber trotzdem: Registrierung, Netzbetreiber, Zähler, Anschlussregeln, Messkonzept und technische Einbindung.
Ein Blick in die Niederlande zeigt, dass es auch einfacher gehen kann. Dort konnten Haushalte lange eingespeisten Solarstrom mit dem eigenen Strombezug verrechnen. Das Netz war dadurch fast wie ein virtueller Akku. Diese Logik ist für Bürger verständlich: Wer überschüssigen Strom abgibt, bekommt ihn später bilanziell angerechnet. Diese Regel läuft allerdings aus. Auch das zeigt: Politische Rahmenbedingungen können sich ändern. Genau deshalb möchte ich möglichst wenig abhängig von solchen Regeln sein.
Ein weiterer Punkt ist die Technik im Notfall. Es wirkt für mich unsinnig, viel Geld in Solarmodule, Wechselrichter und Batterie zu investieren und dann bei Stromausfall trotzdem keinen Strom im Haus zu haben. Natürlich muss eine Anlage sicher vom öffentlichen Netz getrennt werden. Aber wenn auf dem Dach Strom erzeugt wird und im Keller ein Akku steht, sollte die Anlage im Notfall wenigstens wichtige Hauskreise versorgen können. Eine PV-Anlage mit Speicher, die bei Netzausfall komplett abschaltet, ist für mich unvollständig geplant.
Deshalb interessiert mich Autarkie. Eine autarke Anlage ist klarer. Sie erzeugt Strom, speichert ihn und versorgt das Haus. Sie speist nicht ein. Sie hängt nicht ständig parallel am öffentlichen Netz. Sie ist nicht darauf ausgelegt, Teil eines größeren Strommarktes zu sein. Was im Haus erzeugt wird, bleibt im Haus.
Natürlich hat auch das Nachteile. Im Winter reicht die Sonne nicht immer. Dann muss man sparsamer sein, auf Netzbetrieb umschalten oder eine andere Energiequelle nutzen. Außerdem muss eine Inselanlage sauber geplant werden. Sie muss ein stabiles 230/400-Volt-Netz bilden, Schutzorgane auslösen lassen und große Verbraucher kontrollieren. Durchlauferhitzer, Sauna, Heizstab, Wärmepumpe oder Autoladen können zu viel sein. Dafür braucht man Lastabwurf, also eine automatische Sperre oder Begrenzung solcher Verbraucher.
Mir ist bewusst, dass eine netzparallele Anlage mit Backup im Alltag komfortabler ist. Sie nutzt PV, Akku und Netz automatisch zusammen. Bei Netzausfall kann sie sich trennen und das Haus weiter versorgen. Technisch ist das wahrscheinlich für viele Haushalte die beste Lösung. Aber sie bleibt Teil des Netzsystems und bringt Anmeldung, Messung und Regulierung mit sich.
Die Entscheidung ist daher nicht nur technisch. Es geht um Kontrolle. Eine netzparallele Anlage ist bequemer und würde es ermöglichen, Überschuss sinnvoll abzugeben. Gleichzeitig ist sie stärker eingebunden. Eine autarke Anlage ist unbequemer und anspruchsvoller, aber klarer und unabhängiger.
Ich möchte autark sein, weil ich meine eigene Energieversorgung verstehen und kontrollieren will. Ich möchte möglichst wenig dauerhafte Abhängigkeit von Netzbetreibern, Portalen, Clouds, wechselnden Regeln und politischen Entscheidungen. Ich möchte keine Anlage, die nur dann funktioniert, wenn sie in ein externes System eingebunden ist. Ich möchte eine Anlage, die im Alltag meinen Verbrauch deckt und im Notfall tatsächlich nutzbar ist.
Wenn es eine einfache, faire und dauerhaft stabile Möglichkeit gäbe, überschüssigen Strom ohne die ganzen Folgeprobleme abzugeben, würde ich das gerne tun. Es wäre sinnvoller, überschüssige Energie zu nutzen, statt sie abzuregeln. Mein Wunsch nach Autarkie entsteht also nicht, weil ich anderen keinen Strom geben will. Er entsteht, weil die Einbindung in das öffentliche System für mich zu viele Unsicherheiten, Abhängigkeiten und bürokratische Folgen mit sich bringt.
Wer privat Strom erzeugt, ist nicht automatisch ein Exzentriker. Er möchte Verantwortung übernehmen. Genau deshalb sollte es einfacher sein, zwischen netzparalleler Anlage, Nulleinspeisung, Ersatzstrom und echter Autarkie zu wählen. Nicht jeder möchte Strom verkaufen. Manche möchten einfach ihren eigenen Strom im eigenen Haus nutzen — und überschüssige Energie nur dann abgeben, wenn das ohne unnötige Zusatzprobleme möglich ist.
Nachdem ich hier auf Reddit schon sehr kritisch angegangen worden bin, weil ich die Idee hatte das ein Solateur mir eine autarke Anlage baut und es so dargestellt wird, als ob dies eine dumme Idee ist, habe ich zusammen mit KI selbst mir eine solche Anlage konzipiert.
Was haltet Ihr davon?
Hi everyone,
I have been experimenting with the LilyGO T-LoRa Pager and published a small set of open-source projects for it.
Projects:
- TomsWebRadio: Web radio with WiFi setup, station list, clock, alarm and sleep timer
https://github.com/Tinkerpete/TomsWebRadio
- TomsLoRaSOS: Outdoor pager prototype with GPS map, cached map tiles, LoRa messages and SOS/dead-man mode
https://github.com/Tinkerpete/TomsLoRaSOS
- TomsPasIDE: A tiny Pascal-like IDE directly on the pager, with editor, console, SD files and examples
https://github.com/Tinkerpete/TomsPasIDE
- TomsPDP11Hommage: PDP-11 inspired front panel demo for the pager display and rotary input
https://github.com/Tinkerpete/TomsPDP11Hommage
- TomsZork: Z-Machine interpreter for playing legally owned Z-code story files on the pager
https://github.com/Tinkerpete/TomsZork
All projects include README files with build/install notes. They are currently Arduino/LilyGoLib based and licensed as GPL-3.0-or-later, with commercial licensing available on request.
More notes and background:
https://steinlaus.de/
I would be happy about feedback, testing results on different Pager revisions, or ideas for what to improve next.Hi everyone,
Tom
Here is the Z-Machine emulation on a Lilygo LoRa Pager, which can run at least Zork1, Zork2, and Zork3.
This guide describes the current state of the PDP-11/70 Pager program.
Important: At the moment, the Pager is not a full PDP-11/70 emulator. It is a PDP-11-inspired 16-bit front-panel machine. You can enter memory words bit by bit using graphical toggle switches, inspect memory, write to memory, start and stop programs, and execute single instructions.
At the top left, it says pdp11/70 PAGER.
The top area of the display also shows:
PROG: programming modeRUN: program is running5HzSW15LOADAt the top right are the status LEDs:
RUN: program is runningHLT: machine is stopped or in programming modeFET: instruction fetch; an instruction is being fetchedEXE: execute; an instruction is being executedEXM: memory was read with EXAMDEP: memory was written with DEPERR: error or illegal instructionThe ADDRESS LEDs show the current address or bus address.
The DATA LEDs show the last value that was read, written, or output. They are not automatically identical to the switch settings.
At the bottom there are 16 graphical toggle switches. Together they form the 16-bit switch register switchValue.
The whole system can be operated with the scroll wheel.
In PROG mode, switches are set and front-panel functions are executed.
The white frame only shows which switch is selected. It does not change the switch value.
In the menu, you select a front-panel function.
Functions:
LOAD: load the current switch setting as the addressEXAM: examine memory at the current addressDEP: deposit the switch value into memorySTEP: execute exactly one instructionRUN: start the program at the current addressRESET: reload the demo programIn RUN mode, the program is running.
PROGAvailable speeds:
1Hz 2Hz 5Hz 10Hz 25Hz 50Hz 100Hz MAX
At slower speeds, the FET and EXE LEDs are easier to see.
If the keyboard is active, these shortcuts are also available:
L: LOADE: EXAMD: DEPS: STEPR: RUNH: HALTC: RESETThe keyboard is optional. Everything important can also be done using only the scroll wheel.
The Pager currently uses 256 memory words.
Each word has 16 bits.
The visible address counts in bytes, like on a PDP-11. That is why EXAM and DEP always increase the address by 2:
0000
0002
0004
0006
...
Internally, this is converted to a word index.
LOAD takes the 16 switches and uses them as the new current address.
Example:
Switches = 0000000000010000
LOAD
Address = 0010
EXAM reads memory at the current address.
After that:
This allows you to inspect memory word by word.
DEP writes the current switch value into memory.
After that:
This allows you to enter programs word by word.
STEP executes exactly one machine instruction and then stops again.
This is useful for checking a program slowly.
RUN starts the program at the current address.
The RUN LED stays on while the program is running.
RESET reloads the built-in demo program and puts the machine back into programming mode.
The current mini instruction set is intentionally small:
0000 HALT
1aaa LOAD R0, [aaa]
2aaa STORE R0, [aaa]
3aaa ADD R0, [aaa]
4aaa SUB R0, [aaa]
5aaa JMP aaa
6aaa JZ aaa
7nnn LDI R0, nnn
8000 INC R0
9000 DEC R0
Aaaa OUT [aaa]
aaa is an address.
nnn is an immediate value.
At the moment, there is only one register: R0.
Goal: write the value 0005 to address 0020 and then read it back.
PROG, set the switches to 0020.LOAD and short press.0005.DEP and short press.0020.LOAD.EXAM.DATA now shows the value 0005.
This program loads 5, adds the memory value at address 0014, stores the result at 0018, outputs the value, and halts.
Address Word Meaning
0000 7005 LDI R0, 0005
0002 3014 ADD R0, [0014]
0004 2018 STORE R0, [0018]
0006 A018 OUT [0018]
0008 0000 HALT
0014 0007 Data value 7
0018 0000 Result
Input sequence:
0000.LOAD.7005.DEP.3014.DEP.2018.DEP.A018.DEP.0000.DEP.0014.LOAD.0007.DEP.0000.LOAD.RUN.At the end, address 0018 contains the value 000C, which is decimal 12.
To check the result:
0018.LOAD.EXAM.DATA then shows the result.
When powered on, a demo program is loaded and started automatically.
It first calculates 5 + 7, writes the result to memory, and then visibly continues counting. This makes it easy to see that FETCH, EXEC, ADDRESS, and DATA are working.
A short press in RUN mode stops the demo program and returns to PROG mode.
RESET reloads the demo program.
The Pager is currently not a real PDP-11/70.
Not yet implemented:
Even so, it can already be used like a small historical front-panel computer: set bits, store words, inspect memory, start and stop programs, and execute instructions step by step.PDP-11/70 Pager – Quick Guide
This guide describes the current state of the PDP-11/70 Pager program.
Important: At the moment, the Pager is not a full PDP-11/70 emulator. It is a PDP-11-inspired 16-bit front-panel machine. You can enter memory words bit by bit using graphical toggle switches, inspect memory, write to memory, start and stop programs, and execute single instructions.
Display
At the top left, it says pdp11/70 PAGER.
The top area of the display also shows:
PROG: programming mode
RUN: program is running
speed, for example 5Hz
in programming mode, the currently selected switch, for example SW15
in the menu, the selected function, for example LOAD
At the top right are the status LEDs:
RUN: program is running
HLT: machine is stopped or in programming mode
FET: instruction fetch; an instruction is being fetched
EXE: execute; an instruction is being executed
EXM: memory was read with EXAM
DEP: memory was written with DEP
ERR: error or illegal instruction
The ADDRESS LEDs show the current address or bus address.
The DATA LEDs show the last value that was read, written, or output. They are not automatically identical to the switch settings.
At the bottom there are 16 graphical toggle switches. Together they form the 16-bit switch register switchValue.
Control With the Scroll Wheel
The whole system can be operated with the scroll wheel.
PROG Mode
In PROG mode, switches are set and front-panel functions are executed.
Turn scroll wheel: move the selected switch
Short press: toggle the selected switch
Long press: open the function menu
The white frame only shows which switch is selected. It does not change the switch value.
Menu
In the menu, you select a front-panel function.
Turn scroll wheel: select function
Short press: execute function
Long press: leave the menu
Functions:
LOAD: load the current switch setting as the address
EXAM: examine memory at the current address
DEP: deposit the switch value into memory
STEP: execute exactly one instruction
RUN: start the program at the current address
RESET: reload the demo program
RUN Mode
In RUN mode, the program is running.
Turn scroll wheel: change speed
Short press: halt and return to PROG
Long press: also halt
Available speeds:
1Hz 2Hz 5Hz 10Hz 25Hz 50Hz 100Hz MAX
At slower speeds, the FET and EXE LEDs are easier to see.
Optional Keyboard Shortcuts
If the keyboard is active, these shortcuts are also available:
L: LOAD
E: EXAM
D: DEP
S: STEP
R: RUN
H: HALT
C: RESET
The keyboard is optional. Everything important can also be done using only the scroll wheel.
Memory and Addresses
The Pager currently uses 256 memory words.
Each word has 16 bits.
The visible address counts in bytes, like on a PDP-11. That is why EXAM and DEP always increase the address by 2:
0000
0002
0004
0006
...
Internally, this is converted to a word index.
Front-Panel Functions in Detail
LOAD
LOAD takes the 16 switches and uses them as the new current address.
Example:
Switches = 0000000000010000
LOAD
Address = 0010
EXAM
EXAM reads memory at the current address.
After that:
DATA shows the word that was read
EXM flashes briefly
the address is increased by 2
This allows you to inspect memory word by word.
DEP
DEP writes the current switch value into memory.
After that:
DATA shows the word that was written
DEP flashes briefly
the address is increased by 2
This allows you to enter programs word by word.
STEP
STEP executes exactly one machine instruction and then stops again.
This is useful for checking a program slowly.
RUN
RUN starts the program at the current address.
The RUN LED stays on while the program is running.
RESET
RESET reloads the built-in demo program and puts the machine back into programming mode.
Current Instruction Set
The current mini instruction set is intentionally small:
0000 HALT
1aaa LOAD R0, [aaa]
2aaa STORE R0, [aaa]
3aaa ADD R0, [aaa]
4aaa SUB R0, [aaa]
5aaa JMP aaa
6aaa JZ aaa
7nnn LDI R0, nnn
8000 INC R0
9000 DEC R0
Aaaa OUT [aaa]
aaa is an address.
nnn is an immediate value.
At the moment, there is only one register: R0.
Example: Entering and Examining One Word
Goal: write the value 0005 to address 0020 and then read it back.
In PROG, set the switches to 0020.
Long press to open the menu.
Select LOAD and short press.
Set the switches to 0005.
Open the menu.
Select DEP and short press.
Set the switches back to 0020.
Open the menu.
Select LOAD.
Open the menu again.
Select EXAM.
DATA now shows the value 0005.
Example: Entering a Small Program
This program loads 5, adds the memory value at address 0014, stores the result at 0018, outputs the value, and halts.
Address Word Meaning
0000 7005 LDI R0, 0005
0002 3014 ADD R0, [0014]
0004 2018 STORE R0, [0018]
0006 A018 OUT [0018]
0008 0000 HALT
0014 0007 Data value 7
0018 0000 Result
Input sequence:
Set switches to 0000.
Execute LOAD.
Set switches to 7005.
Execute DEP.
Set switches to 3014.
Execute DEP.
Set switches to 2018.
Execute DEP.
Set switches to A018.
Execute DEP.
Set switches to 0000.
Execute DEP.
Set switches to 0014.
Execute LOAD.
Set switches to 0007.
Execute DEP.
Set switches to 0000.
Execute LOAD.
Execute RUN.
At the end, address 0018 contains the value 000C, which is decimal 12.
To check the result:
Set switches to 0018.
Execute LOAD.
Execute EXAM.
DATA then shows the result.
Built-In Demo Program
When powered on, a demo program is loaded and started automatically.
It first calculates 5 + 7, writes the result to memory, and then visibly continues counting. This makes it easy to see that FETCH, EXEC, ADDRESS, and DATA are working.
A short press in RUN mode stops the demo program and returns to PROG mode.
RESET reloads the demo program.
What Is Not Complete Yet
The Pager is currently not a real PDP-11/70.
Not yet implemented:
full PDP-11 instruction set
real set of eight PDP-11 registers
PSW with complete flag logic
interrupts
real PDP-11 peripherals
persistent storage for user programs
complete separate 16-bit DATA LED row
Even so, it can already be used like a small historical front-panel computer: set bits, store words, inspect memory, start and stop programs, and execute instructions step by step.
I have now tried to make better use of the display and also integrated a special font, so the game looks more like it did back then on old computers. The games can still be selected from the zork folder on an SD card.
In addition to the green monitor mode, I have also added amber and color modes. Hopefully, there is something for everyone.
I used the pager’s scroll wheel (!) so you can scroll back and forth through the already displayed text. This is a tribute to the limited screen height.
How do you like the implementation? Is there any interest in a release?
I got Zork running on a LILYGO T-LoRa-Pager.
It’s a small ESP32-S3 LoRa pager with a keyboard, SD card and color display. The firmware runs a Z-machine interpreter, loads a legal Zork/Z-machine story file from the SD card, and maps the pager keyboard to classic text-adventure input.
The fun part was getting the old Infocom-style status line working properly: location on the left, score and moves on the right, in a reverse-video bar like the original interpreters.
It can also be launched from bmorcelli’s Launcher, so Zork now sits on the device like a little retro app.
No game data is included, of course. You provide your own legal story file.
Ich habe mittlerweile den 3. Versuch gestartet jemanden zu finden der mir eine komplette Solaranlage ans Haus baut. Also das ganze Dach voller Panels, dazu große Akkus und Wechselrichter und das ganze an unser Hausnetz über einen Umschalter angeschlossen. So dass ich mindestens ein Dreivierteljahr autark bin und im Notfall im Winter auf das öffentliche Netz umschalten kann. Ich weiß dass das geht, denn ich habe ein Angebot für so einen Umschalter vorliegen und Erfahrungen mit einer 2400 Wp Anlage, die ich mit einer Bluetti EP500Pro seit ein paar Jahren verwende um mein Arbeitszimmer völlig autark zu versorgen. Das macht bei uns etwa die Hälfte des Stromes aus. Pro Tag verbrauchen wir ca. 12 KWh und die Hälfte davon kommt ab Frühjahr bis Herbst von den 2400 Wp mit der Bluetti (5,2 kWh Akku).
Das Problem: Alle Anbieter haben scheinbar nur Konzepte mit Anschluss ans öffentliche Netz! Grundsätzlich hätte ich da auch keine Probleme damit, aber ich will einfach völlig unabhängig von jeglicher stattlicher Gängelei sein. Jetzt wird ja sogar davon gemunkelt dass da vielleicht Gebühren auf uns zu kommen.
Warum machen die das nicht? Ich bin mir ziemlich sicher dass das elektrisch kein Problem darstellt.