Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SENSOR] connected microphone usage #99

Open
joshuar opened this issue Feb 17, 2024 · 1 comment
Open

[SENSOR] connected microphone usage #99

joshuar opened this issue Feb 17, 2024 · 1 comment
Labels
enhancement New feature or request

Comments

@joshuar
Copy link
Owner

joshuar commented Feb 17, 2024

What are the sensors you would like to see in Go Hass Agent? What do they measure? Why are they useful? How would you use them in Home Assistant?

  • A sensor that records when a connected microphone is being used
  • Just whether the microphone is in use or not.
  • As a binary sensor, could be used to change lights/shut doors/send notifications to indicate someone is on a call/streaming etc.

How do you access the sensor(s) currently?

  • It's not clear whether this is exposed anywhere or easily measure. Pipewire on Linux might hold something like this.
@joshuar joshuar added the enhancement New feature or request label Feb 17, 2024
@Jay2645
Copy link

Jay2645 commented May 23, 2024

I'm not 100% sure if you have access to this on your end, but a couple things that might be helpful:

You can see a list of all microphones using arecord:

jay@Navua-Neon:/dev/snd$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Ultimate [Razer Nari Ultimate], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 2: ALC1220 Alt Analog [ALC1220 Alt Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: C930e [Logitech Webcam C930e], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

If the microphone is in use, lsof will return an output associated with it - assuming you know the microphone ID (capture information on card 1, device 0 here - aka C1D0c or Card1Device0capture).

jay@Navua-Neon:/dev/snd$ lsof /dev/snd/pcmC1D0c
lsof: WARNING: can't stat() overlay file system /var/lib/docker/overlay2/5fded3f178384781127daf6c34fabba88f8e1146d286fd8fbe0db0c59229a534/merged
      Output information may be incomplete.
lsof: WARNING: can't stat() overlay file system /var/lib/docker/overlay2/452460be3173a7bd5e56d88f8a2ca775a4c6fad529d6216c671fbad21873c55c/merged
      Output information may be incomplete.
lsof: WARNING: can't stat() nsfs file system /run/docker/netns/997e324acb67
      Output information may be incomplete.
lsof: WARNING: can't stat() nsfs file system /run/docker/netns/3c6298a7ffce
      Output information may be incomplete.
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi 1284  jay  mem    CHR 116,17          1218 /dev/snd/pcmC1D0c
pulseaudi 1284  jay   91u   CHR 116,17      0t0 1218 /dev/snd/pcmC1D0c

If the machine has PulseAudio, you can do that to get cleaner output without needing to fumble through figuring out which devices are available:

jay@Navua-Neon:/dev/snd$ pactl list source-outputs
Source Output #33
        Driver: protocol-native.c
        Owner Module: 10
        Client: 29
        Source: 3
        Sample Specification: s16le 1ch 44100Hz
        Channel Map: mono
        Format: pcm, format.sample_format = "\"s16le\""  format.rate = "44100"  format.channels = "1"  format.channel_map = "\"mono\""
        Corked: no
        Mute: no
        Volume: mono: 65536 / 100% / 0.00 dB
                balance 0.00
        Buffer Latency: 0 usec
        Source Latency: 2507 usec
        Resample method: n/a
        Properties:
                media.name = "recStream"
                application.name = "ZOOM VoiceEngine"
                native-protocol.peer = "UNIX socket client"
                native-protocol.version = "35"
                application.process.id = "61602"
                application.process.user = "jay"
                application.process.host = "Navua-Neon"
                application.process.binary = "zoom"
                application.language = "en_US.UTF-8"
                window.x11.display = ":1"
                application.process.machine_id = "b6874eae2f1547e582d67dd83ca49e8e"
                application.process.session_id = "1"
                module-stream-restore.id = "source-output-by-application-name:ZOOM VoiceEngine"

In this case, Zoom is using my microphone (process 61602).

Output is empty when nothing is using the Pulseaudio microphone:

jay@Navua-Neon:/dev/snd$ pactl list source-outputs
jay@Navua-Neon:/dev/snd$ 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants