TTS failure after several hours

Hi Snips team,

My configuration is the following:

  • Snips base running on a Debian 9 VM
  • 3 satellites running on PI Zero W or WH

On a satellite running Snips and Squeezelite, I observe systematic TTS issues after several hours (difficult to identify the trigger of the issue). The issue is the following: snips satellite plays partially a TTS wavfile and then stops working. All the subsequent TTS requests are not handled at all.
You can see this behaviour on the output of grep snips /var/log/syslog

Jun 7 06:45:01 RPI-SEJOUR CRON[9152]: (root) CMD (systemctl restart snips-satellite)
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: INFO:snips_satellite: Using site id : sejour
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: Expression ‘alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )’ failed in ‘src/hostapi/alsa/pa_linux_alsa.c’, line: 923
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: Expression ‘alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )’ failed in ‘src/hostapi/alsa/pa_linux_alsa.c’, line: 923
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.front.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM front
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround51.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround21
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround51.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround21
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround40.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround40
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround51.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround41
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround51.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround50
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround51.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround51
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.surround71.0:CARD=0’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM surround71
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM iec958
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM spdif
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835_alsa.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM spdif
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: Expression ‘GetExactSampleRate( hwParams, &defaultSr )’ failed in ‘src/hostapi/alsa/pa_linux_alsa.c’, line: 894
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Jun 7 06:45:01 RPI-SEJOUR snips-satellite[9155]: INFO:snips_audio_portaudio: Use input device: “default”
Jun 7 06:45:02 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::universal: Loading model “/usr/share/snips/hotword”, hotword_key: Some(“hey_snips”), model_id: Some(“workflow-hey_snips_subww_feedback_10seeds-2018_12_04T12_13_05_evaluated_model_0002”)
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for sejour started
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib : Detector “detector.ww_fx.sejour”, sensitivity: 0.5, threshold 0.5
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Net and VAD thread for site sejour started (vad inhibitor: true, vad messages: false
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib : detector.ww_fx.sejour thread started
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib : Detector “detector.hey_snips.sejour”, sensitivity: 0.5, threshold 0.787
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_audio_server_cli : Starting audio server on mqtt for site sejour
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_broadcast_mqtt_server : Starting broadcasting audio on hermes as site “sejour”
Jun 7 06:45:15 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib : detector.hey_snips.sejour thread started
Jun 7 07:15:53 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 07:15:53 RPI-SEJOUR snips-satellite[9155]: INFO:snips_audio_portaudio : Playing “bbd0a31c-ce99-4268-9c66-cc7d35b5cb04” using output “default”, wav spec: WavSpec { channels: 1, sample_rate: 16000, bits_per_sample: 16, sample_format: Int }
Jun 7 07:15:56 RPI-SEJOUR snips-satellite[9155]: INFO:snips_audio_portaudio : Playing of “bbd0a31c-ce99-4268-9c66-cc7d35b5cb04” finished
Jun 7 07:15:59 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour started.
Jun 7 07:45:03 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 07:45:03 RPI-SEJOUR snips-satellite[9155]: INFO:snips_audio_portaudio : Playing “f1aa3018-b32a-48da-9dd6-41162fb592a6” using output “default”, wav spec: WavSpec { channels: 1, sample_rate: 16000, bits_per_sample: 16, sample_format: Int }
Jun 7 07:45:18 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 07:45:33 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 07:45:48 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 07:46:03 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 07:46:18 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour started.
Jun 7 08:00:03 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 08:00:18 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 08:00:33 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour stopped.
Jun 7 08:00:48 RPI-SEJOUR snips-satellite[9155]: INFO:snips_hotword_lib::audio : Audio thread for site sejour started.

Do you have any clue or do you need additional logs?

fx

I reply to myself to add more logs from my own MQTT spy…

As you can see below, everything is ok at 07:15 and from 07:45, all sessions go in tileout because the snips-audio-server is not able to play files

07-06-2019 07:15:53 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: b0d53e71
07-06-2019 07:15:53 | ON_HOTWORD_TOGGLE_OFF | SiteId: sejour | sessionId: b0d53e71
07-06-2019 07:15:53 | ON_DIALOGUE_SESSION_QUEUED | SiteId: sejour | sessionId: b0d53e71 | reactivatedFromSessionId: None
07-06-2019 07:15:53 | ON_DIALOGUE_SESSION_STARTED | SiteId: sejour | sessionId: b0d53e71 | reactivatedFromSessionId: None
07-06-2019 07:15:53 | ON_TTS_SAY | SiteId: sejour | sessionId: b0d53e71 | text: faut-il ouvrir les volets de la cuisine ? | id:f217b34f-0aac-4e16-bb18-5c03fc286662
07-06-2019 07:15:56 | ON_TTS_SAY_FINISHED | sessionId: b0d53e71 | id: f217b34f-0aac-4e16-bb18-5c03fc286662
07-06-2019 07:15:56 | ON_ASR_START_LISTENING | SiteId: sejour | sessionId: b0d53e71
07-06-2019 07:15:57 | ON_ASR_TEXT_CAPTURED | SiteId: sejour | sessionId: b0d53e71 | text: oui | likelihood: 1.0
07-06-2019 07:15:57 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: b0d53e71
07-06-2019 07:15:58 | ON_NLU_INTENT_PARSED | intent: {u’confidenceScore’: 1.0, u’intentName’: u’tuxedo78:PersoAskYesNoJeedom’} | slots: Oui(YesNo,1.0)
07-06-2019 07:15:58 | ON_INTENT | SiteId: sejour | sessionId: b0d53e71 | intent: {u’confidenceScore’: 1.0, u’intentName’: u’tuxedo78:PersoAskYesNoJeedom’} | asrConfidence: 1.0
07-06-2019 07:15:58 | ON_DIALOGUE_SESSION_ENDED | SiteId: sejour | sessionId: b0d53e71 | termination: {u’reason’: u’nominal’}
07-06-2019 07:45:03 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: 3299b0bb
07-06-2019 07:45:03 | ON_HOTWORD_TOGGLE_OFF | SiteId: sejour | sessionId: 3299b0bb
07-06-2019 07:45:03 | ON_DIALOGUE_SESSION_QUEUED | SiteId: sejour | sessionId: 3299b0bb | reactivatedFromSessionId: None
07-06-2019 07:45:03 | ON_DIALOGUE_SESSION_STARTED | SiteId: sejour | sessionId: 3299b0bb | reactivatedFromSessionId: None
07-06-2019 07:45:03 | ON_TTS_SAY | SiteId: sejour | sessionId: 3299b0bb | text: Bonne fin de petit déjeuner ! Voici les informations. | id:b8781489-d173-42e2-beda-4a5342a54d09
07-06-2019 07:45:09 | ON_DIALOGUE_SESSION_QUEUED | SiteId: sejour | sessionId: 38aef016 | reactivatedFromSessionId: None
07-06-2019 07:45:13 | ON_DIALOGUE_SESSION_QUEUED | SiteId: sejour | sessionId: 311ff619 | reactivatedFromSessionId: None
07-06-2019 07:45:16 | ON_DIALOGUE_SESSION_QUEUED | SiteId: sejour | sessionId: 39618bf9 | reactivatedFromSessionId: None
07-06-2019 07:45:18 | ON_DIALOGUE_SESSION_ENDED | SiteId: sejour | sessionId: 3299b0bb | termination: {u’reason’: u’timeout’}
07-06-2019 07:45:18 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: 38aef016
07-06-2019 07:45:18 | ON_HOTWORD_TOGGLE_OFF | SiteId: sejour | sessionId: 38aef016
07-06-2019 07:45:18 | ON_DIALOGUE_SESSION_STARTED | SiteId: sejour | sessionId: 38aef016 | reactivatedFromSessionId: None
07-06-2019 07:45:18 | ON_TTS_SAY | SiteId: sejour | sessionId: 38aef016 | text: Aujourd’hui, nous sommes le Vendredi 7 Juin | id:1197c534-0568-4edd-ac96-9efd015348e4
07-06-2019 07:45:20 | ON_DIALOGUE_SESSION_QUEUED | SiteId: sejour | sessionId: d8799873 | reactivatedFromSessionId: None
07-06-2019 07:45:33 | ON_DIALOGUE_SESSION_ENDED | SiteId: sejour | sessionId: 38aef016 | termination: {u’reason’: u’timeout’}
07-06-2019 07:45:33 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: 311ff619
07-06-2019 07:45:33 | ON_HOTWORD_TOGGLE_OFF | SiteId: sejour | sessionId: 311ff619
07-06-2019 07:45:33 | ON_DIALOGUE_SESSION_STARTED | SiteId: sejour | sessionId: 311ff619 | reactivatedFromSessionId: None
07-06-2019 07:45:33 | ON_TTS_SAY | SiteId: sejour | sessionId: 311ff619 | text: Dehors, il fait 13,4 degrés, | id:407a4933-133b-43d4-a578-6e7d1285297a
07-06-2019 07:45:48 | ON_DIALOGUE_SESSION_ENDED | SiteId: sejour | sessionId: 311ff619 | termination: {u’reason’: u’timeout’}
07-06-2019 07:45:48 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: 39618bf9
07-06-2019 07:45:48 | ON_HOTWORD_TOGGLE_OFF | SiteId: sejour | sessionId: 39618bf9
07-06-2019 07:45:48 | ON_DIALOGUE_SESSION_STARTED | SiteId: sejour | sessionId: 39618bf9 | reactivatedFromSessionId: None
07-06-2019 07:45:48 | ON_TTS_SAY | SiteId: sejour | sessionId: 39618bf9 | text: La météo du jour, c’est Pluie modérée. | id:b5e75424-2e49-4905-9644-b3eb6d3cfb6c
07-06-2019 07:46:03 | ON_DIALOGUE_SESSION_ENDED | SiteId: sejour | sessionId: 39618bf9 | termination: {u’reason’: u’timeout’}
07-06-2019 07:46:03 | ON_ASR_STOP_LISTENING | SiteId: sejour | sessionId: d8799873
07-06-2019 07:46:03 | ON_HOTWORD_TOGGLE_OFF | SiteId: sejour | sessionId: d8799873
07-06-2019 07:46:03 | ON_DIALOGUE_SESSION_STARTED | SiteId: sejour | sessionId: d8799873 | reactivatedFromSessionId: None
07-06-2019 07:46:03 | ON_TTS_SAY | SiteId: sejour | sessionId: d8799873 | text: Et Aujourd’hui, on fête les Maite ainsi que les Meriadec | id:f566022c-70c2-459c-b885-206d97fa387f
07-06-2019 07:46:18 | ON_DIALOGUE_SESSION_ENDED | SiteId: sejour | sessionId: d8799873 | termination: {u’reason’: u’timeout’}

fx

Sorry for the multiple messages…

Note as well that after a “sudo systemctl restart snips-satellite”, the issue disappears… and comes back systematically several hours later (at least I have it every day when running the same Jeedom scenario).

fx

Hi! Maybe using the code formatting feature would be nicer to read?