defmodule TpLink do @moduledoc """ Client library for interacting with Kasa/TP-Link smart home devices via either tplinkcloud.com or directly over the local network. See the [README](README.md) for examples. """ alias TpLink.Cloud.{CloudDevice, Session} alias TpLink.Local.LocalDevice @doc """ Sends a command to a device and returns the response. Use `cloud_device/2` or `local_device/2` to generate a device struct. """ defdelegate call(device, command), to: TpLink.Device @doc """ Creates a device struct for a device that is accessed through the cloud. Generate a session with `TpLink.Cloud.login/2`. """ def cloud_device(%Session{} = session, device_id) when is_binary(device_id) do %CloudDevice{device_id: device_id, session: session} end @local_device_options_schema [ timeout: [ default: 5_000, doc: "Timeout in milliseconds.", type: :pos_integer ] ] @doc """ Create a device struct for a device that is accessed via the local Wifi network. ## Options #{NimbleOptions.docs(@local_device_options_schema)} """ def local_device(ip_or_host, opts \\ []) do opts = NimbleOptions.validate!(opts, @local_device_options_schema) %LocalDevice{host: ip_or_host, opts: opts} end end