Android bei Teams, Google Meet und Bildschirmaufnahmen automatisch lautlos oder auf Vibration stellen – mit Home Assistant

zurück zum Blog
Android bei Teams, Google Meet und Bildschirmaufnahmen automatisch lautlos oder auf Vibration stellen – mit Home Assistant

Ein Smartphone-Klingeln während eines Kundengesprächs ist unangenehm. Noch störender wird es, wenn das Smartphone direkt neben dem Mikrofon liegt und nicht nur die Gesprächspartner, sondern möglicherweise auch eine laufende Bildschirmaufnahme unterbricht.

Genau das wollte ich vermeiden: Sobald ich am Windows-PC an einem Kundencall teilnehme oder eine Bildschirmaufnahme starte, soll mein Android-Smartphone automatisch auf Vibration wechseln. Wenn der Call oder die Aufnahme beendet ist, soll der Klingelmodus automatisch wieder auf „Normal“ gestellt werden.

Die Lösung verwendet:

  • Home Assistant
  • die Home-Assistant-App auf dem Android-Smartphone
  • HASS.Agent auf dem Windows-PC
  • mehrere von HASS.Agent bereitgestellte Windows-Sensoren

Alternativ zur Vibration lässt sich das Smartphone mit derselben Automation auch vollständig lautlos stellen.

Hinweis: Diese Anleitung setzt eine vorhandene Home-Assistant-Installation voraus. HASS.Agent muss mit Home Assistant verbunden sein, beispielsweise über MQTT, und seine Sensoren an Home Assistant übertragen.

Home Assistant -> Geräte -> Mobile App

Warum eine solche Automation sinnvoll ist

Mein Smartphone liegt während der Arbeit meistens weniger als einen halben Meter vom Mikrofon entfernt. Eine eingehende Nachricht oder ein Anruf ist dadurch in einer Videokonferenz deutlich hörbar.

Bei Bildschirmaufnahmen ist das genauso problematisch. Wenn ich beispielsweise ein Tutorial oder eine Erklärung für einen Kunden aufzeichne, kann ein Klingelton die gesamte Aufnahme unbrauchbar machen. Im schlechtesten Fall fällt die Störung erst nach der Aufnahme auf und das Video muss erneut aufgenommen werden.

Natürlich könnte ich den Klingelmodus vor jedem Gespräch oder jeder Aufnahme manuell ändern. In der Praxis vergisst man das aber schnell. Noch häufiger vergisst man nach dem Gespräch, das Smartphone wieder auf normal zu stellen.

Die Automation übernimmt deshalb beide Schritte:

  1. Call oder Bildschirmaufnahme erkennen.
  2. Android auf Vibration oder lautlos stellen.
  3. Nach dem Call oder der Aufnahme wieder den normalen Klingelmodus aktivieren.

Warum der Windows-Modus „Bitte nicht stören“ allein nicht ausreicht

Windows 11 kann „Bitte nicht stören“ unter bestimmten Umständen automatisch aktivieren, beispielsweise bei einer Vollbildanwendung oder während einer Präsentation.

HASS.Agent stellt hierfür den Sensor UserNotification bereit. Er kann unter anderem folgende Werte liefern:

NotPresent
Busy
RunningDirect3dFullScreen
PresentationMode
AcceptsNotifications
QuietTime
RunningWindowsStoreApp

In meinem Fall wechselte der Sensor beim Start einer Bildschirmaufnahme mit oCam zuverlässig von:

AcceptsNotifications

zu:

Busy

Nach dem Beenden der Aufnahme wechselte er wieder zu AcceptsNotifications.

Bei Microsoft Teams und Google Meet funktionierte diese Erkennung jedoch nicht. Obwohl eine Teams-Besprechung aktiv war und sogar der Bildschirm geteilt wurde, blieb der Windows-Status bei AcceptsNotifications.

Das liegt daran, dass der von HASS.Agent gemeldete Windows-Benachrichtigungsstatus nicht automatisch jeden aktiven Videocall erkennt. Deshalb kombinieren wir mehrere Sensoren.

Die verwendete Erkennungslogik

Die Automation stellt das Smartphone auf Vibration, sobald mindestens eine dieser Bedingungen erfüllt ist:

Windows meldet Busy oder PresentationMode
ODER
Microsoft Teams läuft und das Mikrofon ist aktiv
ODER
die Webcam ist aktiv

Die drei Wege decken unterschiedliche Anwendungsfälle ab.

Bildschirmaufnahmen und Präsentationen

Für Bildschirmaufnahmen verwenden wir den Sensor:

UserNotification

Relevante Zustände sind:

