This plugin communicates with your devices over HTTP or MQTT. Currently it supports Switches and Temperature/Humidity sensor.
Simple Discord Webhooks available in Switches
Note
HTTP - Read Status (On/Off), Turn ON (url), Turn OFF (url)
MQTT - Turn ON/OFF | Values: On = 1, Off = 0
Discord Webhook publishes switch status to your Discord channel
Tip
If you don't have Manual switch and you don't mind when Homebridge is rebooted, your device is going to be set as OFF then you don't have to use Parameter urlStatus.
How to setup Discord Webhooks: link
Important
Use HTTP or MQTT not both for same accessory.
Parameters required in Config:
deviceType = 'Switch',
deviceName = 'Name your Accessory',
deviceID = 'Put something unique / chars and numbers',
urlON = 'URL that triggers your device to change state to ON',
urlOFF = 'URL that triggers your device to change state to OFF'
Caution
Parameter: urlStatus = 'url points to JSON with device status' when is set it will bind Accessory to 5 sec check status interval
{
"POWER": "ON"
}
Note
Sensor - Read JSON Or MQTT for Temperature, Humidity
Tip
Parameters required in Config:
deviceType = 'Sensor',
deviceName = 'Name your Accessory',
deviceID = 'Put something unique / chars and numbers',
For JSON read use param sensorUrl:
sensorUrl = 'JSON file containing sensor readings (temperature, humidity)',
For MQTT use param mqttBroker:
mqttBroker = 'URL of MQTT Broker'
Important
MQTT is just an basic implementation, no encription etc.
Sensor JSON file example
{
"t": "29.37",
"h": "48.26",
"p": "1001.33"
}
{
"bridge": {
"name": "Homebridge xxxx",
"username": "xx:xx:xx:xx:xx:xx",
"port": 51576,
"pin": "xxx-xx-xxx",
"advertiser": "bonjour-hap"
},
"platforms": [
{
"name": "Config",
"port": 8581,
"auth": "form",
"theme": "auto",
"tempUnits": "c",
"lang": "auto",
"noFork": true,
"standalone": true,
"platform": "config"
},
{
"platform": "HttpSensorsAndSwitches",
"name": "Stergo",
"description": "Http all in one place",
"devices": [
{
"deviceType": "Sensor",
"deviceID": "896543287",
"deviceName": "Attic",
"deviceManufacturer": "NameTheManufacturer",
"deviceModel": "DHT",
"deviceSerialNumber": "203ab773-d5cd-42ww-b531-a98bba0e4444",
"deviceFirmwareVersion": "v1.4.0",
"sensorUrl": "http://192.168.1.74/mesures.json",
"temperatureName": "t",
"humidityName": "h",
"updateInterval": 60000
},
{
"deviceType": "Switch",
"deviceID": "1234578",
"deviceName": "Night Light",
"deviceManufacturer": "Stergo",
"deviceModel": "Switch",
"deviceSerialNumber": "203ab773-d5cd-42a2-b531-a98bba0e4444",
"deviceFirmwareVersion": "0.4.0",
"urlON": "http://192.168.1.77/POWER?state=ON",
"urlOFF": "http://192.168.1.77/POWER?state=OFF",
"urlStatus": "http://192.168.1.77/POWER",
"stateName": "POWER",
"onStatusValue": "ON",
"offStatusValue": "OFF"
},
{
"deviceType": "Sensor",
"deviceID": "65432258",
"deviceName": "Balcony",
"sensorUrl": "http://192.168.1.72/mesures.json",
"temperatureName": "t",
"updateInterval": 300000
},
{
"deviceType": "Switch",
"deviceID": "21wqwweqwee65432258",
"deviceName": "Relay",
"mqttBroker": "192.168.1.200",
"mqttPort": "1883",
"mqttSwitch": "iot/things/StergoTestSwitch/switch1",
"mqttUsername": "testuser",
"mqttPassword": "testuser",
"discordWebhook": "https://discordapp.com/api/webhooks/XXXXX",
"discordUsername": "SmartHome",
"discordAvatar": "",
"discordMessage": " is "
},
{
"deviceType": "Sensor",
"deviceID": "65432258",
"deviceName": "Balcony",
"mqttBroker": "192.168.1.200",
"mqttPort": "1883",
"mqttTemperature": "qiot/things/Attic/Temperature",
"mqttHumidity": "qiot/things/Attic/Humidity",
"mqttUsername": "testuser",
"mqttPassword": "testuser"
}
]
}
]
}
Param | Description | Param needed |
---|---|---|
deviceType | Sensor or Switch | true |
deviceName | Name for Your Accessory | true |
deviceID | Uniqe ID for this Accessory | true |
deviceManufacturer | Name for Manufacturer of this Accessory | false |
deviceModel | Name of model for this Accessory | false |
deviceSerialNumber | Unique serial number | false |
deviceFirmwareVersion | Firmware running on device | false |
urlON | URL to Turn ON the Switch | true |
urlOFF | URL to Turn OFF the Switch | true |
urlStatus | URL to retrieve the switch status (on/off) | true |
stateName | JSON status param | true |
onStatusValue | JSON return Value for status ON | true |
offStatusValue | JSON return Value for status OFF | true |
sensorUrl | JSON file containing sensor readings (temperature, humidity) | true |
temperatureName | JSON param name for Temperature reading | true |
humidityName | JSON param name for Humidity reading | true |
updateInterval | update interval for reading Sensors, default is 60000 = 60 seconds = 1 minute | false |
mqttBroker | URL of MQTT Broker | true/fale |
mqttReconnectInterval | reconnect interval when no connection to MQTT Broker, default is 60 seconds | true/fale |
mqttPort | MQTT port | false |
mqttTemperature | Temperature Topic | true |
mqttHumidity | Humidity Topic | true |
mqttUsername | MQTT Broker username | false |
mqttPassword | MQTT Broker password | false |
mqttSwitch | Switch Topic | true |
discordWebhook | URL to Discord WebHook | false |
discordUsername | Name for message publisher | false |
discordAvatar | URL to Online Avatar image | false |
discordMessage | Message | false |
Compromise: Switch accessory, in order to work properly getStatus is bind in 5 sec interval. This is for passive devices not pushing their status. I have several devices built by my self like ESP8266 with relay and I'm just switching state. I have JSON file showing status:
{
"POWER": "ON"
}
Important
Homebridge v2.0 Information
This template currently has a
package.json -> engines.homebridge
value of"^1.8.0 || ^2.0.0-beta.0"
package.json -> devDependencies.homebridge
value of"^2.0.0-beta.0"
This is to ensure that this plugin will build and run on both Homebridge v1 and v2.
Important
Node v22 Information
This template currently has a
package.json -> engines.node
value of"^18.20.4 || ^20.16.0 || ^22.5.1"
This plugin should be supporting Node v22 from October 2024.