CPE Client Session (optional networked demo)
> This notebook starts a local HTTP listener (Bandit) and performs a one-shot TR-069 session.
Setup and start ACS + Finch
Mix.install([
{:caretaker, path: "."}
])
alias Caretaker.CPE.{Client, DeviceState}
require Logger
{:ok, sup} =
Supervisor.start_link(
[
{Bandit, plug: Caretaker.ACS.Server, port: 4051},
{Finch, name: Caretaker.Finch},
{Caretaker.ACS.Session, []}
],
strategy: :one_for_one
)
Run one-shot session (basic)
{:ok, result} =
Client.run_session(
"http://localhost:4051/cwmp",
device_id: %{
manufacturer: "Acme",
oui: "A1B2C3",
product_class: "Router",
serial_number: "XYZ123"
},
max_retries: 2,
timeout: 3000
)
Logger.info("Session result=#{inspect(result)}")
result
Run session with stateful device (Phase 1+)
# Create a device state with TR-181 parameters
{:ok, state} = DeviceState.start_link(
device_id: %{oui: "DEMO01", product_class: "Router", serial_number: "STATE001"},
params: %{
"Device.DeviceInfo.Manufacturer" => "Caretaker Demo",
"Device.DeviceInfo.SoftwareVersion" => "1.0.0",
"Device.DeviceInfo.UpTime" => "12345",
"Device.IP.Interface.1.Enable" => "true",
"Device.IP.Interface.1.IPv4Address.1.IPAddress" => "192.168.1.100"
}
)
# Run session with device state - GetParameterValues will return real data
{:ok, result} =
Client.run_session(
"http://localhost:4051/cwmp",
device_id: %{
manufacturer: "Caretaker Demo",
oui: "DEMO01",
product_class: "Router",
serial_number: "STATE001"
},
device_state: state,
max_retries: 2,
timeout: 3000
)
Logger.info("Stateful session result=#{inspect(result)}")
result
Teardown (optional)
Process.exit(sup, :normal)
:ok