Busy
PresentationMode

Der Zustand:

RunningDirect3dFullScreen

wird bewusst ignoriert. Dadurch wird das Smartphone nicht allein deshalb auf Vibration gestellt, weil ein Spiel im Vollbildmodus läuft.

Microsoft Teams

Teams aktiviert den Windows-Status Busy nicht zwangsläufig. Deshalb wird ein Teams-Call anhand zweier Bedingungen erkannt:

Microsoft-Teams-Prozess läuft
UND
Mikrofon ist aktiv

HASS.Agent kann mit dem Sensor Process Active zählen, wie viele Instanzen eines bestimmten Prozesses laufen.

In meinem Fall wird der Prozess überwacht:

ms-teams.exe

Wenn Teams geschlossen ist, liefert der Sensor:

0

Während Teams läuft, kann er beispielsweise liefern:

2

Die genaue Zahl ist nicht wichtig. Die Automation kontrolliert lediglich, ob der Wert größer als null ist.

Zusätzlich muss der HASS-Agent-Sensor Microphone Active eingeschaltet sein. Dadurch reicht ein lediglich im Hintergrund geöffnetes Teams nicht aus, um das Smartphone auf Vibration zu stellen.

Google Meet und andere browserbasierte Calls

Google Meet läuft innerhalb des Browsers. Ein einfacher Prozesssensor für Firefox, Chrome oder Edge wäre daher nicht aussagekräftig: Der Browser kann geöffnet sein, ohne dass ein Videocall läuft.

Für Google Meet verwenden wir stattdessen:

Webcam Active

Sobald Google Meet auf die Webcam zugreift, meldet HASS.Agent:

on

Nach dem Verlassen des Meetings wechselt der Sensor wieder auf:

off

Diese Erkennung funktioniert unabhängig davon, welcher Browser verwendet wird.

Sie gilt außerdem für andere Anwendungen, die auf die Webcam zugreifen. Das ist in diesem Fall ausdrücklich erwünscht: Wenn die Webcam für einen Call oder eine Aufnahme verwendet wird, soll das Smartphone ebenfalls nicht klingeln.

grafik 1

Voraussetzungen

Für die Umsetzung werden benötigt:

  • eine funktionierende Home-Assistant-Installation
  • HASS.Agent auf dem Windows-PC
  • eine Verbindung zwischen HASS.Agent und Home Assistant
  • die Home-Assistant-Companion-App auf dem Android-Smartphone
  • aktivierte Benachrichtigungen für die Home-Assistant-App
  • die Berechtigung, mit der Home Assistant den Klingel- beziehungsweise „Nicht stören“-Modus des Smartphones ändern darf

Die Home-Assistant-App verwendet einen speziellen Notification Command. Dabei wird keine gewöhnliche sichtbare Benachrichtigung erzeugt. Die Benachrichtigungsfunktion dient lediglich als Transportweg für den Steuerbefehl.

Home Assistant unterstützt für Android unter anderem diese Klingelmodi:

normal
vibrate
silent

Mit vibrate wird der Vibrationsmodus aktiviert. Mit silent wird das Gerät vollständig lautlos gestellt. normal stellt anschließend den normalen Klingelmodus wieder her.

Schritt 1: HASS.Agent installieren und verbinden

HASS.Agent wird auf dem Windows-PC installiert und anschließend mit Home Assistant verbunden.

Je nach HASS-Agent-Version und bestehender Home-Assistant-Konfiguration erfolgt die Übertragung der Sensoren typischerweise über MQTT.

Nach erfolgreicher Einrichtung sollte der Windows-PC in Home Assistant als Gerät erscheinen.

Schritt 2: Die benötigten Sensoren in HASS.Agent anlegen

In HASS.Agent werden folgende Sensoren benötigt:

User Notification State

Dieser Sensor liefert den aktuellen Windows-Benachrichtigungszustand.

Beispielname:

usernotification

Beispiel-Entity in Home Assistant:

sensor.aero_laptop_usernotification

Microphone Active

Dieser Binärsensor zeigt, ob das Mikrofon aktuell verwendet wird.

Beispielname:

microphoneactive

Beispiel-Entity:

binary_sensor.aero_laptop_microphoneactive

Webcam Active

Dieser Binärsensor zeigt, ob eine Anwendung gerade auf die Webcam zugreift.

Beispielname:

webcamactive

Beispiel-Entity:

binary_sensor.aero_laptop_webcamactive

Process Active für Microsoft Teams

Als Prozess wird überwacht:

ms-teams

Hier muss darauf geachtet werden, die Dateiendung (.exe) wegzulassen so wie es in der Beschreibung des Sensors in HASS.Agent steht.

