Client
The Envoy class uses an aiohttp client session
for HTTP communication. By default pyenphase will create one to use. The caller can optionally specify a client session when constructing the pyenphase.Envoy.
import aiohttp
from pyenphase import Envoy, EnvoyData
from pyenphase.ssl import NO_VERIFY_SSL_CONTEXT
timeout = aiohttp.ClientTimeout(total=5.0, connect=1.0, sock_read=1.0)
connector = aiohttp.TCPConnector(ssl=NO_VERIFY_SSL_CONTEXT)
client = aiohttp.ClientSession(timeout=timeout, connector=connector)
envoy = Envoy(host_ip_or_name, client=client)
await envoy.setup()
In above example, a clientsession is created and specified when constructing the Envoy.
Close
Client sessions need to be closed before application exit. To close the client session created by pyenphase use pyenphase.Envoy.close() .
If an aiohttp ClientSession was provided when constructing the Envoy, pyenphase.Envoy.close() will not close it; the caller should close it external from pyenphase.
from pyenphase import Envoy, EnvoyData
envoy = Envoy(host_ip_or_name)
await envoy.setup()
print(f"Envoy {envoy.host} running {envoy.firmware}, sn: {envoy.serial_number}")
await envoy.authenticate(username=username, password=password, token=token)
data: EnvoyData = await envoy.update()
await envoy.close()
Current client
The client in use can be obtained using the property pyenphase.Envoy.current_client.
if (client := envoy.current_client) and not client.closed:
...
New client
If the need exists to replace the client used by pyenphase, use pyenphase.Envoy.new_client(). Similar to constructing the pyenphase.Envoy, an optional aiohttp client session can be specified. If not specified, pyenphase will create a new one. If the active session was created by pyenphase, it will be closed before it is replaced by the new one.
import aiohttp
from pyenphase import Envoy, EnvoyData
from pyenphase.ssl import NO_VERIFY_SSL_CONTEXT
envoy = Envoy(host_ip_or_name)
await envoy.setup()
await envoy.authenticate(username=username, password=password, token=token)
data: EnvoyData = await envoy.update()
# replace client created by pyenphase
timeout = aiohttp.ClientTimeout(total=5.0, connect=1.0, sock_read=1.0)
connector = aiohttp.TCPConnector(ssl=NO_VERIFY_SSL_CONTEXT)
client = aiohttp.ClientSession(timeout=timeout, connector=connector)
await envoy.new_client(client)