AI Fusion HAT stt.listen() stopped working

I am using raspberry pi 5 and the standard software from sunFounder.

I am importing fusion_hat.stt and I am using a very basic listening function:

stt = STT(language=“en-us”)

cmd = stt.listen(stream=False)

The listening was working all right in my application. However suddenly it stopped working and it generates a very long error log. Here is a copy of the error log:

%Run brightVoiceCtrl.py
Exception in thread Thread-1 (voice_com):
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 705, in urlopen
httplib_response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 388, in _make_request
self._validate_conn(conn)
File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 1050, in validate_conn
conn.connect()
File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 414, in connect
self.sock = ssl_wrap_socket(
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 449, in ssl_wrap_socket
ssl_sock = ssl_wrap_socket_impl(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 493, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.11/ssl.py”, line 517, in wrap_socket
return self.sslsocket_class._create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.11/ssl.py”, line 1108, in _create
self.do_handshake()
File “/usr/lib/python3.11/ssl.py”, line 1379, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 489, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 789, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/urllib3/util/retry.py”, line 594, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=‘alphacephei.com’, port=443): Max retries exceeded with url: /vosk/models/model-list.json (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992)’)))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/lib/python3.11/threading.py”, line 1038, in _bootstrap_inner
self.run()
File “/usr/lib/python3.11/threading.py”, line 975, in run
self._target(*self._args, **self._kwargs)
File “/media/pi/f1deba0c-2001-4db3-bd3e-6560b75406bd/fusionHatLecture/lecture_12/brightVoiceCtrl.py”, line 22, in voice_com
stt = STT(language=“en-us”)
^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/sunfounder_voice_assistant/stt/vosk.py”, line 40, in init
self.update_model_list()
File “/usr/local/lib/python3.11/dist-packages/sunfounder_voice_assistant/stt/vosk.py”, line 82, in update_model_list
response = requests.get(MODEL_LIST_URL, timeout=10)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/requests/api.py”, line 73, in get
return request(“get”, url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/requests/api.py”, line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 587, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 701, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 563, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host=‘alphacephei.com’, port=443): Max retries exceeded with url: /vosk/models/model-list.json (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:992)’)))

****************************************************************

Any suggestion about the cause of the error?

Problem is that the certificate has just expired for the site that holds the model.
You can tell this by browsing to https://alphacephei.com/
Lets Encrypt certs automatically renew and last for 90 days. Site should have that corrected soon.
In the mean time, issue these commands to manually set your clock to a past date that is within range of the cert’s valid period:
sudo timedatectl set-ntp false
sudo date -s “2026-03-01 14:00:00”

When the cert is renewed, use this command to go back to getting date/time from the Internet:
sudo timedatectl set-ntp true

I have exactly the same issue, and error message. Hopefully Sunfounder can resolve soon!

thanks - I’ll try this :+1:

It’s not really a Sunfounder problem as I doubt they manage the site that has the expired cert.

I monitor certs for clients as part of my job. Quite a number of hosted websites use Let’s Encrypt as the cert provider. Let’s Encrypt and the site hosts that use them are usually pretty good at auto-renewing the cert as early as 2 weeks before expiration but sometimes it does get renewed right on the wire.

It probably will be OK really soon, I’d say Monday the latest.

1 Like

OK thanks

I think I’m going to hard wire my fusion hat to internet - just in case internet speed plays a role in sync of some of these Add-in’s (like VOSK/Piper etc)

The only ones that need any speed is TTS and STT when a model is used for the first time.

FYI the site has renewed its cert. Weird that the new cert has an issue date of April 17, 2026. Could be the site hadn’t yet made the renewal cert live.