update esppilight lib

content of the library is not filtered on 433mhz only
This commit is contained in:
Florian committed 2018-11-28 20:41:37 +01:00
1 parent a275e48ee1
commit 67dd7ac078
1030 files changed
+203335 -116

No files matched your search

@@ -0,0 +1,7 @@
Alarm
=====
.. toctree::
:maxdepth: 1
secudo
@@ -0,0 +1,117 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Secudo
======
.. versionadded:: 8.0
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+-----------------------+----------------+
| **Brand** | **Protocol** |
+-----------------------+----------------+
| Secudo | secudo |
+-----------------------+----------------+
| FlammEx | secudo |
+-----------------------+----------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"alarm": {
"protocol": [ "secudo" ],
"id": [{
"id": 493
}],
"state": "alarm"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 1023 |
+------------------+-----------------+
| state | alarm |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 26 pulses like this:
.. code-block:: console
314 314 628 628 314 314 628 314 628 628 314 314 628 314 628 314 628 314 628 628 314 628 314 314 628 10676
The first pulse is the ``header`` and the last pulse is the ``footer``.
These are meant to identify the pulses as genuine.
We don't use them for further processing.
The next step is to transform the remaining pulses into 12 groups of two pulses (and thereby dropping the ``header`` and ``footer`` pulses):
.. code-block:: guess
314 628
628 314
314 628
314 628
628 314
314 628
314 628
314 628
314 628
628 314
628 314
314 628
If we now look carefully at these groups you can distinguish two types of groups:
#. 314 628
#. 628 314
So the first group is defined by a high 2nd and the second group by a high 1st pulse.
So we take either of these two pulses to define a 0 or a 1.
In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0.
We then get the following output:
.. code-block:: guess
101101111001
The first 10 bits correspond to the setting of the ten dip switches inside the smoke sensor.
If a dip switch is ON, this corresponds to 1 and 0 otherwise.
The meaning of the two last bits is unknown.
When reversing the first 10 bits because the first bits are least signifant we get the smoke sensors ID as binary number
.. code-block:: guess
0111101101
which is 493 as decimal number.
This means that the 2nd, 5th and 10th dip switch is OFF and all others are ON.
@@ -0,0 +1,142 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Elro HE Contact
===============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+------------------+
| **Brand** | **Protocol** |
+------------------+------------------+
| Elro 800 Series | elro_800_contact |
+------------------+------------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"contact": {
"protocol": [ "elro_800_contact" ],
"id": [{
"systemcode": 31,
"unitcode": 0
}],
"state": "closed"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 31 |
+------------------+-----------------+
| code | 0 - 31 |
+------------------+-----------------+
| state | opened / closed |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 148 pulses like this
.. code-block:: guess
320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 960 320 320 960 960 320 320 960 960 320 320 960 960 320 320 960 320 960 320 960 960 320 320 9920
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: guess
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 960 320
320 960 960 320
320 960 960 320
320 960 960 320
320 960 320 960
320 960 960 320
320 9920
If we now look at carefully at these groups you can distinguish two types of groups:
#. 320 960 320 960
#. 320 960 960 320
So the first group is defined by a high 4th pulse and the second group has a low 4th pulse. In this case we say a high 4th pulse means a 1 and a low 4th pulse means a 0. We then get the following output:
.. code-block:: guess
11111 10000 1 0
Each (group) of numbers has a specific meaning:
- SystemCode: 0 till 5
- UnitCode: 6 till 10
- State: 11
- Check: 12 (inverse state)
.. code-block:: guess
11111 10000 1 0
- The ``SystemCode`` is defined as a binary number
- The ``UnitCode`` is defined as a binary number
- The ``State`` defines whether a devices needs to be turned On or Off
- The ``Check`` defines whether a devices needs to be turned On or Off (but is inverse)
So this code represents:
- SystemCode: 31
- UnitCode: 1
- State: Opened
- Check: Opened (inverse state)
Another example:
- SystemCode: 0
- UnitCode: 4
- State: Closed
- Check: Closed (inverse state)
.. code-block:: guess
00000 00100 0 1
Furthermore the protocol filters out false positives by checking if:
- Every 1st bit of the first 12 groups of 4 bits is always LOW (0)
- 2nd bit of the first 12 groups of 4 bits is always HIGH (1)
- 3rd and 4th bit of the first 12 groups of 4 bits are different (NOT EQUAL)
- Bits 49 and 50 are LOW (0) and HIGH (1) respectively (fixed footer)
This makes the protocol more accurate because it will respond less when arctech_old commands are sent.
@@ -0,0 +1,129 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
EV1527 Contact
==============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| EV1527 | ev1527 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"contact": {
"protocol": [ "ev1527" ],
"id": [{
"unitcode": 0
}],
"state": "closed"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 31 |
+------------------+-----------------+
| code | 0 - 31 |
+------------------+-----------------+
| state | opened / closed |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: guess
253 759 759 253 759 253 253 759 253 759 253 759 253 759 253 759 253 759 759 253 253 759 253 759 759 253 759 253 759 253 253 759 253 759 759 253 253 759 759 253 253 759 253 759 759 253 253 8602
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
The first six pulses are the address bits, followed by upto another 6 Address/Data Bits. Address Bits can have three states: 0, 1, F (tri-state). Data Bits have only two states: 0 or 1.
.. code-block:: guess
253 759
759 253
759 253
253 759
253 759
253 759
253 759
253 759
253 759
759 253
253 759
253 759
759 253
759 253
759 253
253 759
253 759
759 253
253 759
759 253
253 759
253 759
759 253
If we now take a careful look at these groups you can distinguish three types of groups:
#. ``253 759``
#. ``759 253``
So the first group is defined by a high second pulse, the second group has a low second pulse. We then get the following output:
.. code-block:: guess
10001111110110001101 0110
Each (group) of numbers has a specific meaning:
- UnitCode: 0 till 20
- State: 20
Bits 21-24 are not used.
.. code-block:: guess
10001111110110001101 0
- The ``UnitCode`` is defined as a binary number
- The ``State`` defines whether a sensor state is opened or closed
So this code represents:
- UnitCode: 589197
- State: opened
@@ -0,0 +1,10 @@
Contact
=======
.. toctree::
:maxdepth: 1
kaku
elro
sc2262
ev1527
@@ -0,0 +1,147 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
KlikAanKlikUit
==============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| KlikAanKlikUit | kaku_contact |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"contact": {
"protocol": [ "kaku_contact" ],
"id": [{
"id": 100,
"unit": 0
}],
"state": "closed"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 67108863 |
+------------------+-----------------+
| code | 0 - 15 |
+------------------+-----------------+
| state | opened / closed |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 148 pulses like this
.. code-block:: guess
294 2646 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 1176 294 294 294 1176 294 294 294 1176 294 294 294 294 294 1176 294 1176 294 294 294 1176 294 294 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 1176 294 294 294 294 294 1176 294 294 294 1176 294 1176 294 294 294 294 294 1176 294 1176 294 294 294 1176 294 294 294 1176 294 294 294 9996
The first 2 pulses are the ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 36 groups of 4 pulses (and thereby dropping the ``header`` and ``footer`` pulses).
.. code-block:: guess
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 1176 294 294
294 1176 294 294
294 1176 294 294
294 294 294 1176
294 1176 294 294
294 1176 294 294
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 1176 294 294
294 294 294 1176
294 294 294 1176
294 1176 294 294
294 294 294 1176
294 1176 294 294
294 1176 294 294
294 1176 294 294
If we now look at carefully at these groups you can distinguish two types of groups:
#. 294 1176 294 294
#. 294 294 294 1176
So the first group is defined by a high 2nd and the second group has a high 4th pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: guess
001010111011001001000100100110010111
Each (group) of numbers has a specific meaning:
- ID: 0 till 25
- All: 26
- State: 27
- Unit: 28 till 31
- Unknown: 32 till 35
.. code-block:: guess
00101011101100100100010010 0 1 1001 0111
- The ``ID`` is defined as a binary number
- The ``All`` tells us if a code was meant for all devices with the same ID
- The ``State`` defines whether a devices is opened or closed
- The ``Unit`` is also defined as a binary number
- The ``Unknown`` is also defined as a binary number(bits are missing in the closed state)
So this code represents:
- ID: 11454738
- All: Single
- State: Opened
- Unit: 9
@@ -0,0 +1,158 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
SC2262 Contact
==============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| SC2262 | sc2262 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"contact": {
"protocol": [ "sc2262" ],
"id": [{
"systemcode": 31,
"unitcode": 0
}],
"state": "closed"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 31 |
+------------------+-----------------+
| code | 0 - 31 |
+------------------+-----------------+
| state | opened / closed |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: guess
432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1728 1296 432 432 1296 432 1296 432 1296 1296 432 1296 432 1296 432 1296 432 1296 432 432 13392
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
The first six pulses are the address bits, followed by upto another 6 Address/Data Bits. Address Bits can have three states: 0, 1, F (tri-state). Data Bits have only two states: 0 or 1.
.. code-block:: guess
432 1296 1296 432
432 1296 1296 432
432 1296 1296 432
432 1296 1296 432
432 1296 1296 432
432 1296 1296 432
432 1296 1296 432
432 1728 1296 432
432 1296 432 1296
432 1296 1296 432
1296 432 1296 432
1296 432 1296 432
432 14688
If we now take a careful look at these groups you can distinguish three types of groups:
#. ``432 1296 432 1296`` - Logical Zero
#. ``1296 432 1296 432`` - Logical One
#. ``432 1296 1296 432`` - Logical Tri-State
.. code-block:: guess
FFFFFF FF0F11
Each (group) of numbers has a specific meaning:
- SystemCode: 0 till 5
- UnitCode: 6 till 10
- State: 11
Depending on the device the Unit Code my be shorter in order to provide more bits for state / data value conditions.
.. code-block:: guess
FFFFFF FF0F11
- The SystemCode is defined as a binary number
- The UnitCode is defined as a binary number
- The State defines whether a devices state is considered to be opened or closed
So this code represents:
- SystemCode: 0
- UnitCode: 2
- State: Closed
.. code-block:: json
{
"devices": {
"window": {
"protocol": [ "sc2262" ],
"id": [{
"systemcode": 0,
"unitcode": 8
}],
"state": "closed"
}
},
"gui": {
"window": {
"name": "Bedroom",
"group": [ "Windows" ],
"media": [ "all" ]
}
}
}
This code sets the state to opened:
.. code-block:: console
pilight-send -p raw -c "432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1728 1296 432 432 1296 432 1296 432 1296 1296 432 1296 432 1296 432 1296 432 1296 432 432 14680"
This code sets the state to closed:
.. code-block:: console
pilight-send -p raw -c "432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1296 1296 432 432 1728 1296 432 432 1296 432 1296 432 1296 1296 432 1296 432 1296 432 432 1296 432 1296 432 14681"
@@ -0,0 +1,223 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+--------------+
| **Brand** | **Protocol** |
+----------------------+--------------+
| KlikAanKlikUit | kaku_dimmer |
+----------------------+--------------+
| Nexa WMR-252 | kaku_dimmer |
+----------------------+--------------+
| Intertechno ITDM-250 | kaku_dimmer |
+----------------------+--------------+
| Intertechno ITDM-150 | kaku_dimmer |
+----------------------+--------------+
| Intertechno ITL-210 | kaku_dimmer |
+----------------------+--------------+
| Intertechno ITL-250 | kaku_dimmer |
+----------------------+--------------+
| Intertechno ITLR-300 | kaku_dimmer |
+----------------------+--------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-u --unit=unit control a device with this unit code
-i --id=id control a device with this id
-a --all send command to all devices with this id
-d --dimlevel=dimlevel send a specific dimlevel
-l --learn send multiple streams so dimmer can learn
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "kaku_dimmer" ],
"id": [{
"id": 100,
"unit": 0
}],
"state": "off",
"dimlevel": 15
}
},
"gui": {
"dimmer": {
"name": "Dimmer",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 67108863 |
+------------------+-----------------+
| code | 0 - 31 |
+------------------+-----------------+
| dimlevel | 0 - 15 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| dimlevel-minimum | 0 | number | Minimum dimlevel |
+--------------------+-------------+------------+-------------------------------------------------+
| dimlevel-maximum | 15 | number | Maximum dimlevel |
+--------------------+-------------+------------+-------------------------------------------------+
| all | 0 | 1 or 0 | | If specified this will trigger the "group" |
| | | | | function of the advanced remotes and trigger |
| | | | | all registered devices for the given unitcode |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Notes
If you want your switch to learn new codes, you can use the following command:
.. code-block:: console
pilight-send -p kaku_dimmer -i 1 -u 1 -t -l
If you want your switch to remove a learned code, you can use the following command:
.. code-block:: console
pilight-send -p kaku_dimmer -i 1 -u 1 -f -l
.. rubric:: Protocol
This protocol sends 148 pulses like this
.. code-block:: console
286 2825 286 201 289 1337 287 209 283 1351 287 204 289 1339 288 207 288 1341 289 207 281 1343 284 205 292 1346 282 212 283 1348 282 213 279 1352 282 211 281 1349 282 210 283 1347 284 211 288 1348 281 211 285 1353 278 213 280 1351 280 232 282 1356 279 213 285 1351 276 215 285 1348 277 216 278 1359 278 216 279 1353 272 214 283 1358 276 216 276 1351 278 214 284 1357 275 217 276 1353 270 217 277 1353 272 220 277 1351 275 220 272 1356 275 1353 273 224 277 236 282 1355 272 1353 273 233 273 222 268 1358 270 219 277 1361 274 218 280 1358 272 1355 271 243 273 222 268 1358 270 219 277 1361 274 218 280 1358 272 1355 271 243 251 11302
The first 2 pulses are the ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 36 groups of 4 pulses (and thereby dropping the ``header`` and ``footer`` pulses).
.. code-block:: console
286 201 289 1337
287 209 283 1351
287 204 289 1339
288 207 288 1341
289 207 281 1343
284 205 292 1346
282 212 283 1348
282 213 279 1352
282 211 281 1349
282 210 283 1347
284 211 288 1348
281 211 285 1353
278 213 280 1351
280 232 282 1356
279 213 285 1351
276 215 285 1348
277 216 278 1359
278 216 279 1353
272 214 283 1358
276 216 276 1351
278 214 284 1357
275 217 276 1353
270 217 277 1353
272 220 277 1351
275 220 272 1356
275 1353 273 224
277 236 282 1353
272 1353 273 277
273 222 268 1358
270 219 277 1361
274 218 280 1358
272 1355 271 243
273 222 268 1358
270 219 277 1361
274 218 280 1358
272 1355 271 243
If we now look at carefully at these groups you can distinguish three types of groups:
- ``272 1355 271 243``
- ``274 218 280 1358``
- ``277 236 282 277``
So the first group is defined by a high 2nd, the second group has a high 4th pulse, and the third group has a low 2nd and a low 4th pulse. This third group is a special one but not much of a use while receiving. However, it must be taken care of when sending arctech dimmer codes. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: console
000000000000000000000000010100010001
Each (group) of numbers has a specific meaning:
- ID: 0 till 25
- All: 26
- Check: 27
- Unit: 28 till 31
- Dimlevel: 32 till 35
.. code-block:: console
00000000000000000000000001 0 1 0001 0001
- The ``ID`` is defined as a binary number
- The ``All`` special pulse to identify the code was meant for a dimmer
- The ``Check`` defines whether a devices needs to be turned On or Off
- The ``Unit`` is also defined as a binary number
- The ``Dimlevel`` defines the specific dimlevel
So this code represents:
- ID: 1
- All: Single
- Check: Valid
- Unit: 1
- Dimlevel: 1
Another example:
- ID: 123456
- All: All
- Check: Valid
- Unit: 15
- Dimlevel: 8
.. code-block:: console
000000000111100010010000001011111000
@@ -0,0 +1,9 @@
Dimmers
=======
.. toctree::
:maxdepth: 1
intertechno
kaku
nexa
@@ -0,0 +1,4 @@
Intertechno
===========
.. include:: _kaku.rst
@@ -0,0 +1,4 @@
KlikAanKlikUit
==============
.. include:: _kaku.rst
@@ -0,0 +1,4 @@
Nexa WMR-252
============
.. include:: _kaku.rst
@@ -0,0 +1,13 @@
433.92Mhz
=========
.. toctree::
:maxdepth: 3
alarm/index
contact/index
dimmer/index
motion/index
screen/index
weather/index
switch/index
@@ -0,0 +1,127 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
EV1527 Motion
=============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| EV1527 | ev1527 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"contact": {
"protocol": [ "ev1527" ],
"id": [{
"unitcode": 0
}],
"state": "closed"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| unitcode | 0 - 1048575 |
+------------------+-----------------+
| state | opened / closed |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: guess
253 759 759 253 759 253 253 759 253 759 253 759 253 759 253 759 253 759 759 253 253 759 253 759 759 253 759 253 759 253 253 759 253 759 759 253 253 759 759 253 253 759 253 759 759 253 253 8602
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
The first six pulses are the address bits, followed by upto another 6 Address/Data Bits. Address Bits can have three states: 0, 1, F (tri-state). Data Bits have only two states: 0 or 1.
.. code-block:: guess
253 759
759 253
759 253
253 759
253 759
253 759
253 759
253 759
253 759
759 253
253 759
253 759
759 253
759 253
759 253
253 759
253 759
759 253
253 759
759 253
253 759
253 759
759 253
If we now take a careful look at these groups you can distinguish three types of groups:
#. ``253 759``
#. ``759 253``
So the first group is defined by a high second pulse, the second group has a low second pulse. We then get the following output:
.. code-block:: guess
10001111110110001101 0110
Each (group) of numbers has a specific meaning:
- UnitCode: 0 till 20
- State: 20
Bits 21-24 are not used.
.. code-block:: guess
10001111110110001101 0
- The ``UnitCode`` is defined as a binary number
- The ``State`` defines whether a sensor state is opened or closed
So this code represents:
- UnitCode: 589197
- State: opened
@@ -0,0 +1,8 @@
Motion
=======
.. toctree::
:maxdepth: 1
ev1527
kaku
@@ -0,0 +1,150 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
KlikAanKlikUit
==============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| KlikAanKlikUit | kaku_motion |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"contact": {
"protocol": [ "kaku_motion" ],
"id": [{
"id": 100,
"unit": 0
}],
"state": "on"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| unitcode | 0 - 67108863 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 148 pulses like this
.. code-block:: guess
286 2825 286 201 289 1337 287 209 283 1351 287 204 289 1339 288 207 288 1341 289 207 281 1343 284 205 292 1346 282 212 283 1348 282 213 279 1352 282 211 281 1349 282 210 283 1347 284 211 288 1348 281 211 285 1353 278 213 280 1351 280 232 282 1356 279 213 285 1351 276 215 285 1348 277 216 278 1359 278 216 279 1353 272 214 283 1358 276 216 276 1351 278 214 284 1357 275 217 276 1353 270 217 277 1353 272 220 277 1351 275 220 272 1356 275 1353 273 224 277 236 282 1355 272 1353 273 233 273 222 268 1358 270 219 277 1361 274 218 280 1358 272 1355 271 243 251 11302
The first 2 pulses are the ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 36 groups of 4 pulses (and thereby dropping the ``header`` and ``footer`` pulses).
.. code-block:: guess
286 201 289 1337
287 209 283 1351
287 204 289 1339
288 207 288 1341
289 207 281 1343
284 205 292 1346
282 212 283 1348
282 213 279 1352
282 211 281 1349
282 210 283 1347
284 211 288 1348
281 211 285 1353
278 213 280 1351
280 232 282 1356
279 213 285 1351
276 215 285 1348
277 216 278 1359
278 216 279 1353
272 214 283 1358
276 216 276 1351
278 214 284 1357
275 217 276 1353
270 217 277 1353
272 220 277 1351
275 220 272 1356
275 1353 273 224
277 236 282 1355
272 1353 273 233
273 222 268 1358
270 219 277 1361
274 218 280 1358
272 1355 271 243
If we now look at carefully at these groups you can distinguish two types of groups:
#. 272 1355 271 243
#. 274 218 280 1358
So the first group is defined by a high 2nd and the second group has a high 4th pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: guess
00000000000000000000000001010001
Each (group) of numbers has a specific meaning:
- ID: 0 till 25(Convert the binary code to decimal to get the correct id)
- All: 26
- State: 27
- Unit: 28 till 31
.. code-block:: guess
00000000000000000000000001 0 1 0001
- The ``ID`` is defined as a binary number
- The ``All`` tells us if a code was meant for all devices with the same ID
- The ``State`` defines whether a devices is opened or closed
- The ``Unit`` is also defined as a binary number
So this code represents:
- ID: 1
- All: Single
- State: On
- Unit: 1
Another example:
- ID: 123456
- All: All
- State: Off
- Unit: 15
.. code-block:: guess
00000000011110001001000000101111
@@ -0,0 +1,187 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| KlikAanKlikUit | kaku_screen |
+------------------+--------------+
| DI-O (Chacon) | dio_screen |
+------------------+--------------+
.. rubric:: Sender Arguments
.. code-block:: console
-t --up send an up signal
-f --down send an down signal
-u --unit=unit control a device with this unit code
-i --id=id control a device with this id
-a --all send command to all devices with this id
-l --learn send multiple streams so screen can learn
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"screen": {
"protocol": [ "kaku_screen" ],
"id": [{
"id": 100,
"unit": 0
}],
"state": "down"
}
},
"gui": {
"screen": {
"name": "Screen",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 67108863 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| readonly | 0 | 1 or 0 | Disable controlling this device from the GUIs |
+------------------+-------------+------------+-----------------------------------------------+
| confirm | 0 | 1 or 0 | Ask for confirmation when switching device |
+------------------+-------------+------------+-----------------------------------------------+
.. rubric:: Notes
If you want your switch to learn new codes, you can use the following command:
.. code-block:: console
pilight-send -p kaku_screen -i 1 -u 1 -t -l
If you want your switch to remove a learned code, you can use the following command:
.. code-block:: console
pilight-send -p kaku_screen -i 1 -u 1 -f -l
.. rubric:: Protocol
This protocol sends 132 pulses like this
.. code-block:: guess
286 2825 286 201 289 1337 287 209 283 1351 287 204 289 1339 288 207 288 1341 289 207 281 1343 284 205 292 1346 282 212 283 1348 282 213 279 1352 282 211 281 1349 282 210 283 1347 284 211 288 1348 281 211 285 1353 278 213 280 1351 280 232 282 1356 279 213 285 1351 276 215 285 1348 277 216 278 1359 278 216 279 1353 272 214 283 1358 276 216 276 1351 278 214 284 1357 275 217 276 1353 270 217 277 1353 272 220 277 1351 275 220 272 1356 275 1353 273 224 277 236 282 1355 272 1353 273 233 273 222 268 1358 270 219 277 1361 274 218 280 1358 272 1355 271 243 251 11302
The first 2 pulses are the ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 36 groups of 4 pulses (and thereby dropping the ``header`` and ``footer`` pulses).
.. code-block:: guess
286 201 289 1337
287 209 283 1351
287 204 289 1339
288 207 288 1341
289 207 281 1343
284 205 292 1346
282 212 283 1348
282 213 279 1352
282 211 281 1349
282 210 283 1347
284 211 288 1348
281 211 285 1353
278 213 280 1351
280 232 282 1356
279 213 285 1351
276 215 285 1348
277 216 278 1359
278 216 279 1353
272 214 283 1358
276 216 276 1351
278 214 284 1357
275 217 276 1353
270 217 277 1353
272 220 277 1351
275 220 272 1356
275 1353 273 224
277 236 282 1355
272 1353 273 233
273 222 268 1358
270 219 277 1361
274 218 280 1358
272 1355 271 243
If we now look at carefully at these groups you can distinguish two types of groups:
#. 272 1355 271 243
#. 274 218 280 1358
So the first group is defined by a high 2nd and the second group has a high 4th pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: guess
00000000000000000000000001010001
Each (group) of numbers has a specific meaning:
- ID: 0 till 25
- All: 26
- State: 27
- Unit: 28 till 31
.. code-block:: guess
00000000000000000000000001 0 1 0001
- The ``ID`` is defined as a binary number
- The ``All`` tells us if a code was meant for all devices with the same ID
- The ``State`` defines whether a devices is opened or closed
- The ``Unit`` is also defined as a binary number
So this code represents:
- ID: 1
- All: Single
- State: Up
- Unit: 1
Another example:
- ID: 123456
- All: All
- State: Down
- Unit: 15
.. code-block:: guess
00000000011110001001000000101111
@@ -0,0 +1,4 @@
D-IO (Chacon)
=============
.. include:: _kaku.rst
@@ -0,0 +1,9 @@
Screens
=======
.. toctree::
:maxdepth: 1
kaku
d_io
kaku_old
@@ -0,0 +1,4 @@
KlikAanKlikUit
==============
.. include:: _kaku.rst
@@ -0,0 +1,173 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
KlikAanKlikUit (Old)
====================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+------------------+
| **Brand** | **Protocol** |
+------------------+------------------+
| KlikAanKlikUit | kaku_screen_old |
+------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
-t --up send an up signal
-f --down send an down signal
-u --unit=unit control a device with this unit code
-i --id=id control a device with this id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"screen": {
"protocol": [ "kaku_screen_old" ],
"id": [{
"id": 16,
"unit": 0
}],
"state": "down"
}
},
"gui": {
"screen": {
"name": "Screen",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 31 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| readonly | 0 | 1 or 0 | Disable controlling this device from the GUIs |
+------------------+-------------+------------+-----------------------------------------------+
| confirm | 0 | 1 or 0 | Ask for confirmation when switching device |
+------------------+-------------+------------+-----------------------------------------------+
.. rubric:: Notes
The old KlikAanKlikUit devices work setting two wheels: group (0-H) and device number (0-16). To control a device from pilight you need to send the correct group and unit id, these do not correspond 1:1.
A-1 on the unit corresponds with unit 0 id 0 in pilight A-2 on the unit corresponds with unit 0 id 1 in pilight etc.
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: guess
295 1180 295 1180 295 1180 1180 295 295 1180 295 1180 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 1180 295 1180 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 11210
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: guess
295 1180 295 1180
295 1180 1180 295
295 1180 295 1180
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 1180 295 1180
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 11210
If we now look at carefully at these groups you can distinguish two types of groups:
#. 295 1180 1180 295
#. 295 1180 295 1180
So the first group is defined by a high 3th pulse and the second group has a low 3rd pulse. In this case we say a high 3rd pulse means a 0 and a high 3rd pulse means a 1. We then get the following output:
.. code-block:: guess
10100 00010 0 0
Each (group) of numbers has a specific meaning:
- Unit: 0 till 5 (inversed)
- ID: 6 till 10 (inversed)
- Fixed: 11 (always 0)
- State: 12 (inversed)
.. code-block:: guess
10100 00010 0 0
- The ``Unit`` is defined as a binary number
- The ``ID`` is defined as a binary number
- The ``Fixed`` is always 0
- The ``State`` defines whether a devices needs to be go Up or Down
So this code represents:
- Unit: 20
- ID: 1
- Fixed: always 0
- State: Down
Another example:
- Unit: 0
- ID: 4
- Fixed: always 0
- State: Up
.. code-block:: guess
00000 00100 0 1
Furthermore the protocol filters out false positives by checking if:
#. Every 1st bit of the first 12 groups of 4 bits is always LOW (0)
#. 2nd bit of the first 12 groups of 4 bits is always HIGH (1)
#. 3rd and 4th bit of the first 12 groups of 4 bits are different (NOT EQUAL)
#. Bits 49 and 50 are LOW (0) and HIGH (1) respectively (fixed footer)
This makes the protocol more accurate because it will respond rarely now when sartano commands are sent.
@@ -0,0 +1,178 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Elro 800 Series | elro_800_switch |
+----------------------+------------------+
| Brennenstuhl | brennenstuhl |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-s --systemcode=systemcode control a device with this systemcode
-u --unitcode=unitcode control a device with this unitcode
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "elro_800_switch" ],
"id": [{
"systemcode": 31,
"unitcode": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 0 - 1023 |
+------------------+-----------------+
| unitcode | 0 - 31 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. Note:: Workaround for 800 Series
1. Set your remote DIP switches like this off|off|on|off (AB660 Code) if possible
2. Now look for systemcode and unitcode with pilight-receive
3. Setup the config.json with the received results
4. Get the switches in learning mode and push the buttons on the webgui accordingly to the unit.
5. This should work until there is a protocol for the 800 series.
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 960 320 320 960 960 320 320 960 960 320 320 960 960 320 320 960 320 960 320 960 960 320 320 9920
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 960 320
320 960 960 320
320 960 960 320
320 960 960 320
320 960 320 960
320 960 960 320
320 9920
If we now look at carefully at these groups you can distinguish three types of groups:
- ``320 960 320 960``
- ``320 960 960 320``
So the first group is defined by a high 4th pulse and the second group has a low 4th pulse. In this case we say a high 4th pulse means a 1 and a low 4th pulse means a 0. We then get the following output:
.. code-block:: console
11111 10000 1 0
Each (group) of numbers has a specific meaning:
- SystemCode: 0 till 5
- UnitCode: 6 till 10
- State: 11
- Check: 12 (inverse state)
- The ``SystemCode`` is defined as a binary number
- The ``UnitCode`` is defined as a binary number
- The ``State`` defines whether a devices needs to be turned On or Off
- The ``Check`` defines whether a devices needs to be turned On or Off (but is inverse)
So this code represents:
- SystemCode: 31
- UnitCode: 1
- State: On
- Check: On (inverse state)
.. code-block:: console
00000 00100 0 1
Another example:
- SystemCode: 0
- UnitCode: 4
- State: Off
- Check: Off (inverse state)
Furthermore the protocol filters out false positives by checking if:
- Every 1st bit of the first 12 groups of 4 bits is always LOW (0)
- 2nd bit of the first 12 groups of 4 bits is always HIGH (1)
- 3rd and 4th bit of the first 12 groups of 4 bits are different (NOT EQUAL)
- Bits 49 and 50 are LOW (0) and HIGH (1) respectively (fixed footer)
This makes the protocol more accurate because it will respond less when arctech_old commands are sent.
The numeric mapping of a button on the remote control is binary counted, as follows:
- A = 1
- B = 2
- C = 4
- D = 8
- E = 16
All possible combinations of dip switches on the socket can be used with pilight. For instance, if you set the switches that correspond to A and E, the socket will react on unit code “A+E”: 17 (1+16). By pushing A and E simultaneously on the remote, you can also switch the corresponding socket. However, this may also trigger sockets that are listening to A and/or E if you don't push both buttons at exactly the same time.
@@ -0,0 +1,208 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+--------------------+
| **Brand** | **Protocol** |
+----------------------+--------------------+
| CoCo Technologies | coco_switch |
+----------------------+--------------------+
| D-IO (Chacon) | dio_switch |
+----------------------+--------------------+
| Intertechno | intertechno_switch |
+----------------------+--------------------+
| KlikAanKlikUit | kaku_switch |
+----------------------+--------------------+
| Nexa | nexa_switch |
+----------------------+--------------------+
| Rev Ritter 8341LC | intertechno_switch |
+----------------------+--------------------+
| Rev Ritter 8342LC | intertechno_switch |
+----------------------+--------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t --on send an on signal
-f --off send an off signal
-u --unit=unit control a device with this unit code
-i --id=id control a device with this id
-a --all send command to all devices with this id
-l --learn send multiple streams so switch can learn
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "kaku_switch" ],
"id": [{
"id": 100,
"unit": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 67108863 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| all | 0 | 1 or 0 | | If specified this will trigger the "group" |
| | | | | function of the advanced remotes and trigger |
| | | | | all registered devices for the given unitcode |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Notes
If you want your switch to learn new codes, you can use the following command:
.. code-block:: console
pilight-send -p kaku_switch -i 1 -u 1 -t -l
If you want your switch to remove a learned code, you can use the following command:
.. code-block:: console
pilight-send -p kaku_switch -i 1 -u 1 -f -l
.. rubric:: Protocol
This protocol sends 132 pulses like this
.. code-block:: console
286 2825 286 201 289 1337 287 209 283 1351 287 204 289 1339 288 207 288 1341 289 207 281 1343 284 205 292 1346 282 212 283 1348 282 213 279 1352 282 211 281 1349 282 210 283 1347 284 211 288 1348 281 211 285 1353 278 213 280 1351 280 232 282 1356 279 213 285 1351 276 215 285 1348 277 216 278 1359 278 216 279 1353 272 214 283 1358 276 216 276 1351 278 214 284 1357 275 217 276 1353 270 217 277 1353 272 220 277 1351 275 220 272 1356 275 1353 273 224 277 236 282 1355 272 1353 273 233 273 222 268 1358 270 219 277 1361 274 218 280 1358 272 1355 271 243 251 11302
The first 2 pulses are the ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 32 groups of 4 pulses (and thereby dropping the ``header`` and ``footer`` pulses).
.. code-block:: console
286 201 289 1337
287 209 283 1351
287 204 289 1339
288 207 288 1341
289 207 281 1343
284 205 292 1346
282 212 283 1348
282 213 279 1352
282 211 281 1349
282 210 283 1347
284 211 288 1348
281 211 285 1353
278 213 280 1351
280 232 282 1356
279 213 285 1351
276 215 285 1348
277 216 278 1359
278 216 279 1353
272 214 283 1358
276 216 276 1351
278 214 284 1357
275 217 276 1353
270 217 277 1353
272 220 277 1351
275 220 272 1356
275 1353 273 224
277 236 282 1355
272 1353 273 233
273 222 268 1358
270 219 277 1361
274 218 280 1358
272 1355 271 243
If we now look at carefully at these groups you can distinguish two types of groups:
- ``272 1355 271 243``
- ``274 218 280 1358``
So the first group is defined by a high 2nd and the second group has a high 4th pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: console
00000000000000000000000001010001
Each (group) of numbers has a specific meaning:
- ID: 0 till 25(Convert the binary code to decimal to get the correct id)
- All: 26
- State: 27
- Unit: 28 till 31
.. code-block:: console
00000000000000000000000001 0 1 0001
- The ``ID`` is defined as a binary number
- The ``All`` tells us if a code was meant for all devices with the same ID
- The ``State`` defines whether a devices needs to be turned On or Off
- The ``Unit`` is also defined as a binary number
So this code represents:
- ID: 1
- All: Single
- State: On
- Unit: 1
Another example:
- ID: 123456
- All: All
- State: Off
- Unit: 15
.. code-block:: console
00000000011110001001000000101111
@@ -0,0 +1,201 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Cogex | cogex |
+----------------------+------------------+
| Dúwi Terminal | duwi |
+----------------------+------------------+
| Eurodomest | kaku_switch_old |
+----------------------+------------------+
| Intertechno | intertechno_old |
+----------------------+------------------+
| Dúwi Terminal | duwi |
+----------------------+------------------+
| KlikAanKlikUit | kaku_switch_old |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t --on send an on signal
-f --off send an off signal
-u --unit=unit control a device with this unit code
-i --id=id control a device with this id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "kaku_switch_old" ],
"id": [{
"id": 10,
"unit": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 31 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Notes
The old KlikAanKlikUit devices work setting two wheels: group (0-H) and device number (0-16). To control a device from pilight you need to send the correct group and unit id, these do not correspond 1:1.
A-1 on the unit corresponds with unit 0 id 0 in pilight A-2 on the unit corresponds with unit 0 id 1 in pilight etc.
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
295 1180 295 1180 295 1180 1180 295 295 1180 295 1180 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 1180 295 1180 295 1180 1180 295 295 1180 1180 295 295 1180 1180 295 295 11210
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
295 1180 295 1180
295 1180 1180 295
295 1180 295 1180
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 1180 295 1180
295 1180 1180 295
295 1180 1180 295
295 1180 1180 295
295 11210
If we now look at carefully at these groups you can distinguish two types of groups:
- ``295 1180 1180 295``
- ``295 1180 295 1180``
So the first group is defined by a high 3th pulse and the second group has a low 3rd pulse. In this case we say a high 3rd pulse means a 0 and a low 3rd pulse means a 1. We then get the following output:
.. code-block:: console
10100 00010 0 0
Each (group) of numbers has a specific meaning:
- Unit: 0 till 5 (inversed)
- ID: 6 till 10 (inversed)
- Fixed: 11 (always 0)
- State: 12 (inversed)
.. code-block:: console
10100 00010 0 0
- The ``Unit`` is defined as a binary number
- The ``ID`` is defined as a binary number
- The ``Fixed`` is always 0
- The ``State`` defines whether a devices needs to be turned On or Off
So this code represents:
- Unit: 20
- ID: 1
- Fixed: always 0
- State: Off
Another example:
- Unit: 0
- ID: 4
- Fixed: always 0
- State: On
.. code-block:: console
00000 00100 0 1
Furthermore the protocol filters out false positives by checking if:
- Every 1st bit of the first 12 groups of 4 bits is always LOW (0)
- 2nd bit of the first 12 groups of 4 bits is always HIGH (1)
- 3rd and 4th bit of the first 12 groups of 4 bits are different (NOT EQUAL)
- Bits 49 and 50 are LOW (0) and HIGH (1) respectively (fixed footer)
This makes the protocol more accurate because it will respond rarely now when sartano commands are sent.
.. note:: **Eurodomest**
The Eurodomest (Intertechno) switches listens to the kaku_switch_old protocol, but the remote doesn't send using the kaku_switch_old protocol. When using pilight-receive, the following protocols are received using the remote:
- elro_800_contact
- elro_800_switch
- ehome
- cleverwatts
To use the Eurodomest switches with the kaku_switch_old protocol on pilight, the following steps have to be performed:
- Hold the On/Off button until the LED flashes.
- In a terminal window do:
.. code-block:: console
pilight-send -p kaku_switch_old -i <choose your own ID between 1~30> -u 0 -t
- If everything is Ok the switch is programmed.
- For wall-plug 2 & 3 change the value -u
@@ -0,0 +1,166 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Rising Sun RSL366 | rsl366 |
+----------------------+------------------+
| Brennenstuhl | brennenstuhl |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-s --systemcode=systemcode control a device with this systemcode
-u --programcode=programcode control a device with this programcode
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"switch": {
"protocol": [ "promax" ],
"id": [{
"systemcode": 4,
"programcode": 1
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 0 - 4 |
+------------------+-----------------+
| unitcode | 0 - 4 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. note:: **RSL366**
The RSL366 switches come with two dials, one selecting the Systemcode (1 to 4) and the Programcode (1 to 4). The systemcode allows one remote to control up to 16 switches. The systemcode parameter designates the dial on top of the back side of the switch, and the small lever on the back of the remote. The programcode parameter designates the lower dial on the back of the switch, and the individual buttons on the face of the remote. So if your switch has the higher dial set to 4, and the lower one set to 1, you should use:
.. code-block:: console
systemcode: 4
programcode: 1
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
390 1170 1170 390 390 1170 1170 390 390 1170 1170 390 390 1170 390 1170 390 1170 390 1170 390 1170 1170 390 390 1170 1170 390 390 1170 1170 390 390 1170 1170 390 390 1170 1170 390 390 1170 1170 390 390 1170 1170 390 390 13260
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 390 1170
390 1170 390 1170
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
If we now look at carefully at these groups you can distinguish three types of groups:
- ``390 1170 1170 390``
- ``390 1170 390 1170``
#. The first group is defined by a low 1st and low 4th pulse, and we call it low.
#. The second group has a high 2nd and 4th pulse, and we call it high.
We then get the following output:
.. code-block:: console
LLLH HLLL LL LL
All H's can be translated to 1. All L's can be translated to 0.
Each (group) of numbers has a specific meaning:
- Systemcode: 1 till 4
- Programcode: 5 till 8
- 9 to 11 are always low and don't convey any information
- State: 12 (state)
.. code-block:: console
0001 1000 000 0
- The ``SystemCode`` is defined as position of the pulse group that bears the **high** signal in the first grouping (i.e. if the third pulse group is high then systemcode is 3)
- The ``ProgramCode`` is defined as the position of the pulse group that bears the **high** signal in the second grouping (i.e. if the second pulse group is high then systemcode is 2)
- The ``State`` defines whether a devices needs to be turned On or Off. If it bears the **high** pulse group - the device must be turned off, if it bears the **low** pulse group it must be turned on
So this code represents:
- SystemCode: 4
- ProgramCode: 1
- State: On
Another example:
- Unit: 1
- ID: 3
- State: Off
.. code-block:: console
1000 0010 000 1
@@ -0,0 +1,221 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Beamish
=======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Beamish 4-AE4 | beamish_switch |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t --on send a toggle state signal to the device
-f --off send a toggle state signal to the device
-i --id=id control the device with this system id (1 ... 65535)
-u --unit=unit control the device with this unit code (1 ... 4)
-a --all send on/off command to all device units belonging to this system id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "beamish_switch" ],
"id": [{
"id": 8,
"unit": 2
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 1 - 65535 |
+------------------+-----------------+
| unit | 1 - 4 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 323 1292 1292 323 323 1292 323 1292 323 1292 323 1292 323 1292 1292 323 1292 323 323 1292 323 1292 323 1292 323 1292 323 10982
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
323 1292
1292 323
323 1292
323 1292
323 1292
323 1292
323 1292
1292 323
1292 323
323 1292
323 1292
323 1292
323 1292
323 10982
If we now look at carefully at these groups you can distinguish three types of groups:
- ``323 1292``
- ``1292 323``
The 1st group is defined by a short-long sequence (logical 0) The 2nd group is defined by a long-short sequence (logical 1):
.. code-block:: console
000000000000100000110000
We can group the sequence of bits into the following groups A and B:
.. code-block:: console
AAAAAAAAAAAAAAAA BBBB BBBB
0000000000001000 0011 0000
Each of the groups of bits (A and B) has a specific meaning:
+-----------+-----------+-----------------+------------+-----------------+
| **Group** | **Bit #** | **Config name** | **Range** | **Description** |
+-----------+-----------+-----------------+------------+-----------------+
| A | 1 to 16 | id | 1 to 65535 | SystemCode id |
+-----------+-----------+-----------------+------------+-----------------+
| B | 17 to 24 | unit | 1 to 4 | ButtonCode unit |
+-----------+-----------+-----------------+------------+-----------------+
The protocol driver creates the binary presentation as required by the device
+------+------+-------+-------------------------------+
| 1100 | 0000 | -u 1 | Button A Toggle device status |
+------+------+-------+-------------------------------+
| 0011 | 0000 | -u 2 | Button B Toggle device status |
+------+------+-------+-------------------------------+
| 0000 | 1100 | -u 3 | Button C Toggle device status |
+------+------+-------+-------------------------------+
| 0000 | 0011 | -u 4 | Button D Toggle device status |
+------+------+-------+-------------------------------+
| 0000 | 1111 | -a -t | Button ALL ON |
+------+------+-------+-------------------------------+
| 1100 | 0011 | -a -f | Button ALL OFF |
+------+------+-------+-------------------------------+
So this code represents:
.. code-block:: console
{
"code": {
"id": 8,
"unit": 2
},
"origin": "receiver",
"protocol": "beamish_switch",
"uuid": "0000-00-00-00-000000",
"repeats": 2
}
.. rubric:: Examples
CLI command:
.. code-block:: console
pilight-send -p beamish_switch -i 8 -u 1
.. code-block:: console
{
"code": {
"systemcode": 2,
"id": 8,
"unit": 1
},
"origin": "receiver",
"protocol": "beamish_switch",
"uuid": "0000-00-00-00-000000",
"repeats": 1
}
.. code-block:: console
pilight-send -p beamish_switch -i 8 -a -t
.. code-block:: console
{
"origin": "sender",
"protocol": "beamish_switch",
"code": {
"id": 8,
"all": 1,
"state": "on"
},
"repeat": 1,
"uuid": "0000-00-00-00-000000"
}
@@ -0,0 +1,4 @@
Brennenstuhl
=============
.. include:: _elro_800.rst
@@ -0,0 +1,4 @@
ByeByeStandby
=============
.. include:: _kaku_old.rst
@@ -0,0 +1,160 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Clarus
======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Clarus | clarus_switch |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-i --id=id control a device with this systemcode
-u --unit=unit control a device with this programcode
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "clarus_switch" ],
"id": [{
"id": "A2",
"unit": 10
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | A0 - F32 |
+------------------+-----------------+
| unit | 0 - 63 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
189 567 567 189 189 567 567 189 189 567 189 567 189 567 567 189 189 567 189 567 189 567 567 189 189 567 567 189 189 567 567 189 189 567 189 567 567 189 567 189 189 567 189 567 567 189 567 189 189 6426
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
189 567 567 189
189 567 567 189
189 567 189 567
189 567 567 189
189 567 189 567
189 567 567 189
189 567 567 189
189 567 567 189
189 567 189 567
567 189 567 189
189 567 189 567
567 189 567 189
189 6426
If we now look at carefully at these groups you can distinguish three types of groups:
#. ``189 567 567 189``
#. ``567 189 567 189``
#. ``189 567 189 567``
- The first group is defined by a low 1st and low 4rd pulse pulse, hence we call it low.
- The second group has a high 1st and 3rd pulse, hence we call it med.
- The final group has a low 1st and low 3rd pulse, hence we call it high.
We then get the following output:
.. code-block:: console
LLHLH LLLHM HM
All L's can be translated to 0, the H's to 1's, and M's to 2.
Each (group) of numbers has a specific meaning:
- Unit: 0 till 5
- ID: 6 till 10
- State: 12 (state)
.. code-block:: console
00101 00012 12
- The ``Unit`` is defined as a binary number
- The ``ID`` is defined as a binary number combined with a letter
- The ``State`` defines whether a devices needs to be turned On or Off
So this code represents:
- Unit: 10
- ID: A2
- State: On
Another example:
- Unit: 0
- ID: B1
- State: Off
.. code-block:: console
00101 00021 21
@@ -0,0 +1,178 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Cleverwatts
===========
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Cleverwatts | cleverwatts |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-i --id=id control a device with this id
-u --unit=unit control a device with this unit
-t --on send an on signal
-f --off send an off signal
-a --all send an all signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "cleverwatts" ],
"id": [{
"id": 73404,
"unit": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 1 - 1048575 |
+------------------+-----------------+
| unit | 0 - 3 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
270 810 810 270 810 270 270 810 810 270 810 270 810 270 270 810 810 270 270 810 810 270 270 810 810 270 270 810 270 810 810 270 270 810 270 810 270 810 270 810 810 270 810 270 810 270 270 810 270 9180
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
270 810
810 270
810 270
270 810
810 270
810 270
810 270
270 810
810 270
270 810
810 270
270 810
810 270
270 810
270 810
810 270
270 810
270 810
270 810
270 810
810 270
810 270
810 270
270 810
If we now look at carefully at these groups you can distinguish three types of groups:
#. ``270 810``
#. ``810 270``
- The first group is defined by a low 1st and high 2nd pulse, hence we call it low.
- The second group has a high 1st and low 2nd pulse, hence we call it high.
We then get the following output:
.. code-block:: console
0 1
1 0
1 0
0 1
1 0
1 0
1 0
0 1
1 0
0 1
1 0
0 1
1 0
0 1
0 1
1 0
0 1
0 1
0 1
0 1
1 0
1 0
1 0
0 1
We then remove the first column of numbers and then put the remaining numbers in a row:
.. code-block:: console
1001000101011011110001
Each (group) of numbers has a specific meaning and are defined in binary format:
- ID: 0 till 19
- State: 20
- Unit: 21 and 22
- All: 23
So this code represents:
- Unit: 595311
- ID: 0
- State: On
- All: Single
@@ -0,0 +1,4 @@
CoCo Technologies
=================
.. include:: _kaku.rst
@@ -0,0 +1,4 @@
Cogex
=====
.. include:: _kaku_old.rst
@@ -0,0 +1,4 @@
D-IO (Chacon)
=============
.. include:: _kaku.rst
@@ -0,0 +1,4 @@
Dúwi Terminal
=============
.. include:: _kaku_old.rst
@@ -0,0 +1,274 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Elro HE (300 Series)
====================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Elro 300 Series | elro_300_switch |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-s --systemcode=systemcode control a device with this systemcode
-u --unitcode=unitcode control a device with this unitcode
-t --on send an on signal
-f --off send an off signal
-a --all trigger group switching
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "elro_300_switch" ],
"id": [{
"systemcode": 123456,
"unitcode": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 0 - 4294967295 |
+------------------+-----------------+
| unitcode | 0 - 99 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+----------------------+-------------+------------+------------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+------------------------------------------------------------+
| all | 1 | 1 or 0 | | If specified this will trigger the **group** function of |
| | | | | the advanced remotes and trigger all registered devices |
| | | | | for the given Systemcode |
+----------------------+-------------+------------+------------------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. Note::
The group button appears to be sending the unitcode of I-1 (First band, first unit) no matter to which band the remote is currently set.
.. rubric:: Protocol
This protocol sends 116 pulses like this
.. code-block:: console
302 1208 302 1208 302 302 302 302 302 302 302 1208 302 1208 302 1208 302 1208 302 302 302 302 302 1208 302 302 302 1208 302 1208 302 1208 302 1208 302 302 302 302 302 1208 302 302 302 1208 302 1208 302 302 302 302 302 1208 302 302 302 1208 302 1208 302 1208 302 1208 302 302 302 302 302 1208 302 1208 302 302 302 1208 302 1208 302 302 302 302 302 1208 302 302 302 1208 302 1208 302 302 302 1208 302 1208 302 302 302 1208 302 302 302 1208 302 302 302 302 302 1208 302 1208 302 1208 302 302 302 10268
These pulses are separated into groups of 2:
.. code-block:: console
302 1208
302 1208
302 302
302 302
302 302
302 1208
302 1208
302 1208
302 1208
302 302
302 302
302 1208
302 302
302 1208
302 1208
302 1208
302 1208
302 302
302 302
302 1208
302 302
302 1208
302 1208
302 302
302 302
302 1208
302 302
302 1208
302 1208
302 1208
302 1208
302 302
302 302
302 1208
302 1208
302 302
302 1208
302 1208
302 302
302 302
302 1208
302 302
302 1208
302 1208
302 302
302 1208
302 1208
302 302
302 1208
302 302
302 1208
302 302
302 302
302 1208
302 1208
302 1208
302 302
302 10268
There are several easily identifiable facts here:
- ``320 960 320 960``
- ``320 960 960 320``
#. The baseline is at 302
#. The high Pulse is basline * 4 = 1208
#. The last 2-pulse sequence is special, it's the footer of the message
Using a translation pattern of **302 1208** → 1 and **302 302** → 0 we translate this sequence into the following pattern
.. code-block::console
1100011110010111100101100101111001101100101101101010011101
Testing and some outside info reveals the following sections:
.. code-block: console
AAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCDDEEFFFFFFG
A = Startbits/preamble
B = Address (32 Bit system code)
C = Group Code (Grouped: 1100, Non-Grouped: 1011)
D = Command, (On: 01, Off: 10)
E = Group Code 2 (Grouped: 11, Non Grouped: 01)
F = UnitCode
G = Stopbit
So this code represents:
- SystemCode: 3165844325
- UnitCode: 28
- State: Off
- UnitCode: NotSet
The protocol filters out false positives by checking if:
#. Every 1st pulse in groups of 2 is a low pulse
#. The last two pulses are 302 and 10268 (fixed footer)
This is the readout from the writer's reference HE300 remote
+----------+----------+--------------+------------+------------+
| **Band** | **Code** | **UnitCode** | **GroupA** | **GroupB** |
+----------+----------+--------------+------------+------------+
| I | 1 | 56 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| I | 2 | 52 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| I | 3 | 44 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| I | 4 | 28 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| II | 1 | 50 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| II | 2 | 42 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| II | 3 | 26 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| II | 4 | 38 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| III | 1 | 22 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| III | 2 | 14 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| III | 3 | 49 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| III | 4 | 41 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| IV | 1 | 25 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| IV | 2 | 37 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| IV | 3 | 21 | 13 | 2 |
+----------+----------+--------------+------------+------------+
| IV | 4 | 13 | 13 | 2 |
+----------+----------+--------------+------------+------------+
This is translated:
.. code-block:: console
1-1 11000111100 10111100101100101111001101100101 1011 10 01 000111 1
1-2 11000111100 10111100101100101111001101100101 1011 10 01 001011 1
1-3 11000111100 10111100101100101111001101100101 1011 10 01 001101 1
1-4 11000111100 10111100101100101111001101100101 1011 10 01 001110 1
2-1 11000111100 10111100101100101111001101100101 1011 10 01 010011 1
2-2 11000111100 10111100101100101111001101100101 1011 10 01 010101 1
2-3 11000111100 10111100101100101111001101100101 1011 10 01 010110 1
2-4 11000111100 10111100101100101111001101100101 1011 10 01 011001 1
3-1 11000111100 10111100101100101111001101100101 1011 10 01 011010 1
3-2 11000111100 10111100101100101111001101100101 1011 10 01 011100 1
3-3 11000111100 10111100101100101111001101100101 1011 10 01 100011 1
3-4 11000111100 10111100101100101111001101100101 1011 10 01 100101 1
4-1 11000111100 10111100101100101111001101100101 1011 10 01 100110 1
4-2 11000111100 10111100101100101111001101100101 1011 10 01 101001 1
4-3 11000111100 10111100101100101111001101100101 1011 10 01 101010 1
4-4 11000111100 10111100101100101111001101100101 1011 10 01 101100 1
G1 11000111100 10111100101100101111001101100101 1100 10 11 000111 1
G2 11000111100 10111100101100101111001101100101 1100 10 11 000111 1
G3 11000111100 10111100101100101111001101100101 1100 10 11 000111 1
G4 11000111100 10111100101100101111001101100101 1100 10 11 000111 1
@@ -0,0 +1,154 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Elro HE (300 Series)
====================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Elro 400 Series | elro_400_switch |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-s --systemcode=systemcode control a device with this systemcode
-u --unitcode=unitcode control a device with this unitcode
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "elro_400_switch" ],
"id": [{
"systemcode": 31,
"unitcode": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 0 - 31 |
+------------------+-----------------+
| unitcode | 0 - 31 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 320 960 960 320 320 960 960 320 320 960 960 320 320 960 960 320 320 960 320 960 320 960 960 320 320 9920
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 320 960
320 960 960 320
320 960 960 320
320 960 960 320
320 960 960 320
320 960 320 960
320 960 960 320
320 9920
If we now look at carefully at these groups you can distinguish two types of groups:
- ``320 960 320 960``
- ``320 960 960 320``
So the first group is defined by a high 4th pulse and the second group has a low 4th pulse. In this case we say a high 4th pulse means a 0 and a low 4th pulse means a 1. We then get the following output:
.. code-block::console
00000 01111 0 1
Each (group) of numbers has a specific meaning:
- SystemCode: 0 till 5
- UnitCode: 6 till 10
- State: 11 (inverse state)
- Check: 12
.. code-block: console
00000 01111 0 1
- The ``SystemCode`` is defined as a binary number
- The ``UnitCode`` is defined as a binary number
- The ``State`` defines whether a devices needs to be turned On or Off
- The ``Check`` defines whether a devices needs to be turned On or Off (but is inverse)
So this code represents:
- SystemCode: 31 (inversed)
- UnitCode: 1 (inversed)
- State: On (inverse state)
- Check: On
Another example:
- SystemCode: 0 (inversed)
- UnitCode: 4 (inversed)
- State: Off (inverse state)
- Check: Off
.. code-block:: console
11111 11011 1 0
@@ -0,0 +1,4 @@
Elro HE (800 Series)
====================
.. include:: _elro_800.rst
@@ -0,0 +1,4 @@
Eurodomest
==========
.. include:: _kaku_old.rst
@@ -0,0 +1,178 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Impuls
======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Impuls | impuls |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-s --systemcode=systemcode control a device with this systemcode
-u --programcode=programcode control a device with this programcode
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "impuls" ],
"id": [{
"programcode": 8,
"unitcode": 12
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 0 - 31 |
+------------------+-----------------+
| unitcode | 0 - 31 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Notes
The default settings for a set of Impuls switches are:
#. SystemCode: 11111 and ProgramCode: 10000
#. ProgramCode: 01000
#. ProgramCode: 00100
This translates into the following pilight systemcode and unitcode:
#. systemcode: 31, programcode: 1
#. systemcode: 31, programcode: 2
#. systemcode: 31, programcode: 4
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
885 295 885 295 885 295 885 295 885 295 885 295 295 885 885 295 295 885 885 295 295 885 295 885 295 885 885 295 295 885 295 885 295 885 885 295 295 885 885 295 295 885 885 295 295 885 295 885 295 9735
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
885 295 885 295
885 295 885 295
885 295 885 295
295 885 885 295
295 885 885 295
295 885 295 885
295 885 885 295
295 885 295 885
295 885 885 295
295 885 885 295
295 885 885 295
295 885 295 885
295 9735
If we now look at carefully at these groups you can distinguish three types of groups:
#. ``295 885 295 885``
#. ``885 295 885 295``
#. ``295 885 885 295``
- The first group is defined by a low 1th and low 3rd pulse pulse, hence we call it low.
- The second group has a high 1st and 3rd pulse, hence we call it med.
- The final group has a low 1st and high 3rd pulse, hence we call it high.
We then get the following output:
.. code-block:: console
MMMHH LHLHH H L
All M's and H's can be translated to 1. All L's can be translated to 0.
Each (group) of numbers has a specific meaning:
- Unit: 0 till 5
- ID: 6 till 10
- Check: 11 (inverse state)
- State: 12 (state)
.. code-block:: console
11100 10100 1 0
- The ``SystemCode`` is defined as a binary number
- The ``ProgramCode`` is defined as a binary number
- The ``Check`` is always inverse state
- The ``State`` defines whether a devices needs to be turned On or Off
So this code represents:
- SystemCode: 7
- ProgramCode: 5
- Check: Inverse state
- State: Off
Another example:
- Unit: 0
- ID: 4
- Fixed: Inverse state
- State: On
.. code-block:: console
00000 00100 0 1
@@ -0,0 +1,32 @@
Switches
========
.. toctree::
:maxdepth: 1
beamish
brennenstuhl
byebyestandby
clarus
cleverwatts
coco
cogex
dio
duwi
elro_300
elro_400
elro_800
eurodomest
quigg_1000
quigg_7000
impuls
intertechno
intertechno_old
kaku_old
kaku
nexa
rsl366
selectremote
silvercrest
techlico
x10
@@ -0,0 +1,4 @@
Intertechno
===========
.. include:: _kaku.rst
@@ -0,0 +1,4 @@
Intertechno (Old Version)
=========================
.. include:: _kaku_old.rst
@@ -0,0 +1,4 @@
KlikAanKlikUit
==============
.. include:: _kaku.rst
@@ -0,0 +1,4 @@
KlikAanKlikUit (Old Version)
============================
.. include:: _kaku_old.rst
@@ -0,0 +1,4 @@
Nexa
====
.. include:: _kaku.rst
@@ -0,0 +1,119 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Globaltronics Quigg GT-1000
===========================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+-------------------------------+---------------+
| **Brand** | **Protocol** |
+-------------------------------+---------------+
| Globaltronics GmbH GT-1000 RC | quigg_gt1000 |
+-------------------------------+---------------+
| Globaltronics GmbH GT-FSI-08 | quigg_gt1000 |
+-------------------------------+---------------+
| Silvercrest AAA3680-A IP20 DE | quigg_gt1000 |
+-------------------------------+---------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t send an on signal to a device
-f send an off signal to a device
-i control the device with this system id (1 ... 15)
-u control the device with this unit code (0 ... 3)
-a control all switches in the given group
-s control all switches in all groups
The next two parameters are optional:
-n specify the code sequence to use (0 ... 3)
-s specify the super codes (0 ... 7)
If the specified sequence does not exists, sequence 0 will be used instead.
If not specified a sequence will be selected at random.
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "quigg_gt1000" ],
"id": [{
"id": 15,
"unit": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 15 |
+------------------+-----------------+
| unit | 0 - 3 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Examples
.. code-block:: console
pilight-send -p quigg_gt1000 -i [0..15] -u [0..3] [-t|-f] {-n [0..3]}
Switch on or off the specified switch (-u) belonging to group (-i) optionally using specified codeseq (-n)
.. code-block:: console
pilight-send -p quigg_gt1000 -i [0..15] -a [-t|-f] {-n [0..3]}
Switch on or off all switches belonging to group (-i) optionally using specified codeseq (-n)
.. code-block:: console
pilight-send -p quigg_gt1000 -s [-t|-f] {-n [0..7]}
Switch on or off all compatible switches optionally using specified codeseq (-n)
When using the Web-GUI use "unit": 4 in the config.json file for the master switch ("all": 1) and "id”: 16 with "unit”: 5 for the super code switch ("super”: 1).
@@ -0,0 +1,232 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Globaltronics Quigg GT-7000
===========================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+-------------------------------+---------------+
| **Brand** | **Protocol** |
+-------------------------------+---------------+
| Aldi Quigg GT-7000 | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-7000 | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-8000 | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-FSI-02 | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-FSI-04a | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-FSI-05 | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-FSI-05d | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics 7008AS | quigg_gt7000 |
+-------------------------------+---------------+
| Conrad RC-710 | quigg_gt7000 |
+-------------------------------+---------------+
| Globaltronics GT-FSI-05 | quigg_gt7000 |
+-------------------------------+---------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t --on send an on signal to a device
-f --off send an off signal to a device
-i --id=id control the device with this system id (1 ... 4095)
-u --unit=unit control the device with this unit code (0 ... 3)
-a --all send command to all device units belonging to this system id
-l --learn send multiple streams so switch can learn
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "quigg_gt7000" ],
"id": [{
"id": 15,
"unit": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 1 - 4095 |
+------------------+-----------------+
| unit | 1 - 3 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. versionchanged:: 8.0 Allow ID 0
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 4095 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| all | 0 | 1 or 0 | | If specified this will trigger the "group" |
| | | | | function of the advanced remotes and trigger |
| | | | | all registered devices for the given unitcode |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
The quigg_switch protocol sends 42 pulses like this
.. code-block:: console
700 1400 700 700 1400 1400 700 1400 700 700 1400 700 1400 700 1400 700 1400 700 1400 700 1400 700 1400 700 1400 700 1400 700 1400 700 1400 1400 700 700 1400 700 1400 700 1400 1400 700 81000
The first pulse is the ``header`` and the last pulse is the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 20 groups of 2 pulses (and thereby dropping the ``header`` and ``footer`` pulse).
.. code-block:: console
1400 700
700 1400
1400 700
1400 700
700 1400
700 1400
700 1400
700 1400
700 1400
700 1400
700 1400
700 1400
700 1400
700 1400
700 1400
1400 700
700 1400
700 1400
700 1400
1400 700
If we now analyse these groups we can distinguish two types of groups:
#. ``700 1400``
#. ``1400 700``
So the first group is defined by a short 1st and 2nd long and the second group by a long 1st and 2nd short pulse. So we take either of these two pulses to define a logical 0 or 1. In our case a long 1st pulse means a 1 and a short 1st pulse means a 0. We then get the following output:
.. code-block:: console
10110000000000010001
We can group the sequence of bits into the following groups A to H:
.. code-block:: console
AAAAAAAAAAAA BB C D E F G H
101100000000 00 0 1 0 0 0 1
Each of the groups of bits (A to H) has a specific meaning:
+-----------+-----------+-----------------+------------+-----------------------------+
| **Group** | **Bit #** | **Config name** | **Range** | **Description** |
+-----------+-----------+-----------------+------------+-----------------------------+
| A | 1 to 12 | id | 1 to 4095 | SystemCode |
+-----------+-----------+-----------------+------------+-----------------------------+
| B | 13, 14 | unit | 1 to 3 | UnitCode |
+-----------+-----------+-----------------+------------+-----------------------------+
| C | 15 | id | 1 | Command to all devices |
+-----------+-----------+-----------------+------------+-----------------------------+
| D | 16 | all | 0,1 | Switch ON or OFF |
+ + + + + Dimmer DOWN or UP +
| | | | | |
+-----------+-----------+-----------------+------------+-----------------------------+
| E | 17 | dimm | 0,1 | switch, dimmer mode |
+-----------+-----------+-----------------+------------+-----------------------------+
| F | 18 | | 0 | always zero |
+-----------+-----------+-----------------+------------+-----------------------------+
| G | 19 | | 0,1 | internal, handled by driver |
+-----------+-----------+-----------------+------------+-----------------------------+
| H | 20 | | 0,1 | even parity bit |
+-----------+-----------+-----------------+------------+-----------------------------+
So this code represents:
.. code-block:: console
"id": 2816,
"unit": 1
"state": Off
.. rubric:: Examples
CLI command:
.. code-block:: console
pilight-send -p quigg_gt7000 -i 2816 -u 1 -f
.. rubric:: Comment
Extracting the system code id from an existing Globaltronics GT-7000 remote control device either requires a special version of the BPF, or you need to bypass the BPF.
After insertion of batteries the GT-7000 defaults to system code id #2816. Pressing the button "Neuer Code" located in the battery compartment, will trigger the generation of a new system code id. These are generated in sequential order, for the current quigg_switch protocol driver the id's are:
.. code-block:: console
2816, 1792, 3840, 128, 2176, 1152, 3200, 640, 2688, 1664, 3712, 384, 2432, 1408, 3456, 896, 2944, 1920, 3968, ....
To let the device learn a new value, press the learning mode button on the switch and send the appropriate CLI command with pilight-send (configure a switch to be unit #2 and system code id #29):
.. code-block:: console
pilight-send -p quigg_gt7000 -i 29 -u 2 -l -t
The device learns that it has now system code id #29 and that it is unit #2 and enters ON mode (e.q. the switch is turned on). If the switch is not connected to power for an extended period of time, it will loose its configuration and reset to the default id #2816 unit #0. QUIGG_GT7000 compatible switches with integrated dimmer require that you configure the quigg_screen protocol in addition to the quigg_gt7000 protocol. On the webgui you will get a separate button to dimm the device up and down.
Subsequently the switch unit #1 with system code id #2816 is turned off.
@@ -0,0 +1,4 @@
RSL366
======
.. include:: _rsl366.rst
@@ -0,0 +1,138 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
SelectRemote
============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| SelectRemote | selectremote |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-i --id=id control a device with this id
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "selectremote" ],
"id": [{
"id": 4
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 7 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
396 1188 396 1188 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 1188 396 13464
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 390 1170
390 1170 390 1170
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
390 1170 1170 390
If we now look at carefully at these groups you can distinguish three types of groups:
- ``396 1188 396 1188``
- ``1188 396 1188 396``
#. The first group is defined by a low 1th and low 3rd pulse pulse, hence we call it low.
#. The second group has a high 1st and 3rd pulse, hence we call it high.
We then get the following output:
.. code-block:: console
011100000000
Each (group) of numbers has a specific meaning:
- ID: 1 till 3
- State: 8 (state)
.. code-block:: console
x 111 xxxx 0 xxx
- The ``ID`` is defined as a binary number. To calculate the ID we subtract the binary represented decimal from 7. In this case the binary ``111`` is equal to the decimal 7. That means this code represents ID 0.
- The ``State`` defines whether a devices needs to be turned On or Off
So this code represents:
- SystemCode: 0
- State: Off
@@ -0,0 +1,146 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
SilverCrest
===========
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| Silvercrest | silvercrest |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t --on send an on signal
-f --off send an off signal
-u --unit=unit control a device with this unit code
-i --id=id control a device with this id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "silvercrest" ],
"id": [{
"systemcode": 22,
"unitcode": 0
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| systemcode | 0 - 31 |
+------------------+-----------------+
| unitcode | 0 - 31 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
This protocol sends 50 pulses like this
.. code-block:: console
312 936 936 312 312 936 312 936 312 936 312 936 312 936 936 312 312 936 312 936 312 936 936 312 312 936 312 936 312 936 936 312 312 936 936 312 312 936 936 312 312 936 936 312 312 936 312 936 312 10608
It has no ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine, and the protocol also has some bit checks to filter false positives. We don't use them for further processing. The next step is to transform this output into 12 groups of 4 pulses (and thereby dropping the ``footer`` pulses).
.. code-block:: console
312 936 936 312
312 936 312 936
312 936 312 936
312 936 936 312
312 936 312 936
312 936 936 312
312 936 312 936
312 936 936 312
312 936 936 312
312 936 936 312
312 936 936 312
312 936 312 936
312 10608
If we now look at carefully at these groups you can distinguish three types of groups:
- ``312 936 936 312``
- ``312 936 312 936``
So the first group is defined by a high 3th pulse and the second group has a low 3rd pulse. In this case we say a high 3rd pulse means a 0 and a high 3rd pulse means a 1. We then get the following output:
.. code-block:: console
01101 01000 01
Each (group) of numbers has a specific meaning:
- Unit: 0 till 5 (inversed)
- ID: 6 till 10 (inversed)
- Check: 11 (inverse of state)
- State: 12 (inversed)
.. code-block:: console
10110 00010 0 0
- The ``Unit`` is defined as a binary number
- The ``ID`` is defined as a binary number
- The ``Check`` is always the inverse of the state
- The ``State`` defines whether a devices needs to be turned On or Off
So this code represents:
- Unit: 22
- ID: 2
- Fixed: Off
- State: On
@@ -0,0 +1,190 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
TechLiCo
========
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+------------------+
| **Brand** | **Protocol** |
+----------------------+------------------+
| TechLiCo | techlico_switch |
+----------------------+------------------+
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-t --on send a toggle state signal to the device
-f --off send a toggle state signal to the device
-i --id=id control the device with this system id (1 ... 65535)
-u --unit=unit control the device with this unit code (1 ... 4)
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "techlico_switch" ],
"id": [{
"id": 4935,
"unit": 1
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 1 - 65535 |
+------------------+-----------------+
| unit | 1 - 4 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
The techlico_switch protocol sends 50 pulses like this
.. code-block:: console
208 624 208 832 208 624 624 208 208 624 208 624 624 208 624 208 208 832 624 208 208 832 208 624 208 832 624 208 624 208 624 208 208 832 208 624 208 832 208 832 208 624 208 624 624 208 624 208 208 7072
The last two pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 24 groups of 2 pulses (and thereby dropping the ``footer`` pulse).
.. code-block:: console
208 624
208 832
208 624
624 208
208 624
208 624
624 208
624 208
208 832
624 208
208 832
208 624
208 832
624 208
624 208
624 208
208 832
208 624
208 832
208 832
208 624
208 624
624 208
624 208
208 7072
If we now analyse these groups we can distinguish two types of groups:
- ``208 624``
- ``624 208``
The 1st group is defined by a short-long sequence (logical 0) The 2nd group is defined by a long-short sequence (logical 1):
Binary representation:
.. code-block:: console
000100110100011100000011
We can group the sequence of bits into the following groups A and B:
.. code-block:: console
AAAAAAAAAAAAAAAA BBBB BBBB
0001001101000111 0000 0011
Each of the groups of bits (A and B) has a specific meaning:
+-----------+-----------+-----------------+------------+-----------------+
| **Group** | **Bit #** | **Config name** | **Range** | **Description** |
+-----------+-----------+-----------------+------------+-----------------+
| A | 1 to 16 | id: | 1 to 65535 | SystemCode id |
+-----------+-----------+-----------------+------------+-----------------+
| B | 17 to 24 | unit: | 1 to 4 | ButtonCode unit |
+-----------+-----------+-----------------+------------+-----------------+
The protocol driver creates the binary presentation as required by the device
+-----------+------------------------------------+
| 0000 0011 | -u 1 Button A Toogle device status |
+-----------+------------------------------------+
| 1100 0000 | -u 2 Button B Toogle device status |
+-----------+------------------------------------+
| 0000 1111 | -u 3 Button C Toogle device status |
+-----------+------------------------------------+
| 0000 1100 | -u 4 Button D Toogle device status |
+-----------+------------------------------------+
So this code represents:
.. code-block:: console
{
"code": {
"id": 4935,
"unit": 1
},
"origin": "receiver",
"protocol": "techlico_switch",
"uuid": "0000-00-00-00-000000",
"repeats": 2
}
.. rubric:: Examples
CLI command:
.. code-block:: console
pilight-send -p techlico_switch -i 4935 -u 1
.. rubric:: Known Limitations
As the device will not report its state, and the same Button on the original remote control toggles the state of the device, the GUI may show the wrong status of the device.
@@ -0,0 +1,79 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
X10
===
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
:linenos:
-i --id=id control a device with this id
-t --on send an on signal
-f --off send an off signal
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "x10" ],
"id": [{
"id": "A2"
}],
"state": "off"
}
},
"gui": {
"Lamp": {
"name": "TV Backlit",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | A0 - P16 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| readonly | 1 | 1 or 0 | Disable controlling this device from the GUIs |
+----------------------+-------------+------------+-----------------------------------------------------------+
| confirm | 1 | 1 or 0 | Ask for confirmation when switching device |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
A good description on this protocol can be found in this document `x10 <http://wiki.pilight.org/X10_RF_Receiver.pdf>`_
@@ -0,0 +1,172 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| Alecto WSD17 | alecto_wsd17 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "alecto_wsd17" ],
"id": [{
"id": 100
}],
"temperature": 23.00
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 9 |
+------------------+-----------------+
| temperature | -50 - 70 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 1 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comment
This weather station or just the sensor is available from several (mostly Chinese) suppliers on eBay or Alibaba. Description for device is usually like: “Digital Wireless Indoor/Outdoor Weather Station with 3 Remote Sensors”. The sensor can be identified by the option to choose from 3 different channels.
Please be aware that the ID of a sensor changes after you replace the batteries.
.. rubric:: Protocol
The protocol sends 74 pulses like:
.. code-block:: guess
540 1890 540 3780 540 1890 540 3780 540 3780 540 3780 540 3780 540 3780 540 1890 540 1890 540 3780 540 3780 540 3780 540 1890 540 1890 540 1890 540 1890 540 1890 540 1890 540 1890 540 3780 540 3780 540 1890 540 1890 540 4050 540 1890 540 4050 540 4050 540 1890 540 1890 540 4050 540 1890 540 3780 540 1890 540 3780 540 3780 540 9180
There first 8 pulses are the header and the last 2 pulses are the footer. These are meant to identify the pulses as genuine. We don't it for further processing. The next step is to transform this output into 36 groups of 2 pulses (and thereby dropping the footer pulses).
.. code-block:: guess
540 1890
540 3780
540 1890
540 3780
540 3780
540 3780
540 3780
540 3780
540 1890
540 1890
540 3780
540 3780
540 3780
540 1890
540 1890
540 1890
540 1890
540 1890
540 1890
540 1890
540 3780
540 3780
540 1890
540 1890
540 4050
540 1890
540 4050
540 4050
540 1890
540 1890
540 4050
540 1890
540 3780
540 1890
540 3780
540 3780
If we now look at carefully at these groups you can distinguish two types of groups:
#. ``540 1890``
#. ``540 3780``
So the first group is defined by a low 2nd, the second group has a high 2nd pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: guess
010111110011000000011001011001010111
Each (group) of numbers has a specific meaning:
- Header 0 till 3
- ID: 4 till 11
- Battery: 12
- TX mode: 13
- Channel: 14 till 15
- Temperature: 16 till 27
- Humidity: 28 till 35
.. code-block:: guess
0101 11110011 0 0 00 000110010110 01010111
- The ID is defined as a binary number
- The Battery identifies the state of the battery
- The TX mode defines whether the signal was sent automatic or manual
- The Channel is defined as a binary number and specifies which channel the sensor uses
- The Temperature is defined as a binary number and represents the temperature
- The Humidity is defined as a binary number and represents the humidity
This protocol was created for pilight with the help of this thread: http://forum.pilight.org/Thread-Fully-Supported-No-brand-temp-humidity-sensor
@@ -0,0 +1,114 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+------------------+
| **Brand** | **Protocol** |
+------------------+------------------+
| Alecto WX500 | alecto_wx500 |
+------------------+------------------+
| Auriol H13726 | auriol_h13726 |
+------------------+------------------+
| Hama EWS1500 | hama_ews1500 |
+------------------+------------------+
| Meteoscan W1XXX | meteoscan_w1XX |
+------------------+------------------+
| Balance RF-WS105 | balance_rf_ws105 |
+------------------+------------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "alecto_wsd17" ],
"id": [{
"id": 100
}],
"temperature": 18.90,
"humidity": 41.00,
"windavg": 10.00,
"winddir": 90.00,
"windgust": 20.00,
"battery": 1
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 9 |
+------------------+-----------------+
| temperature | -40 - 60 |
+------------------+-----------------+
| humidity | 10 - 99 |
+------------------+-----------------+
| windavg | 0 - 50 |
+------------------+-----------------+
| windavg | 0 - 359 |
+------------------+-----------------+
| windgust | 0 - 50 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-wind | 1 | 1 or 0 | Don't display the wind value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 1 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
A good description on this protocol can be found in `this <http://wiki.pilight.org/auriol_protocol_v20.pdf>`_ PDF.
@@ -0,0 +1,205 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+-----------------------+----------------+
| **Brand** | **Protocol** |
+-----------------------+----------------+
| Soens Weather Station | soens |
+-----------------------+----------------+
| TFA | tfa |
+-----------------------+----------------+
| Conrad | conrad_weather |
+-----------------------+----------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "tfa" ],
"id": [{
"id": 108,
"channel": 3
}],
"temperature": 18.90,
"humidity": 41.00,
"battery": 1
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 9 |
+------------------+-----------------+
| temperature | -39.9 - 59.9 |
+------------------+-----------------+
| humidity | 10 - 99 |
+------------------+-----------------+
| battery | 0 - 1 |
+------------------+-----------------+
.. note:: **Conrad**
This sensor does not support humidity measurements
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 1 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
The tfa protocol sends 86 pulses like
.. code-block:: guess
498 1992 498 1992 498 1992 498 1992 498 1992 498 4233 498 4233 498 1992 498 1992 498 2241 498 1992 498 1992 498 2241 498 2241 498 1992 498 1992 498 4233 498 2241 498 2241 498 1992 498 1992 498 4482 498 1992 498 4233 498 4233 498 2241 498 4482 498 1992 498 1992 498 4233 498 1992 498 1992 498 4233 498 4233 498 1992 498 1992 498 1992 498 2241 498 2241 498 1992 498 4233 498 2241 498 8466
The next step is to transform this output into groups of 2 pulses.
.. code-block:: guess
498 1992
498 1992
498 1992
498 1992
498 1992
498 4233
498 4233
498 1992
498 1992
498 2241
498 1992
498 1992
498 2241
498 2241
498 1992
498 1992
498 4233
498 2241
498 2241
498 1992
498 1992
498 4482
498 1992
498 4233
498 4233
498 2241
498 4482
498 1992
498 1992
498 4233
498 1992
498 1992
498 4233
498 4233
498 1992
498 1992
498 1992
498 2241
498 2241
498 1992
498 4233
498 2241
498 8466
If we now look at carefully at these groups you can distinguish two types of groups:
#. ``498 1992``
#. ``498 4233``
So the first group is defined by a low 2nd, the second group has a high 2nd pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: guess
000001100000000010000101101001001100000010
Each (group) of numbers has a specific meaning:
- ID: 2 till 9
- Channel: 12 till 13
- Temperature: 14 till 25
- Humidity: 26 till 33
- Battery: 34 till 35
.. code-block:: guess
ID : 00011000 | Channel : 00 | Temp : 011000010010 | Hum : 00111001 | Bat : 00
- The ID is defined as a binary number
- The Channel is defined as a binary number and specifies which channel the sensor uses
- The Temperature is defined as a binary number and represents the temperature (value is given in fahrenheit strating at -90°F). Assuming that the Temp binary value is AAAABBBBCCCC, the formula to calculate the temperature value in °C is
.. code-block:: guess
(((DEC(CCCC)*256) + (DEC(BBBB)*16) + (DEC(AAAA))/10) - 90 - 32) * (5/9)
- The ``Humidity`` is defined as a binary number. Assuming that the Hum binary value is AAAABBBB, the formula to calculate the humidity percentage is DEC(BBBB)*16 + DEC(AAAA)
- The ``Battery`` identifies the state of the battery
.. code-block:: guess
ID : 24 | Channel : 1 | Temp : 18.56°C | Hum : 57% | Bat : OK
This protocol was created for pilight with the help of this thread: http://forum.pilight.org/Thread-New-Protocol-Wireless-Indoor-Outdoor-Weather-Station-with-3-Sensors
.. rubric:: Comments
This weather station or just the sensor is available from several (mostly Chinese) suppliers on eBay or Alibaba. Description for device is usually like: “Digital Wireless Indoor/Outdoor Weather Station with 3 Remote Sensors”. The sensor can be identified by the option to choose from 3 different channels.
Humidity and battery are supported by this protocol. The battery function is not tested 100%. Please be aware that the ID of a sensor changes after you replace the batteries. Conrad sensor only provide temperature (no humidity).
@@ -0,0 +1,227 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+-----------------------+----------------+
| **Brand** | **Protocol** |
+-----------------------+----------------+
| Dostmann TFA 30.3200 | tfa30 |
+-----------------------+----------------+
| TFA30 | tfa30 |
+-----------------------+----------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "tfa30" ],
"id": [{
"id": 228
}],
"temperature": 18.90,
"humidity": 41.00
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 255 |
+------------------+-----------------+
| temperature | -39.9 - 59.9 |
+------------------+-----------------+
| humidity | 10 - 99 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
*After extensive testing it was detected that the Dostman TFA 30.3200 shares most parameters with the tfa and conrad weather station sensors, however due to the differences detected those are described in this document.*
The protocol sends 88 pulses like:
.. code-block:: guess
603 7630 601 1881 605 1897 610 3803 605 3811 651 3798 618 1884 600 1911 597 3806 599 1909 590 1930 595 1906 594 1905 591 1920 584 3804 593 3829 585 3808 600 1905 591 1937 602 3805 594 3809 599 3821 590 1903 595 1908 593 3826 586 1908 596 3837 597 3825 569 1918 594 3809 597 1911 594 1903 594 1909 591 3829 585 1926 592 1907 590 1972 531 1917 586 1911 607 1895 589 1952 556 3818 590 3811 594 7639
The next step is to transform this output into groups of 2 pulses.
.. code-block:: guess
603 7630
601 1881
605 1897
610 3803
605 3811
651 3798
618 1884
600 1911
597 3806
599 1909
590 1930
595 1906
594 1905
591 1920
584 3804
593 3829
585 3808
600 1905
591 1937
602 3805
594 3809
599 3821
590 1903
595 1908
593 3826
586 1908
596 3837
597 3825
569 1918
594 3809
597 1911
594 1903
594 1909
591 3829
585 1926
592 1907
590 1972
531 1917
586 1911
607 1895
589 1952
556 3818
590 3811
594 7639
Analysing the pulsetrain, we can distinguish three types of groups:
- The first group is defined by a short 2nd
- The second group has a long 2nd pulse.
- The third group has an extended long 2nd pulse, this 3rd group forms the header and the footer pulse group.
The duration of the pulses varies between manufacturers.
**Dostmann TFA 30.3200**
#. ``605 1905``
#. ``605 3811``
#. ``594 7639``
Length of pulsetrain is 88.
**TFA30 and conrad_weather**
#. ``498 1992``
#. ``498 4233``
#. ``498 8466``
Length of pulsetrain is 80 or 86.
It is currently unknown wether the ``tfa`` and the ``conrad weather pro`` are using identical protocols or not, due to discrepencies in the documentation. The current version of the tfa protocol module can handle both variants using the tfa30 protocol. The differentiation is analysing the header information and the length of the pulsetrain automatically.
We take either of the two other pulse groups to define a logical 0 or a 1. A long 2nd pulse means a 1 and a short 2nd pulse means a 0.
For the above pulsetrain we get the following binary output:
.. code-block:: console
MSB--LSB AAAABBBBCCCC AAAABBBB
00 11100100 0 001 110011100101 10100010 0 0 000011
Each (group) of numbers has a specific meaning:
**Dostmann TFA 30.3200**
- unknown: 0 till 1
- ID: 2 till 9
- unknown: 10
- Channel: 11 till 13
- Temperature: 14 till 25
- Humidity: 26 till 33
- Tx Button: 34
- Battery low: 35
- unknown: 36 till 41
**tfa30 and conrad_weather**
- unknown: 0 till 1
- ID: 2 till 9
- Channel: 12 till 13
- Temperature: 14 till 25
- Humidity: 26 till 33
- Battery: 34 till 35
- unknown: 36 till 41
.. code-block:: console
ID : 11100100 | Channel : 01 | Temp : 0101 1110 1100 | Hum : 00101010 | Bar : 00
- The ``ID`` is defined as a binary number
- The ``Temperature`` is defined as a binary number and represents the temperature in Fahrenheit, starting at -90°F). Assuming that the Temp binary value is AAAABBBBCCCC, the formula to calculate the temperature value in °C is
.. code-block:: console
( ((DEC(CCCC)*256)+(DEC(BBBB)*16)+(DEC(AAAA)))/10 -90 -32) * (5/9)
The ``Humidity`` is defined as a binary number. Assuming that the Hum binary value is AAAABBBB, the formula to calculate the humidity percentage is DEC(BBBB)*16 + DEC(AAAA)
.. code-block:: console
ID : 228 | Temp : 16.44°C | Hum : 42%
@@ -0,0 +1,4 @@
Alecto WS1700
=============
.. include:: _alecto_ws1700.rst
@@ -0,0 +1,88 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Alecto WSD17
============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+----------------+
| **Brand** | **Protocol** |
+------------------+----------------+
| Alecto WSD1700 | alecto_wsd1700 |
+------------------+----------------+
| iBoutique | iboutique |
+------------------+----------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "alecto_ws1700" ],
"id": [{
"id": 108
}],
"temperature": 18.90,
"humidity": 41.00,
"battery": 1
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comment
This protocol was created for pilight with the help of this document: http://www.tfd.hu/tfdhu/files/wsprotocol/auriol_protocol_v20.pdf
Humidity and battery are not supported yet
@@ -0,0 +1,4 @@
Alecto WX500
============
.. include:: _alecto_wx500.rst
@@ -0,0 +1,128 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Auriol 89210
============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+------------------+
| **Brand** | **Protocol** |
+------------------+------------------+
| Auriol | auriol |
+------------------+------------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "auriol" ],
"id": [{
"id": 3
}],
"temperature": 18.90,
"humidity": 41.00,
"battery": 1
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 9 |
+------------------+-----------------+
| temperature | 0 - 50 |
+------------------+-----------------+
| humidity | 20 - 99 |
+------------------+-----------------+
| battery | 0 - 1 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 1 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comments
This weather station was available at the Lidl. Description for device could be: “Auriol IAN 89210 FUNK-WEATHER STATION/RADIO CONTROLLED WEATHER”, Hama EWS-750 (not confirmed) and IAN 55982 (neither confirmed). The sensor can be identified by the option to choose from 3 different channels.
Humidity and battery assumed to be supported by this protocol, but might not be. The battery function is not tested 100% and humidity seems to vary regularly. Please be aware that the ID of a sensor is actually the channel.
.. rubric:: Protocol
This protocol has similarities with the protocols alecto and threechan.
Each (group of 2) numbers have the following specific meaning:
- Battery ID 0 untill 7 (assumed)
- Battery: 8
- TX mode: 9
- Channel: 10 untill 11 (3 = 10, 2 = 01, 1 = 11)
- Temperature: 12 untill 23
- Humidity: 24 untill 31 (assumed, alternatively this might be a checksum)
- Footer: 32
- The Battery ID is not used
- The Battery identifies the state of the battery
- The TX mode defines whether the signal was sent automatically or manually
- The ID is defined as a binary number and specifies which channel the sensor uses
- The Temperature is defined as a binary number and represents the temperature
- The Humidity is defined as a binary number and represents the humidity (unconfirmed)
.. rubric:: Checksum
We need someone who is able to decipher the checksum and write a c snippet for it.
This protocol was created for pilight with the help of pilight-debug.
@@ -0,0 +1,4 @@
Auriol H12726
=============
.. include:: _alecto_wx500.rst
@@ -0,0 +1,4 @@
Conrad
======
.. include:: _conrad.rst
@@ -0,0 +1,7 @@
Dostmann TFA 30.3200
====================
.. versionchanged:: 8.0
.. include:: _tfa30.rst
@@ -0,0 +1,4 @@
Hama EWS1500
============
.. include:: _alecto_wx500.rst
@@ -0,0 +1,4 @@
iBoutique
=========
.. include:: _alecto_ws1700.rst
@@ -0,0 +1,23 @@
Weather Stations
================
.. toctree::
:maxdepth: 1
alecto_wsd17
alecto_ws1700
alecto_wx500
auriol_89210
auriol_h13726
conrad
dostmann
hama_ews1500
iboutique
kaku
meteoscan_w1xxx
ninja_blocks
soens
tcm
teknihall
tfa
ventus_wsxxx
@@ -0,0 +1,152 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
KlikAanKlikUit (Dusk/Dawn)
==========================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+----------------------+--------------------+
| **Brand** | **Protocol** |
+----------------------+--------------------+
| KlikAanKlikUit | kaku_dusk |
+----------------------+--------------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "kaku_dusk" ],
"id": [{
"id": 100,
"unit": 0
}],
"state": "dusk"
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 67108863 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| state | dusk / dawn |
+------------------+-----------------+
.. rubric:: Optional Settings
*None*
.. rubric:: Protocol
This protocol sends 132 pulses like this
.. code-block:: console
286 2825 286 201 289 1337 287 209 283 1351 287 204 289 1339 288 207 288 1341 289 207 281 1343 284 205 292 1346 282 212 283 1348 282 213 279 1352 282 211 281 1349 282 210 283 1347 284 211 288 1348 281 211 285 1353 278 213 280 1351 280 232 282 1356 279 213 285 1351 276 215 285 1348 277 216 278 1359 278 216 279 1353 272 214 283 1358 276 216 276 1351 278 214 284 1357 275 217 276 1353 270 217 277 1353 272 220 277 1351 275 220 272 1356 275 1353 273 224 277 236 282 1355 272 1353 273 233 273 222 268 1358 270 219 277 1361 274 218 280 1358 272 1355 271 243 251 11302
The first 2 pulses are the ``header`` and the last 2 pulses are the ``footer``. These are meant to identify the pulses as genuine. We don't use them for further processing. The next step is to transform this output into 32 groups of 4 pulses (and thereby dropping the ``header`` and ``footer`` pulses).
.. code-block:: console
286 201 289 1337
287 209 283 1351
287 204 289 1339
288 207 288 1341
289 207 281 1343
284 205 292 1346
282 212 283 1348
282 213 279 1352
282 211 281 1349
282 210 283 1347
284 211 288 1348
281 211 285 1353
278 213 280 1351
280 232 282 1356
279 213 285 1351
276 215 285 1348
277 216 278 1359
278 216 279 1353
272 214 283 1358
276 216 276 1351
278 214 284 1357
275 217 276 1353
270 217 277 1353
272 220 277 1351
275 220 272 1356
275 1353 273 224
277 236 282 1355
272 1353 273 233
273 222 268 1358
270 219 277 1361
274 218 280 1358
272 1355 271 243
If we now look at carefully at these groups you can distinguish two types of groups:
- ``272 1355 271 243``
- ``274 218 280 1358``
So the first group is defined by a high 2nd and the second group has a high 4th pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: console
00000000000000000000000001010001
Each (group) of numbers has a specific meaning:
- ID: 0 till 25(Convert the binary code to decimal to get the correct id)
- All: 26
- State: 27
- Unit: 28 till 31
.. code-block:: console
00000000000000000000000001 0 1 0001
- The ``ID`` is defined as a binary number
- The ``All`` tells us if a code was meant for all devices with the same ID
- The ``State`` defines whether a devices needs to be turned On or Off
- The ``Unit`` is also defined as a binary number
So this code represents:
- ID: 1
- All: Single
- State: Dawn
- Unit: 1
Another example:
- ID: 123456
- All: All
- State: Dusk
- Unit: 15
.. code-block:: console
00000000011110001001000000101111
@@ -0,0 +1,4 @@
Meteoscan W1XXX
===============
.. include:: _alecto_wx500.rst
@@ -0,0 +1,146 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Ninja Blocks Weather Sensor
===========================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+---------------------+
| **Brand** | **Protocol** |
+------------------+---------------------+
| Ninja Blocks | ninjablocks_weather |
+------------------+---------------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "ninjablocks_weather" ],
"id": [{
"id": 1,
"unit": 1
}],
"temperature": 18.90,
"humidity": 41.00
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 3 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| temperature | -50 - 205.99 |
+------------------+-----------------+
| humidity | 0 - 99 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comments
This weather station was available at the Lidl. Description for device could be: “Auriol IAN 89210 FUNK-WEATHER STATION/RADIO CONTROLLED WEATHER”, Hama EWS-750 (not confirmed) and IAN 55982 (neither confirmed). The sensor can be identified by the option to choose from 3 different channels.
Humidity and battery assumed to be supported by this protocol, but might not be. The battery function is not tested 100% and humidity seems to vary regularly. Please be aware that the ID of a sensor is actually the channel.
.. rubric:: Protocol
The protocol sends 74 pulses like:
.. code-block:: guess
1083 860 966 986 1970 1953 2083 1829 1927 1014 938 1978 1943 993 946 1003 953 1983 2056 877 934 1020 931 1070 884 2013 1893 1012 930 2008 923 1019 1995 1930 925 1026 978 985 1891 1052 907 1036 913 2031 901 1034 916 1067 1881 1988 971 1004 890 1060 754 72330
The pulse stream uses the “Bi-Phase Mark Code” (BMC) or Frequencey/Double Frequency (F2F) principle as defined in ISO/IEC7811.
The first 6 pulses are the SYNC header and the last pulse is the footer. These are meant to identify the pulses as genuine. We check for their presence, an error in the first pulse of the header is tolerated, if the second sync pulse after the Unit code and the parity bit is correct, the length of the footer pulse is used to identify the protocol and as end of data transmission.
The first step is to transform this pulse stream into 36 logical bits We can group the sequence of bits into the following groups A to H:
.. code-block:: guess
AAAA BBBB CC DDD EEEEEEE FFFFFFFFFFFFFFF G H
1100 0001 00 110 0111001 010011011011001 1 F
Each of the groups of bits (A to H) has a specific meaning:
+-----------+-----------+-----------------+------------+----------------------------------------+
| **Group** | **Bit #** | **Config name** | **Range** | **Description** |
+-----------+-----------+-----------------+------------+----------------------------------------+
| A | 0-3 | 12 | SYNC Header |
+-----------+-----------+-----------------+------------+----------------------------------------+
| B | 4-7 | unit | 0 to 15 | Unit Code |
+-----------+-----------+-----------------+------------+----------------------------------------+
| C | 8-9 | id | 0 to 3 | Channel Code |
+-----------+-----------+-----------------+------------+----------------------------------------+
| D | 10-12 | 110 | Sync Data |
+-----------+-----------+-----------------+------------+----------------------------------------+
| E | 13-19 | humidity | 0 to 100 | Humidity in % |
+-----------+-----------+-----------------+------------+----------------------------------------+
| F | 20-34 | temperature | 0 to 32767 | Temperature -50°C to 205,99°C |
+-----------+-----------+-----------------+------------+----------------------------------------+
| G | 35 | 0,1 | Even Parity Bit |
+-----------+-----------+-----------------+------------+----------------------------------------+
| H | 36 | Footer or gap pulse followed by Footer |
+-----------+-----------+-----------------+------------+----------------------------------------+
.. code-block:: console
{
"code": {
"id": 0,
"unit": 1,
"temperature": 2769,
"humidity": 5700
},
"origin": "receiver",
"protocol": "ninjablocks_weather",
"uuid": "0000-00-00-b4-46a46b",
"repeats": 1
}
@@ -0,0 +1,4 @@
Soens Weather Station
=====================
.. include:: _conrad.rst
@@ -0,0 +1,187 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
TCM 218943
==========
.. versionadded:: 8.0
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+-------------+----------------+
| **Brand** | **Protocol** |
+-------------+----------------+
| TCM 218943 | tcm |
+-------------+----------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "tcm" ],
"id": [{
"id": 104,
}],
"temperature": 22.70,
"humidity": 50.00,
"battery": 1
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 255 |
+------------------+-----------------+
| temperature | -39.9 - 59.9 |
+------------------+-----------------+
| humidity | 0 - 99 |
+------------------+-----------------+
| battery | 0 - 1 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 1 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Protocol
The tcm protocol sends 74 pulses like
.. code-block:: guess
194 1035 194 1994 194 1994 194 1035 194 1994 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1035 194 1994 194 1994 194 1035 194 1035 194 1994 194 1035 194 1035 194 1035 194 1035 194 1035 194 1994 194 1994 194 1994 194 1035 194 1035 194 1035 194 1994 194 1994 194 8037
The next step is to transform this output into groups of 2 pulses.
.. code-block:: guess
194 1035
194 1994
194 1994
194 1035
194 1994
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1035
194 1994
194 1994
194 1035
194 1035
194 1994
194 1035
194 1035
194 1035
194 1035
194 1035
194 1994
194 1994
194 1994
194 1035
194 1035
194 1035
194 1994
194 1994
194 8037
If we now look at carefully at these groups you can distinguish two types of groups:
#. ``194 1035``
#. ``194 1994``
So the first group is defined by a low 2nd, the second group has a high 2nd pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. We then get the following output:
.. code-block:: guess
011010000000000000110010000011100011
Each (group) of numbers has a specific meaning:
- ID: 1 till 8
- Battery: 9
- Button: 12
- Humidity: 17 till 24
- Temperature: 25 till 36
.. code-block:: guess
ID : 01101000 | Bat : 0 | But : 0 | Hum : 00110010 | Temp : 000011100011
- The ID is defined as a binary number.
- The Battery indicates low battery with 1.
- The Button is 1, if the button on the sensor is pressed.
- The Temperature is a 12 bits wide 2's complement signed binary number represents the actual temperature value in 0.1 °C units. DEC(AAAAAAAAAAAA)/10
- The Humidity is defined as a binary number.
.. code-block:: guess
ID : 104 | Bat : OK | But : not pressed | Hum : 50% | Temp : 22.7°C
This protocol was created for pilight with the help of this thread: http://forum.arduino.cc/index.php?topic=136836.0 (german)
.. rubric:: Comments
Please be aware that the ID of a sensor changes after you replace the batteries.
@@ -0,0 +1,185 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Teknihall GT-WT-02
==================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+--------------------+------------------+
| **Brand** | **Protocol** |
+--------------------+------------------+
| Teknihall GT-WT-02 | teknihall |
+--------------------+------------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "teknihall" ],
"id": [{
"id": 108
}],
"temperature": 18.90,
"humidity": 41.00,
"battery": 1
}
},
"gui": {
"weather": {
"name": "Weather Station",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 3 |
+------------------+-----------------+
| unit | 0 - 15 |
+------------------+-----------------+
| temperature | -15 - 60 |
+------------------+-----------------+
| humidity | 20 - 99 |
+------------------+-----------------+
| battery | 0 - 1 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-wind | 1 | 1 or 0 | Don't display the wind value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 1 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comments
This weather station is available at Aldi. Please be aware that there are several types of Teknihall weather stations and sensors available. Not all types might be compatible.
Please be aware that the ID of a sensor could change after you replace the batteries.
.. rubric:: Protocol
The protocol sends 76 pulses like:
.. code-block:: guess
532 2128 532 4256 532 4256 532 2128 532 4256 532 4256 532 2128 532 2128 532 2128 532 2128 532 2128 532 2128 532 2128 532 2128 532 2128 532 2128 532 4256 532 2128 532 4256 532 4256 532 4256 532 4256 532 2128 532 2128 532 2128 532 4256 532 4256 532 4256 532 2128 532 2128 532 2128 532 4256 532 4256 532 2128 532 2128 532 2128 532 2128 532 9044
The last 2 pulses are the footer. These are meant to identify the pulses as genuine. We don't it for further processing. The next step is to transform this output into 38 groups of 2 pulses (and thereby dropping the footer pulses).
.. code-block:: guess
532 2128
532 4256
532 4256
532 2128
532 4256
532 4256
532 2128
532 2128
532 2128
532 2128
532 2128
532 2128
532 2128
532 2128
532 2128
532 2128
532 4256
532 2128
532 4256
532 4256
532 4256
532 4256
532 2128
532 2128
532 2128
532 4256
532 4256
532 4256
532 2128
532 2128
532 2128
532 4256
532 4256
532 2128
532 2128
532 2128
532 2128
532 9044
If we now look at carefully at these groups you can distinguish two types of groups:
- ``540 2128``
- ``540 4256``
So the first group is defined by a low 2nd, the second group has a high 2nd pulse. So we take either of these two pulses to define a 0 or a 1. In this case we say a high 2nd pulse means a 1 and a low 2nd pulse means a 0. The binary conversion could look as follows:
.. code-block:: guess
0101111100111000000011001011001010111
Each (group) of numbers has a specific meaning:
- ID: 0 till 7
- Temperature: 14 till 23
- Humidity: 24 till 30
.. code-block:: guess
01011111 001110 0000001100 1011001 010111
- The ID is defined as a binary number
- The Temperature is defined as a binary number and represents the temperature
- The Humidity is defined as a binary number and represents the humidity
This protocol was created for pilight with the help of this thread: http://forum.pilight.org/Thread-Connect-digital-weather-sensor
@@ -0,0 +1,4 @@
TFA
===
.. include:: _conrad.rst
@@ -0,0 +1,4 @@
Ventus WSXXX
============
.. include:: _alecto_wx500.rst
@@ -0,0 +1,8 @@
API
===
.. toctree::
:maxdepth: 3
program/index
weather/index
@@ -0,0 +1,9 @@
Program
===========
.. toctree::
:maxdepth: 1
lirc
program
xbmc
@@ -0,0 +1,98 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Lirc
====
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"ab": {
"protocol": [ "lirc" ],
"id": [{
"remote": "logitech"
}],
"code": "000000000000e204",
"repeat": 1,
"button": "KEY_ARROWDOWN"
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| remote | *any value* |
+------------------+-----------------+
| code | *any value* |
+------------------+-----------------+
| repeat | 1 - 999 |
+------------------+-----------------+
| button | *any value* |
+------------------+-----------------+
.. rubric:: Comments
The Lirc protocol tries to automatically connect to Lirc when pilight starts. When a connection can be made, it will send the same output as shown with ``irw`` in a pilight format.
.. code-block:: console
root@pi:~# irw
000000037ff07be0 00 KEY_ARROWDOWN logitech-harmony-300i
.. code-block:: console
root@pi:~# pilight-receive
{
"code": {
"id": "000000000000e204",
"repeat": "01",
"button": "KEY_ARROWDOWN",
"remote": "logitech"
},
"origin": "receiver",
"protocol": "lirc"
}
Whenever, a connection to Lirc is lost, pilight will try to automatically reconnect.
All signal processing will be done by Lirc, so make sure you have a working Lirc configuration. Tutorials on this can be found all around the internet.
pilight tries to connect to the lirc socket found in ``/dev/lircd`` so make sure it exists or a symlink to the original socket is created to ``/dev/lircd``.
**Raspbian Kernels 3.18 and higher**
The most recent Raspbian release, with Pi 2 support, switches to a new kernel (3.18), and includes a configuration change to enable Device Tree support by default.
You do need to add ``dtoverlay=lirc-rpi`` to ``/boot/config.txt``.
Depending on your hardware setup, ``lirc-rpi`` module parameters are added to the end of the dtoverlay line: ``gpio_in_pin=16,gpio_in_pull=high,gpio_out_pin=17``
Example:
.. code-block:: console
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
@@ -0,0 +1,124 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Program
=======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-t --running start the program
-f --stopped stop the program
-n --name=name name of the program
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"XBMC": {
"protocol": [ "program" ],
"id": [{
"name": "xbmc"
}],
"program": "/usr/local/lib/xbmc/xbmc.bin",
"arguments": "",
"stop-command": "service xbmc stop",
"start-command": "service xbmc start",
"state": "running",
"pid": 11642
}
},
"gui": {
"xbmc": {
"name": "XBMC",
"group": [ "Programs" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| name | *any value* |
+------------------+-----------------+
| arguments | *any value* |
+------------------+-----------------+
| stop-command | *any value* |
+------------------+-----------------+
| start-command | *any value* |
+------------------+-----------------+
| state | | starting |
| | | running |
| | | stopped |
+------------------+-----------------+
| pid | 0 - 9 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-------------------------------------------------+
| poll-interval | 1 | >= 1 | How ofter do we want to check the program state |
+------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| readonly | 0 | 1 or 0 | Disable controlling this device from the GUIs |
+------------------+-------------+------------+-----------------------------------------------+
| confirm | 0 | 1 or 0 | Ask for confirmation when switching device |
+------------------+-------------+------------+-----------------------------------------------+
.. rubric:: Comment
The program protocol takes two important arguments
- The program
- The arguments
You can run ``ps aux`` to find out what these are. An example:
.. code-block:: console
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 11622 0.0 2.3 20216 8860 tty4 Ssl+ 20:04 0:01 /usr/local/sbin/splash-daemon
root 11636 0.0 0.4 4096 1540 ? Ss 20:04 0:00 sudo -u xbian /usr/local/lib/xbmc/xbmc.bin --standalone -fs --lircdev /run/lirc/lircd
xbian 11642 22.5 12.6 390836 48280 ? RNl 20:04 15:09 /usr/local/lib/xbmc/xbmc.bin --standalone -fs --lircdev /run/lirc/lircd
xbian 11734 0.0 0.2 2692 1092 ? S 20:04 0:00 /bin/bash
root 11868 0.0 1.4 9732 5432 ? Ss 20:04 0:00 python /usr/local/sbin/upstart-xbmc-bridge.py
root 11908 0.0 0.0 0 0 ? S 20:06 0:00 [btrfs-delalloc-]
root 13078 0.0 0.0 0 0 ? S 21:05 0:00 [kworker/u2:0]
root 13085 0.0 0.0 0 0 ? S 21:08 0:00 [btrfs-worker-2]
root 13166 0.0 0.0 0 0 ? S 21:10 0:00 [kworker/u2:1]
root 13186 0.0 0.2 4424 1116 pts/2 R+ 21:11 0:00 ps aux
In thise case, i want to control XBMC. The xbian entry with the PID 11642 is what i want to use. The first word is the program name. In this case ``/usr/local/lib/xbmc/xbmc.bin``. Everything that comes after are the arguments ``–standalone -fs –lircdev /run/lirc/lircd``. pilight will now check for a program that matches these exact parameters. So the protocol looks for processes matching those lines and when a process is found, it updates the pid value accordingly. (The pid is just informative.)
If you omit the arguments value, all matching programs will be processes with or without matching arguments. If there are more than once matches, pilight will use the first.
@@ -0,0 +1,115 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
XBMC / Kodi
===========
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"xbmc": {
"protocol": [ "xbmc" ],
"id": [{
"server": "127.0.0.1",
"port": 9090
}],
"action": "shutdown",
"media": "none"
}
},
"gui": {
"xbmc": {
"name": "XBMC",
"group": [ "Programs" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| server | *valid ip* |
+------------------+-----------------+
| port | 1 - 65535 |
+------------------+-----------------+
| action | | shutdown |
| | | home |
| | | play |
| | | pause |
| | | active |
| | | inactive |
+------------------+-----------------+
| media | | none |
| | | episode |
| | | movie |
| | | movies |
| | | song |
| | | screensaver |
+------------------+-----------------+
.. note::
- The ``shutdown`` and ``home`` actions are only allowed for the ``none`` media.
- The ``play``, ``home``, and ``pause`` actions are only allowed for the ``episode``, ``movie``, ``movies``, or ``song`` media.
- The ``active`` and ``inactive`` actions are only allowed for the ``screensaver`` media.
.. rubric:: Optional Settings
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| show-media | 1 | 1 or 0 | Don't display the media icon |
+------------------+-------------+------------+-----------------------------------------------+
| show-action | 1 | 1 or 0 | Don't display the action icon |
+------------------+-------------+------------+-----------------------------------------------+
.. rubric:: Comment
The XBMC protocol will try to connect to a XBMC instance. However, make sure the JSON-RPC API is `enabled <http://kodi.wiki/view/JSON-RPC_API#Enabling_JSON-RPC>`_ in XBMC. You don't need to do anything more. Whenever a connection to XBMC is lost, the protocol will automatically try to reconnect. The XBMC protocol sends several messages depending on the actions in XBMC.
+-----------+----------------+
| **Media** | **Action** |
+-----------+----------------+
| movie | play, pause |
+-----------+----------------+
| song | play, pause |
+-----------+----------------+
| episode | play, pause |
+-----------+----------------+
| none | shutdown, home |
+-----------+----------------+
The stop event isn't recording, but pilight will interpret as the home action of the none media. So when XBMC is started or when nothing plays, the action will be home. When pilight can't connect to XBMC or when the connection is lost the shutdown action of the none media will be sent.
Important
pilight uses JSON-RPC via TCP-Port 9090. Don't mix it up with JSON-RPC via HTTP which is available over port 8080 by default (http://Kodi:8080/jsonrpc). This setting is hidden in Kodi/XBMC.
@@ -0,0 +1,9 @@
Weather
=======
.. toctree::
:maxdepth: 1
wunderground
openweathermap
sunriseset
@@ -0,0 +1,122 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
OpenWeatherMap
==============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"outside": {
"protocol": [ "openweathermap" ],
"id": [{
"location": "amsterdam",
"api": "1234567890",
"country": "nl"
}],
"humidity": 76.00,
"temperature": 7.00,
"sunrise": 7.00,
"sunset": 16.15,
"sun": "set",
"update": 1
}
},
"gui": {
"outside": {
"name": "Temperature",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+----------------------------------+
| **Option** | **Value** |
+------------------+----------------------------------+
| location | *valid openweathermap location* |
+------------------+----------------------------------+
| country | *valid country abbreviation* |
+------------------+----------------------------------+
| temperature | -100.00 - 100.00 |
+------------------+----------------------------------+
| humitidy | 0.00 - 100.00 |
+------------------+----------------------------------+
| sunrise | 00.00 - 23.59 |
+------------------+----------------------------------+
| sunset | 00.00 - 23.59 |
+------------------+----------------------------------+
| sun | rise / set |
+------------------+----------------------------------+
| update | 0 - 1 |
+------------------+----------------------------------+
.. versionadded:: 8.0.7
+------------------+----------------------------------+
| **Option** | **Value** |
+------------------+----------------------------------+
| api | *valid openweathermap api key* |
+------------------+----------------------------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------------------------+
| poll-interval | 86400 | seconds | What should be the poll interval of the API |
+--------------------+-------------+------------+---------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+----------------------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| sunriseset-decimals | 2 | number | How many decimals the GUIs should display for sunrise/sunset time |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-battery | 0 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+----------------------------------------------------------------------+
.. rubric:: Comment
#. Please notice that the open weather map interval cannot be less than 10 minutes (600 seconds) to respect open weather map traffic and policy
@@ -0,0 +1,138 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Sunriseset
==========
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"outside": {
"protocol": [ "sunriseset" ],
"id": [{
"longitude": 1.2345,
"latitude": 50.607080
}],
"sunrise": 7.00,
"sunset": 16.15,
"sun": "set"
}
},
"gui": {
"sun": {
"name": "Sunrise / Sunset",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+----------------------+
| **Option** | **Value** |
+------------------+----------------------+
| longitude | -180.0000 - 180.0000 |
+------------------+----------------------+
| latitude | -90.0000 - 90.0000 |
+------------------+----------------------+
| sunrise | 00.00 - 23.59 |
+------------------+----------------------+
| sunset | 00.00 - 23.59 |
+------------------+----------------------+
| sun | rise / set |
+------------------+----------------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+----------------------+-------------+------------+----------------------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| sunriseset-decimals | 2 | number | How many decimals the GUIs should display for sunrise/sunset time |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-sunriseset | 0 | 1 or 0 | Don't display the sunrise /sunset |
+----------------------+-------------+------------+----------------------------------------------------------------------+
.. rubric:: Comment
The sunriseset will send three messages:
#. When the sunset time has been arrived.
#. When the sunrise time has been arrived.
#. After midnight so all values can be updated for a new day.
When using sunriseset in eventing, keep in mind of the following; The output of sunriseset.sunset and sunriseset.sunrise is just a number, so the time 17:00 equals 17.00. When using it in eventing make sure you get usable numbers. For example the time for sunriseset.sunset is 16:30
.. code-block:: guess
:linenos:
IF ((sunrisesetdev.sunset == (datetime.hour + (datetime.minute / 100))) AND datetime.second == 0) THEN .."
pilight will see this:
.. code-block:: guess
:linenos:
IF ((16.30 == (16 + (30 / 100))) AND 0 == 0) THEN ..."
The math pilight will use: 16.30 == 16.30
When you look at the result you will see that the datetime.minute 30 will give 0.30 in the used rule (in normal case divide minutes through 100)
Using the sunriseset.
Example
.. code-block:: guess
:linenos:
IF sunrisesetdev.sun IS set THEN ....
IF sunrisesetdev.sun IS rise THEN ....
Please note that with the three messages mentioned above, the first rule fires two times: At sunset, and at midnight (sunrisesetdev.sun is either set or rise, and will be set at midnight). So, it's better to use
.. code-block:: guess
:linenos:
IF (DATE_FORMAT(CurrentDateTime, %H.%M) == sunrisesetdev.sunset AND CurrentDateTime.second == 0) THEN ...
with CurrentDateTime as a ``datetime`` device.
.. rubric:: Notes
ntpserver has been removed from the sunriseset id. Instead, ntp-servers are defined in the settings section of config.json in an array like this:
.. code-block:: json
:linenos:
{
"ntp-servers": [ "0.nl.pool.ntp.org", "1.nl.pool.ntp.org", "..." ],
"ntp-sync": 1
}
Both the datetime and sunriseset protocol will use the ntp time to adjust their time when needed.
@@ -0,0 +1,119 @@
.. |yes| image:: ../../../images/yes.png
.. |no| image:: ../../../images/no.png
.. role:: underline
:class: underline
Weather Underground
===================
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"outside": {
"protocol": [ "wunderground" ],
"id": [{
"api": "1ihn472a6ea384jd",
"location": "amsterdam",
"country": "nl"
}],
"humidity": 76.00,
"temperature": 7.00,
"sunrise": 7.00,
"sunset": 16.15,
"sun": "set",
"update": 1
}
},
"gui": {
"outside": {
"name": "Temperature",
"group": [ "Outside" ],
"media": [ "all" ]
}
}
}
+------------------+--------------------------------------+
| **Option** | **Value** |
+------------------+--------------------------------------+
| api | *valid weather underground api key* |
+------------------+--------------------------------------+
| location | *valid weather underground location* |
+------------------+--------------------------------------+
| country | *valid country abbreviation* |
+------------------+--------------------------------------+
| temperature | -100.00 - 100.00 |
+------------------+--------------------------------------+
| humitidy | 0.00 - 100.00 |
+------------------+--------------------------------------+
| sunrise | 00.00 - 23.59 |
+------------------+--------------------------------------+
| sunset | 00.00 - 23.59 |
+------------------+--------------------------------------+
| sun | rise / set |
+------------------+--------------------------------------+
| update | 0 - 1 |
+------------------+--------------------------------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------------------------+
| poll-interval | 86400 | seconds | What should be the poll interval of the API |
+--------------------+-------------+------------+---------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+----------------------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| sunriseset-decimals | 2 | number | How many decimals the GUIs should display for sunrise/sunset time |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+----------------------------------------------------------------------+
| show-battery | 0 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+----------------------------------------------------------------------+
.. rubric:: Comment
#. Please notice that the weather underground interval cannot be less than 15 minutes due to daily polling restrictions.
#. This restriction also counts for the update button in the webgui. You won't receive updates within the 15 minutes between two updates.
#. This wiki page shows a random API key. Please register yourself at wunderground.com to get your own.
@@ -0,0 +1,111 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Dimmer
======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-t --on send an on signal
-f --off send an off signal
-i --id=id control a device with this id
-d --dimlevel=dimlevel send a specific dimlevel
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"dimmer": {
"protocol": [ "generic_dimmer" ],
"id": [{
"id": 100
}],
"state": "off",
"dimlevel": 0
}
},
"gui": {
"dimmer": {
"name": "Dimmer",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 99999 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
| dimlevel | 0 - 99999 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| readonly | 0 | 1 or 0 | Disable controlling this device from the GUIs |
+------------------+-------------+------------+-----------------------------------------------+
| confirm | 0 | 1 or 0 | Ask for confirmation when switching device |
+------------------+-------------+------------+-----------------------------------------------+
.. versionadded:: 8.0.6
.. note::
The minimum and maximum is dependent on the ``Device Settings`` below.
The actual dimlevel is not validated against these ranges.
:underline:`GUI Settings`
+------------------+-------------+------------+------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+------------------+
| dimlevel-minimum | 0 | number | Minimum dimlevel |
+------------------+-------------+------------+------------------+
| dimlevel-maximum | 15 | number | Maximum dimlevel |
+------------------+-------------+------------+------------------+
.. deprecated:: 8.0.5
.. note::
The minimum and maximum is dependent on the ``Device Settings`` below.
:underline:`Device Settings`
+------------------+-------------+------------+------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+------------------+
| dimlevel-minimum | 0 | number | Minimum dimlevel |
+------------------+-------------+------------+------------------+
| dimlevel-maximum | 15 | number | Maximum dimlevel |
+------------------+-------------+------------+------------------+
@@ -0,0 +1,13 @@
Generic
=======
.. toctree::
:maxdepth: 3
dimmer
label
raw
screen
switch
weather
webcam
@@ -0,0 +1,69 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Label
=====
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-i --id=id control a device with this id
-l --label=label show a specific label
-c --color=color give the label a specific color
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"label": {
"protocol": [ "generic_label" ],
"id": [{
"id": 100
}],
"label": "test1234",
"color": "red"
}
},
"gui": {
"label": {
"name": "Label",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 99999 |
+------------------+-----------------+
| label | *any value* |
+------------------+-----------------+
| color | *any color* |
+------------------+-----------------+
.. note::
Please notice that the label color is not validated in any way. The color information is just forwarded to the GUIs as is. So it could be that some GUIs do not support certain color naming. Using hex colors is therefore the safest, e.g. #000000.
@@ -0,0 +1,33 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Raw
===
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |no| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-c --code="raw" raw code divided by spaces
(just like the output of debug)
.. rubric:: Config
*None*
@@ -0,0 +1,74 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Screen
======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-t --up send an up signal
-f --down send a down signal
-i --id=id control a device with this id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"screen": {
"protocol": [ "generic_screen" ],
"id": [{
"id": 100
}],
"state": "down"
}
},
"gui": {
"screen": {
"name": "Screen",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 99999 |
+------------------+-----------------+
| state | up/down |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| readonly | 0 | 1 or 0 | Disable controlling this device from the GUIs |
+------------------+-------------+------------+-----------------------------------------------+
| confirm | 0 | 1 or 0 | Ask for confirmation when switching device |
+------------------+-------------+------------+-----------------------------------------------+
@@ -0,0 +1,74 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Switch
======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-t --on send an on signal
-f --off send an off signal
-i --id=id control a device with this id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"switch": {
"protocol": [ "generic_switch" ],
"id": [{
"id": 100
}],
"state": "off"
}
},
"gui": {
"switch": {
"name": "Switch",
"group": [ "Living" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 99999 |
+------------------+-----------------+
| state | on / off |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`GUI Settings`
+------------------+-------------+------------+-----------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+------------------+-------------+------------+-----------------------------------------------+
| readonly | 0 | 1 or 0 | Disable controlling this device from the GUIs |
+------------------+-------------+------------+-----------------------------------------------+
| confirm | 0 | 1 or 0 | Ask for confirmation when switching device |
+------------------+-------------+------------+-----------------------------------------------+
@@ -0,0 +1,97 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Weather
=======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |yes| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
.. code-block:: console
-t --temperature=temperature set the temperature
-h --humidity=humidity set the humidity
-b --battery=battery set the battery level
-i --id=id control a device with this id
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "generic_weather" ],
"id": [{
"id": 100
}],
"temperature": 23.00,
"humidity": 76.00,
"battery": 0
}
},
"gui": {
"weather": {
"name": "Weather",
"group": [ "Weather" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| id | 0 - 99999 |
+------------------+-----------------+
| temperature | 0.00 - 100.00 |
+------------------+-----------------+
| humidity | 0.00 - 100.00 |
+------------------+-----------------+
| battery | 0 - 1 |
+------------------+-----------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+---------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+---------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+---------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+---------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 2 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-battery | 0 | 1 or 0 | Don't display the battery value |
+----------------------+-------------+------------+-----------------------------------------------------------+
@@ -0,0 +1,80 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
Webcam
=======
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |no| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
*None*
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"webcam": {
"protocol": [ "generic_webcam" ],
"id": [{
"id": 100
}],
"url": "http://x.x.x.x:xxxx"
}
},
"gui": {
"webcam": {
"name": "Webcam",
"group": [ "Frontdoor" ],
"media": [ "all" ]
}
}
}
+------------------+-------------------+
| **Option** | **Value** |
+------------------+-------------------+
| id | 0 - 99999 |
+------------------+-------------------+
| url | *valid image url* |
+------------------+-------------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------+
| poll-interval | 10 | number | Refresh webcam image interval |
+--------------------+-------------+------------+-------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| image-width | NULL | number | Webcam image width |
+----------------------+-------------+------------+-----------------------------------------------------------+
| image-height | 300 | number | Webcam image height |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-webcam | 1 | 1 or 0 | Don't display the webcam image |
+----------------------+-------------+------------+-----------------------------------------------------------+
@@ -0,0 +1,99 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| 1-Wire DHT11 | dht11 |
+------------------+--------------+
| 1-Wire DHT22 | dht22 |
+------------------+--------------+
| 1-Wire AM2302 | am2302 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "dht22" ],
"id": [{
"gpio": 7
}],
"temperature": 5.2,
"humidity": 1.7,
"poll-interval": 5
}
},
"gui": {
"temperature": {
"name": "Temperature Sensor",
"group": [ "Misc" ],
"media": [ "all" ]
}
}
}
+------------------+-----------------+
| **Option** | **Value** |
+------------------+-----------------+
| gpio | 0 - 255 |
+------------------+-----------------+
| temperature | -40 - 80 |
+------------------+-----------------+
| humidity | 0 - 100 |
+------------------+-----------------+
.. note::
The ``gpio`` value should be a valid GPIO for the platform used
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| poll-interval | 5 | seconds | What should be the poll interval of the sensors |
+--------------------+-------------+------------+-------------------------------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+-------------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 1 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| humidity-decimals | 1 | number | How many decimals the GUIs should display for humidity |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-humidity | 1 | 1 or 0 | Don't display the humidity value |
+----------------------+-------------+------------+-----------------------------------------------------------+
@@ -0,0 +1,115 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| BMP180 | bmp180 |
+------------------+--------------+
| BMP085 | bmp085 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"bmp180": {
"protocol": [ "bmp180" ],
"id": [{
"id": "0x77"
}],
"temperature": 19.1,
"pressure": 1006.8,
"oversampling": 1
}
},
"gui": {
"temperature": {
"name": "Temperature Sensor",
"group": [ "Misc" ],
"media": [ "all" ]
}
}
}
+------------------+------------------+
| **Option** | **Value** |
+------------------+------------------+
| id | *valid i2c path* |
+------------------+------------------+
| temperature | -40 - 85 |
+------------------+------------------+
| pressure | 300 - 1100 |
+------------------+------------------+
| oversampling | 0 - 3 |
+------------------+------------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| poll-interval | 10 | seconds | What should be the poll interval of the sensors |
+--------------------+-------------+------------+-------------------------------------------------+
| humidity-offset | 0 | number | Correct humidity value |
+--------------------+-------------+------------+-------------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| pressure-decimals | 2 | number | How many decimals the GUIs should display for pressure |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-pressure | 1 | 1 or 0 | Don't display the pressure value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comments
Pressure is provided in hectopascal (hPa) and temperature in degrees Celsius (°C).
Option ``oversampling`` sets the BMP180 hardware accuracy mode which is relevant for pressure readings only.
+-----------------------+--------------+-------------------------+------------------------------------+
| Mode | oversampling | Internal no. of samples | Conversion time pressure max. [ms] |
+-----------------------+--------------+-------------------------+------------------------------------+
| ultra low power | 0 | 1 | 4.5 |
+-----------------------+--------------+-------------------------+------------------------------------+
| standard | 1 | 2 | 7.5 |
+-----------------------+--------------+-------------------------+------------------------------------+
| high resolution | 2 | 4 | 13.5 |
+-----------------------+--------------+-------------------------+------------------------------------+
| ultra high resolution | 3 | 8 | 25.5 |
+-----------------------+--------------+-------------------------+------------------------------------+
The algorithm for pressure and temperature measurement is based on the specification in the `official datasheet <https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST-BMP180-DS000-12~1.pdf>`_.
@@ -0,0 +1,145 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| 1-Wire DS18B20 | ds18b20 |
+------------------+--------------+
| 1-Wire DS18S20 | ds18s20 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "ds18b20" ],
"id": [{
"id": "0000052ba3ac"
}],
"temperature": 19.562
}
},
"gui": {
"temperature": {
"name": "Temperature Sensor",
"group": [ "Misc" ],
"media": [ "all" ]
}
}
}
+------------------+-------------------+
| **Option** | **Value** |
+------------------+-------------------+
| id | *valid 1-wire id* |
+------------------+-------------------+
| temperature | -55 - 125 |
+------------------+-------------------+
.. note:: **DS18B20**
Valid id's can be found in the path ``/sys/bus/w1/devices/`` starting with ``28-``. The prefix ``28-`` should be removed from the id.
.. note:: **DS18S20**
Valid id's can be found in the path ``/sys/bus/w1/devices/`` starting with ``10-``. The prefix ``10-`` should be removed from the id.
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| poll-interval | 5 | seconds | What should be the poll interval of the sensors |
+--------------------+-------------+------------+-------------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
.. note:: DS18B20
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 2 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. note:: DS18S20
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 3 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comments
Before pilight can see the sensor, you have to run the following commands:
.. code-block:: console
sudo modprobe w1-gpio
sudo modprobe w1-therm
To make sure this is done every reboot, edit ``/etc/modules`` and add the following lines:
.. code-block:: console
w1-gpio
w1-therm
If you have enabled "Device tree support" (since Raspbian with kernel 3.18 it's the default configuration), you have to add the following line to ``/boot/config.txt``:
.. code-block:: console
dtoverlay=w1-gpio-pullup,gpiopin=4
.. note:: The GPIO pin number is the BCM GPIO and not the WiringX number.
This will load the module ``w1-gpio``, so you only have to add ``w1-therm`` to your ``/etc/modules``.
To find the correct sensor id, you have to run the following commands:
.. code-block:: console
cd /sys/bus/w1/devices
ls
The result will look like:
.. code-block:: console
28-0000055bd776 w1_bus_master1
Use the part after 28- as the correct id, e.g. 0000055bd776.
@@ -0,0 +1,131 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| LM75 | lm75 |
+------------------+--------------+
| LM76 | lm76 |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"temperature": {
"protocol": [ "lm75" ],
"id": [{
"id": "0x49"
}],
"temperature": 17.2
}
},
"gui": {
"temperature": {
"name": "Temperature Sensor",
"group": [ "Misc" ],
"media": [ "all" ]
}
}
}
+------------------+-------------------+
| **Option** | **Value** |
+------------------+-------------------+
| id | *valid i2c id* |
+------------------+-------------------+
| temperature | -55 - 125 |
+------------------+-------------------+
.. versionchanged:: 8.0
.. code-block:: json
:linenos:
{
"devices": {
"temperature": {
"protocol": [ "lm75" ],
"id": [{
"id": "0x49",
"i2c-path": "/dev/i2c-0"
}],
"temperature": 17.2
}
},
"gui": {
"temperature": {
"name": "Temperature Sensor",
"group": [ "Misc" ],
"media": [ "all" ]
}
}
}
+------------------+-------------------+
| **Option** | **Value** |
+------------------+-------------------+
| id | *valid i2c id* |
+------------------+-------------------+
| i2c-path | *valid i2c path* |
+------------------+-------------------+
| temperature | -55 - 125 |
+------------------+-------------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| poll-interval | 5 | seconds | What should be the poll interval of the sensors |
+--------------------+-------------+------------+-------------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
.. note:: LM75
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 1 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. note:: LM76
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 3 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
@@ -0,0 +1,4 @@
1-Wire AM2302
=============
.. include:: _am2302.rst
@@ -0,0 +1,4 @@
BMP085
======
.. include:: _bmp180.rst

After

Width:  |  Height:  |  Size: 39 B

@@ -0,0 +1,4 @@
BMP180
======
.. include:: _bmp180.rst

After

Width:  |  Height:  |  Size: 39 B

@@ -0,0 +1,105 @@
.. |yes| image:: ../../images/yes.png
.. |no| image:: ../../images/no.png
.. role:: underline
:class: underline
CPU Temperature
===============
+------------------+-------------+
| **Feature** | **Support** |
+------------------+-------------+
| Sending | |no| |
+------------------+-------------+
| Receiving | |yes| |
+------------------+-------------+
| Config | |yes| |
+------------------+-------------+
.. rubric:: Supported Brands
+------------------+--------------+
| **Brand** | **Protocol** |
+------------------+--------------+
| Raspberry Pi | cpu_temp |
+------------------+--------------+
| Hummingboard | cpu_temp |
+------------------+--------------+
.. rubric:: Sender Arguments
*None*
.. rubric:: Config
.. code-block:: json
:linenos:
{
"devices": {
"weather": {
"protocol": [ "cpu_temp" ],
"id": [{
"id": 1
}],
"temperature": 59.397,
"poll-interval": 10
}
},
"gui": {
"temperature": {
"name": "Temperature Sensor",
"group": [ "Misc" ],
"media": [ "all" ]
}
}
}
+------------------+-------------------+
| **Option** | **Value** |
+------------------+-------------------+
| id | 0 - 99999 |
+------------------+-------------------+
| temperature | -40.000 - 85.000 |
+------------------+-------------------+
| poll-interval | 1 - 60 |
+------------------+-------------------+
.. rubric:: Optional Settings
:underline:`Device Settings`
+--------------------+-------------+------------+-------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+--------------------+-------------+------------+-------------------------------------------------+
| poll-interval | 5 | seconds | What should be the poll interval of the sensors |
+--------------------+-------------+------------+-------------------------------------------------+
| temperature-offset | 0 | number | Correct temperature value |
+--------------------+-------------+------------+-------------------------------------------------+
:underline:`GUI Settings`
+----------------------+-------------+------------+-----------------------------------------------------------+
| **Setting** | **Default** | **Format** | **Description** |
+----------------------+-------------+------------+-----------------------------------------------------------+
| temperature-decimals | 1 | number | How many decimals the GUIs should display for temperature |
+----------------------+-------------+------------+-----------------------------------------------------------+
| show-temperature | 1 | 1 or 0 | Don't display the temperature value |
+----------------------+-------------+------------+-----------------------------------------------------------+
.. rubric:: Comments
On the Raspberry Pi:
It is possible you need to first load the sensor module:
.. code-block:: console
sudo modprobe bcm2835_thermal
To make sure this is done every reboot, edit ``/etc/modules`` and add the following lines:
.. code-block:: console
bcm2835_thermal
@@ -0,0 +1,4 @@
1-Wire DHT11
=============
.. include:: _am2302.rst
Loaded 100 of 1030 files, more files were not shown because too many files have changed in this diff. Show more