Add Pico HTTP fallback client

This commit is contained in:
2026-06-03 02:43:04 -06:00
parent b3ae8eb23a
commit c3b786073a
2 changed files with 79 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
import json
class HttpClient:
def __init__(self, requests_module, base_url="http://192.168.4.1"):
self.requests = requests_module
self.base_url = base_url.rstrip("/")
def get_status(self):
response = self.requests.get(f"{self.base_url}/status")
return response.json()
def set_relay(self, relay, enabled):
state = "on" if enabled else "off"
response = self.requests.get(f"{self.base_url}/relay/{relay}/{state}")
return response.json()
+63
View File
@@ -228,3 +228,66 @@ def test_communication_service_records_errors():
service.poll()
assert state.last_error["message"] == "invalid_json"
class FakeResponse:
def __init__(self, payload):
self.payload = payload
def json(self):
return self.payload
class FakeRequests:
def __init__(self):
self.urls = []
self.responses = []
def get(self, url):
self.urls.append(url)
if self.responses:
return FakeResponse(self.responses.pop(0))
return FakeResponse({"ok": True})
def test_http_client_get_status():
from comms.http_client import HttpClient
fake_requests = FakeRequests()
fake_requests.responses = [
{"type": "status_response", "battery": {"soc": 82}}
]
client = HttpClient(fake_requests)
payload = client.get_status()
assert fake_requests.urls == ["http://192.168.4.1/status"]
assert payload["type"] == "status_response"
assert payload["battery"]["soc"] == 82
def test_http_client_set_relay_on():
from comms.http_client import HttpClient
fake_requests = FakeRequests()
client = HttpClient(fake_requests)
payload = client.set_relay("starlink", True)
assert fake_requests.urls == ["http://192.168.4.1/relay/starlink/on"]
assert payload == {"ok": True}
def test_http_client_set_relay_off():
from comms.http_client import HttpClient
fake_requests = FakeRequests()
client = HttpClient(fake_requests)
payload = client.set_relay("fridge", False)
assert fake_requests.urls == ["http://192.168.4.1/relay/fridge/off"]
assert payload == {"ok": True}