Beispielname:

ProcessActiveSensor MS Teams

Beispiel-Entity:

sensor.aero_laptop_processactive

Der Sensor liefert die Anzahl der laufenden Prozessinstanzen. HASS.Agent beschreibt Process Active entsprechend als Anzahl der laufenden Instanzen eines Prozesses. Microphone Active und Webcam Active melden, ob das jeweilige Gerät verwendet wird.

HASS.Agent Sensoren

Schritt 3: Die tatsächlichen Entity-IDs kontrollieren

Die Entity-IDs können auf jedem System anders heißen.

In Home Assistant öffnet man:

Entwicklerwerkzeuge → Zustände

Dort werden die neu angelegten HASS-Agent-Sensoren gesucht.

In meinem Fall lauten sie:

sensor.aero_laptop_usernotification
binary_sensor.aero_laptop_microphoneactive
binary_sensor.aero_laptop_webcamactive
sensor.aero_laptop_processactive

Diese Namen müssen im späteren YAML-Code durch die Entity-IDs der eigenen Installation ersetzt werden.

Schritt 4: Den Mobile-App-Benachrichtigungsdienst finden

Die Steuerung des Android-Klingelmodus erfolgt über die Home-Assistant-App.

Der benötigte Aktionsname sieht ungefähr so aus:

notify.mobile_app_sm_s916b

Der genaue Name hängt von der Geräte-ID des Smartphones ab.

Er kann unter:

Entwicklerwerkzeuge → Aktionen

durch eine Suche nach:

notify.mobile_app

gefunden werden.

Wichtig ist, tatsächlich die Mobile-App-Aktion zu verwenden. Eine Notify-Entität wie:

notify.sm_s916b

ist nicht zwangsläufig für die verschachtelten Android-Steuerbefehle geeignet.

Home Assistant Entwicklerwerkzeuge

Schritt 5: Den Klingelmodus manuell testen

Bevor die vollständige Automation erstellt wird, sollte der Steuerbefehl separat getestet werden.

Smartphone auf Vibration stellen

action: notify.mobile_app_sm_s916b
data:
  message: command_ringer_mode
  data:
    command: vibrate

Dabei muss folgende Zeile angepasst werden:

action: notify.mobile_app_sm_s916b

Hier wird der tatsächliche Benachrichtigungsdienst des eigenen Smartphones eingetragen.

Smartphone wieder auf normal stellen

action: notify.mobile_app_sm_s916b
data:
  message: command_ringer_mode
  data:
    command: normal

Beim ersten Versuch kann Android die Berechtigung verlangen, den Klingelmodus oder den „Nicht stören“-Status zu ändern.

Home Assistant dokumentiert command_ringer_mode offiziell für Android. Unterstützt werden unter anderem normal, vibrate und silent.

Die vollständige Home-Assistant-Automation

Die folgende Automation reagiert auf jede Zustandsänderung der vier Sensoren.

Wenn Windows Busy oder PresentationMode meldet, Teams zusammen mit einem aktiven Mikrofon läuft oder die Webcam aktiv ist, wird das Smartphone auf Vibration gestellt.

Sobald keine dieser Bedingungen mehr zutrifft, wartet Home Assistant fünf Sekunden und stellt das Smartphone wieder auf normal.

alias: Android bei Call oder Bildschirmaufnahme auf Vibration
description: >
  Stellt das Android-Smartphone bei Bildschirmaufnahmen,
  Präsentationen, Teams-Calls oder aktiver Webcam auf Vibration.
  Sobald keine dieser Bedingungen mehr erfüllt ist, wird der
  normale Klingelmodus wiederhergestellt.
mode: restart

triggers:
  - trigger: state
    entity_id:
      - sensor.aero_laptop_usernotification
      - binary_sensor.aero_laptop_microphoneactive
      - binary_sensor.aero_laptop_webcamactive
      - sensor.aero_laptop_processactive

conditions: []

