Updated external content (Jenkins build 2640)
|
@ -34,17 +34,17 @@ Supported devices: dishwasher, washer, washer / dryer combination, dryer, oven,
|
|||
|
||||
#### experimental support
|
||||
|
||||
| Home appliance | Thing Type ID |
|
||||
| --------------- | ------------ |
|
||||
| Dishwasher | dishwasher |
|
||||
| Washer | washer |
|
||||
| Washer / Dryer combination | washerdryer |
|
||||
| Dryer | dryer |
|
||||
| Oven | oven |
|
||||
| Hood | hood |
|
||||
| Cooktop | hob |
|
||||
| Refrigerator Freezer | fridgefreezer |
|
||||
| Coffee Machine | coffeemaker |
|
||||
| Home appliance | Thing Type ID |
|
||||
| -------------------------- | ------------- |
|
||||
| Dishwasher | dishwasher |
|
||||
| Washer | washer |
|
||||
| Washer / Dryer combination | washerdryer |
|
||||
| Dryer | dryer |
|
||||
| Oven | oven |
|
||||
| Hood | hood |
|
||||
| Cooktop | hob |
|
||||
| Refrigerator Freezer | fridgefreezer |
|
||||
| Coffee Machine | coffeemaker |
|
||||
|
||||
> **INFO:** Currently the Home Connect API does not support all appliance programs. Please check if your desired program is available (e.g. <https://developer.home-connect.com/docs/washing-machine/supported_programs_and_options>).
|
||||
|
||||
|
@ -56,7 +56,7 @@ After the bridge has been added and authorized, devices are discovered automatic
|
|||
|
||||
| Channel Type ID | Item Type | Read only | Description | Available on thing |
|
||||
| --------------- | --------- | --------- | ----------- | ------------------ |
|
||||
| power_state | Switch | false | This setting describes the current power state of the home appliance. | dishwasher, oven, coffeemaker, hood, hob |
|
||||
| power_state | Switch | false | This setting describes the current power state of the home appliance. | dishwasher, oven, coffeemaker, hood, hob, washer, washerdryer |
|
||||
| door_state | Contact | true | This status describes the door state of a home appliance. A status change is either triggered by the user operating the home appliance locally (i.e. opening/closing door) or automatically by the home appliance (i.e. locking the door). | dishwasher, washer, washerdryer, dryer, oven, fridgefreezer |
|
||||
| operation_state | String | true | This status describes the operation state of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hood, hob, coffeemaker |
|
||||
| remote_start_allowance_state | Switch | true | This status indicates whether the remote program start is enabled. This can happen due to a programmatic change (only disabling), or manually by the user changing the flag locally on the home appliance, or automatically after a certain duration - usually in 24 hours. | dishwasher, washer, washerdryer, dryer, oven, hood, coffeemaker |
|
||||
|
|
|
@ -315,8 +315,9 @@ In order to determine which channels a device supports, check the device in the
|
|||
| program-lock | Switch | R/W | Local Programming Lock |
|
||||
| pump | Switch | R/W | Pump Control |
|
||||
| ramp-rate | Number:Time | R/W | Ramp Rate |
|
||||
| relay-mode | String | R/W | Output Relay Mode |
|
||||
| relay-sensor-follow | Switch | R/W | Output Relay Sensor Follow |
|
||||
| relay-mode | String | R/W | Relay Mode |
|
||||
| relay-sensor-follow | Switch | R/W | Relay Sensor Follow |
|
||||
| relay-sensor-inverted | Switch | R/W | Relay Sensor Inverted |
|
||||
| resume-dim | Switch | R/W | Resume Dim Level |
|
||||
| reverse-direction | Switch | R/W | Reverse Motor Direction |
|
||||
| rollershutter | Rollershutter | R/W | Rollershutter |
|
||||
|
@ -1139,21 +1140,33 @@ OFF=unlocked
|
|||
|
||||
### I/O Linc (garage door openers)
|
||||
|
||||
The I/O Linc devices are really two devices in one: a relay and a contact.
|
||||
The I/O Linc devices are really two devices in one: an output relay and an input contact sensor.
|
||||
To control the relay, link the modem as a controller using the set buttons as described in the instructions.
|
||||
To get the status of the contact, the modem must also be linked as a responder to the I/O Linc.
|
||||
The I/O Linc has a feature to invert the contact or match the contact when it sends commands to any linked responders.
|
||||
This is based on the status of the contact when it is linked, and was intended for controlling other devices with the contact.
|
||||
The binding expects the contact to be inverted to work properly.
|
||||
Ensure the contact is OFF (status LED is dark/garage door open) when linking the modem as a responder to the I/O Linc in order for it to function properly.
|
||||
To get the state of the relay and sensor, the modem must also be linked as a responder to the I/O Linc.
|
||||
The contact state is based on the sensor state at the time it is linked.
|
||||
To invert the state, either relink the modem as a responder with the sensor state inverted, or toggle the channel `relay-sensor-inverted`.
|
||||
By default, the device is inverted where an on command is sent when the sensor is closed, and off when open.
|
||||
For a garage door opener, ensure the input sensor is closed (status LED off) during the linking process.
|
||||
|
||||
##### Items
|
||||
|
||||
```java
|
||||
Switch garageDoorOpener "door opener" { channel="insteon:device:home:aabbcc:switch" }
|
||||
Contact garageDoorContact "door contact [MAP(contact.map):%s]" { channel="insteon:device:home:aabbcc:contact" }
|
||||
Switch garageDoorOpener "door opener" { channel="insteon:device:home:aabbcc:switch" }
|
||||
Contact garageDoorContact "door contact [MAP(contact.map):%s]" { channel="insteon:device:home:aabbcc:contact" }
|
||||
String garageDoorRelayMode "door relay mode" { channel="insteon:device:home:aabbcc:relay-mode" }
|
||||
Switch garageDoorRelaySensorInverted "door relay sensor inverted" { channel="insteon:device:home:aabbcc:relay-sensor-inverted" }
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Legacy</summary>
|
||||
|
||||
```java
|
||||
Switch garageDoorOpener "door opener" { channel="insteon:device:home:AABBCC:switch" }
|
||||
Contact garageDoorContact "door contact [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
and create a file "contact.map" in the transforms directory with these entries:
|
||||
|
||||
```text
|
||||
|
@ -1162,11 +1175,6 @@ CLOSED=closed
|
|||
-=unknown
|
||||
```
|
||||
|
||||
> NOTE: If the I/O Linc contact status appears delayed, or returns the wrong value when the sensor changes states, the contact was likely ON (status LED lit) when the modem was linked as a responder.
|
||||
Examples of this behavior would include: The status remaining CLOSED for up to 3 minutes after the door is opened, or the status remains OPEN for up to three minutes after the garage is opened and immediately closed again.
|
||||
To resolve this behavior the I/O Linc will need to be unlinked and then re-linked to the modem with the contact OFF (stats LED off).
|
||||
That would be with the door open when using the Insteon garage kit.
|
||||
|
||||
### Fan Controllers
|
||||
|
||||
Here is an example configuration for a FanLinc module, which has a dimmable light and a variable speed fan:
|
||||
|
|
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 206 KiB |
After Width: | Height: | Size: 265 KiB |
After Width: | Height: | Size: 182 KiB |
After Width: | Height: | Size: 191 KiB |
After Width: | Height: | Size: 180 KiB |
|
@ -0,0 +1,20 @@
|
|||
2. Step 2
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
3. Step 3
|
||||
|
||||
<br/>
|
||||
|
||||
4. Step 4
|
||||
|
||||
If you have multiple linky on your account like me, you will have to repeat the procedure for each linky.
|
||||
Don't select the two linky in the same procedure, it will not work !
|
||||
|
||||
<br/>
|
||||
|
||||
5. Step 5
|
||||
|
||||
<br/>
|
||||
|
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 290 KiB |
After Width: | Height: | Size: 182 KiB |
After Width: | Height: | Size: 184 KiB |
After Width: | Height: | Size: 148 KiB |
After Width: | Height: | Size: 191 KiB |
After Width: | Height: | Size: 150 KiB |
|
@ -0,0 +1,29 @@
|
|||
2. Step 2
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
3. Step 3
|
||||
|
||||
<br/>
|
||||
|
||||
4. Step 4
|
||||
|
||||
If you have multiple linky on your account like me, you will have to repeat the procedure for each linky.
|
||||
Don't select the two linky in the same procedure, it will not work !
|
||||
|
||||
<br/>
|
||||
|
||||
5. Step 5
|
||||
|
||||
<br/>
|
||||
|
||||
6. Step 6
|
||||
|
||||
<br/>
|
||||
|
||||
7. Step 7
|
||||
|
||||
<br/>
|
||||
|
||||
|
|
@ -3,7 +3,7 @@ id: linky
|
|||
label: Linky
|
||||
title: Linky - Bindings
|
||||
type: binding
|
||||
description: "This binding uses the API provided by Enedis to retrieve your energy consumption data."
|
||||
description: "This binding enables the exploitation of electricity consumption data, mainly for the French market."
|
||||
since: 3x
|
||||
logo: images/addons/linky.png
|
||||
install: auto
|
||||
|
@ -17,67 +17,493 @@ install: auto
|
|||
|
||||
<AddonLogo />
|
||||
|
||||
This binding uses the API provided by Enedis to retrieve your energy consumption data.
|
||||
You need to create an Enedis account [here](https://espace-client-connexion.enedis.fr/auth/UI/Login?realm=particuliers) if you don't have one already.
|
||||
This binding enables the exploitation of electricity consumption data, mainly for the French market.
|
||||
It supports different functionalities:
|
||||
|
||||
Please ensure that you have accepted their conditions, and check that you can see graphs on the website.
|
||||
Especially, check hourly view/graph. Enedis may ask for permission the first time to start collecting hourly data.
|
||||
The binding will not provide these informations unless this step is ok.
|
||||
- Connection to Enedis to retrieve consumption data online.
|
||||
- Connection to the RTE API to get Tempo Red/White/Blue calendar information.
|
||||
|
||||
## Supported Things
|
||||
|
||||
There is one supported thing : the `linky` thing is retrieving the consumption of your home from the [Linky electric meter](https://www.enedis.fr/linky-compteur-communicant).
|
||||
## Migration
|
||||
|
||||
## Discovery
|
||||
The new binding will need some tweak to you configuration to work.
|
||||
Mainly the new binding uses Bridge to access Enedis data, so you will have to add this bridge to your configuration.
|
||||
Step are:
|
||||
|
||||
This binding does not provide discovery service.
|
||||
1. before updating to openHAB 5.0, in case you defined your thing with Main UI, backup username, password & internalAuthId configuration parameters as you will need to fill them again.
|
||||
|
||||
## Binding Configuration
|
||||
2. add a bridge definition
|
||||
|
||||
The binding has no configuration options, all configuration is done at Thing level.
|
||||
Bridge linky:enedis:local "EnedisWebBridge" [
|
||||
username="laurent@clae.net",
|
||||
password="Mnbo32tyu123!",
|
||||
internalAuthId="eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.u_mxXO7_d4I5bLvJzGtc2MARvpkYv0iM0EsO6a24k-tW9493_Myxwg.LVlfephhGTiCBxii8bRIkA.GOf9Ea8PTGshvkfjl62b6w.hSH97IkmBcEAz2udU-FqQg"
|
||||
]
|
||||
{
|
||||
}
|
||||
|
||||
## Thing Configuration
|
||||
3. Move username, password & internalAuthId configuration parameter from the old linky thing to the bridge thing.
|
||||
|
||||
The thing has the following configuration parameters:
|
||||
4. Link your old thing to the new created bridge thing
|
||||
|
||||
| Parameter | Description |
|
||||
|----------------|--------------------------------------------|
|
||||
| username | Your Enedis platform username. |
|
||||
| password | Your Enedis platform password. |
|
||||
| internalAuthId | The internal authID |
|
||||
| timezone | The timezone at the location of your linky |
|
||||
Thing linky:linky:linkremotemelody "Linky Melody" (linky:enedis:local)
|
||||
|
||||
This version is now compatible with the new API of Enedis (deployed from june 2020).
|
||||
To avoid the captcha login, it is necessary to log before on a classical browser (e.g Chrome, Firefox) and to retrieve the user cookies (internalAuthId).
|
||||
5. Start using the new channels added by the enhanced binding..
|
||||
Old items will work out of the box without the need to relink items to channels.
|
||||
|
||||
Instructions given for Firefox :
|
||||
## Getting Consumption Data Online
|
||||
|
||||
1. Go to <https://mon-compte-client.enedis.fr/>.
|
||||
1. Select "Particulier" in the drop down list and click on the "Connexion" button.
|
||||
1. You'll be redirected to a page where you'll have to enter you Enedis account email address and check the "Je ne suis pas un robot" checkbox.
|
||||
1. Clic on "Suivant".
|
||||
1. In the login page, prefilled with your mail address, enter your Enedis account password and click on "Connexion à Espace Client Enedis".
|
||||
1. You will be directed to your Enedis account environment. Get back to previous page in you browser.
|
||||
1. Disconnect from your Enedis account
|
||||
1. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration.
|
||||
The new binding version can use multiple bridges to access consumption data.
|
||||
You can use :
|
||||
|
||||
A new timezone parameter has been introduced. If you don't put a value, it will default to the timezone of your openHAB installation. This parameter can be useful if you read data from a Linky in a different timezone.
|
||||
- The enedis bridge: Uses the old Enedis API, based on the Enedis website, to gather data.
|
||||
- The myelectricaldata bridge: Uses the new REST Enedis API via the MyElectricalData proxy site to access the data.
|
||||
- TThe enedis-api bridge: Also uses the new REST Enedis API, but gathers data directly from the Enedis site.
|
||||
|
||||
## Channels
|
||||
You first need to create an Enedis account [here](https://mon-compte-client.enedis.fr/) if you don't already have one.
|
||||
Ensure that you have accepted their conditions and check that you can see graphs on the website, especially the hourly view.
|
||||
Enedis may require your permission the first time to start collecting hourly data.
|
||||
|
||||
The information that is retrieved is available as these channels:
|
||||
The binding will not provide this information unless this step is completed.
|
||||
|
||||
Advantage and Disadvantage of Each Method.
|
||||
|
||||
- Enedis bridge is the older method.
|
||||
- MyelectricalData and enedis bridges both use the new API format, making them less prone to changes in website architecture.
|
||||
- MyelectricalData bridge is managed by a third-party provider but is stable.
|
||||
- Enedis-api bridge directly connects to Enedis but currently requires a complex registration process with Enedis.
|
||||
This limitation will likely be resolved in the near future, making Enedis-api Bridge the preferred method.
|
||||
|
||||
Be warned that MyElectricalData bridge collect data using MyElectricalData service.
|
||||
This service will store your enedis information for caching purpose.
|
||||
This cache is crypted, so it may be a very big concerns, but of course, we don't know the details about this crypting, and if it can be reverse to access your data.
|
||||
|
||||
### Bridge Configuration
|
||||
|
||||
To retrieve data, the Linky device needs to be linked to a LinkyBridge. The available bridge options are enedis, myelectricaldata, and enedis-api.
|
||||
|
||||
#### Enedis Web Bridge
|
||||
|
||||
If you select enedis web bridge, you will need :
|
||||
|
||||
- To create an Enedis account : https://mon-compte-client.enedis.fr/
|
||||
- To provide your credentials: username, password, and InternalAuthId.
|
||||
|
||||
| Parameter | Description |
|
||||
|----------------|--------------------------------------------|
|
||||
| username | Your Enedis platform username. |
|
||||
| password | Your Enedis platform password. |
|
||||
| internalAuthId | The internal authentication ID. |
|
||||
|
||||
This version is compatible with the latest Enedis Web API (deployed from June 2020). To bypass the captcha login, log in via a standard browser (e.g., Chrome, Firefox) and retrieve the user cookies (internalAuthId).
|
||||
|
||||
Instructions for Firefox :
|
||||
|
||||
1. Go to <https://mon-compte-client.enedis.fr/>.
|
||||
2. Select "Particulier" from the drop down and click "Connexion".
|
||||
3. Enter your Enedis account email and check "Je ne suis pas un robot".
|
||||
4. Click "Suivant".
|
||||
5. Enter your Enedis password and click "Connexion à Espace Client Enedis".
|
||||
6. Navigate to your Enedis account environment, then return to the previous page in your browser.
|
||||
7. Log out from your Enedis account.
|
||||
8. Repeat steps 1-2. This time, open the developer tools window (F12) and select the "Storage" tab.
|
||||
9. Under "Cookies", select "https://mon-compte-client.enedis.fr/". Locate the "internalAuthId" entry and copy its value into your OpenHAB configuration.
|
||||
|
||||
A new timezone parameter has been introduced. If you don't put a value, it will default to the timezone of your openHAB installation.
|
||||
This parameter can be useful if you read data from a Linky in a different timezone.
|
||||
|
||||
```java
|
||||
Bridge linky:enedis:local "EnedisWebBridge" [ username="example@domaine.fr", password="******", internalAuthId="******" ]
|
||||
```
|
||||
|
||||
#### Myelectricaldata Bridge
|
||||
|
||||
If you select MyElectricalData bridge, you will need :
|
||||
|
||||
- To create an Enedis account : https://mon-compte-client.enedis.fr/
|
||||
|
||||
- To follow these steps to initialize the token:
|
||||
|
||||
You can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index.
|
||||
|
||||
You will find screenshoot of the procedure in the following directory
|
||||
[doc/myelectricaldata/](doc/myelectricaldata/index.md)
|
||||
|
||||
1. Go to the connectlinky page on OpenHAB.
|
||||
2. Follow the first two steps of the wizard and click "Access Enedis".
|
||||
3. Log into your Enedis account.
|
||||
4. Authorize data collection for your PRM ID.<br/>
|
||||
If you have multiple Linky meters, repeat the procedure for each one separately; selecting multiple meters at once will not work.
|
||||
|
||||
|
||||
5. You will then be redirect to a confirmation page on MyElectricalData web site
|
||||
6. Return to OpenHAB, go to "connectlinky/myelectricaldata-step3", select your PRM ID from the dropdown, and click "Retrieve Token".
|
||||
7. A confirmation page will appear if everything is correctly set up.
|
||||
|
||||
```java
|
||||
Bridge linky:my-electrical-data:local "MyElectricalBridge" [ ]
|
||||
```
|
||||
|
||||
#### Enedis Bridge
|
||||
|
||||
If you select enedis bridge, you will need :
|
||||
|
||||
- To create an Enedis account : https://mon-compte-client.enedis.fr/
|
||||
|
||||
- Follow these steps to initialize the token.
|
||||
|
||||
You can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index.
|
||||
|
||||
You will find screenshoot of the procedure in the following directory
|
||||
[doc/enedis/](doc/enedis/index.md)
|
||||
|
||||
|
||||
1. Go to the connectlinky page on OpenHAB.
|
||||
2. Follow the first two steps of the wizard and click "Access Enedis".
|
||||
3. Log into your Enedis account.
|
||||
4. Authorize data collection for your PRM ID.
|
||||
5. A confirmation page will appear if everything is correctly set up.
|
||||
|
||||
|
||||
```java
|
||||
Bridge linky:enedis-api:localSB "EnedisBridgeSandbox" [ clientId="myClientId...", clientSecret="myClientSecret..." ]
|
||||
```
|
||||
|
||||
### Thing Configuration
|
||||
|
||||
The remote bridge works with Linky devices to retrieve consumption data from a remote API or website.
|
||||
|
||||
You can have multiple Linky devices in your setup if you have different houses or multiple Linky meters linked to your account.
|
||||
To do this, simply create multiple Linky devices and set the prmId to match your meter ID.
|
||||
You can find the meter ID on the Enedis website or directly on your Linky meter.
|
||||
|
||||
You can switch the Linky device from one bridge to another if you experience issues with a particular bridge.
|
||||
The data retrieved will be almost identical regardless of the bridge you use.
|
||||
Only a few contract-related items may differ between the web bridge and the API bridge.
|
||||
|
||||
The device has the following configuration parameters:
|
||||
|
||||
| Parameter | Description |
|
||||
|----------------|------------------------------------------------------------------------------------------------------|
|
||||
| prmId | The prmId linked to the Linky Handler (optional: if blank first registered meter will be used |
|
||||
| timezone | The timezone associated with your Point of delivery |
|
||||
| token | Optional: Required if a token is necessary to access this Linky device (used for MyElectricalData). |
|
||||
|
||||
|
||||
|
||||
|
||||
```java
|
||||
Thing linky:linky:linkyremote "Linky Remote" (linky:enedis:local) [ ]
|
||||
Thing linky:linky:linkyremotexxxx "Linky Remote xxxx" (linky:enedis:local) [ prmId="xxxx" ]
|
||||
Thing linky:linky:linkyremotexxxx "Linky Remote xxxx" (linky:enedis-api:local) [ prmId="xxxx" ]
|
||||
Thing linky:linky:linkyremotexxxx "Linky Remote xxxx" (linky:myelectricaldata:local) [ prmId="xxxx", token="myElectricalDataToken" ]
|
||||
```
|
||||
|
||||
### Thing Channels
|
||||
|
||||
The retrieved information is available in multiple groups.
|
||||
|
||||
|
||||
|
||||
- The daily group will give consumtion information with day granularity
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|---------------------------------------------------|-------------------|-------------------------------------------------------------------------------|
|
||||
| daily#yesterday | consumption | Yesterday energy usage |
|
||||
| daily#day-2 | consumption | Day-2 energy usage |
|
||||
| daily#day-3 | consumption | Day-3 energy usage |
|
||||
| daily#consumption | consumption | timeseries for energy usage (up to three years will be store if available) |
|
||||
| daily#maw-power | power | timeseries for max-power usage |
|
||||
| daily#power | power | Yesterday's peak power usage |
|
||||
| daily#timestamp | timestamp | Timestamp of the power peak |
|
||||
| daily#power-2 | power | Day-2's peak power usage |
|
||||
| daily#timestamp-2 | timestamp | Timestamp Day-2's of the power peak |
|
||||
| daily#power-3 | power | Day-3's peak power usage |
|
||||
| daily#timestamp-3 | timestamp | Timestamp Day-3's of the power peak |
|
||||
|
||||
- The weekly group will give consumtion information with week granularity
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|---------------------------------------------------|-------------------|-------------------------------------------------------------------------------|
|
||||
| weekly#thisWeek | consumption | Current week energy usage |
|
||||
| weekly#lastWeek | consumption | Last week energy usage |
|
||||
| weekly#week-2 | consumption | Week -2 energy usage |
|
||||
| weekly#consumption | consumption | timeseries for weeks energy usage |
|
||||
| weekly#max-power | power | timeseries for max-power weekly usage |
|
||||
|
||||
- The monthly group will give consumtion information with month granularity
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|---------------------------------------------------|-------------------|-------------------------------------------------------------------------------|
|
||||
| monthly#thisMonth | consumption | Current month energy usage |
|
||||
| monthly#lastMonth | consumption | Last month energy usage |
|
||||
| monthly#month-2 | consumption | Month-2 energy usage |
|
||||
| monthly#consumption | consumption | timeseries for months energy usage |
|
||||
| monthly#max-power | power | timeseries for max-power monthly usage |
|
||||
|
||||
- The yearly group will give consumtion information with year granularity
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|---------------------------------------------------|-------------------|-------------------------------------------------------------------------------|
|
||||
| yearly#thisYear | consumption | Current year energy usage |
|
||||
| yearly#lastYear | consumption | Last year energy usage |
|
||||
| yearly#year-2 | consumption | year-2 energy usage |
|
||||
| yearly#consumption | consumption | timeseries for years energy usage |
|
||||
| yearly#max-power | power | timeseries for max-power yearly usage |
|
||||
|
||||
- The load-curve group will give you access to load curve data with granularity as low as 30mn
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|---------------------------------------------------|-------------------|-------------------------------------------------------------------------------|
|
||||
| load-curve#power | power | The load curve data |
|
||||
|
||||
|
||||
- You will also find some Information as properties on the linky things
|
||||
|
||||
| Channel ID | Description |
|
||||
|---------------------------------------------------|-------------------------------------------------------------------------------|
|
||||
| identitiy | The full name of the contract older |
|
||||
| customerId | The internal Enedis customer ID |
|
||||
| contractSubscribedPower | The subscribed max Power |
|
||||
| contractLastActivationdate | The contract activation date |
|
||||
| contractDistributionTariff | The current applied tarif |
|
||||
| contractOffpeakHours | The OffPeakHour link to your contract |
|
||||
| contractStatus | The current contract status |
|
||||
| contractType | The contract type |
|
||||
| contractLastdistributionTariffChangedate | The date of the last tariff change |
|
||||
| contractSegment | The customer segment for this contract |
|
||||
| usagePointId | The distribution / usage point uniq indentifier |
|
||||
| usagePointStatus | The usage point current state |
|
||||
| usagePointMeterType | The usage point meter type |
|
||||
| usagePointCity | The usage point City |
|
||||
| usagePointCountry | The usage point Country |
|
||||
| usagePointPostalCode | The usage point Postal Code |
|
||||
| usagePointStreet | The usage point Address Street |
|
||||
| contactMail | The usage point Contact Mail |
|
||||
| contactPhone | The usage point Contact Phone |
|
||||
|
||||
### Full Example
|
||||
|
||||
#### Remote Enedis Web Connection
|
||||
|
||||
```java
|
||||
Bridge linky:enedis:local "EnedisWebBridge" [ username="example@domaine.fr", password="******", internalAuthId="******" ]
|
||||
|
||||
Thing linky:linky:linkyremotexxxx "Linky Remote xxxx" (linky:enedis:local) [ prmId="xxxx" ]
|
||||
```
|
||||
|
||||
```java
|
||||
Number:Energy ConsoHier "Conso hier [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:daily#yesterday" }
|
||||
Number:Energy ConsoSemaineEnCours "Conso cette semaine [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:weekly#thisWeek" }
|
||||
Number:Energy ConsoSemaineDerniere "Conso semaine dernière [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:weekly#lastWeek" }
|
||||
Number:Energy ConsoMoisEnCours "Conso ce mois [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:monthly#thisMonth" }
|
||||
Number:Energy ConsoMoisDernier "Conso mois dernier [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:monthly#lastMonth" }
|
||||
Number:Energy ConsoAnneeEnCours "Conso cette année [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:yearly#thisYear" }
|
||||
Number:Energy ConsoAnneeDerniere "Conso année dernière [%.0f %unit%]" <energy> { channel="linky:linky:linkyremotexxxx:yearly#lastYear" }
|
||||
```
|
||||
|
||||
### Displaying Information Graph
|
||||
|
||||
Using the timeseries channel, you will be able to easily create a calendar graph to display the Tempo calendar.
|
||||
To do this, you need to enable a timeseries persistence framework.
|
||||
Graph definitions will look like this:
|
||||
|
||||

|
||||
|
||||
Sample code :
|
||||
|
||||
```java
|
||||
config:
|
||||
future: false
|
||||
label: Linky Melody Conso Journalière
|
||||
order: "110"
|
||||
period: 2W
|
||||
sidebar: true
|
||||
slots:
|
||||
dataZoom:
|
||||
- component: oh-chart-datazoom
|
||||
config:
|
||||
type: inside
|
||||
grid:
|
||||
- component: oh-chart-grid
|
||||
config:
|
||||
containLabel: true
|
||||
includeLabels: true
|
||||
show: true
|
||||
legend:
|
||||
- component: oh-chart-legend
|
||||
config:
|
||||
bottom: 3
|
||||
type: scroll
|
||||
series:
|
||||
- component: oh-time-series
|
||||
config:
|
||||
areaStyle:
|
||||
opacity: 0.2
|
||||
gridIndex: 0
|
||||
item: Linky_Melody_Daily_Conso_Day
|
||||
label:
|
||||
formatter: =v=>Number.parseFloat(v.data[1]).toFixed(2) + " Kwh"
|
||||
position: inside
|
||||
show: true
|
||||
markLine:
|
||||
data:
|
||||
- type: average
|
||||
markPoint:
|
||||
data:
|
||||
- name: min
|
||||
type: min
|
||||
- name: max
|
||||
type: max
|
||||
label:
|
||||
backgroundColor: auto
|
||||
name: Consumption
|
||||
noBoundary: true
|
||||
noItemState: true
|
||||
service: influxdb
|
||||
type: bar
|
||||
xAxisIndex: 0
|
||||
yAxisIndex: 0
|
||||
tooltip:
|
||||
- component: oh-chart-tooltip
|
||||
config:
|
||||
confine: true
|
||||
smartFormatter: true
|
||||
xAxis:
|
||||
- component: oh-time-axis
|
||||
config:
|
||||
gridIndex: 0
|
||||
nameLocation: center
|
||||
splitNumber: 10
|
||||
yAxis:
|
||||
- component: oh-value-axis
|
||||
config:
|
||||
gridIndex: 0
|
||||
max: "150"
|
||||
min: "0"
|
||||
name: kWh
|
||||
nameLocation: center
|
||||
```
|
||||
|
||||
## Getting Tempo Calendar Information
|
||||
|
||||
### Thing Channels
|
||||
|
||||
- The tempo group will give information about the tempo day color link to a tempo contract
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|----------------------------------------------------------------|-------------------|-------------------------------------------------------------------------------|
|
||||
| linky-tempo-calendar#tempo-info-today | tempo-value | The tempo color for the current day |
|
||||
| linky-tempo-calendar#tempo-info-tomorrow | tempo-value | The tempo color for the tomorrow |
|
||||
| linky-tempo-calendar#tempo-info-timeseries | tempo-value | A timeseries channel that will expose full tempo information for one year |
|
||||
|
||||
### Displaying Tempo Graph
|
||||
|
||||
Using the timeseries channel, you will be able to esealy create a calendar graph to show the tempo calendar.
|
||||
You will need for this to enable a timeseries persistence framework.
|
||||
Graph definitions will look like this
|
||||
|
||||
The resulting graph will look like this:
|
||||
|
||||

|
||||
|
||||
|
||||
Sample code:
|
||||
|
||||
```java
|
||||
config:
|
||||
chartType: month
|
||||
future: false
|
||||
label: Tempo
|
||||
period: M
|
||||
sidebar: true
|
||||
slots:
|
||||
calendar:
|
||||
- component: oh-calendar-axis
|
||||
config:
|
||||
cellSize: 10
|
||||
dayLabel:
|
||||
firstDay: 1
|
||||
fontSize: 16
|
||||
margin: 20
|
||||
left: center
|
||||
monthLabel:
|
||||
color: "#c0c0ff"
|
||||
fontSize: 30
|
||||
margin: 20
|
||||
orient: vertical
|
||||
top: middle
|
||||
yearLabel:
|
||||
color: "#c0c0ff"
|
||||
fontSize: 30
|
||||
margin: 50
|
||||
dataZoom:
|
||||
- component: oh-chart-datazoom
|
||||
config:
|
||||
orient: horizontal
|
||||
show: true
|
||||
type: slider
|
||||
grid: []
|
||||
legend:
|
||||
- component: oh-chart-legend
|
||||
config:
|
||||
show: false
|
||||
series:
|
||||
- component: oh-calendar-series
|
||||
config:
|
||||
aggregationFunction: average
|
||||
calendarIndex: 0
|
||||
coordinateSystem: calendar
|
||||
item: Linky_Melody_Tempo
|
||||
label:
|
||||
formatter: =v=> JSON.stringify(v.data[0]).substring(1,11)
|
||||
show: true
|
||||
smartFormatter: false
|
||||
name: Series 1
|
||||
service: inmemory
|
||||
type: heatmap
|
||||
title:
|
||||
- component: oh-chart-title
|
||||
config:
|
||||
show: true
|
||||
text: Calendrier Tempo
|
||||
toolbox:
|
||||
- component: oh-chart-toolbox
|
||||
config:
|
||||
presetFeatures:
|
||||
- saveAsImage
|
||||
- restore
|
||||
- dataView
|
||||
- dataZoom
|
||||
- magicType
|
||||
show: true
|
||||
tooltip:
|
||||
- component: oh-chart-tooltip
|
||||
config:
|
||||
formatter: "{c}"
|
||||
show: true
|
||||
visualMap:
|
||||
- component: oh-chart-visualmap
|
||||
config:
|
||||
bottom: 0
|
||||
calculable: true
|
||||
inRange:
|
||||
color:
|
||||
- "#0000ff"
|
||||
- "#ffffff"
|
||||
- "#ff0000"
|
||||
left: center
|
||||
max: 2
|
||||
min: 0
|
||||
orient: horizontal
|
||||
presetPalette: ""
|
||||
show: false
|
||||
type: continuous
|
||||
xAxis: []
|
||||
yAxis: []
|
||||
|
||||
```
|
||||
|
||||
| Channel ID | Item Type | Description |
|
||||
|-------------------|---------------|------------------------------|
|
||||
| daily#yesterday | Number:Energy | Yesterday energy usage |
|
||||
| daily#power | Number:Power | Yesterday's peak power usage |
|
||||
| daily#timestamp | DateTime | Timestamp of the power peak |
|
||||
| weekly#thisWeek | Number:Energy | Current week energy usage |
|
||||
| weekly#lastWeek | Number:Energy | Last week energy usage |
|
||||
| monthly#thisMonth | Number:Energy | Current month energy usage |
|
||||
| monthly#lastMonth | Number:Energy | Last month energy usage |
|
||||
| yearly#thisYear | Number:Energy | Current year energy usage |
|
||||
| yearly#lastYear | Number:Energy | Last year energy usage |
|
||||
|
||||
## Console Commands
|
||||
|
||||
|
@ -94,26 +520,7 @@ Start and end day are formatted yyyy-mm-dd.
|
|||
|
||||
Here is an example of command you can run: `openhab:linky linky:linky:local report 2020-11-15 2020-12-15`.
|
||||
|
||||
## Docker specificities
|
||||
## Docker Specificities
|
||||
|
||||
In case you are running openHAB inside Docker, the binding will work only if you set the environment variable `CRYPTO_POLICY` to the value "unlimited" as documented [here](https://github.com/openhab/openhab-docker#java-cryptographic-strength-policy).
|
||||
|
||||
## Full Example
|
||||
|
||||
### Thing
|
||||
|
||||
```java
|
||||
Thing linky:linky:local "Compteur Linky" [ username="example@domaine.fr", password="******", internalAuthId="******" ]
|
||||
```
|
||||
|
||||
### Items
|
||||
|
||||
```java
|
||||
Number:Energy ConsoHier "Conso hier [%.0f %unit%]" <energy> { channel="linky:linky:local:daily#yesterday" }
|
||||
Number:Energy ConsoSemaineEnCours "Conso cette semaine [%.0f %unit%]" <energy> { channel="linky:linky:local:weekly#thisWeek" }
|
||||
Number:Energy ConsoSemaineDerniere "Conso semaine dernière [%.0f %unit%]" <energy> { channel="linky:linky:local:weekly#lastWeek" }
|
||||
Number:Energy ConsoMoisEnCours "Conso ce mois [%.0f %unit%]" <energy> { channel="linky:linky:local:monthly#thisMonth" }
|
||||
Number:Energy ConsoMoisDernier "Conso mois dernier [%.0f %unit%]" <energy> { channel="linky:linky:local:monthly#lastMonth" }
|
||||
Number:Energy ConsoAnneeEnCours "Conso cette année [%.0f %unit%]" <energy> { channel="linky:linky:local:yearly#thisYear" }
|
||||
Number:Energy ConsoAnneeDerniere "Conso année dernière [%.0f %unit%]" <energy> { channel="linky:linky:local:yearly#lastYear" }
|
||||
```
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
# Matter Code Generator
|
||||
|
||||
This system generates Java classes for Matter clusters, device types, and related functionality. It uses Handlebars templates to transform Matter.js protocol definitions into Java code suitable for serialization.
|
||||
|
||||
## Overview
|
||||
|
||||
The code generator consists of:
|
||||
|
||||
- `app.ts`: Main generator script that processes Matter.js definitions and generates Java code
|
||||
- Template files in `src/templates/`:
|
||||
- `cluster-class.hbs`: Template for individual cluster classes
|
||||
- `base-cluster.hbs`: Template for the base cluster class
|
||||
- `cluster-constants.hbs`: Template for cluster constants
|
||||
- `cluster-registry.hbs`: Template for cluster registry
|
||||
- `device-types-class.hbs`: Template for device type definitions
|
||||
- `data-types-class.hbs`: Template for data type definitions
|
||||
|
||||
## Main Generator (app.ts)
|
||||
|
||||
The generator script:
|
||||
|
||||
1. Imports Matter.js protocol definitions
|
||||
2. Maps Matter.js data types to Java types
|
||||
3. Processes cluster inheritance and references between clusters
|
||||
4. Compiles Handlebars templates
|
||||
5. Generates Java code files in the `out/` directory
|
||||
|
||||
|
||||
## Templates
|
||||
|
||||
### cluster-class.hbs
|
||||
Generates individual cluster classes with:
|
||||
- Cluster attributes
|
||||
- Struct definitions
|
||||
- Enum definitions
|
||||
- Command methods
|
||||
- toString() implementation
|
||||
|
||||
### base-cluster.hbs
|
||||
Generates the base cluster class with:
|
||||
- Common fields and methods
|
||||
- Global struct/enum definitions
|
||||
|
||||
### cluster-constants.hbs
|
||||
Generates constants for:
|
||||
- Channel names
|
||||
- Channel labels
|
||||
- Channel IDs
|
||||
- Channel type UIDs
|
||||
|
||||
note this is not currently used yet in the binding
|
||||
|
||||
### cluster-registry.hbs
|
||||
Generates a registry mapping cluster IDs to cluster classes
|
||||
|
||||
### device-types-class.hbs
|
||||
Generates device type definitions and mappings
|
||||
|
||||
## Usage
|
||||
|
||||
1. Install dependencies:
|
||||
2. Run the generator:
|
||||
3. Generated Java files will be in the `out/` directory
|
||||
|
||||
```bash
|
||||
npm install && npm run start
|
||||
```
|
||||
|
||||
Note the the maven pom.xml will execute these steps when building the project, including linting the generated files and moving them from the out directory to the primary addon src directory.
|
||||
|
||||
## Handlebars Helpers
|
||||
|
||||
The generator includes several Handlebars helpers for string manipulation to assist in Java naming conventions:
|
||||
|
||||
- `asUpperCase`: Convert to uppercase
|
||||
- `asLowerCase`: Convert to lowercase
|
||||
- `asUpperCamelCase`: Convert to UpperCamelCase
|
||||
- `asLowerCamelCase`: Convert to lowerCamelCase
|
||||
- `asTitleCase`: Convert to Title Case
|
||||
- `asEnumField`: Convert to ENUM_FIELD format
|
||||
- `asHex`: Convert number to hex string
|
||||
- and many others
|
After Width: | Height: | Size: 179 KiB |
After Width: | Height: | Size: 216 KiB |
|
@ -0,0 +1,549 @@
|
|||
---
|
||||
id: matter
|
||||
label: Matter
|
||||
title: Matter - Bindings
|
||||
type: binding
|
||||
description: "The Matter Binding for openHAB allows seamless integration with Matter-compatible devices."
|
||||
since: 3x
|
||||
install: auto
|
||||
---
|
||||
|
||||
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
|
||||
|
||||
{% include base.html %}
|
||||
|
||||
# Matter Binding
|
||||
|
||||
The Matter Binding for openHAB allows seamless integration with Matter-compatible devices.
|
||||
|
||||
## Supported functionality
|
||||
|
||||
This binding supports two different types of Matter functionality which operate independently of each other.
|
||||
|
||||
- [Matter Client](#matter-client)
|
||||
- This allows openHAB to discover and control other Matter devices like lights, thermostats, window coverings, locks, etc...
|
||||
|
||||
- [Matter Bridge](#matter-bridge)
|
||||
- This allows openHAB to expose items as Matter devices to other Matter clients.
|
||||
This allows local control of openHAB devices from other ecosystems like Apple Home, Amazon, and Google Home.
|
||||
|
||||
For more information on the Matter specification, see the [Matter Ecosystem Overview](#matter-ecosystem-overview) section at the end of this document.
|
||||
|
||||
## Matter.JS Runtime
|
||||
|
||||
This binding uses the excellent [matter.js](https://github.com/project-chip/matter.js) implementation of the the Matter 1.4 protocol.
|
||||
|
||||
As such, this binding requires NodesJS 18+ and will attempt to download and cache an appropriate version when started if a version is not already installed on the system.
|
||||
Alpine Linux users (typically docker) and those on older Linux distributions will need to install this manually as the official NodeJS versions are not compatible.
|
||||
|
||||
## Matter and IPv6
|
||||
|
||||
Matter **requires** IPv6 to be enabled and be routable between openHAB and the Matter device.
|
||||
This means IPv6 needs to be enabled on the host openHAB is running, and the network must be able route IPv6 unicast and multicast messages.
|
||||
Docker, VLANs, subnets and other configurations can prohibit Matter from working if not configured correctly.
|
||||
|
||||
|
||||
# Matter Client
|
||||
|
||||
This describes the Matter controller functionality for discovering and controlling Matter devices.
|
||||
|
||||
## Supported Things
|
||||
|
||||
The Matter Binding supports the following types of things:
|
||||
|
||||
- `controller`: The main controller that interfaces with Matter devices.
|
||||
It requires the configuration parameter `nodeId` which sets the local Matter node ID for this controller (must be unique in the fabric).
|
||||
**This must be added manually.**
|
||||
- `node`: Represents an individual Node within the Matter network.
|
||||
The only configuration parameter is `nodeId`.
|
||||
A standard Node will map Matter endpoints to openHAB channel groups.
|
||||
**This will be discovered automatically** when a pairing code is used to scan for a device and should not be added manually.
|
||||
- `endpoint`: Represents an standalone endpoint as a child of a `node` thing. Only Endpoints exposed by Matter bridges will be added as `endpoint` things, otherwise Matter Endpoints are mapped on a `node` thing as channel groups. An `endpoint` thing **will be discovered automatically** when a node is added that has multiple bridged endpoints and should not be added manually.
|
||||
|
||||
## Discovery
|
||||
|
||||
Matter controllers must be added manually.
|
||||
Nodes (devices) will be discovered when a `pairCode` is used to search for a device to add.
|
||||
Bridged endpoints will be added to the inbox once the parent Node is added as a thing.
|
||||
|
||||
### Device Pairing: General
|
||||
|
||||
The pairing action can be found in the settings of the "Controller" thing under the "Actions" -> "Pair Matter Device"
|
||||
|
||||
<img src="doc/pairing.png" alt="Matter Pairing" width="600"/>
|
||||
|
||||
This action will give feedback on the pairing process, if successful a device will be added to the Inbox.
|
||||
|
||||
See [Device Pairing: Code Types](#device-pairing-code-types) for more information on pairing codes and code formats.
|
||||
|
||||
The same codes can also be used in the openHAB Thing discovery UI, although feedback is limited and only a single controller is supported.
|
||||
|
||||
<img src="doc/thing-discovery.png" alt="Thing Discovery" width="600"/>
|
||||
|
||||
### Device Pairing: Code Types
|
||||
|
||||
In order to pair (commission in matter terminology) a device, you must have an 11 digit manual pairing code (eg 123-4567-8901 or 12345678901) or a QR Code (eg MT:ABCDEF1234567890123).
|
||||
If the device has not been paired before, use the code provided by the manufacturer and **ensure the device is in pairing mode**, refer to your devices instructions for pairing for more information.
|
||||
You can include dashes or omit them in a manual pairing code.
|
||||
|
||||
If the device is paired with another Matter ecosystem (Apple, Google, Amazon, etc..) you must use that ecosystem to generate a new pairing code and search for devices.
|
||||
The pairing code and device will only be available for commissioning for a limited time.
|
||||
Refer to the ecosystem that generated the code for the exact duration (typically 5-15 minutes). In this case, openHAB still talks directly to the device and is not associated with that existing ecosystem.
|
||||
|
||||
If the device seems to be found in the logs, but can not be added, its possible the device has been already paired.
|
||||
Hard resetting the device may help this case.
|
||||
See your device documentation for how to hard reset the device.
|
||||
|
||||
### Device Pairing: Thread Devices
|
||||
|
||||
Thread devices require a Thread Border Router and a bluetooth enabled device to facilitate the thread joining process (typically a mobile device).
|
||||
Until there is a supported thread border router integration in openHAB and the openHAB mobile apps, it's strongly recommended to pair the device to a commercial router with thread support first (Apple TV 4k, Google Nest Hub 2, Amazon Gen 4 Echo, etc... ), then generate a matter pairing code using that ecosystem and add the device normally.
|
||||
This will still allow openHAB to have direct access to the device using only the embedded thread border router and does not interact with the underlying providers home automation stack.
|
||||
|
||||
Support for using a OpenThread Border Router has been verified to work and will be coming soon to openHAB, but in some cases requires strong expertise in IPv6 routing as well as support in our mobile clients.
|
||||
|
||||
### Enabling IPv6 Thread Connectivity on Linux Hosts
|
||||
|
||||
It is important to make sure that Route Announcements (RA) and Route Information Options (RIO) are enabled on your host so that Thread boarder routers can announce routes to the Thread network.
|
||||
This is done by setting the following sysctl options:
|
||||
|
||||
1. `net.ipv6.conf.wlan0.accept_ra` should be at least `1` if ip forwarding is not enabled, and `2` otherwise.
|
||||
1. `net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen` should not be smaller than `64`.
|
||||
|
||||
the `accept_ra` is defaulted to `1` for most distributions.
|
||||
|
||||
There may be other network daemons which will override this option (for example, dhcpcd on Raspberry Pi will override accept_ra to 0).
|
||||
|
||||
You can check the accept_ra value with:
|
||||
|
||||
```shell
|
||||
$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra
|
||||
0
|
||||
```
|
||||
|
||||
And set the value to 1 (or 2 in case IP forwarding is enabled) with:
|
||||
|
||||
```shell
|
||||
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra=1
|
||||
Net.ipv6.conf.wlan0.accept_ra = 1
|
||||
```
|
||||
|
||||
The accept_ra_rt_info_max_plen option on most Linux distributions is default to 0, set it to 64 with:
|
||||
|
||||
```shell
|
||||
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen=64
|
||||
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
|
||||
```
|
||||
|
||||
To make these changes permanent, add the following lines to `/etc/sysctl.conf`:
|
||||
|
||||
```ini
|
||||
net.ipv6.conf.eth0.accept_ra=1
|
||||
net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=64
|
||||
```
|
||||
|
||||
Raspberry Pi users may need to add the following lines to `/etc/dhcpcd.conf` to prevent dhcpcd from overriding the accept_ra value:
|
||||
|
||||
```ini
|
||||
noipv6
|
||||
noipv6rs
|
||||
```
|
||||
|
||||
***NOTE: Please ensure you use the right interface name for your network interface.*** The above examples use `wlan0` and `eth0` as examples.
|
||||
You can find the correct interface name by running `ip a` and looking for the interface that has an IPv6 address assigned to it.
|
||||
|
||||
## Thing Configuration
|
||||
|
||||
### Controller Thing Configuration
|
||||
|
||||
The controller thing must be created manually before devices can be discovered.
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|--------|--------|----------------------------------------|---------|----------|----------|
|
||||
| nodeId | number | The matter node ID for this controller | 0 | yes | no |
|
||||
|
||||
Note: The controller nodeId must not be changed after a controller is created.
|
||||
|
||||
### Node Thing Configuration
|
||||
|
||||
Nodes are discovered automatically (see [Discovery](#Discovery) for more information) and should not be added manually.
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|------------|--------|------------------------------------|---------|----------|----------|
|
||||
| nodeId | text | The node ID of the endpoint | N/A | yes | no |
|
||||
|
||||
### Endpoint Thing Configuration
|
||||
|
||||
Endpoints are discovered automatically once their parent Node has been added (see [Discovery](#Discovery) for more information) and should not be added manually.
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|------------|--------|------------------------------------|---------|----------|----------|
|
||||
| endpointId | number | The endpoint ID within the node | N/A | yes | no |
|
||||
|
||||
## Thing Actions
|
||||
|
||||
### Node Thing Actions
|
||||
|
||||
| Name | Description |
|
||||
|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Decommission Matter node from fabric | This will remove the device from the Matter fabric. If the device is online and reachable this will attempt to remove the credentials from the device first before removing it from the network. Once a device is removed, this Thing will go offline and can be removed. |
|
||||
| Generate a new pairing code for a Matter device | Generates a new manual and QR pairing code to be used to pair the Matter device with an external Matter controller |
|
||||
| List Connected Matter Fabrics | This will list all the Matter fabrics this node belongs to |
|
||||
| Remove Connected Matter Fabric | This removes a connected Matter fabric from a device. Use the 'List connected Matter fabrics' action to retrieve the fabric index number |
|
||||
|
||||
|
||||
For nodes that contain a Thread Border Router Management Cluster, the following additional actions will be present
|
||||
|
||||
| Name | Description |
|
||||
|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Thread: Load external operational dataset | Updates the local operational dataset configuration from a hex or JSON string for the node. Use the 'Push local operational dataset' action to push the dataset back to the device after loading. |
|
||||
| Thread: Load operational dataset from device | Updates the local operational dataset configuration from the device. |
|
||||
| Thread: Operational Dataset Generator | Generates a new operational dataset and optionally saves it locally. |
|
||||
| Thread: Push local operational dataset | Pushes the local operational dataset configuration to the device. |
|
||||
|
||||
A Thread operational data set is a hex encoded string which contains a Thread border router's configuration.
|
||||
Using the same operational data set across multiple Thread border routers allows those routers to form a single network where Thread devices can roam from router to router.
|
||||
Some Thread border routers allow a "pending" operational dataset to be configured, this allows routers to coordinate the configuration change with current Thread devices without requiring those devices to be reconfigured (live migration).
|
||||
|
||||
## Channels
|
||||
|
||||
### Controller Channels
|
||||
|
||||
Controllers have no channels.
|
||||
|
||||
### Node and Bridge Endpoint Channels
|
||||
|
||||
Channels are dynamically added based on the endpoint type and matter cluster supported.
|
||||
Each endpoint is represented as a channel group.
|
||||
Possible channels include:
|
||||
|
||||
## Endpoint Channels
|
||||
|
||||
| Channel ID | Type | Label | Description | Category | ReadOnly | Pattern |
|
||||
|-------------------------------------------------------------|--------------------------|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|----------|-------------|
|
||||
| battery-voltage | Number:ElectricPotential | Battery Voltage | The current battery voltage | Energy | true | %.1f %unit% |
|
||||
| battery-alarm | String | Battery Alarm | The battery alarm state | Energy | true | |
|
||||
| powersource-batpercentremaining | Number:Dimensionless | Battery Percent Remaining | Indicates the estimated percentage of battery charge remaining until the battery will no longer be able to provide power to the Node | Energy | true | %d %% |
|
||||
| powersource-batchargelevel | Number | Battery Charge Level | Indicates a coarse ranking of the charge level of the battery, used to indicate when intervention is required | Energy | true | |
|
||||
| booleanstate-statevalue | Switch | Boolean State | Indicates a boolean state value | Status | true | |
|
||||
| colorcontrol-color | Color | Color | The color channel allows to control the color of a light. It is also possible to dim values and switch the light on and off. | ColorLight | | |
|
||||
| colorcontrol-temperature | Dimmer | Color Temperature | Sets the color temperature of the light | ColorLight | | |
|
||||
| colorcontrol-temperature-abs | Number:Temperature | Color Temperature | Sets the color temperature of the light in mirek | ColorLight | | %.0f %unit% |
|
||||
| doorlock-lockstate | Switch | Door Lock State | Locks and unlocks the door and maintains the lock state | Door | | |
|
||||
| fancontrol-fanmode | Number | Fan Mode | Set the fan mode | HVAC | | |
|
||||
| onoffcontrol-onoff | Switch | Switch | Switches the power on and off | Light | | |
|
||||
| levelcontrol-level | Dimmer | Dimmer | Sets the level of the light | Light | | |
|
||||
| modeselect-mode | Number | Mode Select | Selection of 1 or more states | | | %d |
|
||||
| switch-switch | Number | Switch | Indication of a switch or remote being activated | | true | %d |
|
||||
| switch-switchlatched | Trigger | Switched Latched Trigger | This trigger shall indicate the new value of the CurrentPosition attribute as a JSON object, i.e. after the move. | | | |
|
||||
| switch-initialpress | Trigger | Initial Press Trigger | This trigger shall indicate the new value of the CurrentPosition attribute as a JSON object, i.e. while pressed. | | | |
|
||||
| switch-longpress | Trigger | Long Press Trigger | This trigger shall indicate the new value of the CurrentPosition attribute as a JSON object, i.e. while pressed. | | | |
|
||||
| switch-shortrelease | Trigger | Short Release Trigger | This trigger shall indicate the previous value of the CurrentPosition attribute as a JSON object, i.e. just prior to release. | | | |
|
||||
| switch-longrelease | Trigger | Long Release Trigger | This trigger shall indicate the previous value of the CurrentPosition attribute as a JSON object, i.e. just prior to release. | | | |
|
||||
| switch-multipressongoing | Trigger | Multi-Press Ongoing Trigger | This trigger shall indicate 2 numeric fields as a JSON object. The first is the new value of the CurrentPosition attribute, i.e. while pressed. The second is the multi press code with a value of N when the Nth press of a multi-press sequence has been detected. | | | |
|
||||
| switch-multipresscomplete | Trigger | Multi-Press Complete Trigger | This trigger shall indicate 2 numeric fields as a JSON object. The first is the new value of the CurrentPosition attribute, i.e. while pressed. The second is how many times the momentary switch has been pressed in a multi-press sequence. | | | |
|
||||
| thermostat-localtemperature | Number:Temperature | Local Temperature | Indicates the local temperature provided by the thermostat | HVAC | true | %.1f %unit% |
|
||||
| thermostat-outdoortemperature | Number:Temperature | Outdoor Temperature | Indicates the outdoor temperature provided by the thermostat | HVAC | true | %.1f %unit% |
|
||||
| thermostat-occupiedheating | Number:Temperature | Occupied Heating Setpoint | Set the heating temperature when the room is occupied | HVAC | | %.1f %unit% |
|
||||
| thermostat-occupiedcooling | Number:Temperature | Occupied Cooling Setpoint | Set the cooling temperature when the room is occupied | HVAC | | %.1f %unit% |
|
||||
| thermostat-unoccupiedheating | Number:Temperature | Unoccupied Heating Setpoint | Set the heating temperature when the room is unoccupied | HVAC | | %.1f %unit% |
|
||||
| thermostat-unoccupiedcooling | Number:Temperature | Unoccupied Cooling Setpoint | Set the cooling temperature when the room is unoccupied | HVAC | | %.1f %unit% |
|
||||
| thermostat-systemmode | Number | System Mode | Set the system mode of the thermostat | HVAC | | |
|
||||
| thermostat-runningmode | Number | Running Mode | The running mode of the thermostat | HVAC | true | |
|
||||
| windowcovering-lift | Rollershutter | Window Covering Lift | Sets the window covering level - supporting open/close and up/down type commands | Blinds | | %.0f %% |
|
||||
| fancontrol-percent | Dimmer | Fan Control Percent | The current fan speed percentage level | HVAC | true | %.0f %% |
|
||||
| fancontrol-mode | Number | Fan Control Mode | The current mode of the fan | HVAC | | |
|
||||
| temperaturemeasurement-measuredvalue | Number:Temperature | Temperature | The measured temperature | Temperature | true | %.1f %unit% |
|
||||
| occupancysensing-occupied | Switch | Occupancy | Indicates if an occupancy sensor is triggered | Presence | true | |
|
||||
| relativehumiditymeasurement-measuredvalue | Number:Dimensionless | Humidity | The measured humidity | Humidity | true | %.0f %% |
|
||||
| illuminancemeasurement-measuredvalue | Number:Illuminance | Illuminance | The measured illuminance in Lux | Illuminance | true | %d %unit% |
|
||||
| wifinetworkdiagnostics-rssi | Number:Power | Signal | Wi-Fi signal strength indicator. | QualityOfService | true | %d %unit% |
|
||||
| electricalpowermeasurement-activepower | Number:Power | Active Power | The active power measurement in watts | Energy | true | %.1f %unit% |
|
||||
| electricalpowermeasurement-activecurrent | Number:ElectricCurrent | Active Current | The active current measurement in amperes | Energy | true | %.1f %unit% |
|
||||
| electricalpowermeasurement-voltage | Number:ElectricPotential | Voltage | The voltage measurement in volts | Energy | true | %.2f %unit% |
|
||||
| electricalenergymeasurement-energymeasurmement-energy | Number:Energy | Energy | The measured energy | Energy | true | %.1f %unit% |
|
||||
| electricalenergymeasurement-cumulativeenergyimported-energy | Number:Energy | Cumulative Energy Imported | The cumulative energy imported measurement | Energy | true | %.1f %unit% |
|
||||
| electricalenergymeasurement-cumulativeenergyexported-energy | Number:Energy | Cumulative Energy Exported | The cumulative energy exported measurement | Energy | true | %.1f %unit% |
|
||||
| electricalenergymeasurement-periodicenergyimported-energy | Number:Energy | Periodic Energy Imported | The periodic energy imported measurement | Energy | true | %.1f %unit% |
|
||||
| electricalenergymeasurement-periodicenergyexported-energy | Number:Energy | Periodic Energy Exported | The periodic energy exported measurement | Energy | true | %.1f %unit% |
|
||||
| threadnetworkdiagnostics-channel | Number | Channel | The Thread network channel | Network | true | %d |
|
||||
| threadnetworkdiagnostics-routingrole | Number | Routing Role | The Thread routing role (0=Unspecified, 1=Unassigned, 2=Sleepy End Device, 3=End Device, 4=Reed, 5=Router, 6=Leader) | Network | true | %d |
|
||||
| threadnetworkdiagnostics-networkname | String | Network Name | The Thread network name | Network | true | |
|
||||
| threadnetworkdiagnostics-panid | Number | PAN ID | The Thread network PAN ID | Network | true | %d |
|
||||
| threadnetworkdiagnostics-extendedpanid | Number | Extended PAN ID | The Thread network extended PAN ID | Network | true | %d |
|
||||
| threadnetworkdiagnostics-rloc16 | Number | RLOC16 | The Thread network RLOC16 address | Network | true | %d |
|
||||
| threadborderroutermanagement-borderroutername | String | Border Router Name | The name of the Thread border router | Network | true | |
|
||||
| threadborderroutermanagement-borderagentid | String | Border Agent ID | The unique identifier of the Thread border agent | Network | true | |
|
||||
| threadborderroutermanagement-threadversion | Number | Thread Version | The version of Thread protocol being used | Network | true | %d |
|
||||
| threadborderroutermanagement-interfaceenabled | Switch | Interface Enabled | Whether the Thread border router interface is enabled | Network | | |
|
||||
| threadborderroutermanagement-activedatasettimestamp | Number | Active Dataset Timestamp | Timestamp of the active Thread network dataset | Network | true | %d |
|
||||
| threadborderroutermanagement-activedataset | String | Active Dataset | The active Thread network dataset configuration | Network | | |
|
||||
| threadborderroutermanagement-pendingdatasettimestamp | Number | Pending Dataset Timestamp | Timestamp of the pending Thread network dataset (only available if PAN change feature is supported) | Network | true | %d |
|
||||
| threadborderroutermanagement-pendingdataset | String | Pending Dataset | The pending Thread network dataset configuration (only available if PAN change feature is supported) | Network | | |
|
||||
|
||||
## Full Example
|
||||
|
||||
### Thing Configuration
|
||||
|
||||
```java
|
||||
Thing configuration example for the Matter controller:
|
||||
Thing matter:controller:main [ nodeId="1" ]
|
||||
|
||||
Thing configuration example for a Matter node:
|
||||
Thing matter:node:main:12345678901234567890 [ nodeId="12345678901234567890"]
|
||||
|
||||
Thing configuration example for a Matter bridge endpoint:
|
||||
Thing matter:endpoint:main:12345678901234567890:2 [ endpointId=2]
|
||||
```
|
||||
|
||||
### Item Configuration
|
||||
|
||||
```java
|
||||
Dimmer MyDimmer "My Endpoint Dimmer" { channel="matter:node:main:12345678901234567890:1#levelcontrol-level" }
|
||||
Dimmer MyBridgedDimmer "My Bridged Dimmer" { channel="matter:endpoint:main:12345678901234567890:2#levelcontrol-level" }
|
||||
|
||||
```
|
||||
|
||||
### Sitemap Configuration
|
||||
|
||||
```perl
|
||||
Optional Sitemap configuration:
|
||||
sitemap home label="Home"
|
||||
{
|
||||
Frame label="Matter Devices"
|
||||
{
|
||||
Dimmer item=MyEndpointDimmer
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
# Matter Bridge
|
||||
|
||||
openHAB can also expose Items and Item groups as Matter devices to 3rd party Matter clients like Google Home, Apple Home and Amazon Alexa. This allows local control for those ecosystems and can be used instead of cloud based integrations for features like voice assistants.
|
||||
|
||||
## Configuration
|
||||
|
||||
The openHAB matter bridge uses Metadata tags with the key "matter", similar to the Alexa, Google Assistant and Apple Homekit integrations.
|
||||
Matter Metadata tag values generally follow the Matter "Device Type" and "Cluster" specification as much as possible.
|
||||
Items and item groups are initially tagged with a Matter "Device Type", which are Matter designations for common device types like lights, thermostats, locks, window coverings, etc...
|
||||
For single items, like a light switch or dimmer, simply tagging the item with the Matter device type is enough.
|
||||
For more complicated devices, like thermostats, A group item is tagged with the device type, and its child members are tagged with the cluster attribute(s) that it will be associated with.
|
||||
Multiple attributes use a comma delimited format like `attribute1, attribute2, ... attributeN`.
|
||||
For devices like fans that support groups with multiple items, but you are only using one item to control (like On/Off or Speed), you can tag the regular item with both the device type and the cluster attribute(s) separated by a comma.
|
||||
|
||||
Pairing codes and other options can be found in the MainUI under "Settings -> Add-on Settings -> Matter Binding"
|
||||
|
||||
### Device Types
|
||||
|
||||
| Type | Item Type | Tag | Option |
|
||||
|---------------------|---------------------------------------|-------------------|---------------------------------------------------------------------------------|
|
||||
| OnOff Light | Switch, Dimmer | OnOffLight | |
|
||||
| Dimmable Light | Dimmer | DimmableLight | |
|
||||
| Color Light | Color | ColorLight | |
|
||||
| On/Off Plug In Unit | Switch, Dimmer | OnOffPlugInUnit | |
|
||||
| Thermostat | Group | Thermostat | |
|
||||
| Window Covering | Rollershutter, Dimmer, String, Switch | WindowCovering | String types: [OPEN="OPEN", CLOSED="CLOSED"], Switch types: [invert=true/false] |
|
||||
| Temperature Sensor | Number | TemperatureSensor | |
|
||||
| Humidity Sensor | Number | HumiditySensor | |
|
||||
| Occupancy Sensor | Switch, Contact | OccupancySensor | |
|
||||
| Contact Sensor | Switch, Contact | ContactSensor | |
|
||||
| Door Lock | Switch | DoorLock | |
|
||||
| Fan | Group, Switch, String, Dimmer | Fan | |
|
||||
|
||||
### Global Options
|
||||
|
||||
* Endpoint Labels
|
||||
* By default, the Item label is used as the Matter label but can be overridden by adding a `label` key as a metadata option, either by itself or part of other options required for a device.
|
||||
* Example: `[label="My Custom Label"]`
|
||||
* Fixed Labels
|
||||
* Matter has a concept of "Fixed Labels" which allows devices to expose arbitrary label names and values which can be used by clients for tasks like grouping devices in rooms.
|
||||
* Example: `[fixedLabels="room=Office, floor=1"]`
|
||||
|
||||
### Thermostat group member tags
|
||||
|
||||
| Type | Item Type | Tag | Options |
|
||||
|---------------------|------------------------|------------------------------------|------------------------------------------------------------------------------------------|
|
||||
| Current Temperature | Number | thermostat.localTemperature | |
|
||||
| Outdoor Temperature | Number | thermostat.outdoorTemperature | |
|
||||
| Heating Setpoint | Number | thermostat.occupiedHeatingSetpoint | |
|
||||
| Cooling Setpoint | Number | thermostat.occupiedCoolingSetpoint | |
|
||||
| System Mode | Number, String, Switch | thermostat.systemMode | [OFF=0,AUTO=1,ON=1,COOL=3,HEAT=4,EMERGENCY_HEAT=5,PRECOOLING=6,FAN_ONLY=7,DRY=8,SLEEP=9] |
|
||||
| Running Mode | Number, String | thermostat.runningMode | |
|
||||
|
||||
For `systemMode` the `ON` option should map to the system mode custom value that would be appropriate if a 'ON' command was issued, defaults to the `AUTO` mapping.
|
||||
|
||||
The following attributes can be set in the options of any thermostat member or on the Group item to set temperature options.
|
||||
|
||||
| Setting | Description | Value (in 0.01°C) |
|
||||
|--------------------------------------|-------------------------------------------------------------------------------------------------|-------------------|
|
||||
| `thermostat-minHeatSetpointLimit` | The minimum allowable heat setpoint limit. | 0 |
|
||||
| `thermostat-maxHeatSetpointLimit` | The maximum allowable heat setpoint limit. | 3500 |
|
||||
| `thermostat-absMinHeatSetpointLimit` | The absolute minimum heat setpoint limit that cannot be exceeded by the `minHeatSetpointLimit`. | 0 |
|
||||
| `thermostat-absMaxHeatSetpointLimit` | The absolute maximum heat setpoint limit that cannot be exceeded by the `maxHeatSetpointLimit`. | 3500 |
|
||||
| `thermostat-minCoolSetpointLimit` | The minimum allowable cool setpoint limit. | 0 |
|
||||
| `thermostat-maxCoolSetpointLimit` | The maximum allowable cool setpoint limit. | 3500 |
|
||||
| `thermostat-absMinCoolSetpointLimit` | The absolute minimum cool setpoint limit that cannot be exceeded by the `minCoolSetpointLimit`. | 0 |
|
||||
| `thermostat-absMaxCoolSetpointLimit` | The absolute maximum cool setpoint limit that cannot be exceeded by the `maxCoolSetpointLimit`. | 3500 |
|
||||
| `thermostat-minSetpointDeadBand` | The minimum deadband (temperature gap) between heating and cooling setpoints. | 0 |
|
||||
|
||||
### Fan group member tags
|
||||
|
||||
| Type | Item Type | Tag | Options |
|
||||
|----------------|------------------------|---------------------------|---------------------------------------------------------|
|
||||
| Fan Mode | Number, String, Switch | fanControl.fanMode | [OFF=0, LOW=1, MEDIUM=2, HIGH=3, ON=4, AUTO=5, SMART=6] |
|
||||
| Fan Percentage | Dimmer | fanControl.percentSetting | |
|
||||
| Fan OnOff | Switch | onOff.onOff | |
|
||||
|
||||
The following attributes can be set on the Fan Mode item or the Group item to set fan options.
|
||||
|
||||
| Setting | Description | Value |
|
||||
|------------------------------|----------------------------------------------------------------------------------------------------------|-------|
|
||||
| `fanControl-fanModeSequence` | The sequence of fan modes to cycle through. See [Fan Mode Sequence Options](#fan-mode-sequence-options) | 5 |
|
||||
|
||||
#### Fan Mode Sequence Options
|
||||
|
||||
| Value | Description |
|
||||
|-------|-------------------|
|
||||
| 0 | OffLowMedHigh |
|
||||
| 1 | OffLowHigh |
|
||||
| 2 | OffLowMedHighAuto |
|
||||
| 3 | OffLowHighAuto |
|
||||
| 4 | OffHighAuto |
|
||||
| 5 | OffHigh |
|
||||
|
||||
### Example
|
||||
|
||||
```java
|
||||
Dimmer TestDimmer "Test Dimmer [%d%%]" {matter="DimmableLight" [label="My Custom Dimmer", fixedLabels="room=Bedroom 1, floor=2, direction=up, customLabel=Custom Value"]}
|
||||
|
||||
Group TestHVAC "Thermostat" ["HVAC"] {matter="Thermostat" [thermostat-minHeatSetpointLimit=0, thermostat-maxHeatSetpointLimit=3500]}
|
||||
Number:Temperature TestHVAC_Temperature "Temperature [%d °F]" (TestHVAC) ["Measurement","Temperature"] {matter="thermostat.localTemperature"}
|
||||
Number:Temperature TestHVAC_HeatSetpoint "Heat Setpoint [%d °F]" (TestHVAC) ["Setpoint", "Temperature"] {matter="thermostat.occupiedHeatingSetpoint"}
|
||||
Number:Temperature TestHVAC_CoolSetpoint "Cool Setpoint [%d °F]" (TestHVAC) ["Setpoint", "Temperature"] {matter="thermostat.occupiedCoolingSetpoint"}
|
||||
Number TestHVAC_Mode "Mode [%s]" (TestHVAC) ["Control" ] {matter="thermostat.systemMode" [OFF=0, HEAT=1, COOL=2, AUTO=3]}
|
||||
|
||||
Switch TestDoorLock "Door Lock" {matter="DoorLock"}
|
||||
Rollershutter TestShade "Window Shade" {matter="WindowCovering"}
|
||||
Number:Temperature TestTemperatureSensor "Temperature Sensor" {matter="TemperatureSensor"}
|
||||
Number TestHumiditySensor "Humidity Sensor" {matter="HumiditySensor"}
|
||||
Switch TestOccupancySensor "Occupancy Sensor" {matter="OccupancySensor"}
|
||||
|
||||
### Fan with group item control
|
||||
Group TestFan "Test Fan" {matter="Fan" [fanControl-fanModeSequence=3]}
|
||||
Dimmer TestFanSpeed "Speed" (TestFan) {matter="fanControl.percentSetting"}
|
||||
Switch TestFanOnOff "On/Off" (TestFan) {matter="fanControl.fanMode"}
|
||||
Number TestFanMode "Mode" (TestFan) {matter="fanControl.fanMode" [OFF=0, LOW=1, MEDIUM=2, HIGH=3, ON=4, AUTO=5, SMART=6]}
|
||||
|
||||
### Fan with single item control , so no group item is needed
|
||||
Switch TestFanSingleItem "On/Off" {matter="Fan, fanControl.fanMode"}
|
||||
```
|
||||
|
||||
### Bridge FAQ
|
||||
|
||||
* Alexa: When pairing, after a minute Alexa reports "Something went wrong"
|
||||
* Alexa can take 3-4 seconds per device to process which can take longer then the Alexa UI is willing to wait.
|
||||
Eventually the pairing will complete, which for a large number of devices may be a few minutes.
|
||||
* Alexa: Suddenly stops working and says it could not connect to a device or device not responding.
|
||||
* Check the Settings page in the Main UI to confirm the bridge is running
|
||||
* Ensure the openHAB item has the proper matter tag, or that the item is being loaded at all (check item file errors)
|
||||
* Rarely, you may need to reboot the Alexa device.
|
||||
If you have multiple devices and not sure which is the primary matter connection, you may need to reboot all of them.
|
||||
|
||||
# Matter Ecosystem Overview
|
||||
|
||||
Matter is an open-source connectivity standard for smart home devices, allowing seamless communication between a wide range of devices, controllers, and ecosystems.
|
||||
|
||||
Below is a high-level overview of the Matter ecosystem as well as common terminology used in the Matter standard.
|
||||
|
||||
## Matter Devices
|
||||
|
||||
### Nodes and Endpoints
|
||||
|
||||
In the Matter ecosystem, a **node** represents a single device that joins a Matter network and will have a locally routable IPv6 address.
|
||||
A **node** can have multiple **endpoints**, which are logical representations of specific features or functionalities of the device.
|
||||
For example, a smart thermostat (node) may have an endpoint for general thermostat control (heating, cooling, current temperature, operating state, etc....) and another endpoint for humidity sensing.
|
||||
Many devices will only have a single endpoint.
|
||||
[Matter Bridges](#bridges) will expose multiple endpoints for each device they are bridging, and the bridge itself will be a node.
|
||||
|
||||
**Example:**
|
||||
|
||||
- A Thermostat node with an endpoint for general temperature control and another endpoint for a remote temperature or humidity sensor.
|
||||
|
||||
### Controllers
|
||||
|
||||
A **controller** manages the interaction between Matter devices and other parts of the network.
|
||||
Controllers can send commands, receive updates, and facilitate device communication.
|
||||
They also handle the commissioning process when new devices are added to the network.
|
||||
|
||||
**Example:**
|
||||
|
||||
- openHAB or another smart home hub or a smartphone app that manages your smart light bulbs, door locks, and sensors (Google Home, Apple Home, Amazon Alexa, etc...)
|
||||
|
||||
### Bridges
|
||||
|
||||
A **bridge** is a special type of node that connects non-Matter devices to a Matter network, effectively translating between protocols.
|
||||
Bridges allow legacy devices to be controlled via the Matter standard.
|
||||
|
||||
openHAB fully supports connecting to Matter bridges.
|
||||
In addition, openHAB has support for running its own Matter bridge service, exposing openHAB items as Matter endpoints to 3rd party systems.
|
||||
See [Matter Bridge](#Matter-Bridge) for information on running a Bridge server.
|
||||
|
||||
**Example:**
|
||||
|
||||
- A bridge that connects Zigbee or Z-Wave devices, making them accessible within a Matter ecosystem. The Ikea Dirigera and Philips Hue Bridge both act as matter bridges and are supported in openHAB.
|
||||
|
||||
### Thread Border Routers
|
||||
|
||||
A **Thread Border Router** is a device that allows devices connected via Thread (a low-power wireless protocol) to communicate with devices on other networks, such as Wi-Fi or Ethernet.
|
||||
It facilitates IPv6-based communication between Thread networks and the local IP network.
|
||||
|
||||
**Example:**
|
||||
|
||||
- An OpenThread Boarder Router (open source) as well as recent versions of Apple TVs, Amazon Echos and Google Nest Hubs all have embedded thread boarder routers.
|
||||
|
||||
## IPv6 and Network Connectivity
|
||||
|
||||
Matter devices operate over an IPv6 network, and obtaining an IPv6 address is required for communication.
|
||||
Devices can connect to the network via different interfaces:
|
||||
|
||||
### Ethernet
|
||||
|
||||
Ethernet-connected Matter devices receive an IPv6 address through standard DHCPv6 or stateless address auto-configuration (SLAAC).
|
||||
|
||||
### Wi-Fi
|
||||
|
||||
Wi-Fi-enabled Matter devices also receive an IPv6 address using DHCPv6 or SLAAC.
|
||||
They rely on the existing Wi-Fi infrastructure for communication within the Matter ecosystem.
|
||||
|
||||
### Thread
|
||||
|
||||
Thread-based Matter devices connect to the network via a **Thread Border Router**.
|
||||
They receive an IPv6 address from the Thread router.
|
||||
|
||||
## IPv6 Requirements
|
||||
|
||||
For Matter devices to function correctly, **IPv6 must be enabled** and supported in both the local network (router) and the Matter controllers.
|
||||
Without IPv6, devices won't be able to communicate properly within the Matter ecosystem.
|
||||
Ensure that your router has IPv6 enabled and that any Matter controllers (like smart hubs, apps or openHAB) are configured to support IPv6 as well.
|
||||
|
||||
**Note that environments like Docker require special configurations to enable IPv6**
|
||||
|
||||
## Matter Commissioning and Pairing Codes
|
||||
|
||||
Commissioning a Matter device involves securely adding it to the network using a **pairing code**.
|
||||
This process ensures that only authorized devices can join the network.
|
||||
|
||||
### Pairing Code from the Device
|
||||
|
||||
When commissioning a new Matter device, it typically has a printed QR code or numeric pairing code that you scan or enter during setup. This pairing code allows the controller to establish a secure connection to the device and add it to the network.
|
||||
Once a device pairing code is in use, it typically can not be used again to pair other controllers.
|
||||
|
||||
### Additional Pairing Code from a Controller
|
||||
|
||||
If a device has already been commissioned and you want to add it to another Matter controller, the existing controller can generate an additional pairing code.
|
||||
This is useful when sharing access to a device across multiple hubs or apps.
|
||||
Apple Home, Google Home, Amazon Alexa and openHAB all support generating pairing codes for existing paired devices.
|
||||
|
||||
### Example:
|
||||
|
||||
- When setting up a smart lock, you may scan a QR code directly from the lock, or use the 11 digit pairing code printed on it to pair it with openHAB. If you later want to control the lock from another app or hub, you would retrieve a new pairing code directly from openHAB.
|
|
@ -24,6 +24,7 @@ The binding supports various device types including RGB/RGBW controllers, temper
|
|||
- `rgbw` - RGB/RGBW Controllers for color and brightness control
|
||||
- `temperature` - Temperature Sensors for monitoring environmental conditions
|
||||
- `switch` - Switch Controllers for basic on/off and dimming control
|
||||
- `contact` - Contact Sensors for monitoring open/closed states
|
||||
|
||||
## Discovery
|
||||
|
||||
|
@ -43,57 +44,54 @@ The binding itself does not require any special configuration.
|
|||
The Sbus Bridge has the following configuration parameters:
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|---------|---------|------------------------------------------------------|---------|----------|-----------|
|
||||
|:--------|:--------|:-----------------------------------------------------|:-------:|:--------:|:---------:|
|
||||
| host | text | IP address of the Sbus device (typically broadcast) | N/A | yes | no |
|
||||
| port | integer | UDP port number | 6000 | no | no |
|
||||
|
||||
### RGBW Controller Configuration
|
||||
### RGBW Controller, Contact, Switch, Temperature Configuration
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|---------|---------|------------------------------------------------------|---------|----------|-----------|
|
||||
|:--------|:--------|:-----------------------------------------------------|:-------:|:--------:|:---------:|
|
||||
| subnetId| integer | Subnet ID the RGBW controller is part of | N/A | yes | no |
|
||||
| id | integer | Device ID of the RGBW controller | N/A | yes | no |
|
||||
| refresh | integer | Refresh interval in seconds | 30 | no | yes |
|
||||
|
||||
### Temperature Sensor Configuration
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|---------|---------|------------------------------------------------------|---------|----------|-----------|
|
||||
| subnetId| integer | Subnet ID the temperature sensor is part of | N/A | yes | no |
|
||||
| id | integer | Device ID of the temperature sensor | N/A | yes | no |
|
||||
| refresh | integer | Refresh interval in seconds | 30 | no | yes |
|
||||
|
||||
### Switch Controller Configuration
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|---------|---------|------------------------------------------------------|---------|----------|-----------|
|
||||
| subnetId| integer | Subnet ID the switch controller is part of | N/A | yes | no |
|
||||
| id | integer | Device ID of the switch controller | N/A | yes | no |
|
||||
| refresh | integer | Refresh interval in seconds | 30 | no | yes |
|
||||
|
||||
## Channels
|
||||
|
||||
### RGBW Controller Channels
|
||||
|
||||
| Channel | Type | Read/Write | Description |
|
||||
|---------|--------|------------|------------------------------------------------------------|
|
||||
| color | Color | RW | HSB color picker that controls RGBW components (0-100%) |
|
||||
|:--------|:-------|:----------:|:-----------------------------------------------------------|
|
||||
| color | Color | RW | HSB color picker that controls RGBW components (0-100%). Can be configured to disable the white channel. |
|
||||
| switch | Switch | RW | On/Off control for the RGBW output with optional timer |
|
||||
|
||||
The color channel of RGBW controllers supports these additional parameters:
|
||||
|
||||
| Parameter | Type | Description | Default | Required | Advanced |
|
||||
|:------------|:--------|:-----------------------------------------------------|:-------:|:--------:|:---------:|
|
||||
| channelNumber | integer | The physical channel number on the Sbus device | N/A | yes | no |
|
||||
| enableWhite | boolean | Controls the white component support for RGB palette | true | no | yes |
|
||||
|
||||
### Temperature Sensor Channels
|
||||
|
||||
| Channel | Type | Read/Write | Description |
|
||||
|-------------|---------------------|------------|--------------------------------|
|
||||
|:------------|:--------------------|:----------:|:-------------------------------|
|
||||
| temperature | Number:Temperature | R | Current temperature reading. Can be configured to use Celsius (default) or Fahrenheit units |
|
||||
|
||||
### Switch Controller Channels
|
||||
|
||||
| Channel | Type | Read/Write | Description |
|
||||
|---------|----------------|------------|-----------------------------------------------------------|
|
||||
|:--------|:---------------|:----------:|:----------------------------------------------------------|
|
||||
| switch | Switch | RW | Basic ON/OFF state control |
|
||||
| dimmer | Dimmer | RW | ON/OFF state with timer transition |
|
||||
| paired | Rollershutter | RW | UP/DOWN/STOP control for two paired channels (e.g., rollershutters)|
|
||||
|
||||
### Contact Sensor Channels
|
||||
|
||||
| Channel | Type | Read/Write | Description |
|
||||
|:--------|:--------|:----------:|:----------------------------------------------------------|
|
||||
| contact | Contact | R | Contact state (OPEN/CLOSED) |
|
||||
|
||||
## Full Example
|
||||
|
||||
### Thing Configuration
|
||||
|
@ -102,8 +100,14 @@ The Sbus Bridge has the following configuration parameters:
|
|||
Bridge sbus:udp:mybridge [ host="192.168.1.255", port=5000 ] {
|
||||
Thing rgbw colorctrl [ id=72, refresh=30 ] {
|
||||
Channels:
|
||||
Type color-channel : color [ channelNumber=1 ] // HSB color picker, RGBW values stored at channel 1
|
||||
Type switch-channel : power [ channelNumber=1 ] // On/Off control for the RGBW output For complex scenes, one Sbus color controller can keep up to 40 color states. The switch channelNumber has to fall into this range.
|
||||
Type color-channel : color [ channelNumber=1, enableWhite=true ] // Full RGBW control with white component
|
||||
Type switch-channel : power [ channelNumber=1 ] // On/Off control for the RGBW output
|
||||
}
|
||||
|
||||
Thing rgbw rgbonly [ id=73, refresh=30 ] {
|
||||
Channels:
|
||||
Type color-channel : color [ channelNumber=1, enableWhite=false ] // RGB only, no white component
|
||||
Type switch-channel : power [ channelNumber=1 ]
|
||||
}
|
||||
|
||||
Thing temperature temp1 [ id=62, refresh=30 ] {
|
||||
|
@ -117,6 +121,11 @@ Bridge sbus:udp:mybridge [ host="192.168.1.255", port=5000 ] {
|
|||
Type dimmer-channel : second_switch [ channelNumber=2 ]
|
||||
Type paired-channel : third_switch [ channelNumber=3, pairedChannelNumber=4 ]
|
||||
}
|
||||
|
||||
Thing contact contact1 [ id=80, refresh=30 ] {
|
||||
Channels:
|
||||
Type contact-channel : contact [ channelNumber=1 ]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -136,6 +145,9 @@ Rollershutter Rollershutter_Switch "Rollershutter [%s]" { channel="sbus:switch:m
|
|||
Group gLight "RGBW Light" <light> ["Lighting"]
|
||||
Color rgbwColor "Color" <colorwheel> (gLight) ["Control", "Light"] { channel="sbus:rgbw:mybridge:colorctrl:color" }
|
||||
Switch rgbwPower "Power" <switch> (gLight) ["Switch", "Light"] { channel="sbus:rgbw:mybridge:colorctrl:power" }
|
||||
|
||||
// Contact Sensor
|
||||
Contact Door_Contact "Door [%s]" <door> { channel="sbus:contact:mybridge:contact1:contact" }
|
||||
```
|
||||
|
||||
### Sitemap Configuration
|
||||
|
@ -148,5 +160,30 @@ sitemap sbus label="Sbus Demo"
|
|||
Text item=Temp_Sensor
|
||||
Switch item=Light_Switch
|
||||
Rollershutter item=Rollershutter_Switch
|
||||
Text item=Door_Contact
|
||||
}
|
||||
}
|
||||
|
||||
## Usage Notes
|
||||
|
||||
### RGB vs. RGBW Mode
|
||||
|
||||
The `enableWhite` parameter for color channels controls whether the white component is used:
|
||||
|
||||
- Set to `true` (default): Full RGBW control with white component
|
||||
- Set to `false`: RGB-only control with no white component
|
||||
|
||||
This is useful for:
|
||||
- Pure RGB fixtures without a white channel
|
||||
- Creating saturated colors without white dilution
|
||||
- Specialized color effects where white would wash out the intended color
|
||||
|
||||
### Color Control and On/Off Functionality
|
||||
|
||||
The Color item type in openHAB inherently supports both color selection and on/off functionality:
|
||||
- The color picker controls hue and saturation
|
||||
- The brightness component (0-100%) functions as the on/off control
|
||||
- When brightness is 0%, the light is OFF
|
||||
- When brightness is >0%, the light is ON
|
||||
|
||||
This is why a Color item shows both a color picker and an on/off button in the UI without requiring a separate Switch item.
|
||||
|
|
|
@ -106,26 +106,26 @@ The channels on the bridge are the ones used to both control the active device a
|
|||
|
||||
**Common Channels:**
|
||||
|
||||
| Channel Type ID | Item Type | Read/Write | Description |
|
||||
| --------------- | --------- | ---------- | ------------------------------------------------------------------------------------------------- |
|
||||
| deviceName | String | Read-write | Name of the currently active Connect Device, |
|
||||
| devices | Selection | Read-write | List of currently active Connect Devices, Set the device ID to transfer play to that device. |
|
||||
| deviceVolume | Dimmer | Read-write | Get or set the active Connect Device volume. |
|
||||
| deviceShuffle | Switch | Read-write | Turn on/off shuffle play on the active device. |
|
||||
| trackPlay | String | Read-write | Set which music to play on the active device. This channel accepts Spotify URIs and URLs. |
|
||||
| trackPlayer | Player | Read-write | The Player Control of the active device. Accepts PLAY/PAUSE/NEXT/PREVIOUS commands. |
|
||||
| trackRepeat | String | Read-only | `track` repeats the current track. `context` repeats the current context. `off` turns repeat off. |
|
||||
| trackName | String | Read-only | The name of the currently playing track. |
|
||||
| trackDuration | String | Read-only | The duration (m:ss) of the currently playing track. This is updated every second. |
|
||||
| trackDurationMs | Number | Read-only | The duration of the currently playing track in milliseconds. |
|
||||
| trackProgress | String | Read-only | The progress (m:ss) of the currently playing track. This is updated every second. |
|
||||
| trackProgressMs | Number | Read-only | The progress of the currently playing track in milliseconds. |
|
||||
| playlists | Selection | Read-write | This channel will be populated with the users playlists. Set the playlist ID to start. |
|
||||
| playlistName | String | Read-write | The currently playing playlist. Or empty if no playing list is playing. |
|
||||
| albumName | String | Read-only | Album Name of the currently playing track. |
|
||||
| albumImage | RawType | Read-only | Album Image of the currently playing track. |
|
||||
| albumImageUrl | String | Read-only | Url to the album Image of the currently playing track. |
|
||||
| artistName | String | Read-only | Artist Name of the currently playing track. |
|
||||
| Channel Type ID | Item Type | Read/Write | Description |
|
||||
| --------------- | ----------- | ---------- | ------------------------------------------------------------------------------------------------- |
|
||||
| deviceName | String | Read-write | Name of the currently active Connect Device, |
|
||||
| devices | Selection | Read-write | List of currently active Connect Devices, Set the device ID to transfer play to that device. |
|
||||
| deviceVolume | Dimmer | Read-write | Get or set the active Connect Device volume. |
|
||||
| deviceShuffle | Switch | Read-write | Turn on/off shuffle play on the active device. |
|
||||
| trackPlay | String | Read-write | Set which music to play on the active device. This channel accepts Spotify URIs and URLs. |
|
||||
| trackPlayer | Player | Read-write | The Player Control of the active device. Accepts PLAY/PAUSE/NEXT/PREVIOUS commands. |
|
||||
| trackRepeat | String | Read-only | `track` repeats the current track. `context` repeats the current context. `off` turns repeat off. |
|
||||
| trackName | String | Read-only | The name of the currently playing track. |
|
||||
| trackDuration | String | Read-only | The duration (m:ss) of the currently playing track. This is updated every second. |
|
||||
| trackDurationMs | Number:Time | Read-only | The duration of the currently playing track. |
|
||||
| trackProgress | String | Read-only | The progress (m:ss) of the currently playing track. This is updated every second. |
|
||||
| trackProgressMs | Number:Time | Read-only | The progress of the currently playing track. |
|
||||
| playlists | Selection | Read-write | This channel will be populated with the users playlists. Set the playlist ID to start. |
|
||||
| playlistName | String | Read-write | The currently playing playlist. Or empty if no playing list is playing. |
|
||||
| albumName | String | Read-only | Album Name of the currently playing track. |
|
||||
| albumImage | RawType | Read-only | Album Image of the currently playing track. |
|
||||
| albumImageUrl | String | Read-only | Url to the album Image of the currently playing track. |
|
||||
| artistName | String | Read-only | Artist Name of the currently playing track. |
|
||||
|
||||
The `playlists` channel has 2 parameters:
|
||||
|
||||
|
|
|
@ -103,6 +103,7 @@
|
|||
<description>Home Connect connected washing machine (e.g. Bosch or Siemens).</description>
|
||||
<semantic-equipment-tag>WashingMachine</semantic-equipment-tag>
|
||||
<channels>
|
||||
<channel id="power_state" typeId="system.power"/>
|
||||
<channel id="door_state" typeId="door_state"/>
|
||||
<channel id="operation_state" typeId="operation_state"/>
|
||||
<channel id="remote_start_allowance_state" typeId="remote_start_allowance_state"/>
|
||||
|
@ -129,6 +130,9 @@
|
|||
<channel id="remaining_program_time_state" typeId="remaining_program_time_state"/>
|
||||
<channel id="program_progress_state" typeId="program_progress_state"/>
|
||||
</channels>
|
||||
<properties>
|
||||
<property name="thingTypeVersion">1</property>
|
||||
</properties>
|
||||
<representation-property>haId</representation-property>
|
||||
<config-description>
|
||||
<parameter name="haId" type="text" required="true">
|
||||
|
@ -147,6 +151,7 @@
|
|||
<description>Home Connect connected combined washer dryer appliance.</description>
|
||||
<semantic-equipment-tag>WashingMachine</semantic-equipment-tag>
|
||||
<channels>
|
||||
<channel id="power_state" typeId="system.power"/>
|
||||
<channel id="door_state" typeId="door_state"/>
|
||||
<channel id="operation_state" typeId="operation_state"/>
|
||||
<channel id="remote_start_allowance_state" typeId="remote_start_allowance_state"/>
|
||||
|
@ -170,6 +175,9 @@
|
|||
<channel id="remaining_program_time_state" typeId="remaining_program_time_state"/>
|
||||
<channel id="program_progress_state" typeId="program_progress_state"/>
|
||||
</channels>
|
||||
<properties>
|
||||
<property name="thingTypeVersion">1</property>
|
||||
</properties>
|
||||
<representation-property>haId</representation-property>
|
||||
<config-description>
|
||||
<parameter name="haId" type="text" required="true">
|
||||
|
|
|
@ -408,7 +408,7 @@
|
|||
<item-type>Number:Time</item-type>
|
||||
<label>Momentary Duration</label>
|
||||
<description>Set the output relay closure duration for momentary relay modes (A-C).</description>
|
||||
<state min="0.2" max="25" step="0.1" pattern="%.1f %unit%"/>
|
||||
<state min="0.1" max="6300" step="0.1" pattern="%.1f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="monitor-mode" advanced="true">
|
||||
|
@ -539,7 +539,7 @@
|
|||
|
||||
<channel-type id="relay-mode" advanced="true">
|
||||
<item-type>String</item-type>
|
||||
<label>Output Relay Mode</label>
|
||||
<label>Relay Mode</label>
|
||||
<state>
|
||||
<options>
|
||||
<option value="LATCHING">Latching</option>
|
||||
|
@ -552,8 +552,14 @@
|
|||
|
||||
<channel-type id="relay-sensor-follow" advanced="true">
|
||||
<item-type>Switch</item-type>
|
||||
<label>Output Relay Sensor Follow</label>
|
||||
<description>Set the output relay to trigger when the sensor input changes state.</description>
|
||||
<label>Relay Sensor Follow</label>
|
||||
<description>Set the relay to trigger when the sensor changes state.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="relay-sensor-inverted" advanced="true">
|
||||
<item-type>Switch</item-type>
|
||||
<label>Relay Sensor Inverted</label>
|
||||
<description>Invert the sensor state when the relay triggers.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="resume-dim" advanced="true">
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<bridge-type id="enedis">
|
||||
<label>Enedis Web Bridge</label>
|
||||
<description>
|
||||
Provides your energy consumption data.
|
||||
In order to receive the data, you must activate your account at
|
||||
https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky.
|
||||
</description>
|
||||
|
||||
<config-description>
|
||||
<parameter name="username" type="text" required="true">
|
||||
<label>Username</label>
|
||||
<context>email</context>
|
||||
<description>Your Enedis Username</description>
|
||||
</parameter>
|
||||
<parameter name="password" type="text" required="true">
|
||||
<label>Password</label>
|
||||
<context>password</context>
|
||||
<description>Your Enedis Password</description>
|
||||
</parameter>
|
||||
<parameter name="internalAuthId" type="text" required="true">
|
||||
<label>Auth ID</label>
|
||||
<description>Authentication ID delivered after the captcha (see documentation).</description>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</bridge-type>
|
||||
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<bridge-type id="enedis-api">
|
||||
<label>Enedis API Bridge</label>
|
||||
<description>
|
||||
Provides your energy consumption data.
|
||||
In order to receive the data, you must activate your account at
|
||||
https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky.
|
||||
</description>
|
||||
|
||||
<config-description>
|
||||
<parameter name="clientId" type="text" required="false">
|
||||
<label>clientId</label>
|
||||
<description>Your Enedis clientId</description>
|
||||
</parameter>
|
||||
<parameter name="clientSecret" type="text" required="false">
|
||||
<label>clientSecret</label>
|
||||
<description>Your Enedis clientSecret</description>
|
||||
</parameter>
|
||||
<parameter name="isSandbox" type="boolean" required="false">
|
||||
<label>isSandbox</label>
|
||||
<description>To test on the sandbox environment</description>
|
||||
<advanced>true</advanced>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
</bridge-type>
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<bridge-type id="my-electrical-data">
|
||||
<label>MyElectricalData Bridge</label>
|
||||
<description>
|
||||
Provides your energy consumption data.
|
||||
In order to receive the data, you must activate your account at
|
||||
https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky.
|
||||
</description>
|
||||
|
||||
<config-description>
|
||||
</config-description>
|
||||
</bridge-type>
|
||||
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-group-type id="daily">
|
||||
<label>Daily Consumption</label>
|
||||
<channels>
|
||||
<channel id="yesterday" typeId="consumption">
|
||||
<label>Yesterday Consumption</label>
|
||||
<description>The energy consumption for previous day</description>
|
||||
</channel>
|
||||
|
||||
<channel id="day-2" typeId="consumption">
|
||||
<label>Day -2 Consumption</label>
|
||||
<description>The energy consumption for day -2</description>
|
||||
</channel>
|
||||
|
||||
<channel id="day-3" typeId="consumption">
|
||||
<label>Day -3 Consumption</label>
|
||||
<description>The energy consumption for day -3</description>
|
||||
</channel>
|
||||
|
||||
<channel id="consumption" typeId="consumption">
|
||||
<label>Consumption</label>
|
||||
<description>The energy consumption</description>
|
||||
</channel>
|
||||
|
||||
<channel id="max-power" typeId="power">
|
||||
<label>Peak Value</label>
|
||||
<description>Maximum power usage value</description>
|
||||
</channel>
|
||||
|
||||
<channel id="power" typeId="power">
|
||||
<label>Peak Value Yesterday</label>
|
||||
<description>Maximum power usage value for Yesterday</description>
|
||||
</channel>
|
||||
|
||||
<channel id="timestamp" typeId="timestamp">
|
||||
<label>Peak Timestamp Yesterday</label>
|
||||
<description>Maximum power usage timestamp for Yesterday</description>
|
||||
</channel>
|
||||
|
||||
<channel id="power-2" typeId="power">
|
||||
<label>Peak Value Day-2</label>
|
||||
<description>Maximum power usage value for Day-2</description>
|
||||
</channel>
|
||||
|
||||
<channel id="timestamp-2" typeId="timestamp">
|
||||
<label>Peak Timestamp Day-2</label>
|
||||
<description>Maximum power usage timestamp for Day-2</description>
|
||||
</channel>
|
||||
|
||||
<channel id="power-3" typeId="power">
|
||||
<label>Peak Value Day-3</label>
|
||||
<description>Maximum power usage value for Day-3</description>
|
||||
</channel>
|
||||
|
||||
<channel id="timestamp-3" typeId="timestamp">
|
||||
<label>Peak Timestamp Day-3</label>
|
||||
<description>Maximum power usage timestamp for Day-3</description>
|
||||
</channel>
|
||||
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-group-type id="load-curve">
|
||||
<label>Load curve</label>
|
||||
<channels>
|
||||
<channel id="power" typeId="power">
|
||||
<label>Load Curve Power</label>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-group-type id="monthly">
|
||||
<label>Monthly Consumption</label>
|
||||
<channels>
|
||||
<channel id="thisMonth" typeId="consumption">
|
||||
<label>This Month Consumption</label>
|
||||
<description>The energy consumption for the current Month</description>
|
||||
</channel>
|
||||
|
||||
<channel id="lastMonth" typeId="consumption">
|
||||
<label>Last Month Consumption</label>
|
||||
<description>The energy consumption for the previous Month</description>
|
||||
</channel>
|
||||
|
||||
<channel id="month-2" typeId="consumption">
|
||||
<label>Month -2 Consumption</label>
|
||||
<description>The energy consumption for the Month -2</description>
|
||||
</channel>
|
||||
|
||||
<channel id="consumption" typeId="consumption">
|
||||
<label>Consumption</label>
|
||||
<description>The energy consumption</description>
|
||||
</channel>
|
||||
|
||||
<channel id="max-power" typeId="power">
|
||||
<label>Peak Value</label>
|
||||
<description>Maximum power usage value</description>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-group-type id="weekly">
|
||||
<label>Weekly Consumption</label>
|
||||
<channels>
|
||||
<channel id="thisWeek" typeId="consumption">
|
||||
<label>This Week Consumption</label>
|
||||
<description>The energy consumption for the current Week</description>
|
||||
</channel>
|
||||
<channel id="lastWeek" typeId="consumption">
|
||||
<label>Last Week Consumption</label>
|
||||
<description>The energy consumption for the previous Week</description>
|
||||
</channel>
|
||||
<channel id="week-2" typeId="consumption">
|
||||
<label>Week -2 Consumption</label>
|
||||
<description>The energy consumption for the Week -2</description>
|
||||
</channel>
|
||||
<channel id="consumption" typeId="consumption">
|
||||
<label>Consumption</label>
|
||||
<description>The energy consumption</description>
|
||||
</channel>
|
||||
<channel id="max-power" typeId="power">
|
||||
<label>Peak Value</label>
|
||||
<description>Maximum power usage value</description>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-group-type id="yearly">
|
||||
<label>Yearly Consumption</label>
|
||||
<channels>
|
||||
<channel id="thisYear" typeId="consumption">
|
||||
<label>This Year Consumption</label>
|
||||
<description>The energy consumption for the current Year</description>
|
||||
</channel>
|
||||
<channel id="lastYear" typeId="consumption">
|
||||
<label>Last Year Consumption</label>
|
||||
<description>The energy consumption for the previous Year</description>
|
||||
</channel>
|
||||
<channel id="year-2" typeId="consumption">
|
||||
<label>Year -2 Consumption</label>
|
||||
<description>The energy consumption for the Year -2</description>
|
||||
</channel>
|
||||
<channel id="consumption" typeId="consumption">
|
||||
<label>Consumption</label>
|
||||
<description>The energy consumption</description>
|
||||
</channel>
|
||||
<channel id="max-power" typeId="power">
|
||||
<label>Peak Value</label>
|
||||
<description>Maximum power usage value</description>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-group-type id="tempo-calendar">
|
||||
<label>Tempo</label>
|
||||
<channels>
|
||||
<channel id="tempo-info-today" typeId="tempo-value">
|
||||
<label>Tempo Today Color</label>
|
||||
</channel>
|
||||
<channel id="tempo-info-tomorrow" typeId="tempo-value">
|
||||
<label>Tempo Today Color</label>
|
||||
</channel>
|
||||
<channel id="tempo-info-timeseries" typeId="tempo-value">
|
||||
<label>Tempo Day Information</label>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<thing-type id="linky">
|
||||
<supported-bridge-type-refs>
|
||||
<bridge-type-ref id="enedis"/>
|
||||
<bridge-type-ref id="enedis-api"/>
|
||||
<bridge-type-ref id="my-electrical-data"/>
|
||||
</supported-bridge-type-refs>
|
||||
|
||||
<label>Linky</label>
|
||||
<description>
|
||||
Provides your energy consumption data.
|
||||
In order to receive the data, you must activate your account at
|
||||
https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky.
|
||||
</description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="load-curve" id="load-curve"/>
|
||||
<channel-group typeId="daily" id="daily"/>
|
||||
<channel-group typeId="weekly" id="weekly"/>
|
||||
<channel-group typeId="monthly" id="monthly"/>
|
||||
<channel-group typeId="yearly" id="yearly"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="prmId" type="text" required="false">
|
||||
<label>prmId</label>
|
||||
<description>The Meter Id (PRM). If not provided, the binding will use the first registered meter found on your
|
||||
Enedis account.</description>
|
||||
</parameter>
|
||||
<parameter name="timezone" type="text" required="false">
|
||||
<label>timezone</label>
|
||||
<description>The timezone associated with your Point of delivery.
|
||||
Will default to openhab default timezone.
|
||||
You will
|
||||
need to change this if your linky is located in a different timezone that your openhab location.
|
||||
You can use an
|
||||
offset, or a label like Europe/Paris</description>
|
||||
</parameter>
|
||||
<parameter name="token" type="text" required="false">
|
||||
<label>Token</label>
|
||||
<description>Your Enedis token (you will need it only if you use MyElectricalData bridge. This can be left empty,
|
||||
the connection page will automatically fill it
|
||||
http://youopenhab/connectlinky)</description>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="linky"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<thing-type id="tempo-calendar">
|
||||
<supported-bridge-type-refs>
|
||||
<bridge-type-ref id="my-electrical-data"/>
|
||||
</supported-bridge-type-refs>
|
||||
|
||||
<label>Tempo Calendar</label>
|
||||
<description>Provides tempo calendar</description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="tempo-calendar" id="tempo-calendar"/>
|
||||
</channel-groups>
|
||||
</thing-type>
|
||||
|
||||
|
||||
</thing:thing-descriptions>
|
|
@ -4,99 +4,18 @@
|
|||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<thing-type id="linky">
|
||||
<label>Linky</label>
|
||||
<description>
|
||||
Provides your energy consumption data.
|
||||
In order to receive the data, you must activate your account at
|
||||
https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky.
|
||||
</description>
|
||||
<semantic-equipment-tag>WebService</semantic-equipment-tag>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="daily" id="daily"/>
|
||||
<channel-group typeId="weekly" id="weekly"/>
|
||||
<channel-group typeId="monthly" id="monthly"/>
|
||||
<channel-group typeId="yearly" id="yearly"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="username" type="text" required="true">
|
||||
<label>Username</label>
|
||||
<context>email</context>
|
||||
<description>Your Enedis Username</description>
|
||||
</parameter>
|
||||
<parameter name="password" type="text" required="true">
|
||||
<label>Password</label>
|
||||
<context>password</context>
|
||||
<description>Your Enedis Password</description>
|
||||
</parameter>
|
||||
<parameter name="internalAuthId" type="text" required="true">
|
||||
<label>Auth ID</label>
|
||||
<description>Authentication ID delivered after the captcha (see documentation).</description>
|
||||
</parameter>
|
||||
<parameter name="timezone" type="text" required="false">
|
||||
<label>Timezone</label>
|
||||
<description>The timezone associated with your Point of delivery.
|
||||
Will default to openHAB default timezone.
|
||||
You will
|
||||
need to change this if your Linky is located in a different timezone that your openHAB location.
|
||||
You can use an
|
||||
offset, or a label like Europe/Paris</description>
|
||||
</parameter>
|
||||
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<channel-group-type id="daily">
|
||||
<label>Daily consumption</label>
|
||||
<channels>
|
||||
<channel id="yesterday" typeId="consumption">
|
||||
<label>Yesterday Consumption</label>
|
||||
</channel>
|
||||
<channel id="power" typeId="power"/>
|
||||
<channel id="timestamp" typeId="timestamp">
|
||||
<label>Peak Timestamp</label>
|
||||
<description>Maximum power usage timestamp</description>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="weekly">
|
||||
<label>Weekly consumption</label>
|
||||
<channels>
|
||||
<channel id="thisWeek" typeId="consumption">
|
||||
<label>This Week Consumption</label>
|
||||
</channel>
|
||||
<channel id="lastWeek" typeId="consumption">
|
||||
<label>Last Week Consumption</label>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="monthly">
|
||||
<label>Monthly consumption</label>
|
||||
<channels>
|
||||
<channel id="thisMonth" typeId="consumption">
|
||||
<label>This Month Consumption</label>
|
||||
</channel>
|
||||
<channel id="lastMonth" typeId="consumption">
|
||||
<label>Last Month Consumption</label>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="yearly">
|
||||
<label>Yearly consumption</label>
|
||||
<channels>
|
||||
<channel id="thisYear" typeId="consumption">
|
||||
<label>This Year Consumption</label>
|
||||
</channel>
|
||||
<channel id="lastYear" typeId="consumption">
|
||||
<label>Last Year Consumption</label>
|
||||
</channel>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
<channel-type id="tempo-value">
|
||||
<item-type>Number</item-type>
|
||||
<label>Tempo Color Information</label>
|
||||
<description>This status describes the tempo color of a day.</description>
|
||||
<state>
|
||||
<options>
|
||||
<option value="0">Blue</option>
|
||||
<option value="1">White</option>
|
||||
<option value="2">Red</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="consumption">
|
||||
<item-type>Number:Energy</item-type>
|
||||
|
@ -108,8 +27,8 @@
|
|||
|
||||
<channel-type id="power">
|
||||
<item-type unitHint="kVA">Number:Power</item-type>
|
||||
<label>Yesterday Peak Power</label>
|
||||
<description>Maximum power usage yesterday</description>
|
||||
<label>Power Usage</label>
|
||||
<description>Power usage for a period</description>
|
||||
<state readOnly="true" pattern="%.2f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
|
|
|
@ -0,0 +1,477 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="matter"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<channel-type id="battery-voltage">
|
||||
<item-type>Number:ElectricPotential</item-type>
|
||||
<label>Battery Voltage</label>
|
||||
<description>The current battery voltage</description>
|
||||
<category>Energy</category>
|
||||
<state pattern="%.1f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="battery-alarm">
|
||||
<item-type>String</item-type>
|
||||
<label>Battery Alarm</label>
|
||||
<description>The battery alarm state</description>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Voltage</tag>
|
||||
</tags>
|
||||
<state readOnly="true">
|
||||
<options>
|
||||
<option value="minThreshold">Below min threshold</option>
|
||||
<option value="threshold1">Below threshold 1</option>
|
||||
<option value="threshold2">Below threshold 2</option>
|
||||
<option value="threshold3">Below threshold 3</option>
|
||||
<option value="noThreshold">No battery alarm</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="powersource-batpercentremaining">
|
||||
<item-type unitHint="%">Number:Dimensionless</item-type>
|
||||
<label>Battery Percent Remaining</label>
|
||||
<description>Indicates the estimated percentage of battery charge remaining until the battery will no longer be able
|
||||
to provide power to the Node</description>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Energy</tag>
|
||||
</tags>
|
||||
<state readOnly="true" pattern="%d %%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="powersource-batchargelevel">
|
||||
<item-type>Number</item-type>
|
||||
<label>Battery Charge Level</label>
|
||||
<description>Indicates a coarse ranking of the charge level of the battery, used to indicate when intervention is
|
||||
required</description>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Alarm</tag>
|
||||
<tag>LowBattery</tag>
|
||||
</tags>
|
||||
<state readOnly="true">
|
||||
<options>
|
||||
<option value="0">Ok</option>
|
||||
<option value="1">Warning</option>
|
||||
<option value="2">Critical</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="colorcontrol-color">
|
||||
<item-type>Color</item-type>
|
||||
<label>Color</label>
|
||||
<description>The color channel allows to control the color of a light.
|
||||
It is also possible to dim values and switch the
|
||||
light on and off.
|
||||
</description>
|
||||
<category>ColorLight</category>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>Color</tag>
|
||||
</tags>
|
||||
<autoUpdatePolicy>veto</autoUpdatePolicy>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="colorcontrol-temperature">
|
||||
<item-type>Dimmer</item-type>
|
||||
<label>Color Temperature</label>
|
||||
<description>Sets the color temperature of the light</description>
|
||||
<category>ColorLight</category>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>ColorTemperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.0f %%" min="0" max="100"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="colorcontrol-temperature-abs" advanced="true">
|
||||
<item-type unitHint="mirek">Number:Temperature</item-type>
|
||||
<label>Color Temperature</label>
|
||||
<description>Sets the color temperature of the light in mirek</description>
|
||||
<category>ColorLight</category>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>ColorTemperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.0f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="onoffcontrol-onoff">
|
||||
<item-type>Switch</item-type>
|
||||
<label>Switch</label>
|
||||
<description>Switches the power on and off</description>
|
||||
<category>Light</category>
|
||||
<tags>
|
||||
<tag>Switch</tag>
|
||||
<tag>Power</tag>
|
||||
</tags>
|
||||
<autoUpdatePolicy>veto</autoUpdatePolicy>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="levelcontrol-level">
|
||||
<item-type>Dimmer</item-type>
|
||||
<label>Dimmer</label>
|
||||
<description>Sets the level of the light</description>
|
||||
<category>Light</category>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>Brightness</tag>
|
||||
</tags>
|
||||
<state min="0" max="100" pattern="%d %%"/>
|
||||
<autoUpdatePolicy>veto</autoUpdatePolicy>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="modeselect-mode">
|
||||
<item-type>Number</item-type>
|
||||
<label>Mode Select</label>
|
||||
<description>Selection of 1 or more states</description>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>Mode</tag>
|
||||
</tags>
|
||||
<state pattern="%d" readOnly="false"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-switch">
|
||||
<item-type>Number</item-type>
|
||||
<label>Switch</label>
|
||||
<description>Indication of a switch or remote being activated</description>
|
||||
<state pattern="%d" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-switchlatched">
|
||||
<kind>trigger</kind>
|
||||
<label>Switched Latched Trigger</label>
|
||||
<description>This trigger shall indicate the new value of the CurrentPosition attribute as a JSON object, i.e. after
|
||||
the move.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-initialpress">
|
||||
<kind>trigger</kind>
|
||||
<label>Initial Press Trigger</label>
|
||||
<description>This trigger shall indicate the new value of the CurrentPosition attribute as a JSON object, i.e. while
|
||||
pressed.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-longpress">
|
||||
<kind>trigger</kind>
|
||||
<label>Long Press Trigger</label>
|
||||
<description>This trigger shall indicate the new value of the CurrentPosition attribute as a JSON object, i.e. while
|
||||
long pressed.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-shortrelease">
|
||||
<kind>trigger</kind>
|
||||
<label>Short Release Trigger</label>
|
||||
<description>This trigger shall indicate the previous value of the CurrentPosition attribute as a JSON object, i.e.
|
||||
just prior to a short release.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-longrelease">
|
||||
<kind>trigger</kind>
|
||||
<label>Long Release Trigger</label>
|
||||
<description>This trigger shall indicate the previous value of the CurrentPosition attribute as a JSON object, i.e.
|
||||
just prior to a long release.</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-multipressongoing">
|
||||
<kind>trigger</kind>
|
||||
<label>Multi-Press Ongoing Trigger</label>
|
||||
<description>This trigger shall indicate 2 numeric fields as a JSON object. The first is the new value of the
|
||||
CurrentPosition attribute, i.e. while pressed. The second is the multi press code with a value of N when the Nth
|
||||
press of a multi-press sequence has been detected.
|
||||
</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="switch-multipresscomplete">
|
||||
<kind>trigger</kind>
|
||||
<label>Multi-Press Complete Trigger</label>
|
||||
<description>This trigger shall indicate 2 numeric fields as a JSON object. The first is the new value of the
|
||||
CurrentPosition attribute, i.e. while pressed. The second is how many times the momentary switch has been pressed in
|
||||
a multi-press sequence.
|
||||
</description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-localtemperature">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Local Temperature</label>
|
||||
<description>Indicates the local temperature provided by the thermostat</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-outdoortemperature">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Outdoor Temperature</label>
|
||||
<description>Indicates the outdoor temperature provided by the thermostat</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-occupiedheating">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Occupied Heating Setpoint</label>
|
||||
<description>Sets the heating temperature when the room is occupied</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Setpoint</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-occupiedcooling">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Occupied Cooling Setpoint</label>
|
||||
<description>Sets the cooling temperature when the room is occupied</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Setpoint</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-unoccupiedheating">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Unoccupied Heating Setpoint</label>
|
||||
<description>Sets the heating temperature when the room is unoccupied</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Setpoint</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-unoccupiedcooling">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Unoccupied Cooling Setpoint</label>
|
||||
<description>Sets the cooling temperature when the room is unoccupied</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Setpoint</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-systemmode">
|
||||
<item-type>Number</item-type>
|
||||
<label>System Mode</label>
|
||||
<description>Sets the system mode of the thermostat</description>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>Mode</tag>
|
||||
</tags>
|
||||
<state>
|
||||
<options>
|
||||
<option value="0">Off</option>
|
||||
<option value="1">Auto</option>
|
||||
<option value="3">Cool</option>
|
||||
<option value="4">Heat</option>
|
||||
<option value="5">Emergency Heating</option>
|
||||
<option value="6">Precooling</option>
|
||||
<option value="7">Fan Only</option>
|
||||
<option value="8">Dry</option>
|
||||
<option value="9">Sleep</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="thermostat-runningmode">
|
||||
<item-type>Number</item-type>
|
||||
<label>Running Mode</label>
|
||||
<description>The running mode of the thermostat</description>
|
||||
<tags>
|
||||
<tag>Status</tag>
|
||||
<tag>Mode</tag>
|
||||
</tags>
|
||||
<state readOnly="true">
|
||||
<options>
|
||||
<option value="0">Off</option>
|
||||
<option value="3">Cool</option>
|
||||
<option value="4">Heat</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="windowcovering-lift">
|
||||
<item-type>Rollershutter</item-type>
|
||||
<label>Window Covering Lift</label>
|
||||
<description>Sets the window covering level - supporting open/close and up/down type commands
|
||||
</description>
|
||||
<category>Blinds</category>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="fancontrol-fanmode">
|
||||
<item-type>Number</item-type>
|
||||
<label>Fan Mode</label>
|
||||
<description>Sets the fan mode</description>
|
||||
<category>Fan</category>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>Mode</tag>
|
||||
</tags>
|
||||
<state>
|
||||
<options>
|
||||
<option value="0">Off</option>
|
||||
<option value="1">Low</option>
|
||||
<option value="2">Medium</option>
|
||||
<option value="3">High</option>
|
||||
<option value="4">On</option>
|
||||
<option value="5">Auto</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="fancontrol-percent">
|
||||
<item-type>Dimmer</item-type>
|
||||
<label>Fan Speed</label>
|
||||
<description>The current fan speed percentage </description>
|
||||
<category>Fan</category>
|
||||
<tags>
|
||||
<tag>Control</tag>
|
||||
<tag>Speed</tag>
|
||||
</tags>
|
||||
<state min="0" max="100" pattern="%d %%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="temperaturemeasurement-measuredvalue">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Temperature</label>
|
||||
<description>Indicates the temperature reading</description>
|
||||
<category>Temperature</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Temperature</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="relativehumiditymeasurement-measuredvalue">
|
||||
<item-type unitHint="%">Number:Dimensionless</item-type>
|
||||
<label>Humidity</label>
|
||||
<description>Indicates the current relative humidity</description>
|
||||
<category>Humidity</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Humidity</tag>
|
||||
</tags>
|
||||
<state pattern="%.0f %%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="occupancysensing-occupied">
|
||||
<item-type>Switch</item-type>
|
||||
<label>Occupancy</label>
|
||||
<description>Indicates if an occupancy sensor is triggered</description>
|
||||
<category>Presence</category>
|
||||
<tags>
|
||||
<tag>Status</tag>
|
||||
<tag>Presence</tag>
|
||||
</tags>
|
||||
<state readOnly="true"></state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="illuminancemeasurement-measuredvalue">
|
||||
<item-type>Number:Illuminance</item-type>
|
||||
<label>Illumination</label>
|
||||
<description>Indicates the brightness in Lux.</description>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Illuminance</tag>
|
||||
</tags>
|
||||
<state pattern="%d %unit%" readOnly="true"></state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="booleanstate-statevalue">
|
||||
<item-type>Switch</item-type>
|
||||
<label>Boolean State</label>
|
||||
<description>Indicates a boolean, true or false, value</description>
|
||||
<state readOnly="true"></state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="wifinetworkdiagnostics-rssi">
|
||||
<item-type unitHint="dBm">Number:Power</item-type>
|
||||
<label>Signal</label>
|
||||
<description>Wi-Fi signal strength indicator.</description>
|
||||
<category>QualityOfService</category>
|
||||
<tags>
|
||||
<tag>Status</tag>
|
||||
<tag>RSSI</tag>
|
||||
</tags>
|
||||
<state readOnly="true" pattern="%d %unit%"></state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="doorlock-lockstate">
|
||||
<item-type>Switch</item-type>
|
||||
<label>Door Lock State</label>
|
||||
<description>Locks and unlocks the door and maintains the lock state</description>
|
||||
<tags>
|
||||
<tag>Status</tag>
|
||||
<tag>OpenState</tag>
|
||||
</tags>
|
||||
<autoUpdatePolicy>veto</autoUpdatePolicy>
|
||||
</channel-type>
|
||||
|
||||
|
||||
<channel-type id="electricalenergymeasurement-energymeasurmement-energy">
|
||||
<item-type>Number:Energy</item-type>
|
||||
<label>Energy</label>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Energy</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%" readOnly="true"></state>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="electricalpowermeasurement-activepower">
|
||||
<item-type>Number:Power</item-type>
|
||||
<label>Active Power</label>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Power</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="electricalpowermeasurement-activecurrent">
|
||||
<item-type>Number:ElectricCurrent</item-type>
|
||||
<label>Active Current</label>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Current</tag>
|
||||
</tags>
|
||||
<state pattern="%.1f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="electricalpowermeasurement-voltage">
|
||||
<item-type>Number:ElectricPotential</item-type>
|
||||
<label>Voltage</label>
|
||||
<category>Energy</category>
|
||||
<tags>
|
||||
<tag>Measurement</tag>
|
||||
<tag>Voltage</tag>
|
||||
</tags>
|
||||
<state pattern="%.2f %unit%" readOnly="true"/>
|
||||
</channel-type>
|
||||
|
||||
</thing:thing-descriptions>
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="matter"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<bridge-type id="controller">
|
||||
<label>Matter Controller</label>
|
||||
<description>The Matter controller connects to Matter nodes and devices</description>
|
||||
<config-description>
|
||||
<parameter name="nodeId" type="text" required="true">
|
||||
<label>Node ID</label>
|
||||
<description>The Matter Node ID / Number of the Controller bridge. Do not change this once devices have been added.</description>
|
||||
<default>0</default>
|
||||
<advanced>true</advanced>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</bridge-type>
|
||||
|
||||
<bridge-type id="node">
|
||||
<supported-bridge-type-refs>
|
||||
<bridge-type-ref id="controller"/>
|
||||
</supported-bridge-type-refs>
|
||||
<label>Matter Node</label>
|
||||
<description>The Matter node describes a logical node in a Matter Fabric</description>
|
||||
<representation-property>nodeId</representation-property>
|
||||
<config-description>
|
||||
<parameter name="nodeId" type="text" required="true">
|
||||
<label>Node Id</label>
|
||||
<description>The Matter Node Id</description>
|
||||
</parameter>
|
||||
<parameter name="pollInterval" type="integer" required="false" min="0" unit="s">
|
||||
<label>Poll Interval (seconds)</label>
|
||||
<description>The interval to poll in seconds for diagnostic cluster attributes. Set to 0 to disable polling.</description>
|
||||
<advanced>true</advanced>
|
||||
<default>1800</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</bridge-type>
|
||||
|
||||
<thing-type id="endpoint">
|
||||
<supported-bridge-type-refs>
|
||||
<bridge-type-ref id="node"/>
|
||||
</supported-bridge-type-refs>
|
||||
<label>Matter Endpoint</label>
|
||||
<description>A Matter Endpoint represented as a standalone Thing</description>
|
||||
<representation-property>endpointId</representation-property>
|
||||
<config-description>
|
||||
<parameter name="endpointId" type="integer" required="true">
|
||||
<label>Endpoint Id</label>
|
||||
<description>The Matter Endpoint Id</description>
|
||||
</parameter>
|
||||
<parameter name="pollInterval" type="integer" required="false" min="0" unit="s">
|
||||
<label>Poll Interval (seconds)</label>
|
||||
<description>The interval to poll in seconds for diagnostic cluster attributes. Set to 0 to disable polling.</description>
|
||||
<advanced>true</advanced>
|
||||
<default>1800</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
</thing:thing-descriptions>
|
|
@ -98,6 +98,37 @@
|
|||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<!-- Contact Device -->
|
||||
<thing-type id="contact">
|
||||
<supported-bridge-type-refs>
|
||||
<bridge-type-ref id="udp"/>
|
||||
</supported-bridge-type-refs>
|
||||
<label>Contact Sensor</label>
|
||||
<description>Sbus contact sensor device</description>
|
||||
<semantic-equipment-tag>ContactSensor</semantic-equipment-tag>
|
||||
<config-description>
|
||||
<parameter name="subnetId" type="integer">
|
||||
<label>SubnetId</label>
|
||||
<description>Slave subnet id. Can take any value between 1 and 255. 255 for broadcast.</description>
|
||||
<default>1</default>
|
||||
<options>
|
||||
<option value="1">1</option>
|
||||
<option value="255">255</option>
|
||||
</options>
|
||||
</parameter>
|
||||
<parameter name="id" type="integer" required="true">
|
||||
<label>Device ID</label>
|
||||
<description>The ID of the Sbus device</description>
|
||||
</parameter>
|
||||
<parameter name="refresh" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>Refresh interval in seconds</description>
|
||||
<default>30</default>
|
||||
<unitLabel>s</unitLabel>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<!-- Channel Types -->
|
||||
<channel-type id="switch-channel">
|
||||
<item-type>Switch</item-type>
|
||||
|
@ -182,7 +213,28 @@
|
|||
<label>Channel Number</label>
|
||||
<description>The physical channel number on the Sbus device</description>
|
||||
</parameter>
|
||||
<parameter name="enableWhite" type="boolean">
|
||||
<label>Enable White Channel</label>
|
||||
<description>Whether to use the white channel component in addition to RGB</description>
|
||||
<default>true</default>
|
||||
<advanced>true</advanced>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="contact-channel">
|
||||
<item-type>Contact</item-type>
|
||||
<label>Contact State</label>
|
||||
<description>Contact state (OPEN/CLOSED)</description>
|
||||
<category>Contact</category>
|
||||
<state readOnly="true"/>
|
||||
<config-description>
|
||||
<parameter name="channelNumber" type="integer" required="true">
|
||||
<label>Channel Number</label>
|
||||
<description>The physical channel number on the Sbus device</description>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</channel-type>
|
||||
|
||||
|
||||
</thing:thing-descriptions>
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
|
||||
<properties>
|
||||
<property name="user"/>
|
||||
<property name="thingTypeVersion">1</property>
|
||||
</properties>
|
||||
|
||||
<representation-property>clientId</representation-property>
|
||||
|
@ -208,25 +209,25 @@
|
|||
<description>The type of the track currently played track type</description>
|
||||
<state readOnly="true"/>
|
||||
</channel-type>
|
||||
<channel-type id="currentlyPlayedTrackDurationMs" advanced="true">
|
||||
<item-type>Number</item-type>
|
||||
<label>Track Duration (ms)</label>
|
||||
<description>The duration of the currently played track (ms)</description>
|
||||
<state readOnly="true"/>
|
||||
<channel-type id="currentlyPlayedTrackDurationMs">
|
||||
<item-type>Number:Time</item-type>
|
||||
<label>Track Duration</label>
|
||||
<description>The duration of the currently played track</description>
|
||||
<state readOnly="true" pattern="%1$tM:%1$tS"/>
|
||||
</channel-type>
|
||||
<channel-type id="currentlyPlayedTrackProgressMs" advanced="true">
|
||||
<item-type>Number</item-type>
|
||||
<label>Track Progress (ms)</label>
|
||||
<description>The progress of the currently played track (ms)</description>
|
||||
<state readOnly="true"/>
|
||||
<channel-type id="currentlyPlayedTrackProgressMs">
|
||||
<item-type>Number:Time</item-type>
|
||||
<label>Track Progress</label>
|
||||
<description>The progress of the currently played track</description>
|
||||
<state readOnly="true" pattern="%1$tM:%1$tS"/>
|
||||
</channel-type>
|
||||
<channel-type id="currentlyPlayedTrackDuration">
|
||||
<channel-type id="currentlyPlayedTrackDuration" advanced="true">
|
||||
<item-type>String</item-type>
|
||||
<label>Track Duration (m:ss)</label>
|
||||
<description>The duration currently played track formatted (m:ss)</description>
|
||||
<state readOnly="true"/>
|
||||
</channel-type>
|
||||
<channel-type id="currentlyPlayedTrackProgress">
|
||||
<channel-type id="currentlyPlayedTrackProgress" advanced="true">
|
||||
<item-type>String</item-type>
|
||||
<label>Track Progress (m:ss)</label>
|
||||
<description>The progress of the currently played track formatted (m:ss)</description>
|
||||
|
|