Module zipato
Zipato API library for Zipabox/Zipatile home controllers for the V2 api which has been deprecated.
The V2 devices are no longer available through the zipato cloud, only the local API remians.
This library implements the session management and makes it easy to access individual endpoints of the API.
Info:
- Copyright: 2019-2020 Thijs Schreijer
- Release: Version x.x, Library to acces the Zipato API
- License: zipato.lua is free software under the MIT/X11 license.
- Author: Thijs Schreijer, http://www.thijsschreijer.nl
Generic functions
| login () | Logs in the current session. | 
| logout () | Logs out of the current session. | 
| new (username, password, opts) | Creates a new Zipato session instance. | 
| request (path, method, headers, query, body) | Performs a HTTP request on the Zipato API. | 
| rewrite_error (expected, ...) | Rewrite errors to Lua format (nil+error). | 
API specific functions
| find_device (uuid_or_name) | Returns a device by name or uuid. | 
| get_attribute_values (handle, update, raw) | Returns all attribute values; "/attributes/values" GET. | 
| get_device_attributes (device_uuid) | Returns device attributes by device. | 
| get_device_details (device_uuid, query) | Returns device details by device_uuid; "/devices/{uuid} GET". | 
| get_devices () | Returns list of all devices; "/devices GET". | 
| get_mqtt_config () | Returns the mqtt configuration of the box if available. | 
| set_attribute_value (attribute_uuid, value, timestamp, pendingValue, pendingTimestamp) | Sets an attribute value; "/attributes/{uuid}/value PUT". | 
Session tracked attributes
| fetch_attribute_values () | Fetches attribute values tracked by the session. | 
| get_attribute_value (uuid) | Gets a single attribute value, as tracked by the session. | 
Generic functions
- login ()
- 
    Logs in the current session.
 This will automatically be called by the request method, if not logged in
 already.
    Returns:trueornil+errUsage:local zipato = require "zipato" local zsession = zipato.new("myself@nothere.com", "secret_password") local ok, err = zsession:login() if not ok then print("failed to login: ", err) end 
- logout ()
- 
    Logs out of the current session.
    Returns:trueor nil+errUsage:local zipato = require "zipato" local zsession = zipato.new("myself@nothere.com", "secret_password") local ok, err = zsession:login() if not ok then print("failed to login: ", err) else zsession:logout() end 
- new (username, password, opts)
- 
    Creates a new Zipato session instance.
    Parameters:- username (string) required, the username to use for login
- password (string) required, the password to use for login
- opts (table, optional) additional options
        - base_url string (string) the base url of the API, defaults to "http://192.168.2.6:8080".
 
 Returns:- 
        zipato session object
    
 Usage:local zipato = require "zipato" local zsession = zipato.new("myself@nothere.com", "secret_password", { attribute_update_config = { update_interval = 1, -- max age in seconds before refreshing callback = function(session, uuid, value) -- callback called for each attribute value update end, } }) local ok, err = zsession:login() if not ok then print("failed to login: ", err) end 
- request (path, method, headers, query, body)
- 
    Performs a HTTP request on the Zipato API.
 It will automatically inject authentication/session data. Or if not logged
 in yet, it will log in. If the session has expired it will be renewed.
NOTE: if the response_body is json, then it will be decoded and returned as a Lua table. Parameters:- path (string) the relative path within the API base path, eg. "/v2/..."
- method (string) HTTP method to use
- headers (table) optional header table
- query (table) optional query parameters (will be escaped)
- body (table/string) optional body. If set the "Content-Length" will be added to the headers. If a table, it will be send as JSON, and the "Content-Type" header will be set to "application/json".
 Returns:- 
        ok, responsebody, responsecode, responseheaders, responsestatus_line
    
 Usage:local zipato = require "zipato" local zsession = zipato.new("myself@nothere.com", "secret_password") local headers = { ["My-Header"] = "myvalue" } local query = { ["param1"] = "value1" } -- the following line will automatically log in local ok, response_body, status, headers, statusline = zsession:request("/v2/attributes", "GET", headers, query, nil) 