actions:
  - variables:
      windows_status: >
        {{ states('sensor.aero_laptop_usernotification')
           | lower
           | replace(' ', '')
           | replace('_', '') }}

      windows_busy: >
        {{ windows_status in ['busy', 'presentationmode'] }}

      teams_call: >
        {{
          states('sensor.aero_laptop_processactive') | int(0) > 0
          and is_state(
            'binary_sensor.aero_laptop_microphoneactive',
            'on'
          )
        }}

      webcam_active: >
        {{
          is_state(
            'binary_sensor.aero_laptop_webcamactive',
            'on'
          )
        }}

  - choose:
      - conditions:
          - condition: template
            value_template: >
              {{ windows_busy or teams_call or webcam_active }}

        sequence:
          - action: notify.mobile_app_sm_s916b
            data:
              message: command_ringer_mode
              data:
                command: vibrate

    default:
      - delay:
          seconds: 5

      - variables:
          current_windows_status: >
            {{ states('sensor.aero_laptop_usernotification')
               | lower
               | replace(' ', '')
               | replace('_', '') }}

          still_windows_busy: >
            {{
              current_windows_status
              in ['busy', 'presentationmode']
            }}

          still_in_teams_call: >
            {{
              states('sensor.aero_laptop_processactive')
              | int(0) > 0
              and is_state(
                'binary_sensor.aero_laptop_microphoneactive',
                'on'
              )
            }}

          still_webcam_active: >
            {{
              is_state(
                'binary_sensor.aero_laptop_webcamactive',
                'on'
              )
            }}

      - condition: template
        value_template: >
          {{
            not still_windows_busy
            and not still_in_teams_call
            and not still_webcam_active
          }}

      - action: notify.mobile_app_sm_s916b
        data:
          message: command_ringer_mode
          data:
            command: normal

Durch den Automationsmodus:

mode: restart

wird eine noch laufende Ausführung abgebrochen und mit den aktuellen Sensorwerten neu gestartet, wenn innerhalb der fünfsekündigen Wartezeit erneut ein relevanter Zustand auftritt. Home Assistant beschreibt restart entsprechend als Neustart der laufenden Automation bei einer erneuten Auslösung.

Diese Stellen müssen angepasst werden

In der Automation müssen die folgenden Entity- und Aktionsnamen an die eigene Home-Assistant-Installation angepasst werden.

Windows-Benachrichtigungsstatus

sensor.aero_laptop_usernotification

Mikrofonstatus

binary_sensor.aero_laptop_microphoneactive

Webcamstatus

binary_sensor.aero_laptop_webcamactive

Teams-Prozesssensor

sensor.aero_laptop_processactive

Mobile-App-Aktion des Android-Smartphones

notify.mobile_app_sm_s916b

Die Namen kommen im YAML teilweise mehrfach vor. Deshalb sollten alle Vorkommen ersetzt werden.

Smartphone vollständig lautlos statt auf Vibration stellen

Wer das Smartphone nicht nur auf Vibration, sondern vollständig lautlos stellen möchte, ändert in der Automation:

command: vibrate

zu:

command: silent

Der Befehl zum späteren Wiederherstellen bleibt:

command: normal

Damit ergibt sich:

Call oder Aufnahme beginnt
→ Smartphone vollständig lautlos

Call oder Aufnahme endet
→ Smartphone wieder normal

Auf unterstützten Android-Geräten kann silent zugleich den „Nicht stören“-Modus einschalten. normal beziehungsweise vibrate kann ihn anschließend wieder deaktivieren.

Warum Spiele bewusst ignoriert werden

Der HASS-Agent-Sensor UserNotification kann bei einem Spiel den Zustand:

RunningDirect3dFullScreen

melden.

Dieser Wert ist in der Automation bewusst nicht in windows_busy enthalten:

windows_busy: >
  {{ windows_status in ['busy', 'presentationmode'] }}

Dadurch wird das Smartphone beim Spielen nicht automatisch verändert.

Wer auch während eines Spiels nicht gestört werden möchte, kann den Zustand ergänzen:

windows_busy: >
  {{
    windows_status in [
      'busy',
      'presentationmode',
      'runningdirect3dfullscreen'
    ]
  }}

Die Automation testen

Die einzelnen Anwendungsfälle sollten nacheinander getestet werden.

Test 1: Bildschirmaufnahme

  1. Smartphone auf normal stellen.
  2. Bildschirmaufnahme mit oCam oder einer vergleichbaren Anwendung starten.
  3. In Home Assistant prüfen, ob UserNotification auf Busy wechselt.
  4. Das Smartphone sollte auf Vibration wechseln.
  5. Aufnahme beenden.
  6. Nach fünf Sekunden sollte das Smartphone wieder normal klingeln.

Test 2: Microsoft Teams

  1. Teams vollständig schließen.
  2. Kontrollieren, dass der Prozesssensor 0 meldet.
  3. Teams öffnen, aber noch keine Besprechung starten.
  4. Das Smartphone sollte normal bleiben.
  5. Eine eigene Testbesprechung starten.
  6. Sobald Teams läuft und das Mikrofon aktiv ist, sollte das Smartphone vibrieren.
  7. Die Besprechung verlassen.
  8. Nach fünf Sekunden sollte der normale Klingelmodus wiederhergestellt werden.

