Springe zum Hauptinhalt
t.animal
Anagraphein!
t.animal
Anagraphein!

Einträge über Readme.md

Ritto Twinbus 7650 Haustelefon in Home Assistant (update)

Der fertige Adapter.

Der fertige Adapter.

Der Telefonhack mit shelly hat lange Zeit gut funktioniert, aber vor ein paar Monaten hat er seinen Geist aufgegeben. Eine gute Gelegenheit, v2 umzusetzen.

Denn die Lösung mit dem shelly hat einige Nachteile:

  1. Die Home assistant integration ist gar nicht so gut. zB muss man um die Tür zu öffnen einen virtuellen Schalter umlegen, der sich dann zurücksetzt, statt einen Taster zu drücken.
  2. Der ADC zur Stumm-Erkennung reagiert exrem träge
  3. Das ganze geht noch weniger invasiv, sodass die Anlage quasi gar nicht mitbekommt, dass sie angezapft wurde.

Details dazu gibt es im Projekteintrag.

Dreame L10S Ultra Po-Wackel-Daemon

Seit ich Staubsaugerroboter habe, lasse ich sie nur mit Valetudo und ohne cloud laufen. Mein neuer Dreame L10s Ultra ist da keine Ausnahme. Dadurch kann ich den Sauger komplett lokal per Website und Home-Assistant steuern.

Dieses Modell hat eine Besonderheit: Um an Kanten besser bis zur Wand zu wischen, hat es einen Po-Wackel-Modus bei dem der Roboter sich kurz dreht, um mit dem Mops besser bis zur Kante zu kommen. Das bringt deutlich bessere Wischergebnisse, aber dauert auch viel länger. Wir benötigen es nur in der Küche und im Bad, also wäre es schön, diesen Modus auch nur dort einzuschalten. Das gibt die Valetudo-API bzw die Roboterfirmware so leider nicht her.

Also habe ich ein kleines Script gebaut, das den Zustand des Roboters von der Valetudo-API ausliest, die aktuellen Koordinaten extrahiert und mit konfigurierten Räumen abgleicht. Beim Übergang in einen Raum lässt sich der Modus so aktivieren. Möglicherweise ist es ja noch für jemanden nützlich:

Update vom 26.04.2026: nach einem valetudo update ist der mop-twist von einem Quirk zu einer vollständigen Capability geworden. Ich habe das script angepasst.

#!/bin/sh
#
# Toggle robot feature based on its current position and configured rooms.
# Log room transitions to /data/rooms.log
#
# Dependencies: curl, jq, busybox sh 
# jq best installed as statically built binary using soar https://soar.qaidvoid.dev/
#


# 
# Run by adding this to /data/_root_postboot.sh
#
# if [[ -x /data/room-specific-quirks.sh ]]; then 
#   nohup watch -n 3 /data/room-specific-quirks.sh > /dev/null 2>&1 &
# fi


# ==============================
# Configuration
# ==============================

# Inline JSON room configuration
ROOMS_JSON='
{
  "rooms": [
    { "name": "Kitchen", "min_x": 3795, "max_x": 4185, "min_y": 3100, "max_y": 3390 },
    { "name": "Shower",  "min_x": 3935, "max_x": 4191, "min_y": 2930, "max_y": 3093 }
  ]
}
'

# Quirk ID
QUIRK_ID="7c71db1b-72b6-402e-89a4-d66c72cb9c8c"

# API endpoint
API_BASE="http://localhost/api/v2/robot"

# Log file
LOG_FILE="/data/rooms.log"

PATH="/data/soar/bin:$PATH"

# ==============================
# Helper functions
# ==============================

enable_feature() {
  curl --silent -X PUT \
    "$API_BASE/capabilities/MopTwistControlCapability" \
    -H 'accept: */*' \
    -H 'Content-Type: application/json' \
    -d "{
      \"action\": \"enable\"
    }" >/dev/null
}

disable_feature() {
  curl --silent -X PUT \
    "$API_BASE/capabilities/MopTwistControlCapability" \
    -H 'accept: */*' \
    -H 'Content-Type: application/json' \
    -d "{
      \"action\": \"disable\"
    }" >/dev/null
}


