profile for Gajendra D Ambi on Stack Exchange, a network of free, community-driven Q&A sites

Wednesday, September 24, 2025

openIOT standards

 Today the requirement of an app per IOT device per vendor per platform is driving away the adoption of IOTs (Internet of Things). You have a refrigerator, washing machine, designer lights/bulbs, speaker, NAS, AC, robo vacuum, door camera, house security cameras, all from differenent companies and each of them have their own app, own registration process. So now my phone is bloated with 20 applications who are all draining my data, battery, my personal information. All 20 of them are most likely selling my data to 20000 different marketing/ad agencies & not to mention, 20 different places wher my personal data can get leaked or hacked or stolen.

Solution:

Let vendors have their own proprietory apps per device but let them also have their api approachable in a certain format, preferably in a YAML format. Most of the the things are still RW(read, write). Here is an example concept. 

Vendor X Air conditioner. Now, the following yaml can be sent to the client (mobile app) when the connection happens via wifi or BT and based on the following data the UI can get auto populated. A lot of it can be a universal standard like constants, input_types, connect etc., The UI elements get auto rendered based on the input types and purpose, purpose_id.

Identity:
  - constants:
    - name: "sugreeva"
    - model: "X33"
    - serial_number: 0x000000000000
    - product_number: 0x000000000000
    - made_by: "vanara company pvt ltd"
    - made_at: "2020-01-01"
    - made_in: "India"
    - mac: 00:00:00:00:00:00
    - hwid: 0x000000000000
    - Purpose: "Air Conditioner"
    - purpose_id: "aircon" # a unique id for every IOT type with a different purpose, ex: washing machine will be have purpose_id "washingm"
    - image: "" # optional
    - key_values: # optional
      - key1: "value1"
      - key2: "value2"
  - input_types:
    - push: "ajax or live or push notifications, it can be a string or an integer or alphanumeric data"
    - boolean: "true or false"
    - slider: "slider, with a min value and a max value"
    - radio: "multiple options but only one can be selected"
    - checkbox: "multiple options can be selected"
    - string: "text"
    - integer: "number"
    - dropdown: "list of options"
    - kv_w_kv: "key value pairs, both are editable"
    - kv_w_v: "key value pairs, only value can be edited"
    - kv_r_kv: "key value pairs, both are read only"
    - QR: "QR code"
    - upload: "file upload"
    - bluetooth: "bluetooth"
  - connect:
    - description: "Connect to this device using the following methods"
    - wifi:
      - description: "Connect to the wifi network using the following methods"
      - QR:
        - description: "Scan the QR code to connect to the wifi network"
        - input_type: "QR"
      - manual:
        - description: "Enter the SSID and password of the wifi network"
        - input_type: "kv_w_v"
        - SSID: <user input>
        - password: <user input>
    - bluetooth:
        - description: "Connect to the bluetooth device using the following methods"
        - input_type: "bluetooth"

  - inputs:
    - description: "List of inputs that can be used to control the device"
    - system:
      - description: "List of system inputs"
      - health:
        - description: "Health of the device"
        - input_type: "push"
      - update:
        - description: "Update the device"
        - update_status:
          - description: "Status of the update, updating, updated, last update failed, no updates etc.,"
          - input_type: "push"
        - update_progress:
          - description: "Progress of the update, it can be a % or a number"
          - input_type: "push"
        - alert:
          - description: "Alert when an update is available"
          - input_type: "push"
      - tags:
        - description: "System tags for the device"
        - input_type: "kv_r_kv"
        - key1: value1
        - key2: value2
      warranty:
        - description: "Warranty of the device"
    - user:
      - description: "List of user inputs available for the user"
      - tags:
        - description: "User tags for the device"
        - input_type: "kv_w_kv"
        - key1: value1
        - key2: value2
        - key3: value3
        - key4: value4
      - temperature:
        - description: "Set the temperature"
        - input_type: "slider"
        - min: 0
        - max: 100
      - fan_speed:
        - description: "Set the fan speed"
        - input_type: "radio"
        - options:
          - low
          - medium
          - high
          - cool
          - dry
          - auto
      - power:
        - description: "Turn the device on or off"
        - input_type: "radio"
        - options:
          - on
          - off
          - restart
      - maintenace:
        - description: "Perform maintenance on the device"
        - healthcheck:
          - description: "Check the health of the device"
          - input_type: "checkbox"
          - options: # If only one option, then just display a submit button or cofirm button
            - confirm
        - clean:
          - description: "Clean the device"
          - input_type: "checkbox"
          - options: # If only one option, then just display a submit button or cofirm button
            - confirm
      - powerful:
        - description: "powerful mode, users more power"
        - input_type: "boolean"
      - swing_vertical:
        - description: "Swing the device vertically"
        - input_type: "toggle"
        - options:
          - left
          - right
          - center
          - left to right
      - swing_horizontal:
        - description: "Swing the device horizontally"
        - input_type: "toggle"
        - options:
          - top
          - bottom
          - center
          - top to bottom



# EOF