Für diesen Test wird kein zweiter Teilnehmer benötigt. Eine selbst gestartete Teams-Besprechung reicht aus.

Test 3: Google Meet

  1. Einen neuen Google-Meet-Raum öffnen.
  2. Die Webcam aktivieren.
  3. Der Webcam-Sensor sollte auf on wechseln.
  4. Das Smartphone sollte auf Vibration wechseln.
  5. Meeting verlassen oder Webcamzugriff beenden.
  6. Nach fünf Sekunden sollte das Smartphone wieder normal klingeln.

Mögliche Fehltrigger

Die Lösung ist bewusst pragmatisch und nicht auf einzelne Meeting-Anbieter beschränkt.

Teams läuft im Hintergrund und eine andere Anwendung verwendet das Mikrofon

Die Teams-Erkennung lautet:

Teams läuft und Mikrofon ist aktiv

Wenn Teams geöffnet bleibt und anschließend eine andere Anwendung das Mikrofon verwendet, kann die Automation ebenfalls auslösen.

Wer Teams nur für einzelne Kundentermine öffnet und anschließend wieder beendet, dürfte davon kaum betroffen sein.

Eine noch genauere Erkennung wäre über den HASS-Agent-Sensor Microphone Process möglich. Damit könnte geprüft werden, welcher Prozess das Mikrofon verwendet.

Jede Webcam-Nutzung löst die Automation aus

Auch die Windows-Kamera-App, OBS oder eine andere lokale Videoanwendung aktiviert den Webcam-Sensor.

Für meinen Anwendungsfall ist das gewünscht. Wenn eine Anwendung die Webcam verwendet, läuft wahrscheinlich gerade ein Call oder eine Aufnahme, die nicht durch das Smartphone gestört werden soll.

Wer ausschließlich Google Meet erkennen möchte, müsste zusätzlich den verwendeten Browser, Fenstertitel oder den Webcam-Prozess auswerten.

Das Smartphone wird immer auf „Normal“ zurückgestellt

Diese einfache Variante speichert den vorherigen Klingelmodus nicht.

Das bedeutet:

Smartphone war vorher auf Vibration
→ Automation wird aktiv
→ Automation endet
→ Smartphone wird auf Normal gestellt

In meinem Fall ist das unproblematisch, weil das Smartphone im Alltag normalerweise auf normal steht.

Wer den vorherigen Zustand exakt wiederherstellen möchte, kann ihn vor dem Umschalten in einem Home-Assistant-Helfer speichern. Für eine erste, unkomplizierte Umsetzung ist das jedoch nicht zwingend erforderlich.

Funktioniert das auch mit einem iPhone?

Die Home-Assistant-Companion-App ist ebenfalls für iOS verfügbar. Die in dieser Anleitung verwendete Steuerung des Klingelmodus mit command_ringer_mode ist jedoch eine Android-Funktion und kann nicht unverändert für ein iPhone übernommen werden.

Eine vergleichbare Lösung ist unter iOS grundsätzlich über die Apple-App „Kurzbefehle“ und einen Fokusmodus wie „Nicht stören“ denkbar. Home Assistant kann einen auf dem iPhone eingerichteten Kurzbefehl anstoßen, der anschließend den gewünschten Fokusmodus aktiviert oder deaktiviert.

Die Einrichtung unterscheidet sich damit deutlich von der hier beschriebenen Android-Automation und wird in dieser Anleitung nicht behandelt.

Fazit

Mit HASS.Agent und Home Assistant lässt sich der Klingelmodus eines Android-Smartphones automatisch an die aktuelle Arbeitssituation am Windows-PC anpassen.

Die Kombination aus mehreren Sensoren ist dabei zuverlässiger als eine einzelne Abfrage:

Windows Busy oder PresentationMode
ODER
Teams läuft und Mikrofon ist aktiv
ODER
Webcam ist aktiv

Damit werden unter anderem folgende Situationen abgedeckt:

  • Bildschirmaufnahmen
  • Microsoft-Teams-Besprechungen
  • Google-Meet-Calls
  • andere browserbasierte Videokonferenzen
  • lokale Webcam-Aufnahmen
  • Präsentationsmodi unter Windows

Während des Calls oder der Aufnahme wechselt das Smartphone automatisch auf Vibration oder vollständig lautlos. Danach stellt Home Assistant den normalen Klingelmodus wieder her.

Das verhindert störende Klingeltöne in Kundengesprächen und erspart gleichzeitig den manuellen Wechsel des Klingelmodus vor und nach jedem Termin.

Hinterlasse Dein Kommentar

zurück zum Blog