The HOOBS™ API exposes methods that allows you to monitor, configure and control your device.
Notes about this documentation. URLs are prefixed with either a GET, POST, PUT or DELETE these document what HTTP verb the request accepts. If the request requires a body it will be prefixed with a Body:.
Authentication
This is the main entry point to the API. You can use this to authenticate and receive an authorization token.
Status
Some users choose to enable authentication. To determine this you can access the status command.
Request
GET /api/auth
Response
{
"state": "enabled"
}
Available states.
- uninitilized
- enabled
- disabled
Disable
You can disable the auth system using this call.
Note. You can only disable uninitialized instances.
Request
POST /api/auth/disable
Response
{
"state": "disabled"
}
Login
Creates a session for the given user.
Request
POST /api/auth/logon Body: application/json
Body
{
"username": "luke_skywalker",
"password": "MayTheForceBeWithYou",
"remember": false
}
Response
{
"token": "THVrZSBTa3l3YWxrZXI="
}
The token will be null if authentication has failed. The token can now be used in the authroization header for all other requests to the API.
Logout
Removes the current user’s session from the server.
Request
GET /api/auth/logout
Response
{
"success": true
}
Validate
Validates the current session
Request
GET /api/auth/validate
Response
{
"valid": true
}
Users
List all users.
Request
GET /api/users
Response
[{
"id": 1,
"username": "admin",
"name": "Administrator",
"permissions": {
"accessories": true,
"controller": true,
"bridges": true,
"terminal": true,
"plugins": true,
"users": false,
"reboot": true,
"config": true
}
}]
Create
Create a user
Request
PUT /api/users Body: application/json
Body
{
"name": "Full Name",
"username": "username",
"password": "password",
"permissions": {
"accessories": true,
"controller": true,
"bridges": true,
"terminal": true,
"plugins": true,
"users": false,
"reboot": true,
"config": true
}
}
User
Fetch a single user.
Request
GET /api/users/:id
Response
{
"id": 1,
"username": "admin",
"name": "Administrator",
"permissions": {
"accessories": true,
"controller": true,
"bridges": true,
"terminal": true,
"plugins": true,
"users": false,
"reboot": true,
"config": true
}
}
Update
Updates a user record.
Request
POST /api/users/:id Body: application/json
Body
{
"name": "Full Name",
"username": "username",
"password": "password",
"permissions": {
"accessories": true,
"controller": true,
"bridges": true,
"terminal": true,
"plugins": true,
"users": false,
"reboot": true,
"config": true
}
}
Delete
Deletes a user.
Request
DELETE /api/users/:id
Version
Fetches information about the hoobsd service
Request
GET /api
Response
{
"application": "hoobsd",
"version": "4.0.37",
"authentication": {
"state": "/api/auth",
"login": "/api/auth/logon",
"validate": "/api/auth/validate"
},
"network": [{
"interface": "eth0",
"ip_address": "127.0.0.1",
"mac_addr": "CC:22:3D:E3:CE:30"
}]
}
Service
Request
GET /api/status
Response
{
"product": "box",
"mdns": true,
"broadcast": "hoobs",
"version": "4.0.37",
"current": "4.0.37",
"upgraded": true,
"cli_version": "4.0.17",
"cli_current": "4.0.17",
"cli_upgraded": true,
"gui_version": "4.0.36",
"gui_current": "4.0.37",
"gui_upgraded": false,
"node_version": "14.16.0",
"node_current": "14.16.0",
"node_upgraded": true,
"bridges": [{
"version": "4.0.37",
"running": true,
"status": "running",
"uptime": 123456,
"product": "hoobsd",
"bridge_name": "testbridge",
"bridge_username": "CC:22:3D:E3:CE:30",
"bridge_port": 51826,
"setup_pin": "123-45-67",
"setup_id": "//:123456",
"bridge_path": "/var/lib/hoobs/testbridge"
}],
"cpu": {
"avgLoad": 22,
"currentLoad": 22,
"currentLoadUser": 22,
"currentLoadSystem": 22,
"currentLoadNice": 22,
"currentLoadIdle": 22,
"currentLoadIrq": 22
},
"memory": {
"total": 4028,
"free": 1024,
"used": 1024,
"active": 1024,
"buffcache": 1024,
"buffers": 1024,
"cached": 1024,
"slab": 1024,
"available": 1024,
"swaptotal": 1024,
"swapused": 1024,
"swapfree": 1024
},
"temp": {
"main": 42,
"cores": 42,
"max": 42,
"socket": 42,
"chipset": 42
}
}
Hostname
Fetch or set the current mDNS broadcast hostname.
Request
GET /api/system/hostname
Response
{
"hostname": "hoobs"
}
Update
Change the broadcasted hostname
Request
POST /api/system/hostname Body: application/json
Body
{
"hostname": "hoobs-second"
}
Response
{
"success": true
}
System
Fetch basic system information
Request
GET /api/system
Response
{
"mac": "CC:22:3D:E3:CE:30",
"ffmpeg_enabled": false,
"system": {
"manufacturer": "HOOBS.org",
"model": "P3X-995",
"version": "4.0.15",
"sku": "0-9999-9999-0"
}
}
CPU
Fetch CPU information.
Request
GET /api/system/cpu
Response
{ "information": { "manufacturer": "Cortex", "brand": "Cortex A5", "speed": "3.40", "speedMin": "0.80", "speedMax": "3.90", "governor": "powersave", "cores": 8, "physicalCores": 4, "processors": 1, "socket": "LGA1356", "vendor": "123456", "family": "ARM", "model": "A5", "voltage": 1.3 }, "speed": { "avg": "3.40", "min": "3.40", "max": "3.40", "cores": 4 }, "load": { "avgLoad": 22, "currentLoad": 22, "currentLoadUser": 22, "currentLoadSystem": 22, "currentLoadNice": 22, "currentLoadIdle": 22, "currentLoadIrq": 22 }, "cache": { "l1d": 123, "l1i": 123, "l2": 123, "l3": 123 } }
Memory
Fetch memory information.Request
GET /api/system/memory
Response
{ "information": [{ "size": 1234, "bank": "A2", "type": "DDR4", "clockSpeed": 1.3, "formFactor": "DIMM", "manufacturer": "Samsung", "partNum": "123456", "serialNum": "123456", "voltageConfigured": 1.3, "voltageMin": 1.0, "voltageMax": 1.6 }], "load": { "total": 4028, "free": 1024, "used": 1024, "active": 1024, "buffcache": 1024, "buffers": 1024, "cached": 1024, "slab": 1024, "available": 1024, "swaptotal": 1024, "swapused": 1024, "swapfree": 1024 } }
Network
Fetch network information.
Request
GET /api/system/network
Response
[
"127.0.0.1"
]
File System
Fetch disk information.
Request
GET /api/system/filesystem
Response
[{
"fs": "root",
"type": "ext4",
"size": 123456,
"used": 123456,
"available": 123456,
"use": 123456,
"mount": "/"
}]
Activity
Fetch process information.
Request
GET /api/system/activity
Response
{
"total": 4028,
"free": 1024,
"used": 1024,
"active": 1024,
"buffcache": 1024,
"buffers": 1024,
"cached": 1024,
"slab": 1024,
"available": 1024,
"swaptotal": 1024,
"swapused": 1024,
"swapfree": 1024
}
Temprature
Fetch CPU temprature.
Request
GET /api/system/temp
Response
{
"main": 42,
"cores": 42,
"max": 42,
"socket": 42,
"chipset": 42
}
Backup
Generates a backup file.
Request
GET /api/system/backup
Response
{
"success": true,
"filename": "hoobs.backup",
}
Backups
Fetch a list of stored backups.
Request
GET /api/system/backup/catalog
Response
[{
"date": "",
"filename": "hoobs.backup"
}]
Files are located in the http://[ip address]/backups/
Restore
Restore from a stored backup.
Request
GET /api/system/restore
Upload a backup file and restore.
Request
POST /api/system/restore Body: multipart/binary
Upgrade
Upgrade to latest software.
Request
POST /api/system/upgrade
Reboot
Reboot the device.
Request
PUT /api/system/reboot
Shutdown
Shutdown the device.
Request
PUT /api/system/shutdown
Factory Reset
Factorey reset.
Request
PUT /api/system/reset
This will remove all plugins and configs. It will not delete stored backups.
Log
Fetch the log.
Request
GET /api/log/:tail
Tail is not required. It will default to 500
Response
{
"level": "info",
"bridge": "testbridge",
"display": "Test Bridge",
"timestamp": 123456,
"plugin": "homebridge-dummy",
"prefix": "Dummy",
"message": "Dummy plugin loaded"
}
Hub
Fetches the hub configuration.
Request
GET /api/config
Response
{
"api": {
"origin": "*",
"gui_path": "/usr/lib/hoobs"
}
}
Reconfigure
Update the hub configuration.
Request
POST /api/config Body: application/json
Body
{
"api": {
"origin": "*",
"gui_path": "usri/lib/hoobs"
}
}
Cache
Fetches the cache from all bridges.
Request
GET /api/cache
Response
[{
"bridge": "testbridge",
"parings": [{
"id": "",
"version": "xx.xx",
"username": "AB:CD:EF:GH:IJ",
"display": "",
"category": "",
"setup_pin": "xxx-xxx-xx",
"setup_id": "://",
"clients": "",
"permissions": "rw",
}],
"accessories": [],
}]
Purge
This clears the hub cache.
Request
DELETE /api/cache/purge
Note. This clears the hub cache, not the bridge cache. The hub caches information like sessions, plugin definitions, etc…
Extensions
List extensions and their status.
Request
GET /api/extentions
Response
{
"feature": "gui",
"description": "enables the gui",
"enabled": true
}
Note. Extentions are different from plugins. Extentions act on the hub not the bridge.
Enable
Enable an extension.
Request
PUT /api/extentions/:name
Response
{
"success": true
}
Disable
Disable and extension.
Request
DELETE /api/extentions/:name
Response
{
"success": true
}
Bridges
List all bridges.
Request
GET /api/bridges
Response
[{
"id": "testbridge",
"type": "bridge",
"display": "Test Bridge",
"port": 50826,
"pin": "123-45-67",
"username": "AB:CD:EF:GH:IJ:KL",
"ports": {
"start": 2345,
"end": 3345
},
"autostart": 0,
"advertiser": "bonjour"
}]
Create
Creates a bridge.
Request
PUT /api/bridges Body: application/json
Body
{
"name": "Test Bridge",
"port": 51826,
"pin": "031-45-154",
"username": "AB:CD:EF:GH:IJ:KL",
"autostart": 0,
"advertiser": "bonjour"
}
Count
Return a bridge count.
Request
GET /api/bridges/count
Response
{
"bridges": 2
}
Import
Upload and create a bridge from an export file.
Request
POST /api/bridges/import Body: multipart/binary
Bridge
Update a single bridge.
Request
GET /api/bridge/:bridge
Response
{
"id": "testbridge",
"type": "bridge",
"display": "Test Bridge",
"port": 50826,
"pin": "123-45-67",
"username": "AB:CD:EF:GH:IJ:KL",
"ports": {
"start": 2345,
"end": 3345
},
"autostart": 0,
"advertiser": "bonjour"
}
Update
Edit a bridge record.
Request
POST /api/bridge/:id Body: application/json
Body
{
"display": "Test Bridge",
"pin": "031-45-154",
"username": "AB:CD:EF:GH:IJ:KL",
"autostart": 0,
"advertiser": "bonjour"
}
Delete
Remove a bridge.
Request
DELETE /api/bridge/:id
Note. Deleting a bridge also removes plugins and stops it from running.
Ports
Update the accessory ports.
Request
POST /api/bridge/:id/ports Body: application/json
Body
{
"start": 2345,
"end": 3345
}
Configuration
Fetches a bridge configuration.
Request
GET /api/config/:bridge
Response
{
"accessories": [],
"platforms": [],
}
Reconfigure
Update a bridge configuration.
Request
POST /api/config/:bridge Body: application/json
Body
{
"accessories": [],
"platforms": [],
}
Plugins
Fetches a list of plugins on a bridge.
Request
GET /api/plugins/:bridge
Response
[{
"identifier": "plugin-name",
"scope": "scope",
"name": "name",
"icon": "http://icon.url",
"alias": "Plugin Alias",
"version": "1.0.1",
"latest": "1.0.1",
"certified": false,
"rating": 4.0,
"keywords": ["plugin-keywords"],
"details": [{
"alias": "Plugin Alias",
"type": "platform"
}],
"schema": {},
"description": "plugin description",
}]
Cache
Fetches a bridge configuration.
Request
GET /api/cache/:bridge
Response
{
"parings": [{
"id": "",
"version": "xx.xx",
"username": "AB:CD:EF:GH:IJ",
"display": "",
"category": "",
"setup_pin": "xxx-xxx-xx",
"setup_id": "://",
"clients": "",
"permissions": "rw",
}],
"accessories": [],
}
Purge
Update a bridge configuration.
Request
DELETE /api/cache/:bridge/purge/:uuid
The UUID field is not required. If it is not defined this will purge all accessories and parings.
Export
Export a bridge.
Request
GET /api/bridge/:id/export
Response
{
"success": true,
"filename": "testbridge.backup"
}
Start
Starts a stopped bridge.
Request
POST /api/bridge/:bridge/start
Stop
Stops a running bridge.
Request
POST /api/bridge/:bridge/stop
Restart
Restarts a running or stopped bridge.
Request
POST /api/bridge/:bridge/restart
Plugins
List all installed plugins.
Request
GET /api/plugins
Response
[{
"bridge": "testbridge",
"identifier": "plugin-name",
"scope": "scope",
"name": "name",
"icon": "http://icon.url",
"alias": "Plugin Alias",
"version": "1.0.1",
"latest": "1.0.1",
"certified": false,
"rating": 4.0,
"keywords": ["plugin-keywords"],
"details": [{
"alias": "Plugin Alias",
"type": "platform"
}],
"schema": {},
"description": "plugin description",
}]
Install
Install a plugin on a bridge.
Request
PUT /api/plugins/:bridge/:name
Response
{
"success": true
}
Note. The name field supports scopes, so if you have a scoped plugin just enter it complete with the slash likeÂ
@hoobs/plugin
. The name field also supports versionsÂ@hoobs/[email protected]
. If a version is not set it defaults to latest.
Uninstall
Uninstall a plugin from a bridge.
Request
DELETE /api/plugins/:bridge/:name
Response
{
"success": true
}
Note. The name field supports scopes, so if you have a scoped plugin just enter it complete with the slash likeÂ
@hoobs/plugin
.
Update
Update a plugin on a bridge.
Request
POST /api/plugins/:bridge/:name
Response
{
"success": true
}
Note. The name field supports scopes, so if you have a scoped plugin just enter it complete with the slash likeÂ
@hoobs/plugin
. The name field also supports versionsÂ@hoobs/[email protected]
. If a version is not set it defaults to latest.
Plugin
This section is for UI plugins included with a plugin or via a sidecar. A plugin consists of a routes.js
 file and a ui
 folder that contains static files like index.html
 and app.js
