> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hyperwisor.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Arduino — API Reference

> Every public method of the HyperwisorIOT class.

All calls are made on a `HyperwisorIOT` instance:

```cpp theme={null}
#include <hyperwisor-iot.h>
HyperwisorIOT device;
```

## Core

```cpp theme={null}
void begin();   // initialize: Wi-Fi, provisioning, realtime, handlers
void loop();    // keep the connection alive; call every loop()
void setApiKeys(const String &apiKey, const String &secretKey);
```

## Identity

```cpp theme={null}
String getDeviceId();
String getUserId();
```

## Provisioning

```cpp theme={null}
void setWiFiCredentials(const String &ssid, const String &password);
void setDeviceId(const String &deviceId);
void setUserId(const String &userId);
void setCredentials(const String &ssid, const String &password,
                    const String &deviceId, const String &userId = "");
void clearCredentials();
bool hasCredentials();
```

See [Provisioning](/firmware/arduino/provisioning) for the full flow.

## Receiving commands

Register a handler to receive commands sent from a dashboard:

```cpp theme={null}
void setUserCommandHandler(UserCommandCallback cb);
// typedef std::function<void(JsonObject &msg)> UserCommandCallback;
```

Send a message to another target, building the payload inline:

```cpp theme={null}
void sendTo(const String &targetId,
            std::function<void(JsonObject &)> payloadBuilder);
```

### JSON helpers

Navigate an incoming command payload:

```cpp theme={null}
JsonObject findCommand(JsonObject& payload, const char* commandName);
JsonObject findAction(JsonObject& payload, const char* commandName,
                      const char* actionName);
JsonObject findParams(JsonObject& payload, const char* commandName,
                      const char* actionName);
```

## Updating widgets

Push a value to a dashboard widget by its widget ID. Overloads cover the common
value types:

```cpp theme={null}
void updateWidget(const String &targetId, const String &widgetId, const String &value);
void updateWidget(const String &targetId, const String &widgetId, float value);
void updateWidget(const String &targetId, const String &widgetId, const std::vector<float> &values);
void updateWidget(const String &targetId, const String &widgetId, const std::vector<int> &values);
void updateWidget(const String &targetId, const String &widgetId, const std::vector<String> &values);
```

### Specialized widget helpers

```cpp theme={null}
void updateFlightAttitude(const String &targetId, const String &widgetId, float roll, float pitch);
void updateWidgetPosition(const String &targetId, const String &widgetId, int x, int y, int w, int h, int r = 0);
void updateCountdown(const String &targetId, const String &widgetId,
                     const String &hours, const String &minutes, const String &seconds);
void updateHeatMap(const String &targetId, const String &widgetId, const std::vector<HeatMapPoint> &dataPoints);
void update3DModel(const String &targetId, const String &widgetId, const String &modelUrl);
void update3DWidget(const String &targetId, const String &widgetId, const std::vector<ThreeDModelUpdate> &models);
```

## Dialogs

Show a dialog on the user's dashboard. `showDialog` takes an icon
(`info`, `warning`, `success`, `error`, `risk`); the named helpers are shortcuts:

```cpp theme={null}
void showDialog(const String &targetId, const String &title,
                const String &description, const String &icon = "info");
void info   (const String &targetId, const String &title, const String &description);
void warning(const String &targetId, const String &title, const String &description);
void success(const String &targetId, const String &title, const String &description);
void error  (const String &targetId, const String &title, const String &description);
void risk   (const String &targetId, const String &title, const String &description);
```

## Database

Insert, read, update, and delete records in a product's database. Each has a
fire-and-forget form and a `…WithResponse` form that returns the result:

```cpp theme={null}
void insertDatainDatabase(const String &productId, const String &deviceId,
                          const String &tableName,
                          std::function<void(JsonObject &)> dataBuilder);
DynamicJsonDocument insertDatainDatabaseWithResponse(...);

void getDatabaseData(const String &productId, const String &tableName, int limit = 50);
DynamicJsonDocument getDatabaseDataWithResponse(...);

void updateDatabaseData(const String &dataId, std::function<void(JsonObject &)> dataBuilder);
DynamicJsonDocument updateDatabaseDataWithResponse(...);

void deleteDatabaseData(const String &dataId);
DynamicJsonDocument deleteDatabaseDataWithResponse(...);
```

## Sensor data logger

```cpp theme={null}
void send_Sensor_Data_logger(const String &targetId, const String &configId,
  std::initializer_list<std::pair<const char *, float>> dataList);
```

## Onboarding

```cpp theme={null}
void onboardDevice(const String &productId, const String &userId,
                   const String &deviceName, const String &deviceIdentifier);
DynamicJsonDocument onboardDeviceWithResponse(...);
```

## SMS

```cpp theme={null}
void sendSMS(const String &productId, const String &to, const String &message);
DynamicJsonDocument sendSMSWithResponse(...);
```

## Authentication

```cpp theme={null}
void authenticateUser(const String &email, const String &password);
DynamicJsonDocument authenticateUserWithResponse(...);
```

## Time & date (NTP)

```cpp theme={null}
void initNTP();
void setTimezone(const char* timezone);
String getNetworkTime();
String getNetworkDate();
String getNetworkDateTime();
```

## GPIO state persistence

```cpp theme={null}
void saveGPIOState(int pin, int state);
int  loadGPIOState(int pin);
void restoreAllGPIOStates();
```

## Device status

```cpp theme={null}
void sendDeviceStatus(const String &targetId);
```

<Card title="See it in examples" icon="code" href="/firmware/arduino/examples">
  Worked sketches that use these methods.
</Card>
