:toc: macro
:toclevels: 4
:sectnums:

toc::[]
= Arduino Cloud Library
Use this library to connect your Arduino/Genuino to Arduino cloud.
To have your configurations ready follow the https://create.arduino.cc/getting-started[getting started] or go to the https://cloud.arduino.cc/cloud[cloud dashboard].

== Supported devices

=== Zero +  WiFi101, MKR1000

IMPORTANT: Make sure to have the correct SSL certificate for arduino.cc. Look https://github.com/arduino-libraries/WiFi101-FirmwareUpdater#to-update-ssl-certificates[here] for the the update instuctions.

=== Yun-Shield

IMPORTANT: The yun or yun shield firmware should be >=1.6.2. Look https://www.arduino.cc/en/Tutorial/YunSysupgrade[here] for the the upgrade instuctions.

== Credits
The library is based on the https://eclipse.org/paho/clients/c/embedded/[Paho Library].

Special thanks to Joël Gähwiler author of https://github.com/256dpi/arduino-mqtt[arduino-mqtt library] for his work on porting the paho library on Arduino.

== APIs

=== Setup and Configuration
- `ArduinoCloudThing()`
- `void begin(const char* name, const char* username, const char* id, const char* password, Client &client)`

=== Property configuration
==== Simple property

- `void addProperty(const char* name, const char* datatype, const char* permission)`

==== Policy managed property
Is possible to specify a policy as:

- ON_CHANGE: the value will be written only if it is changed
- TIMED: is necessary to specify a lapse (seconds)

- `void addProperty(const char* name, const char* datatype, const char* permission, const char* policy)`

- `void addProperty(const char* name, const char* datatype, const char* permission, const char* policy, int lapse)`

==== Other object property
An object can also read or write a property of another object, is just necessary to specify the other object's name

- `void addExternalProperty(const char* other_device_name, const char* name, const char* datatype)`

=== Write properties
- `void writeProperty(const char* name, char* value)`
- `void writeProperty(const char* name, float value)`
- `void writeProperty(const char* name, int value)`
- `void writeProperty(const char* name, String value)`

=== Read properties
- `String readProperty(const char* name)`
- `String readProperty(const char* other_device_name, const char* name)`

=== Extra
- `void poll()`
- `void push()`
- `void enableDebug()`
- `void disableDebug()`

== Variables

### Permissions
- `R` - The property can be only written from the device
- `RW` - The property can be written and from the device and can update the value from other objects

### Polices
- `TIMED` - Waiting seconds before update a new data
- `ON_CHANGE` - Publish value only on change

### Data Type
#### Standard
- `CHARSTRING`
- `FLOAT`
- `INT`

#### Temperature
- `TEMPERATURE_C` - celsius
- `TEMPERATURE_F` - fahrenheit

#### Lenght
- `LENGHT_M` - meters
- `LENGHT_C` - centimeters
- `LENGHT_I` - inches

#### Vars
- `PERCENTAGE`
- `ANALOG`
- `LUMEN`
- `PPM` - gas part per million
- `STATUS` - on/off

== Debug
The default debug output is on SerialUSB, in order to change the output is necessary to edit CLOUD_DEBUG_SERIAL at the begin of `src/ArduinoCloudThingBase.h`