. Refer to the UI Plugin Documentation for further details.
Static
Fetch a static file.
Request
GET /ui/plugin/:identifier/*
This returns any static file included with the plugin. It will default to index.html is no file is defined.
Note. If you try to access index.html without a file the trailing slash is important, and must be included.
Action
This section is for UI plugins included with a plugin or via a sidecar.
Request
POST /api/plugin/:identifier/:action Body: application/json
The response and body is determined by the registered route from the plugin’s routes.js
 file.
Note. Access to the bridge is restricted. If you need to modify values in the bridge use either the API, SDK, or your main plugin.
Accessories
Fetches a list of rooms and accessories.
Request
GET /api/accessories
Response
[{
"id": "livingroom",
"name": "Living Room",
"sequence": 1,
"devices": 5,
"accessories": [{
"accessory_identifier": "123456",
"bridge_identifier": "123456",
"bridge": "testbridge",
"plugin": "plugin-name",
"room": "livingroom",
"sequence": 1,
"hidden": false,
"type": "light",
"characteristics": [{
"type": "on",
"service_type": "on",
"value": true,
"format": "boolean",
"unit": 1,
"max_value": 1,
"min_value": 0,
"min_step": 1,
"read": true,
"write": true
}],
"manufacturer": "Lutron",
"model": "Caseta",
"name": "Main Light",
"serial_number": "123456",
"firmware_revision": "123456",
"hardware_revision": "123456",
"icon": "floor-lamp"
}]
}]
Get
Fetch a single accessory.
Request
GET /api/accessory/:bridge/:id
Response
{
"id": "livingroom",
"name": "Living Room",
"sequence": 1,
"devices": 5,
"accessories": [{
"accessory_identifier": "123456",
"bridge_identifier": "123456",
"bridge": "testbridge",
"plugin": "plugin-name",
"room": "livingroom",
"sequence": 1,
"hidden": false,
"type": "light",
"characteristics": [{
"type": "on",
"service_type": "on",
"value": true,
"format": "boolean",
"unit": 1,
"max_value": 1,
"min_value": 0,
"min_step": 1,
"read": true,
"write": true
}],
"manufacturer": "Lutron",
"model": "Caseta",
"name": "Main Light",
"serial_number": "123456",
"firmware_revision": "123456",
"hardware_revision": "123456",
"icon": "floor-lamp"
}]
}
Stream
Fetches a video stream for a given camera accessory. This is not available for non camera types.
This requires that the FFMpeg extension is installed, and only supports camera accessories configured with an RTSP stream, for example the Camera FFMpeg plugin.
Request
GET /api/accessory/:bridge/:id/stream
Response
A binary mp4 stream that can be consumed by most video players.
Snapshot
This fetches a snapshot from a camera accessory. This is not available for non camera types.
Request
GET /api/accessory/:bridge/:id/snapshot
Response
iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV/TSkWqgn
YQdchQnSyIijhKFYtgobQVWnUwufRDaNKQpLg4Cq4FBz8Wqw4uzro6uAqC4AeIm5uToouU+L+k0CLGg+N+vLv3uHsHCPUy
U83AOKBqlpGKx8RsbkUMviKAPgQxhB6JmXoivZCB5/i6h4+vd1Ge5X3uz9Gt5E0G+ETiWaYbFvE68fSmpXPeJw6zkqQQnx
OPGXRB4keuyy6/cS46LPDMsJFJzRGHicViG8ttzEqGSjxFHFFUjfKFrMsK5y3OarnKmvfkLwzlteU012kOI45FJJCECBlV
bKAMC1FaNVJMpGg/5uEfdPxJcsnk2gAjxzwqUCE5fvA/+N2tWZiccJNCMaDjxbY/RoDgLtCo2fb3sW03TgD/M3CltfyVOj
DzSXqtpUWOgN5t4OK6pcl7wOUOMPCkS4bkSH6aQqEAvJ/RN+WA/luga9XtrbmP0wcgQ10t3QAHh8BokbLXPN7d2d7bv2ea
/f0AO8NykaOwp3oAAAAGYktHRAAAAK0A+eyCP/QAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflBBIHHAkfKeo5AA
AAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAAxJREFUCNdjYKATAAAAaQABwB3y+AAAAABJRU5ErkJg
This returns a base64 encoded image, if the camara is unavailable, the image will be undefined.
Characteristics
Fetch an array of characteristics for a given accessory.
Request
GET /api/accessory/:bridge/:id/characteristics
Response
[
"on",
"brightness",
"hue",
"saturation"
]
Update
Updates an accessory including device control.
Request
PUT /api/accessory/:bridge/:id/:service Body: application/json
Body
{
"value": true
}
You can also change the name, room, sequence, or hidden field using this method.
Hidden
Shows a list of hidden accessories.
Request
GET /api/accessories/hidden
Response
[{
"id": "livingroom",
"name": "Living Room",
"accessories": [{
"accessory_identifier": "123456",
"bridge_identifier": "123456",
"bridge": "testbridge",
"plugin": "plugin-name",
"room": "livingroom",
"sequence": 1,
"hidden": true,
"type": "light",
"manufacturer": "Lutron",
"model": "Caseta",
"name": "Main Light",
"serial_number": "123456",
"firmware_revision": "123456",
"hardware_revision": "123456",
"icon": "floor-lamp"
}]
}]
Rooms
Fetches a list of rooms.
Request
GET /api/rooms
Response
[{
"id": "livingroom",
"name": "Living Room",
"sequence": 1,
"devices": 5,
"types": ["light"],
"characteristics": ["on"]
}]
Create
Creates a room.
Request
PUT /api/room Body: application/json
Body
{
"name": "Living Room",
"sequence": 1
}
Room
Fetch a single room.
Request
GET /api/room/:id
Response
{
"id": "livingroom",
"name": "Living Room",
"sequence": 1,
"devices": 5,
"accessories": [{
"accessory_identifier": "123456",
"bridge_identifier": "123456",
"bridge": "testbridge",
"plugin": "plugin-name",
"room": "livingroom",
"sequence": 1,
"hidden": false,
"type": "light",
"characteristics": [{
"type": "on",
"service_type": "on",
"value": true,
"format": "boolean",
"unit": 1,
"max_value": 1,
"min_value": 0,
"min_step": 1,
"read": true,
"write": true
}],
"manufacturer": "Lutron",
"model": "Caseta",
"name": "Main Light",
"serial_number": "123456",
"firmware_revision": "123456",
"hardware_revision": "123456",
"icon": "floor-lamp"
}],
"types": ["light"],
"characteristics": ["on"]
}
Update
Updates a room, including device control like all off.
Request
PUT /api/room/:id/:service Body: application/json
Body
{
"value": true
}
You can also change the name, or sequence using this method.
Remove
Removes a room.
Request
DELETE /api/room/:id
Themes
Fetch a theme.
Request
GET /api/theme/:name
Response
{
"name": "custom",
"display": "Custom",
"auto": false,
"mode": "dark",
"transparency": "blur(6px)",
"application": {
"text": {
"default": "#999",
"highlight": "#fff",
"input": "#fff",
"error": "#e30505",
},
"background": "#141414",
"highlight": "#feb400",
"accent": "#f5ff66",
"dark": "#252525",
"drawer": "#111111d2",
"input": {
"background": "#262626",
"accent": "#444",
},
"border": "#252525",
},
"button": {
"background": "#252525",
"text": "#fff",
"border": "#1a1a1a",
"primary": {
"background": "#feb400",
"text": "#fff",
"border": "#feb400",
},
"light": {
"background": "#fff",
"text": "#777",
"border": "#e5e5e5",
},
},
"modal": {
"text": {
"default": "#999",
"input": "#fff",
"error": "#e30505",
},
"background": "#111111d2",
"dark": "#000",
"form": "#11111100",
"mask": "#14141400",
"highlight": "#feb400",
"input": "#262626",
"accent": "#303030",
"border": "#252525",
},
"widget": {
"text": {
"default": "#999",
},
"background": "#181818d2",
"highlight": "#feb400",
"border": "#252525",
},
"menu": {
"text": {
"default": "#b4b4b4",
"highlight": "#fff",
},
"background": "#1111119d",
"highlight": "#1d1d1d9d",
"border": "#1d1d1d",
},
"navigation": {
"text": {
"default": "#999",
"highlight": "#fff",
"active": "#feb400",
},
"background": "#141414",
"highlight": "#feb400",
"border": "#4b4b4b",
},
"accessory": {
"text": "#ffffff3d",
"background": "#302f2f",
"highlight": "#fff",
"input": "#414141",
"border": "#444",
},
"backdrop": "url('/defaults/backdrops/default.jpg')",
"elevation": {
"default": "0 1px 1px 1px rgba(0, 0, 0, 0.44), 0 -3px 1px -1px ...",
"button": "0 1px 1px 0 rgba(0, 0, 0, 0.44), 0 2px 1px -1px rgba...",
},
}
Update
Update a custom theme.
Request
POST /api/theme/:name Body: application/json
This accepts a theme as defined above.
The light and dark themes are built in and can not be changed.
Backdrop
Upload a custom backdrop image.
Request
POST /api/theme/:name Body: multipart/binary
Response
{
"filename": "custom.jpeg"
}
Location
Searches for a location by text.
Request
GET /api/weather/location?query=denver&count=10
Response
[{
"id": "123456",
"name": "Denver",
"country": "United States"
}]
Weather
Fetches the current weather.
Request
GET /api/weather/current
Response
{
"units": "celsius",
"weather": 32,
"description": "sunny",
"icon": "sunny",
"temp": 32,
"min": 32,
"max": 32,
"windchill": 31,
"pressure": 15,
"humidity": 20,
"visibility": 10,
"wind": {
"speed": 2,
"direction": 270
}
}
Note. To get the current weather, you must first set the city id in the hub config.
Forecast
Fetches a weather forecast.
Request
GET /api/weather/forecast
Response
[{
"units": "celsius",
"weather": 32,
"description": "sunny",
"icon": "sunny",
"temp": 32,
"min": 32,
"max": 32,
"windchill": 31,
"pressure": 15,
"humidity": 20,
"visibility": 10,
"wind": {
"speed": 2,
"direction": 270
}
}]
Note. To get the weather forecast, you must first set the city id in the hub config.