is_within_room() {
  x=$1
  y=$2
  min_x=$3
  max_x=$4
  min_y=$5
  max_y=$6

  [ "$x" -ge "$min_x" ] && [ "$x" -le "$max_x" ] && \
  [ "$y" -ge "$min_y" ] && [ "$y" -le "$max_y" ]
}


# ==============================
# Main logic
# ==============================

main() {
  # Fetch robot state once
  state=$(curl --silent "$API_BASE/state")

  # Extract position
  coords=$(echo "$state" | jq '.map.entities[] | select(.type=="robot_position") | .points')
  x=$(echo "$coords" | jq '.[0]')
  y=$(echo "$coords" | jq '.[1]')

  # Extract operation mode
  mode=$(echo "$state" | jq -r '.attributes[] | select(.type=="operation_mode") | .value')

  # Default room
  current_room="None"

  # Determine current room
  echo "$ROOMS_JSON" | jq -c '.rooms[]' | while read -r room; do
    name=$(echo "$room" | jq -r '.name')
    min_x=$(echo "$room" | jq -r '.min_x')
    max_x=$(echo "$room" | jq -r '.max_x')
    min_y=$(echo "$room" | jq -r '.min_y')
    max_y=$(echo "$room" | jq -r '.max_y')

    if is_within_room "$x" "$y" "$min_x" "$max_x" "$min_y" "$max_y"; then
      echo "$name"
      exit 0
    fi
  done > /tmp/current_room.$$

  if [ -s /tmp/current_room.$$ ]; then
    current_room=$(cat /tmp/current_room.$$)
  fi
  rm -f /tmp/current_room.$$

  # Get last room from log
  last_room="None"
  if [ -f "$LOG_FILE" ]; then
    last_room=$(tail -n 1 "$LOG_FILE" | awk -F'\t' '{print $2}')
  fi

  # Exit early if same room OR mode is "vacuum"
  if [ "$current_room" = "$last_room" ] || [ "$mode" = "vacuum" ]; then
    exit 0
  fi

  # Log change
  timestamp=$(date -Iseconds)
  echo -e "${timestamp}\t${current_room}" >>"$LOG_FILE"

  # Toggle feature based on room and mode
  if [ "$current_room" != "None" ] &&  [ "$mode" != "vacuum" ]; then
    enable_feature
  else
    disable_feature
  fi
}

main "$@"

Proxy Telefonnummer

Nach langer Suche habe ich endlich eine gute Möglichkeit gefunden, meine Telefonnummer geheim(er) zu halten. Denn SPAM ist ja nicht nur bei E-Mail ein Problem, sondern inzwischen leider auch bei SMS und Anrufen.

Dazu habe ich einen USB-Stick mit SIM-Modem gekauft. Das sind einfach kleine Sticks mit einem sim 800c und einer seriellen Schnittstelle. Diese kann dann einfach von einem Computer aus bedient werden und mit Hilfe von gammu gesteuert. Nun kann ich jedes mal, wenn ich auf eine SMS warte, den Stick einstecken und die SMS abrufen. Noch ein bisschen komfortabler ist es, den Stick an einem Home-Assistant anzuschließen und dort jede einkommende SMS an meine eigene Handynummer weiterzuleiten.

Update: 2025 ging der Stick schon kaputt. Da er allgemein Probleme gemacht hat (Stromverbrauch war beim Empfang von Nachrichten gigantisch und hat alle anderen Geräte am USB-hub lahm gelegt), habe ich auf ebay ein paar UMTS-Sticks ("web'n'walk") für unter 10€ geschossen, in der Hoffnung, dass einer davon in's Setup passt. Ich hatte Glück und jetzt verwende ich solchen.

Kurznachrichten sind also erledigt, aber was ist mit Anrufen? Mit Hilfe des USSD-Codes 21 kann eine providerseitige bedingungslose Anrufweiterleitung eingerichtet werden. Also indem man zum Beispiel **21*0049160123456789# wählt (die älteren erinnern sich noch an den USSD-Code *100# mit dem das Prepaid-Guthaben abgefragt werden kann). Dies hat leider mit gammu nicht geklappt, aber indem ich die SIM-Karte in ein altes Handy eingelegt und den Code damit ausgeführt habe.

