This Homebridge plugin can be used integrate your temperature sensor which has ahttp api into HomeKit.
First of all you need to have Homebridge installed. Refer to the repo forinstructions.
Then run the following command to install homebridge-http-temperature-sensor
sudo npm install -g homebridge-http-temperature-sensor
The 'CurrentTemperature' characteristic has the permission to notify
the HomeKit controller of statechanges. homebridge-http-temperature-sensor
supports two concepts to send temperature changes to HomeKit.
The 'pull' way is probably the easiest to set up and supported in every scenario. homebridge-http-temperature-sensor
requests the temperature of the sensor in an specified interval (pulling) and sends the value to HomeKit.
Look for pullInterval
in the list of configuration options if you want to configure it.
When using the 'push' concept, the http device itself sends the updated value to homebridge-http-temperature-sensor
whenever values change. This is more efficient as the new value is updated instantly andhomebridge-http-temperature-sensor
does not need to make needless requests when the value didn't actually change.
However because the http device needs to actively notify the homebridge-http-temperature-sensor
there is morework needed to implement this method into your http device.
MQTT (Message Queuing Telemetry Transport) is a protocol widely used by IoT devices. IoT devices can publish messageson a certain topic to the MQTT broker which then sends this message to all clients subscribed to the specified topic.In order to use MQTT you need to setup a broker server (mosquitto is a solidopen source MQTT broker running perfectly on a device like the Raspberry Pi) and then instruct all clients topublish/subscribe to it.
For those of you who are developing the http device by themselves I developed a pretty simple 'protocol' based on httpto send push-updates.
How to implement the protocol into your http device can be read in the chapterNotification Server
The configuration can contain the following properties:
accessory
<string> required: Defines the plugin used and must be set to "HTTP-TEMPERATURE" for this plugin.name
<string> required: Defines the name which is later displayed in HomeKitgetUrl
<string | urlObject> required: Defines the url (and other properties when usingand urlObject) to query the current temperature (in celsius) from the sensor. By default it expects the http serverto return the temperature as a float ranging from 0-100 (step 0.1).unit
<string> optional (Default: "celsius): Defines unit expected from the http server. The followingare available:
statusPattern
<string> optional (Default: "(-?[0-9]{1,3}(.[0-9]))"): Defines a regex pattern with which thetemperature is extracted from the body of the http response from the getUrl
. The group which shouldbe extracted can be configured with the patternGroupToExtract
property.patternGroupToExtract
<number> optional (Default: 1): Defines the regex group of which the temperatureis extracted.statusCache
<number> optional (Default: 0): Defines the amount of time in milliseconds a queried valueof the CurrentTemperature characteristic is cached before a new request is made to the http device.pullInterval
<integer> optional: The property expects an interval in milliseconds in which the pluginpulls updates from your http device. For more information read pulling updates.mqtt
<mqttObject> optional: Defines all properties used for mqtt connection (More on MQTT).debug
<boolean> optional: Enable debug mode and write more logs.Below are two example configurations. One is using a simple string url and the other is using a simple urlObject.
Both configs can be used for a basic plugin configuration.
{
"accessories": [
{
"accessory": "HTTP-TEMPERATURE",
"name": "Temperature Sensor",
"getUrl": "http://localhost/api/getTemperature"
}
]
}
{
"accessories": [
{
"accessory": "HTTP-TEMPERATURE",
"name": "Temperature Sensor",
"getUrl": {
"url": "http://localhost/api/getTemperature",
"method": "GET"
}
}
]
}
A urlObject can have the following properties:
url
<string> required: Defines the url pointing to your http servermethod
<string> optional (Default: "GET"): Defines the http method used to make the http requestbody
<any> optional: Defines the body sent with the http request. If value is not a string it will beconverted to a JSON string automatically.strictSSL
<boolean> optional (Default: false): If enabled the SSL certificate used must be valid andthe whole certificate chain must be trusted. The default is false because most people will work with self signedcertificates in their homes and their devices are already authorized since being in their networks.auth
<object> optional: If your http server requires authentication you can specify your credential in thisobject. When defined the object can contain the following properties:
username
<string> requiredpassword
<string> requiredsendImmediately
<boolean> optional (Default: true): When set to true the plugin will send thecredentials immediately to the http server. This is best practice for basic authentication.WWW-Authenticate
header.headers
<object> optional: Using this object you can define any http headers which are sent with the httprequest. The object must contain only string key value pairs.requestTimeout
<number> optional (Default: 20000): Time in milliseconds specifying timeout (Time to waitfor http response and also setting socket timeout).Below is an example of an urlObject containing the basic properties:
{
"url": "http://example.com:8080",
"method": "GET",
"body": "exampleBody",
"strictSSL": false,
"auth": {
"username": "yourUsername",
"password": "yourPassword"
},
"headers": {
"Content-Type": "text/html"
}
}
A mqttObject can have the following properties:
host
<string> required: Defines the host of the mqtt broker.port
<number> optional (Default: 1883): Defines the port of the mqtt broker.credentials
<object> optional: Defines the credentials used to authenticate with the mqtt broker.
username
<string> requiredpassword
<string> optionalsubscriptions
<object | array> required: Defines an array (or one single object) of subscriptions.
topic
<string> required: Defines the topic to subscribe to.characteristic
<string> required: Defines the characteristic this subscription updates.messagePattern
<string> optional: Defines a regex pattern. If messagePattern
is not specified themessage received will be used as value. If the characteristic expects a boolean value it is tested if thespecified regex is contained in the received message. Otherwise the pattern is matched against the messageand the data from regex group can be extracted using the given patternGroupToExtract
.patternGroupToExtract
<number> optional (Default: 1): Defines the regex group of which data isextracted.protocol
<string> optional (Default: "mqtt"): Defines protocol used to connect to the mqtt brokerqos
<number> optional (Default: 1): Defines the Quality of Service (Notice, the QoS of the publishermust also be configured accordingly).0
: 'At most once' - the message is sent only once and the client and broker take no additional steps toacknowledge delivery (fire and forget).1
: 'At least once' - the message is re-tried by the sender multiple times until acknowledgement isreceived (acknowledged delivery).2
: 'Exactly once' - the sender and receiver engage in a two-level handshake to ensure only one copy of themessage is received (assured delivery).clientId
<string> optional (Default: 'mqttjs_' + Math.random().toString(16).substr(2, 8)
): Defines clientIdkeepalive
<number> optional (Default: 60): Time in seconds to send a keepalive. Set to 0 to disable.clean
<boolean> optional (Default: true): Set to false to receive QoS 1 and 2 messages while offline.reconnectPeriod
<number> optional (Default: 1000): Time in milliseconds after which a reconnect is tried.connectTimeout
<number> optional (Default: 30000): Time in milliseconds the client waits until theCONNECT needs to be acknowledged (CONNACK).Note: Updating values over mqtt is currently only supported for the default unit (celsius).
Below is an example of an mqttObject containing the basic properties for a temperature service:
{
"host": "127.0.0.1",
"port": "1883",
"credentials": {
"username": "yourUsername",
"password": "yourPassword"
},
"subscriptions": [
{
"topic": "your/topic/here",
"characteristic": "CurrentTemperature",
"messagePattern": "(-?[0-9]{1,3}(\\.[0-9]))"
}
]
}
homebridge-http-temperature-sensor
can be used together withhomebridge-http-notification-server in order to receiveupdates when the state changes at your external program. For details on how to implement those updates and how toinstall and configure homebridge-http-notification-server
, please refer to theREADME of the repository.
Down here is an example on how to configure homebridge-http-temperature-sensor
to work with your implementation of thehomebridge-http-notification-server
.
{
"accessories": [
{
"accessory": "HTTP-TEMPERATURE",
"name": "Temperature Sensor",
"notificationID": "my-temperature-sensor",
"notificationPassword": "superSecretPassword",
"getUrl": "http://localhost/api/getTemperature"
}
]
}
notificationID
is an per Homebridge instance unique id which must be included in any http request.notificationPassword
is optional. It can be used to secure any incoming requests.To get more details about the configuration have a look at theREADME.
Available characteristics (for the POST body)
Down here are all characteristics listed which can be updated with an request to the homebridge-http-notification-server
characteristic
"CurrentTemperature": expects an float value
in a range of 0-100 (step 0.1)有关温度传感器材质总结,老外这篇文章说的非常好: https://www.electronics-tutorials.ws/io/io_3.html
什么是 Generic Sensor API? Generic Sensor API 提供了一组属性和方法,将传感器暴露给 Web 端应用。在这个标准中,规定了基本的接口和类,使得在实现各种传感器 API 时能够通过继承快速实现。在介绍完本标准后,我会举例使用其中一个传感器 API。 与 DeviceMotion 和 DeviceOrientation 这些已有的能够提供传感器数据的 API 相比
DEPRECATION NOTICE This package is deprecated. Please use homebridge-mqtthing instead. It is more mature, better tested, and offers additional-features. homebridge-mqtt-temperature Get Temperature Sen
homebridge-temperature-file This is a plugin for homebridge which makes it possible to create a temperature sensorin HomeKit via file. Why via file? When you have a DHT-sensor, you need sudo to read f
homebridge-raspberrypi-temperature a homebridge plugin that get RaspberryPi CPU temperature. Configuration simple configuration "accessories": [{ "accessory": "RaspberryPiTemperature", "name": "
homebridge-http-humidity-sensor This Homebridge plugin can be used integrate your humidity sensor which has ahttp api into HomeKit. Installation First of all you need to have Homebridge installed. Ref
homebridge-http-lightbulb Plugin homebridge-http-lightbulb is a Homebridge plugin with which you can configureHomeKit light bulbs which forward any requests to a defined http server. This comes in han
homebridge-http-switch Plugin homebridge-http-switch is a Homebridge plugin with which you can configureHomeKit switches which forward any requests to a defined http server. This comes in handy when y