[SOLVED] Unable to play audio in rule when using docker

  • Platform information:
    • Hardware: Raspberry Pi 4
    • OS: Raspbian
    • Java Runtime Environment: openjdk 1.8.0_222 is installed in the openhab docker image
    • openHAB version: openhab:milestone docker image
  • Issue of the topic:

I have created a rule to play a sound when my contact sensor changes:

    rule "rule test"
    when
        Item AqaraContact changed
    then
        logDebug("test", "blah test")
        playSound("glados.wav") 
    end

Whenever the rule is executed, I see this error in my logs:

2019-08-17 22:16:54.768 [WARN ] [ab.io.javasound.internal.AudioPlayer] - No line found: No line matching interface SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, mono, 2 bytes/frame, 22050.0 frames/second, little-endian is supported.
2019-08-17 22:16:54.770 [INFO ] [ab.io.javasound.internal.AudioPlayer] - Available lines are:

I am able to play the same sound file from the command line on the pi and from the command line if I go into the docker container itself (using docker exec -it container_id /bin/bash).

Openhab runs under root in my docker container. I couldnā€™t get the docker container to run as openhab with the openhab group for some reason, so I found an option to run as root in the documentation for the openhab docker image.

Here is my docker-compose file:

    version: '3'

    services:
        openhab:
            container_name: openhab
            image: "openhab/openhab:milestone"
            restart: always
            network_mode: host
            cap_add:
                - NET_ADMIN
                - NET_RAW
            volumes:
                - "/etc/localtime:/etc/localtime:ro"
                - "/etc/timezone:/etc/timezone:ro"
                - "/home/pi/openhab/volumes/conf:/openhab/conf"
                - "/home/pi/openhab/volumes/userdata:/openhab/userdata"
                - "/home/pi/openhab/volumes/addons:/openhab/addons"
            devices:
                - "/dev/snd:/dev/snd"
                - "/dev/ttyAMA0:/dev/ttyAMA0"
                - "/dev/ttyACM0:/dev/ttyACM0"
            environment:
                - USER_ID=110
                - GROUP_ID=115
            command: "tini -s ./start.sh server"

Iā€™m leaving the question here in case it is useful to anyone else. I resolved it immediately after posting, even though Iā€™ve been fighting with this for hours (typical).

My compose file originally had version: 2.2, per the example at https://hub.docker.com/r/openhab/openhab/#running-from-compose-fileyml. I switched it to version: 3 because I thought I might as well upgrade it. That did it. My sound works.

Wouldnā€™t the real solution have been to use the official documentation?

I did use the official openhab documentation. It includes a link and recommendation to refer to the documentation on docker hub as well.

I experienced two problems when using only the documentation at openhab.org (before I tried the compose config example on docker hub).

  1. Systemd was giving me trouble. I never figured out why, and it didnā€™t seem important enough at the time. I still had the option of starting the container manually, or using compose. I ran it manually for a while and then switched to compose.

  2. Audio playback through the rule didnā€™t work. I did stumble across errors different from what I posted, which led me to posts in this community about permissions errors. All of the posts I found were not working with docker, but I still tried treating this as a permissions problem. I re-did the user/group parameters in the docker run command (should be equivalent to my compose file) and host config multiple times, thinking I must have missed a step. I was unable to get audio working until I found the blurb about running as root in the docker hub documentation.

Do you have a step in mind that I might have missed in the documentation? I would like to have my setup as close as possible to the standard recommendation, without the container using root by default.

Since Iā€™m using docker, itā€™s very easy for me to retry this process. Iā€™m happy to walk through things with people here for my own benefit and for the sake of anyone else that experiences the same problem.

2 Likes

Hi I have exaxtcly the same problemā€¦I get the following logs:

2021-03-02 13:38:40.726 [WARN ] [nternal.javasound.JavaSoundAudioSink] - Cannot determine master volume level - assuming 100%
2021-03-02 13:38:40.807 [ERROR] [nternal.javasound.JavaSoundAudioSink] - An exception occurred while playing audio : 'Cannot create AudioDevice'

Iā€™ve tried every community-solution provided, but cannot run sound through the haedphonejack of the piā€¦Iā€™m running on 3.0.1 with composeā€¦can you show me how you got it to work? I use hypriot-os so maybe I have to load some modulesā€¦can you point me which?

I have OH3 running in Docker container on RP4 with Ubuntu. Going to try to get the audio to work and will update with my results.

2 Likes

Having exactly the same issue, unable to play any sound, Iā€™m now looking at setting up a pulse audio server on the host and pass that stream over the ā€œvirtualā€ network, but well, I donā€™t know if itā€™s the right way to goā€¦ More stable for the next releases I guessā€¦

forget about pulseaudio, itā€™s ā€œonlyā€ a ā€œcontrol bindingā€, you can"t play any sound on the sink with this binding :frowning:

I have the same problem. I can play the same mp3 file with command line in RP 4 running Ubuntu 20.04

mpg123 sound.mp3

But inside the container, play the same file but got no sound.

Hello, I have the same problem, Iā€™m using OH 3.2.0 with docker (as user ā€œopenhabā€, not root) running from command line, I also added ā€œā€“device=/dev/snd:/dev/sndā€ to docker run command, and I also added ā€œopnehabā€ user to audio group with ā€œsudo adduser openhab audioā€. Iā€™m still not able to play sound, the error is: " An exception occurred while playing audio : ā€˜Cannot create AudioDeviceā€™. Any help will be very appreciated. Thanks.

Where can I find version 3? Sorry for the question but at this link a can find just version 2.2 ). Many thanks.