Leider wird das nicht von allen Providern unterstützt. Überhaupt war es schwierig eine SIM-Karte zu finden, die keine monatliche Gebühr kostet, weil bereits Datenvolumen inkludiert ist. Dies wird offenbar nur noch von edeka-smart angeboten. Praktischerweise läuft edeka-smart im D1-Netz und unterstützt providerseitige Weiterleitungen innerhalb dieses Netzes.

Dummerweise war ich ein bisschen zu langsam, denn just als die SIM-Karte zwar schon bestellt aber noch nicht geliefert war, habe ich die erste SPAM-SMS und Anrufe meines Lebens erhalten :-(.

Ritto Twinbus 7650 Haustelefon in Home Assistant

Zu diesem Post gibt es ein Update.

Die fertige Installation am Haustelefon.

Die fertige Installation am Haustelefon.

Unsere Wohnung hat ein Ritto Haustelefon, das als Klingel fungiert. Ich wollte es in unser Home-Automation-System (Home Assistant) einbinden, damit man auch bei stumm geschalteter Klingel, oder wenn man am Balkon ist, kein Klingeln mehr verpasst.

Eine Vorab-Recherche ergab, dass sich mit dem abgespeckten Twinbus 7630 schon verschiedene Leute beschäftigt haben. Für das 7650 (zusätzliche Stummschalte-Funktion und interner Ruf) gab es leider keine fertigen Lösungen.

Trotzdem war die Lösung von quhfan ein guter Startpunkt. Mit einem Shelly Uni konnte ich direkt die 5V Klingelsignal abgreifen, denn dieser Teil der Platine ist identisch. Der Hersteller verkauft hier auch Erweiterungsplatinen für etwa 30€, die mMn de facto nur die 5V Klingelsignal verwenden um ein Relais zu schalten (plus bissel Timing-Gedöhns). Uff.

Weiterlesen…

Spieluhr drosseln

Die Firma Sterntaler vertreibt Spieluhren zum Einschlafen für Kinder. Die Kuscheltiere sind niedlich und das schöne ist, man kann die Spieluhr herausnehmen und gegen andere Melodien tauschen, wenn man will. Leider ist das eigentliche Spielwerk viel zu schnell, wie man zB hier hören kann.

Es gibt ein Video auf youtube, das zeigt wie man manche der Spieluhren langsamer machen kann, aber unsere Spieluhr war leider anders aufgebaut. Daher habe ich einen anderen Weg gewählt.

Weiterlesen…

Corona Dashboard, aber schnell

Das offizielle Corona-dashboard des RKI gibt einem eigentlich fast alle infos, die man braucht, wenn man sich schnell einen Überblick über die Corona-Pandemie verschaffen will. Aber schnell ist es auf keinen Fall. Selbst auf einem Desktop-Rechner dauert es locker mal eine Minute bis alle Daten geladen sind. Auf mobilen Endgeräten dauert alles noch viel länger. Dabei werden auch noch mehrere dutzend Megabyte übertragen.

Deshalb habe ich covid-karte.de erschaffen. Äußerlich ist es an das RKI Corona Dashboard angelehnt. Derzeit werden die Anzahl der Kranken, Verstorbenen und die Änderungen zum Vortag angezeigt. Dabei lädt das Dashboard die deutschen Corona Daten aus der gleichen Quelle, die das RKI unter einer offenen Lizenz zur Verfügung stellt.

Thunderbird UX verbessern

Die Unified inboxes

Die Unified inboxes

Ich bin vor kurzem wieder zurück zu Thunderbird nach einiger Zeit Experimente mit claws-mail. Einige Verbesserungen habe ich dabei gleich vorgenommen.

Unified Inbox

Von meinem Mailclient am Handy kenne ich das Feature "Unified Inbox" und finde es sehr praktisch. Mit Thunderbird lässt sich das recht simpel nachbauen. Zuerst legt man ein neues RSS-Konto an und sortiert es mit manually sort folders ganz nach oben. Dann legt man eine "saved search" an, in der man die einzelnen Inboxes integriert und speichert sie in diesem neuen Konto. Thunderbird kann das zwar auch nativ, aber mMn ist das Feature nicht gescheit integriert.

Lightning UI

Obwohl Lightning in Thunderbird an sich eine echt gute Erweiterung ist, lässt die UI meiner Meinung nach stark zu wünschen übrig. Und zwar gar nicht so sehr von der Feature-Seite sondern vom Aussehen. Insbesondere die Monatsansicht ist mir zu verspielt mit ihren Farbverläufen, Schatten, etc. Außerdem ist alles irgendwie unübersichtlich. Zum Glück lässt sich das mit der Erweiterung DOM Inspector Plus und simplem CSS verbessern (Code am Ende des Eintrags). Man kann nämlich eigenes CSS in Thunderbird injizieren, indem man eine Datei nach ~/.thunderbird/<profile>/chrome/userChrome.css legt. Ich hab mich eher an einem modernen material design orientiert und die Abtrennung des Vor-/Folgemonats verbessert. Die Unterscheidung zwischen "zugesagt" und "vielleicht" in der Ansicht flog raus, dafür sind jetzt abgelaufene Termine durchscheinend. Man kann jetzt auch auf einen Blick sehen, ob es sich um einen Ganztagestermin handelt oder nicht.

Weiterlesen…

Libreoffice adé, MS Office ahoi!

Die einzige Software, die ich seit meinem Umstieg auf Linux seit Jahren vermisse ist MS Office. LibreOffice ist im Vergleich einfach ein Witz und ich bin ziemlich überzeugt, dass LiMux vor allem deshalb gestorben ist. Neulich musste ich einen Brief schreiben und mir ist der Kragen geplatzt. Ein Latex-Template zu erstellen erschien mir übertrieben und ich hatte noch eine uralte Briefvorlage aus Schülerzeitungszeiten ⇒ wie krieg ich jetzt MS Office zu laufen?

Die schlechte Nachricht: Wine unterstützt Office nicht richtig. Die gute Nachricht: Wine unterstützt Office 2010 leidlich. Noch dazu kostet eine entsprechende Lizenz bei ebay nur ein paar Euro, also schnell geklickt. Der Installer läuft nach ein paar Tweaks durch und stirbt erst ganz am Ende. Anschließend läuft Excel einwandfrei. Word versucht bei jedem Starten erstmal sich zu konfigurieren und zu registrieren und scheitert. Bricht man diesen Vorgang jedoch ab, startet es klaglos. Nimmt man dem ausführenden User execute-Rechte auf .../drive_c/Program Files/Common Files/Microsoft Shared/OFFICE14/Office Setup Controller/ überspringt Word die Konfiguration komplett.

Drawbacks? Bilder platzieren geht nicht per Drag-and-Drop, man muss die Koordinaten manuell im entsprechenden Dialog setzen. PDF Export hab ich nicht zum Laufen gebracht, dafür kommt cups-pdf zum Einsatz, ein klassischer virtueller PDF Drucker. Damit funktioniert nur leider kein Link-Export. Vielleicht dafür müsste dann wohl doch eine vollwertige Windows-VM her. Für alles andere freue ich mich jetzt über gescheites Office unter Linux.

Linux und Mausgeschwindigkeit

Zumindest in XFCE habe ich keine Möglichkeit gefunden, die Geschwindigkeit der Maus zu regulieren. Zwar kann man die Mausbeschleunigung einstellen, aber "schneller" stellen kann man sie nicht. Abseits der GUI kann man jedoch mit xinput die Geschwindigkeit der Maus auf allen drei Raumachsen (3D-Mäuse?) beeinflussen. Dieses steht daher in meiner ~/.xsession:

#increase mouse speed
SPEED=2
xinput set-prop "Logitech USB-PS/2 Optical Mouse" 141 $SPEED, 0, 0,  0, $SPEED, 0,  0, 0, 1

"Logitech ..." ist dabei der Name des Geräts. Alle angeschlossenen Geräte lassen sich mit xinput ausgeben. 141 ist die Nummer des Property "Coordinate Transformation Matrix" (steht in Klammern hinter dem Property-Namen). Anschließend folgt eine 3D-Matrix, Eintrag für Eintrag zeilenweise und durch Kommata getrennt. Dadurch lassen sich auch so Späße wie umgekehrte Mausrichtung einstellen.

Vorsicht! Manche Spiele kommen damit nicht klar. Typischerweise rast die Maus dann in eine Ecke und man kriegt sie da nicht mehr weg. Vor dem Starten betroffener Spiele muss also die Einheitsmatrix eingestellt werden.

Falls jemand bessere Methoden kennt: Nur her damit, so richtig zufrieden bin ich damit nicht.