Man wird nicht plötzlich alt. Man wächst da so nach und nach hinein. Zum Glück.
I bubble, therefore i am.
Der „TripleD-Filter“. Disgusting, Disturbing, Dumb.
BBC micro:bit
Aktuelles Projekt: Magnop
- Microbit V2
- Sensor: Compass (Magnet)
- Battery-Pack
(2xAAA)- WLAN Modul, Betrieb ab Microbit (3V/GND), 3x AA 1.2V/2100mAh
- Lötleiste mit Pins f. Microbit empfehlenswert
- Funktion: Türalarm
- Sprache: Micropython
- Aktuelle Code Version Magnop: V1
- WLAN-Modul (connected to Microbit)
- PushServer
Das Python Programm liest via Kompassmodul die Magnetfeldstärke des Türmagneten ein. Weicht der Wert zu sehr ab, wird ein Alarm gesendet. Es wird nur ein Alarm pro Türöffung gesendet. Wird die Tür wieder geschlossen, ist damit automatisch wieder scharf gestellt. Das Programm wird über Taste A gestartet und über Taste B manuell abgebrochen bzw. geht in den Standby. Der Touchsensor ruft die Kalibrationsroutine auf.
Nachtrag: 2x AAA reicht nicht aus. Die Spannung fällt zusammen, wenn der Wakeup (PIN1) auf dem WLAN Modul empfangen wird und das Modul den Strom über den Microbit abnimmt. Nach dem Austausch durch 3 x AA, 1.2V/2100mAh, mit Gehäuse als 3.6Volt geschaltet, funktioniert das. (ELV Elektronik)
Diagramm
Beschreibung
Power On / Wait
Button A – Run
Loop, Decision
Is <88’000
Loop Decision
Button B – Stop while looping
Is not <88’000
Counter
Button B – Stop while counting
(Entering Door, regular Stop)
Return to Wait
(No need to turn it on again)
Counter reached 5 (seconds from !(5) to 0)
Alarm
Pin1 Up
Module Wakeup
Connect WLAN
PushServer
Pushes Msg to Phone/App
& (AND)
Loop DoorOpen
> 90’000
Display Info
Return to DoorOpen
Is not >90’000
(Door closed)
Return to Decision
(still running)
Button B – Stop while looping
and so on.
Stand: Wenn die Türe geschlossen und beim Verlassen erneut geöffnet wird, wird ein weiterer Alarm gesendet. (still running)
Mögliche Erweiterung: Einen weiteren Alarm bei „Door closed“.
Sub:Kalibration
Beschreibung
Das Logo berühren (V2), löst die Routine „Calibration“ aus. Ein Punkt . läuft durch (Scroll). Bei erreichen des Schwellwertes wird ein X (Scroll) angezeigt. Bei Betätigung des Button B wird gestoppt und ein A angezeigt. (Button A für Start.)
Vorgehen:
Microbit und Laptop mit dem USB Kabel verbinden. Mu-Editor aufrufen. Programm laden, bei Bedarf Flash auf Microbit. Im Mu-Editor REPL anwählen. Microbit, Routine mit TouchLogo starten. Bei Problemen Reset Taste auf der Rückseite betätigen oder/und Programm einmal voll durchlaufen lassen und Stoppen. (B) Dann TouchLogo.
Die Werte auf der REPL-Konsole, Laptop, beobachten. Magnet justieren. Werte notieren. Wert kann danach in die Subroutine geschrieben werden, um das X bei der Türöffnung anzuzeigen. Wenn das gemacht wird, Microbit erneut flashen. (Aktualisierung)
# Calibration def calib(): while True: mov = (compass.get_field_strength()) print(mov) # Delay short utime.sleep_ms(100) display.scroll('.') if button_b.was_pressed(): display.show('A') break elif (mov) < 88000: <<< Hier neuen Schwellwert eingeben. display.scroll('X')
Wenn alles wie gewünscht funktioniert. Calib stoppen. (B). Angezeigt wird jetzt: A. Button A drücken um Programm zu starten.
Ganzer Code
# Magnop V1 fuer BBC micro:bit V2 # 08/2024, [email protected] # A-Button: Start/Restart # B-Button: Stop/Break # Touch-Logo: Calibration from microbit import * import utime import music # Waiting for Start (Button A) # display.set_pixel(2, 2, 4) def intro(): display.clear() display.set_pixel(4, 0, 6) utime.sleep_ms(200) display.set_pixel(3, 0, 6) utime.sleep_ms(200) display.set_pixel(2, 0, 6) utime.sleep_ms(200) display.set_pixel(1, 0, 6) utime.sleep_ms(200) display.set_pixel(0, 0, 6) utime.sleep_ms(200) display.set_pixel(0, 1, 6) utime.sleep_ms(200) display.set_pixel(0, 2, 6) utime.sleep_ms(200) display.set_pixel(0, 3, 6) utime.sleep_ms(200) display.set_pixel(0, 4, 6) utime.sleep_ms(200) display.set_pixel(1, 4, 7) utime.sleep_ms(200) display.set_pixel(2, 4, 7) utime.sleep_ms(200) display.set_pixel(3, 4, 7) utime.sleep_ms(200) display.set_pixel(4, 4, 8) utime.sleep_ms(200) display.set_pixel(4, 3, 8) utime.sleep_ms(200) display.set_pixel(4, 2, 8) utime.sleep_ms(200) display.set_pixel(4, 1, 8) utime.sleep_ms(200) display.set_pixel(4, 0, 8) utime.sleep_ms(1000) utime.sleep(3) display.clear() display.set_pixel(2, 2, 6) music.pitch(1500, 200) utime.sleep(1) display.clear() utime.sleep_ms(500) display.set_pixel(2, 2, 7) music.pitch(1500, 200) utime.sleep(1) display.clear() utime.sleep_ms(500) display.set_pixel(2, 2, 9) music.pitch(2000, 200) utime.sleep(1) display.clear() utime.sleep_ms(500) music.play(['c', 'a', 'b']) def alarmready(): display.clear() display.set_pixel(2, 2, 6) utime.sleep_ms(200) display.set_pixel(2, 2, 4) utime.sleep_ms(1000) def opendoor(): while True: mov = (compass.get_field_strength()) # Delay middle utime.sleep_ms(500) if (mov) < 88000: display.scroll('|') display.set_pixel(0, 0, 7) display.set_pixel(0, 1, 7) display.set_pixel(0, 2, 7) display.set_pixel(1, 2, 8) display.set_pixel(0, 3, 7) display.set_pixel(0, 4, 7) utime.sleep(2) display.clear() if (mov) > 90000: break def alarmset(): while True: mov = (compass.get_field_strength()) # Delay long utime.sleep_ms(1000) if (mov) < 88000: display.scroll('|') display.show('!') utime.sleep(1) display.show('4') utime.sleep(1) display.show('3') utime.sleep(1) display.show('2') utime.sleep(1) display.show('1') utime.sleep(1) display.show('0') if button_b.was_pressed(): display.clear() music.pitch(1500, 200) display.set_pixel(2, 2, 4) utime.sleep(2) display.clear() break pin1.write_digital(1) music.pitch(1500, 200) music.pitch(1500, 200) music.pitch(1500, 200) utime.sleep_ms(1400) pin1.write_digital(0) opendoor() elif (mov) > 90000: alarmready() if button_b.was_pressed(): music.play(['c', 'b', 'as']) display.clear() display.set_pixel(2, 2, 4) utime.sleep(2) display.clear() break # Calibration def calib(): while True: mov = (compass.get_field_strength()) print(mov) # Delay short utime.sleep_ms(100) display.scroll('.') if button_b.was_pressed(): display.show('A') break elif (mov) < 88000: display.scroll('X') # Run / Restart while True: if button_a.is_pressed(): intro() alarmset() elif pin_logo.is_touched(): calib() # End of Code
Nach der Kalibrierung muss überall der Wert der Variable ‚mov‘ entsprechend angepasst werden. def opendoor und def alarmset. An insgesamt 4 Stellen.
Der Schwellwert für das Öffnen, sowie das Schliessen der Tür wird am einfachsten mit der Kalibration ermittelt. (REPL)
Nach erfolgter Änderung, nicht vergessen den Code zu speichern und auf den Microbit hochzuladen. (FLASH im Mu-Editor).
Sonstiges
Statt eines WLAN-Modules, könnte über ein Relais eine Alarmsirene angesteuert werden.
Inspiration/Referenz: Link
Anhang I
Stromsparende Massnahmen:
- Power LED auslöten. (Kann nicht abgeschaltet werden.)
- Zeilen mit „music.play“ löschen
DeepSleep und PowerOff hat zumindest bei meiner Microbit V2 nicht funktioniert.
Das Substantiv Vergebung
Vergebung ist nur dann möglich, wenn vorab die Verantwortung der Person, der zu vergeben wäre, von dieser Person selbst anerkannt wurde. Das bedeutet, die nicht wahrgenommene Verantwortung für ein Tun oder eine Unterlassung muss zuerst einmal eingestanden sein.
Wird dieser Schritt übersprungen, so ist die Vergebung vorgreifend wirkungslos und auch sinnlos, weil der Schritt der Verantwortung, wie beschrieben, übersprungen wurde und also jederzeit wieder zurückschlagen kann, weil oder wenn die Verantwortung nicht klar ausgesprochen, also eingestanden wurde. (Klärung.)
Es ist daher im Sinne der Tragfähigkeit, nicht sinnvoll, jemandem etwas zu vergeben, wenn dieser Person gar nicht klar ist, welche Verantwortung sie übersprungen hat.
In eigener Sache kann die Vergebung trotzdem sinnvoll sein.
Schuldzuweisungen sind an diesem Punkt oft eher Schuldverschiebungen, um Fehler nicht eingestehen zu müssen. Das kann bewusst oder unbewusst sein. Der Prozess der Bewusstwerdung kann nicht umgangen werden. Beschönigungen sind bezüglich der Lösung des Konflikts nicht zielführend.
Man kann in diesem Zusammenhang von Schuld sprechen, aber das ist erst sinnvoll möglich, wenn die Schuld im Sinne der Verantwortung geklärt ist. Ab diesem Punkt ist Vergebung oder Sühne angezeigt.
Sühne vor allem dann, wenn die Verfehlung als bewusste Missachtung von Grenzen, also als Übertretung geschah, die eine Böswilligkeit billigt. Böswilligkeit im Sinne eines Vorteils oder zur Vermeidung eines Nachteils auf Kosten einer Person, die diesbezüglich und ausdrücklich keine Schuld trifft.
Die an und in diesem inneren und äusseren Konflikt schuldlose Person, wie beschrieben, wird entlastet, so dies dem wahren Verhältnis der Sachlage entspricht. Man spricht Wahrheit. Der Person, die Schuld trägt, wird die Gelegenheit der Vergebung oder der Sühne gegeben. Die der Vergebung wird gesprochen. Die der Sühne wird gebüsst.
„Fair enough.“
Passkey Routine
Ausschnitt für Bash-Scripts zur Abfrage eines Passkeys.
Dieser Ausschnitt (Subroutine) fragt einen FIDO2-fähigen Security Schlüssel zur Identifikation ab, wenn beispielsweise ein Skript ausgeführt wird, das Dateien zwischen zwei Rechnern über rsync/ssh kopieren/abgleichen soll, ohne UDEV zu bemühen. Es ist ein infiniter Loop, der so lange läuft, bis ein gültiger Schlüssel eingesteckt wird. Die Wartezeit beträgt 10 Sekunden und die Aufforderung den Schlüssel einzustecken wird also in diesem Intervall wiederholt.
echo " Checking for Passkey"
CHECKPASS=0
while [ "$CHECKPASS" = "0" ]
do
"PASSKEY=`lsusb | grep FIDO2 | awk '{ print $8 }'` "
if [ -z "$PASSKEY" ]; then
echo "Please insert Passkey" ; sleep 10
else
CHECKPASS=1
echo "Passkey found"
fi
done
Die Anführungszeichen (fett) bei der Zeile: „PASSKEY=`lsusb....
`„müssen für die Verwendung im Skript am Anfang und am Schluss der Zeile entfernt werden. Leider werden die (linksgerichteten!) Hochkommas nicht dargestellt, wenn keine Anführungszeichen gesetzt werden. (Darstellungsproblem Blog.)
Um festzustellen, ob der Key FIDO2 kann, einfach in einer Shell das Kommando: lsusb | grep FIDO2
eingeben und sehen was zurückgegeben wird.
! Der Code setzt voraus, dass zuvor ein gültiger SSH-Key mit Typ ecdsa-sk für den Zielrechner erstellt und auf den Zielrechner kopiert wurde. Bsp.
cd $HOME/.ssh
ssh-keygen -t ecdsa-sk -C "($(hostname)-$(date +'%d-%m-%Y')-mypasskey-1"
ssh-copy-id -i id_ecdsa-mypasskey-1.pub [User]@[Zielrechner]
Zum Datenabgleich zwischen zwei Rechnern sollte auch das Programm „Unison“ in Betracht gezogen werden. Bei der Ausführung von unison, ist diese Routine nicht notwendig. Linux (Ubuntu), Kommando: sudo apt info unison
Bekenntnis zum kleinen Bruder
Der kleine Bruder, oder auch, die kleine Schwester ist die Person, auf die man ein Auge hat, damit ihr nichts schlechtes passiert oder damit sie keinen groben Unfug veranstaltet.
Der Unterschied zum grossen Bruder aka „Big Brother“ ist folgender.
Ich übernehme eine gewisse Verantwortung, ohne mich in seine Intimsphäre einzumischen. Weder kontrolliere ich ihn, denn ich möchte ja, dass er selbst einmal die Verantwortung für sich selbst übernimmt, noch werfe ich fortwährend Werbesendungen in sein Zimmer, noch versuche ich ihn für mein eigenes Weiterkommen zu benutzen. Ebenfalls werde ich die besagte Verantwortung nicht als Freifahrtschein benutzen, um ihn nach Belieben da hinzuführen, wo ich ihn haben will. Damit ist ein Machtverhältnis angesprochen.
Dieses Verhältnis, so vorhanden, ist auszugleichen. Dafür wird über kurz oder lang der kleine Bruder selbst sorgen müssen. Das ist die erste Verantwortung, die er in seinem ureigensten Interesse übernehmen muss. Er bekundet damit seinen Willen zum erwachsen werden. Der erste wichtige Schritt zu Emanzipation und Integrität.
Wie muss die «digitale Revolution» aussehen? Mehr KI? Noch mehr Bequemlichkeiten, die auf Dauer unbequem werden können? Noch mehr des angeblichen Nutzens und Effizienz, um einen 24-Stunden-Tag auf virtuelle 30 Stunden zu komprimieren? Gibt es Alternativen?
Gewendet. Wie wird der kleine Bruder auf gar keinen Fall erwachsen? Wer hat ein Interesse daran und warum?
Ich denke, die Verantwortung für die weitere Entwicklung wird zu einem grossen Teil bei denen sein, die diesbezüglich erwachsen werden wollen. Die eine Kultur besagt, noch mehr, noch schneller und effizienter. Die andere wird sich, in ihrem eigenen Interesse, besinnen müssen, um der schleichenden Selbstentfremdung zu entgehen.
«Quo vadis»
(Picture by AI)
Betreutes Wohnen
Linux kenne ich seit etwa Kernel Version 0.96. Damals war das noch eine sehr spezielle Sache. Kernel kompilieren war Standard.
Windows wurde bei mir über die Zeit komplett ersetzt. Auf einem Rechner ist noch die Version 10 installiert. Der Minicomputer steht allerdings im Schrank. Schon eine ganze Weile. Mit der Version 11 hatte ich noch kurz Kontakt, bevor sie auf eine eigene Umlaufbahn geschickt wurde.
Vermisse ich etwas? Ausser einem nostalgischen Gefühl, nichts. Aber das war auch bei DOS so. Die Dosbox ist unter Ubuntu im Handumdrehen installiert. Das reicht für die Nostalgie.
Nicht das ich etwas gegen Windows als Betriebssystem hätte. So ist das nicht. Nur missfällt mir die zunehmende Gefrässigkeit. Zuoberst auf meiner Liste steht „Privat“. Dann alles Weitere. Darf so bleiben. Deswegen, Linux. Das liesse sich noch weiter straffen, aber es reicht erst mal.
Meine Prognose. Wer als erster verstanden hat, dass Menschen eine Privatsphäre wollen, die geschützt sein muss, der gewinnt letztlich den Marathon, weil sich Menschen nicht veräussert, sondern aufgehoben wissen wollen. So einfach ist das.
![a view of a building through a window](https://pa8815.vivaldi.net/wp-content/uploads/sites/40546/2024/08/ofn6cia4kiy.jpg)
Nicht immer zeigt der Blick in ein Fenster, was sich drinnen befindet.
(Picture: MLenk)
Todesstern NFC
NFC als elektronisches Löschwerkzeug für Security Keys mit OTP Funktion.
Hallo Welt
Intro: Home of the famous Plattenplatz.