- rewrite_error (expected, ...)
- 
    Rewrite errors to Lua format (nil+error).
 Takes the output of the request function and validates it for errors;
- nil+err
- body with "success = false" (some API calls return a 200 with success=false for example)
- mismatch in expected status code (a 200 expected, but a 404 received)
 This reduces the error handling to standard Lua errors, instead of having to validate each of the situations above individually. Parameters:- expected (number) optional expected status code, if nil, it will be ignored
- ... same parameters as the request method
 Returns:- 
        nil+err or the input arguments
    
 Usage:local zipato = require "zipato" local zsession = zipato.new("myself@nothere.com", "secret_password") -- Make a request where we expect a 200 result local ok, response_body, status, headers, statusline = zsession:rewrite_error(200, zsession:request("/v2/attributes", "GET")) if not ok then return nil, response_body -- a 404 will also follow this path now, since we only want 200's end 
API specific functions
- find_device (uuid_or_name)
- 
    Returns a device by name or uuid.
 Retreives the list through get_devices but only returns the requested one.
    Parameters:- uuid_or_name
 Returns:- 
        device, or nil+err
    
 
- get_attribute_values (handle, update, raw)
- 
    Returns all attribute values; "/attributes/values" GET.
    Parameters:- handle (string, optional) handle of last call for updates
- update (boolean, optional) request only updated values or all, defaults to true if handle is given, or false if not
- raw (boolean, optional) if true, raw results, otherwise a table keyed by uuid, with the value as value
 Returns:- 
        raw values array + handle, or nil+err
    
 
- get_device_attributes (device_uuid)
- 
    Returns device attributes by device.
 Gets all attributes from the device endpoints; "/endpoints/{uuid}", and
 combines them into a single attribute table.
    Parameters:- device_uuid (string) uuid of device to get
 Returns:- 
        attribute array, or nil+err
    
 
- get_device_details (device_uuid, query)
- 
    Returns device details by device_uuid; "/devices/{uuid} GET".
    Parameters:- device_uuid (string) uuid of device to get
- query
         (table, optional) query parameters, default: { full=true }
 Returns:- 
        device, or nil+err
    
 
- get_devices ()
- 
    Returns list of all devices; "/devices GET".
    Returns:- 
        list, or nil+err
    
 
- get_mqtt_config ()
- 
    Returns the mqtt configuration of the box if available.
    Returns:- 
        table with brokerip, brokerport and box_topic, or nil+err
    
 
- set_attribute_value (attribute_uuid, value, timestamp, pendingValue, pendingTimestamp)
- 
    Sets an attribute value; "/attributes/{uuid}/value PUT".
    Parameters:- attribute_uuid (string) the uuid of the attribute to set the value of.
- value (optional) the value to set
- timestamp (Date, optional) timestamp for the value to set
- pendingValue (optional) pendingValue to set
- pendingTimestamp (Date, optional) timestamp for the pendingValue to set
 Returns:- 
        true, or nil+err
    
 
Session tracked attributes
 Behaviour can be configured using opts.attribute_update_config settings
 (see new).
 The update_interval property determines when a value expires. Getting a value
 while the values have expired, will cause an update of the values first.
 The callback property will be called for each updated value.
          
- fetch_attribute_values ()
- 
    Fetches attribute values tracked by the session.
 This will force an update, even if the values haven't expired yet. This
 could for example be called on a recurring timer. With a configured callbackto handle the updates.Returns:- 
        true, or nil+err
    
 
- get_attribute_value (uuid)
- 
    Gets a single attribute value, as tracked by the session.
 If the current values are to old, it will update them in the process
 by calling fetch_attribute_values first.
    Parameters:- uuid (string) the uuid of the attribute to return the value of
 Returns:- 
        value, or nil+err
    
 See also: