Coder Social home page Coder Social logo

iobroker.tahoma's Introduction

Logo

NPM

NPM version License

Number of Installations (latest) Number of Installations (stable)

Github release status

Translation status

ioBroker.tahoma

An ioBroker adapter for Somfy Tahoma. This project has no affiliation with Somfy. Initially based on the script taken from https://forum.iobroker.net/post/336001 and forked from https://github.com/StrathCole/ioBroker.tahoma.

The adapter connects to the Tahomalink end user API and controls the devices. set up through Tahoma Box (and most likely Connexoon).
The adapter is not feature-complete, yet, but it should support most actions for controlling blinds and shutters etc.

Please also read the FAQ in case of issues first.

Currently tested devices

Generally, this adapter should support all devices that can be accessed via tahomalink.com, but for the adapter developer it is difficult to guarantee this. Mainly, because the documention of the used Somfy-API is (at least publically) non-existant and the developer can only test Somfy-devices which he owns himself, or is able to test with support of willing participants.

Devices that can be controlled via tahomalink.com usually are also supported by this adapter. This includes:

Device Support for Online API Support for Local API
Tahoma box
Connexoon ✓ (proof)
Tahoma Switch
Connectivity Kit ✓ (proof) ✗ (proof)

The following Somfy devices were verified to work with this adapter:

  • S&SO RS100 io
  • Oximo io
  • Sun sensor Sunis io
  • Temperature sensor io
  • Smoke Sensor io
  • Adapter Plug io

Configuration

The following configuration parameters are supported by the adapter.

Parameter (Default) value Description
Username <your Tahomalink user> Required to authenticate your Tahoma account.
Password <Your Tahomalink password> Required to authenticate your Tahoma account.
Polling interval 20000 Time (in milliseconds) after which the adapter will try to get new data from Tahomalink.
PIN of the Tahoma box format similar to 1234-5678-9012 Only for LocalAPI Unique PIN of your Tahoma box provided by Somfy. More infos on how to activate/use it here
Use MDNS false Only for LocalAPI If set to true will try to use mDNS to resolve local hostname of you Tahoma-Box. Might not be supported by all routers, hence it is deactivated by default.
Login Attempts 1 2 3 Amount of attempts to login again after login failure.
Delay between login attempts 1 2 30 Time (in seconds) to wait between login attempts.
Delay after failed login 1 2 120 Time (in seconds) to wait, after all consecutive login attempts have failed.
Delay before applyqueue retry 1 2 1500 Time (in milliseconds) to wait, before a second attempt is made to send changes from the internal apply queue to Tahoma, in case it got lost.

1 These configuration values are only visible and configurable in Admin 5 (new GUI), or later.

2 All values are related to login to Tahomalink, which is mostly a blackbox from development point of view. If you configure the numbers too low here, experience has shown that there is a good chance Somfy will temporarily lock your account, so lower default values here with care!

States

tahoma.X.location

The state in this tree contain the personal information of the user like city, street address and longitude/latitude.

tahoma.X.devices.*.deviceURL

This state contains the device URL that is used by Tahoma to identify the device.

tahoma.X.devices.*.commands

These states contain button commands for controlling the devices. Most devices will support commands like close and open but also some more.
Some of the commands have a :slow at the end if supported by the device. Using those enables low speed or so-called silent mode.

tahoma.X.devices.*.states

These states contain current status of the devices as follows. Some of the states have a :slow at the end if supported by the device. Setting those enables low speed or so-called silent mode.

Device state Editable Purpose/Description
tahoma.X.devices.*.states.core:DeploymentState Provides information about and controls the state of current deployment. 100 means fully deployed, 0 is undeployed. Not all devices have this value, some have ClosureState instead.
tahoma.X.devices.*.states.core:TargetDeploymentState See tahoma.X.devices.*.states.core:DeploymentState. Use this to e.g. change blind position directly.
tahoma.X.devices.*.states.coreClosureState Provides information about and controls the state of current closure. 100 means fully closed, 0 is open. Not all devices have this value, some have DeploymentState instead.
tahoma.X.devices.*.states.core:TargetClosureState See tahoma.X.devices.*.states.core:ClosureState
tahoma.X.devices.*.states.core:OrientationState Provides information about and ocntrols the orientation (e. g. for shutters) of slats. Not all devices offer this value
tahoma.X.devices.*.states.core:TargetOrientationState See tahoma.X.devices.*.states.core:OrientationState
tahoma.X.devices.*.states.core:NameState Contains the current name of the device.
tahoma.X.devices.*.states.core:OpenClosedState Contains closed if the device is 100% closed or 0% deployed and open otherwise.
tahoma.X.devices.*.states.core:PriorityLockTimerState If a sensor has locked the device this is stated here, e. g. a wind sensor blocking an awning.
tahoma.X.devices.*.states.core:RSSILevelState The current signal quality of the device.
tahoma.X.devices.*.states.core:StatusState available if the device is currently available.
tahoma.X.devices.*.states.io:PriorityLockLevelState See tahoma.X.devices.*.states.core:PriorityLockTimerState
tahoma.X.devices.*.states.io:PriorityLockOriginatorState See tahoma.X.devices.*.states.core:PriorityLockTimerState
tahoma.X.devices.*.states.moving States if the device is currently moving. 0 = stopped, 1 = up/undeploy, 2 = down/deploy, 3 = unknown direction
Remark:
This only works reliable if connected to the Tahoma (not Local) API, since the Local API does not provide enough action-event updates to compute this state correctly. core:MovingState should work in both cases though.

Changelog

See Changelog.

License

The MIT License (MIT)

Copyright (c) 2020-2023 Marius Burkard & Excodibur

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

iobroker.tahoma's People

Contributors

apollon77 avatar cloudjunkie avatar dependabot[bot] avatar excodibur avatar ldittmar81 avatar lowadeth avatar mcm1957 avatar strathcole avatar unclesamswiss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iobroker.tahoma's Issues

Compatibility check to js-controller 3.3 and Admin5 React UI

Dear Adapter developer,

with js-controller 3.2 and js-controller 3.3 some additional checks were added to make sure that created objects match to the specifications and also written state values match to the object definition.

If something is not correct this is logged as 'warning' or 'info' log.

Please take the time to verify your adapter by ideally starting with a fresh instance and do some actions and verify the log. If you see a warn log there from these checks please adjust the adapter and fix the relevant cases.

For questions please refer to ioBroker/ioBroker.js-controller#1301

Additionally we are preparing Admin 5 which will have a completely rewritten UI. Please install Admin 5, activate that new UI and verify that the configuration of you adapter works as expected also there.

More informations on Admin 5 can be found in Forum https://forum.iobroker.net/topic/44282/test-adapter-admin-5-0-x-alpha-der-neuen-ui

Please close the issue after you checked it.

Thank you very much for your support!

Steuerung per "Target position" in %

Im homebridge-tahoma Adapter ist die Steuerung von Rollläden/Jalousien über die Angabe einer Ziel-Position in % möglich.
Es wäre schön, wenn das auch im ioBroker TaHoma Adapter möglich wäre.

TaHoma

ENOTFOUND

Hi,
sadly im still strugeling with the adapter. in the beginning it worked but after a while the connection via the internet api didnt work anymore because he could not login. I switched to the locale API but its not working either.

Im getting this error (i replaced my id by 1234-1234-1234):

tahoma.0 | 2022-06-06 13:09:32.845 | warn | {"error":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"gateway-1234-1234-1234"}}
-- | -- | -- | --
tahoma.0 | 2022-06-06 13:09:32.844 | warn | setup failed!
tahoma.0 | 2022-06-06 13:09:32.843 | warn | error during request: Error: getaddrinfo ENOTFOUND gateway-1234-1234-1234, request path: setup with payload:{}
tahoma.0 | 2022-06-06 13:09:32.627 | info | Using stored bearer token 629de067aa395421346a
tahoma.0 | 2022-06-06 13:09:32.623 | info | Adapter will connect to Tahoma Box via local API.
tahoma.0 | 2022-06-06 13:09:32.618 | info | Configured polling interval: 20000
tahoma.0 | 2022-06-06 13:09:32.616 | info | [START] Starting adapter tahoma v0.7.1.3

can anybody help?
thanks in advance

updates only at startup

Hello,

I have the newest adapter plugin 0.6.1. The Tahoma Box has also the newest firmware.
The adapter start and login to tahoma. All OK, all green.
But the commands don't work (open, close etc.).
The next problem are the state. If I open or close the blind (with tahoma app), the levels never update.
But only if I restart the plugin, the levels are update correctly.
What can I do?

Error: getaddrinfo EAI_AGAIN www.tahomalink.com

tahoma.0 2021-12-21 11:23:16.556 warn error during tahomalink request: Error: getaddrinfo EAI_AGAIN www.tahomalink.com, request path: setup/gateways/2005-XXXX-XXXX with payload:{}
tahoma.0 2021-12-21 11:23:08.494 warn error during tahomalink request: Error: getaddrinfo EAI_AGAIN www.tahomalink.com, request path: setup/gateways/2005-XXXX-XXXXwith payload:{}
tahoma.0 2021-12-21 11:23:00.428 warn error during tahomalink request: Error: getaddrinfo EAI_AGAIN www.tahomalink.com, request path: setup/gateways/2005-XXXX-XXXXwith payload:{}
tahoma.0 2021-12-21 11:22:52.364 warn error during tahomalink request: Error: getaddrinfo EAI_AGAIN www.tahomalink.com, request path: setup/gateways/2005-XXXX-XXXXwith payload:{}

Etwa zwei Tage läuft der Adapter ohne Probleme, dann wird das Logfile im Bereich von wenigen Sekunden von dieser Meldung geflutet und die Rollläden können nicht mehr gesteuert werden. Hab auch schon die Werte deutlich höher eingestellt. Gibt es da noch eine Möglichkeit etwas zu machen?

Gerät ist eine Tahoma Switch

Danke für deine Arbeit und das es eigentlich toll funktioniert, obwohl Somfy hier einige Steine in den Weg legt...

15 second error-retry delay is way too high in processApplyQueue when sending command fails

In processApplyQueue there is a constant of 15000ms such that in case of errors, i.e. it tries again to send a command after 15 seconds.

This is way too high (imagine that a simple user presses a button to open or close a shutter or dor, it doesnt work, he goes away and suddenly after 15 seconds it starts to move).

I strongly suggest to reduce that to at most like 1 seconds or 1.5 seconds, and if it fails again, discard the whole queue.

[Feature] Please consider reducing error logging | refresh device state failed

Relates to version adapter version 0.6.0

When the tohma site is out of order for any reason the adapter should log this event as he already does. But if the failure last longer than 2 or 3 retries the adapter should NOT log any more identical failures but only switch info.connected to false and (hopefully) log the reestablish of the link later.

Currently hundreths of warnings fill up the log without any addition information. One could switch to debug logging if he is interested in all errors. Optional a configuration switch could be implemnted to diasable suppression of redundant loggings if it is really desired.

Example of log following (only extract, not all messages):

tahoma.0 | 2022-03-29 15:38:47.014 | warn | refresh device state failed
-- | -- | -- | --
tahoma.0 | 2022-03-29 15:38:46.893 | info | eventRegisterID = d5e67ddd-98e4-e192-4d47-d4fa74774280
tahoma.0 | 2022-03-29 15:38:28.436 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:33:26.927 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:33:26.809 | info | eventRegisterID = d5e19b88-98e4-e192-4d47-d4fa0be86c9e
tahoma.0 | 2022-03-29 15:33:09.398 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:28:06.839 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:28:06.731 | info | eventRegisterID = d5dcb939-98e4-e192-4d47-d4fa46919185
tahoma.0 | 2022-03-29 15:27:48.992 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:22:46.768 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:22:46.655 | info | eventRegisterID = d5d7d6ee-98e4-e192-4d47-d4fa97d55352
tahoma.0 | 2022-03-29 15:22:29.795 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:17:26.687 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:17:26.577 | info | eventRegisterID = d5d2f4a0-98e4-e192-4d47-d4fa4770c731
tahoma.0 | 2022-03-29 15:17:12.044 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:12:06.641 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:12:06.527 | info | eventRegisterID = d5ce126e-98e4-e192-4d47-d4faea512946
tahoma.0 | 2022-03-29 15:11:49.578 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:06:46.519 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:06:46.414 | info | eventRegisterID = d5c92ffd-98e4-e192-4d47-d4fab249a065
tahoma.0 | 2022-03-29 15:06:28.926 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:01:26.447 | warn | refresh device state failed
tahoma.0 | 2022-03-29 15:01:26.314 | info | eventRegisterID = d5c44d99-98e4-e192-4d47-d4fab944eebb
tahoma.0 | 2022-03-29 15:01:09.190 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:56:06.323 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:56:06.211 | info | eventRegisterID = d5bf6b32-98e4-e192-4d47-d4fa2c04483a
tahoma.0 | 2022-03-29 14:55:50.708 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:50:46.255 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:50:46.140 | info | eventRegisterID = d5ba88ec-98e4-e192-4d47-d4fadcac4bf8
tahoma.0 | 2022-03-29 14:50:27.965 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:45:26.174 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:45:26.055 | info | eventRegisterID = d5b5a697-98e4-e192-4d47-d4fa1e2e4662
tahoma.0 | 2022-03-29 14:45:07.421 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:40:06.101 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:40:05.997 | info | eventRegisterID = d5b0c45d-98e4-e192-4d47-d4fab2bd2af1
tahoma.0 | 2022-03-29 14:39:48.127 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:34:46.051 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:34:45.949 | info | eventRegisterID = d5abe22c-98e4-e192-4d47-d4fa760eb9f4
tahoma.0 | 2022-03-29 14:34:31.446 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:29:26.265 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:29:26.151 | info | eventRegisterID = d5a700f6-98e4-e192-4d47-d4fa2e6aa647
tahoma.0 | 2022-03-29 14:29:07.577 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:24:25.855 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:24:05.848 | info | eventRegisterID = d5a21dc8-98e4-e192-4d47-d4fa96742c4c
tahoma.0 | 2022-03-29 14:23:47.502 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:19:25.906 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:18:45.811 | info | eventRegisterID = d59d3ba4-98e4-e192-4d47-d4fadcea788f
tahoma.0 | 2022-03-29 14:18:29.275 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:14:25.744 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:13:25.738 | info | eventRegisterID = d598595b-98e4-e192-4d47-d4fa2c908d7c
tahoma.0 | 2022-03-29 14:13:07.902 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:09:25.710 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:08:05.682 | info | eventRegisterID = d5937722-98e4-e192-4d47-d4fad4069a32
tahoma.0 | 2022-03-29 14:07:56.065 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:04:25.663 | warn | refresh device state failed
tahoma.0 | 2022-03-29 14:02:45.629 | info | eventRegisterID = d58e94ee-98e4-e192-4d47-d4fa2dd340b2
tahoma.0 | 2022-03-29 14:02:30.163 | warn | refresh device state failed
tahoma.0 | 2022-03-29 13:59:25.597 | warn | refresh device state failed
tahoma.0 | 2022-03-29 13:58:08.563 | warn | Body: "<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Overkiz - Universal HomeControl</title>\n <!-- PROD1 -->\n <style>\n body {\n font-family: Arial, Verdana, Helvetica, sans-serif;\n\tfont-size: 10pt;\n\tcolor: black;\n } \n </style>\n</head>\n<body>\n<div align=\"center\">\n<br/><br/><br/><br/>\n<table border=\"0\" width=\"90%\">\n <tr>\n <td width=\"50%\" align=\"center\"><img src=\"/error/overkiz_logo.gif\"/></td>\n <td>\n <p class=\"intro\">\n <b>Server is down for maintenance</b><br/>\n <br/>\n We are sorry for the inconvenience.<br/>\n Please try again in a few minutes.\n </p>\n </td>\n </tr>\n</table>\n</div>\n</body>\n\n</html>\n\n"
tahoma.0 | 2022-03-29 13:58:08.562 | warn | Response: {"statusCode":502,"body":"<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Overkiz - Universal HomeControl</title>\n <!-- PROD1 -->\n <style>\n body {\n font-family: Arial, Verdana, Helvetica, sans-serif;\n\tfont-size: 10pt;\n\tcolor: black;\n } \n </style>\n</head>\n<body>\n<div align=\"center\">\n<br/><br/><br/><br/>\n<table border=\"0\" width=\"90%\">\n <tr>\n <td width=\"50%\" align=\"center\"><img src=\"/error/overkiz_logo.gif\"/></td>\n <td>\n <p class=\"intro\">\n <b>Server is down for maintenance</b><br/>\n <br/>\n We are sorry for the inconvenience.<br/>\n Please try again in a few minutes.\n </p>\n </td>\n </tr>\n</table>\n</div>\n</body>\n\n</html>\n\n","headers":{"date":"Tue, 29 Mar 2022 11:58:05 GMT","server":"Apache","strict-transport-security":"max-age=31536000; includeSubDomains","last-modified":"Mon, 16 Dec 2013 13:07:48 GMT","etag":"\"2c3-4eda67f9a1100\"","accept-ranges":"bytes","content-length":"707","connection":"close","content-type":"text/html"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"www.tahomalink.com","port":443,"hostname":"www.tahomalink.com","hash":null,"search":null,"query":null,"pathname":"/enduser-mobile-web/enduserAPI/events/d589b6aa-98e4-e192-4d47-d4fa71f25dd1/fetch","path":"/enduser-mobile-web/enduserAPI/events/d589b6aa-98e4-e192-4d47-d4fa71f25dd1/fetch","href":"https://www.tahomalink.com/enduser-mobile-web/enduserAPI/events/d589b6aa-98e4-e192-4d47-d4fa71f25dd1/fetch"},"method":"POST","headers":{"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0","cookie":"JSESSIONID=C1AA8A24FDE2079C970101145F9C7A11","accept":"application/json","content-type":"application/json","content-length":2}}}
tahoma.0 | 2022-03-29 13:58:08.561 | warn | error during tahomalink request: null, request path: events/d589b6aa-98e4-e192-4d47-d4fa71f25dd1/fetch with payload:{}
tahoma.0 | 2022-03-29 13:57:26.586 | info | eventRegisterID = d589b6aa-98e4-e192-4d47-d4fa71f25dd1
tahoma.0 | 2022-03-29 13:57:22.948 | warn | refresh device state failed
tahoma.0 | 2022-03-29 13:57:10.497 | warn | Body: "<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Overkiz - Universal HomeControl</title>\n <!-- PROD1 -->\n <style>\n body {\n font-family: Arial, Verdana, Helvetica, sans-serif;\n\tfont-size: 10pt;\n\tcolor: black;\n } \n </style>\n</head>\n<body>\n<div align=\"center\">\n<br/><br/><br/><br/>\n<table border=\"0\" width=\"90%\">\n <tr>\n <td width=\"50%\" align=\"center\"><img src=\"/error/overkiz_logo.gif\"/></td>\n <td>\n <p class=\"intro\">\n <b>Server is down for maintenance</b><br/>\n <br/>\n We are sorry for the inconvenience.<br/>\n Please try again in a few minutes.\n </p>\n </td>\n </tr>\n</table>\n</div>\n</body>\n\n</html>\n\n"
tahoma.0 | 2022-03-29 13:57:10.496 | warn | Response: {"statusCode":502,"body":"<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Overkiz - Universal HomeControl</title>\n <!-- PROD1 -->\n <style>\n body {\n font-family: Arial, Verdana, Helvetica, sans-serif;\n\tfont-size: 10pt;\n\tcolor: black;\n } \n </style>\n</head>\n<body>\n<div align=\"center\">\n<br/><br/><br/><br/>\n<table border=\"0\" width=\"90%\">\n <tr>\n <td width=\"50%\" align=\"center\"><img src=\"/error/overkiz_logo.gif\"/></td>\n <td>\n <p class=\"intro\">\n <b>Server is down for maintenance</b><br/>\n <br/>\n We are sorry for the inconvenience.<br/>\n Please try again in a few minutes.\n </p>\n </td>\n </tr>\n</table>\n</div>\n</body>\n\n</html>\n\n","headers":{"date":"Tue, 29 Mar 2022 11:57:07 GMT","server":"Apache","strict-transport-security":"max-age=31536000; includeSubDomains","last-modified":"Mon, 16 Dec 2013 13:07:48 GMT","etag":"\"2c3-4eda67f9a1100\"","accept-ranges":"bytes","content-length":"707","connection":"close","content-type":"text/html"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"www.tahomalink.com","port":443,"hostname":"www.tahomalink.com","hash":null,"search":null,"query":null,"pathname":"/enduser-mobile-web/enduserAPI/setup/gateways/2003-6731-1689","path":"/enduser-mobile-web/enduserAPI/setup/gateways/2003-6731-1689","href":"https://www.tahomalink.com/enduser-mobile-web/enduserAPI/setup/gateways/2003-6731-1689"},"method":"GET","headers":{"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0","cookie":"JSESSIONID=B986E6BA830BCC1F210DDF1D719AAA1C","accept":"application/json","content-type":"application/json","content-length":2}}}
tahoma.0 | 2022-03-29 13:57:10.495 | warn | error during tahomalink request: null, request path: setup/gateways/2003-6731-1689 with payload:{}
tahoma.0 | 2022-03-29 13:55:19.790 | warn | Body: "<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Overkiz - Universal HomeControl</title>\n <!-- PROD1 -->\n <style>\n body {\n font-family: Arial, Verdana, Helvetica, sans-serif;\n\tfont-size: 10pt;\n\tcolor: black;\n } \n </style>\n</head>\n<body>\n<div align=\"center\">\n<br/><br/><br/><br/>\n<table border=\"0\" width=\"90%\">\n <tr>\n <td width=\"50%\" align=\"center\"><img src=\"/error/overkiz_logo.gif\"/></td>\n <td>\n <p class=\"intro\">\n <b>Server is down for maintenance</b><br/>\n <br/>\n We are sorry for the inconvenience.<br/>\n Please try again in a few minutes.\n </p>\n </td>\n </tr>\n</table>\n</div>\n</body>\n\n</html>\n\n"
tahoma.0 | 2022-03-29 13:55:19.789 | warn | Response: {"statusCode":502,"body":"<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Overkiz - Universal HomeControl</title>\n <!-- PROD1 -->\n <style>\n body {\n font-family: Arial, Verdana, Helvetica, sans-serif;\n\tfont-size: 10pt;\n\tcolor: black;\n } \n </style>\n</head>\n<body>\n<div align=\"center\">\n<br/><br/><br/><br/>\n<table border=\"0\" width=\"90%\">\n <tr>\n <td width=\"50%\" align=\"center\"><img src=\"/error/overkiz_logo.gif\"/></td>\n <td>\n <p class=\"intro\">\n <b>Server is down for maintenance</b><br/>\n <br/>\n We are sorry for the inconvenience.<br/>\n Please try again in a few minutes.\n </p>\n </td>\n </tr>\n</table>\n</div>\n</body>\n\n</html>\n\n","headers":{"date":"Tue, 29 Mar 2022 11:55:19 GMT","server":"Apache","strict-transport-security":"max-age=31536000; includeSubDomains","last-modified":"Mon, 16 Dec 2013 13:07:48 GMT","etag":"\"2c3-4eda67f9a1100\"","accept-ranges":"bytes","content-length":"707","connection":"close","content-type":"text/html"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"www.tahomalink.com","port":443,"hostname":"www.tahomalink.com","hash":null,"search":null,"query":null,"pathname":"/enduser-mobile-web/enduserAPI/setup/gateways/2003-6731-1689","path":"/enduser-mobile-web/enduserAPI/setup/gateways/2003-6731-1689","href":"https://www.tahomalink.com/enduser-mobile-web/enduserAPI/setup/gateways/2003-6731-1689"},"method":"GET","headers":{"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0","cookie":"JSESSIONID=B986E6BA830BCC1F210DDF1D719AAA1C","accept":"application/json","content-type":"application/json","content-length":2}}}
tahoma.0 | 2022-03-29 13:55:19.787 | warn | error during tahomalink request: null, request path: setup/gateways/2003-6731-1689 with payload:{}
tahoma.0 | 2022-03-29 13:54:25.547 | warn | refresh device state failed
tahoma.0 | 2022-03-29 13:52:05.526 | info | eventRegisterID = d584d086-98e4-e192-4d47-d4fae48364fe
tahoma.0 | 2022-03-29 13:51:47.042 | warn | refresh device state failed

Warning message about missing objects in the state

Somfy has updated Tahoma to version 2.20 today (March 23, 2021).
Since then, I get these 2 warnings in the log file for each device every 25 seconds:

  1. State "tahoma.0.devices.xxxxxxxxx.states.io:PriorityLockOriginatorState" has no existing object, this might lead to an error in future versions

  2. State "tahoma.0.devices.xxxxxxxxx.states.io:PriorityLockLevelState" has no existing object, this might lead to an error in future versions

Can this be related to the TaHoma update?
Can you take a look at this and correct it in the adapter if possible?
Thanks for your effort.

Versions:

  • Adapter version: 0.3.3
  • JS-Controller version: 3.2.13
  • Node version: v12.20.1
  • Operating system: Raspbian GNU/Linux 10 (buster)

core:OnOffState

I can not change the state, Only in expert Modus i can write on, but i has no effet,
What make i wrong?

THX

is missing the required property "common.type"

Describe the bug
I am frequently getting the following warn message:

Object of state "tahoma.0.devices.EG_Wohnen_Ost.states.core:ManufacturerSettingsState" is missing the required property "common.type"

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '...'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots & Logfiles
Ideally, set the adapter to DEBUG-loglevel and provide the logfiles for it as well. Before providing the logfiles, please check entries marked with Response: do not contain any personalized data, like your private address (under location), or similar.

Versions:

  • Adapter version: 0.50
  • JS-Controller version: 3.3.15
  • Node version: v12.22.6
  • Operating system:

Additional context
Add any other context about the problem here.

not working with node.js 12?

Since i upgraded to node.js from version 10 to 12 the adapter isn't working any more. The status is green but it accepts no commands any more.

incompatible device name

It seems, that a device name e.g. "Esszimmer_RM_6,7" is not allowed. Maybe there is a problem by using the "comma" symbol.
All the other devices can be controlled without any problems. This device names are all without a "comma" symbol.

Thanks

Log:
(506) State "tahoma.0.devices.Esszimmer_RM_6_7.commands.down:slow" has no existing object, this might lead to an error in future versions
(506) Used invalid characters: tahoma.0.devices.Esszimmer_RM_6,7.commands.down:slow changed to tahoma.0.devices.Esszimmer_RM_6_7.commands.down:slow

Version:

  • Adaper: 0.52
  • JS-Controller: 3.3.22
  • Node.JS: 14.18.1
  • System: Ubuntu 21.04

Compatibility check and testing for Node.js 14 and 16

Dear Adapter developer,

Node.js 14 is now available for a year and Node.js 16 was release just some days ago and will become LTS by October 2021. We plan to update the ioBroker Node.js recommendation (currently 12.x) to 14.x later this year.

Please check your adapter with Node.js 14 especially, and ideally also directly with Node.js 16

Please add both versions to the adapter testing which is executed on commits.

If your adapter requires a certain minimum version of Node.js please set the 'engine' setting in package.json accordingly! Please also do this if the adapter is not able to work in certain Node.js versions, so that ioBroker can prevent users from installing te adapter if not compatible!

On questions please talk to us at ioBroker/ioBroker.js-controller#1138

Please close the issue after you checked it.

Thank you very much for your support!

'leise'-Modus Rollläden

Die Aktuelle generation Rollladenmotoren (RS100 io) haben einen 'leise'-Modus in welchem die Rollläden mit reduzierter Geschwindigkeit fahren und somit kaum hörbar sind.
(siehe hier)
Es wäre schön, wenn sich diese Funktion in den Adapter integrieren lassen würde!
leise

Adapter stoped working

Tahoma adapter stoped working in IOBRoker.

2022-01-31 07:14:10.520 | warn | error during tahomalink request: Error: certificate has expired, request path: login with payload: +++redacted+++

2022-01-31 07:14:06.252 warn error during tahomalink request: Error: certificate has expired, request path: setup/gateways/1238-1010-7619 with payload:{}
tahoma.0 2022-01-31 07:14:06.237 warn
tahoma.0 2022-01-31 07:14:06.234 warn
tahoma.0 2022-01-31 07:14:06.226 warn
tahoma.0 2022-01-31 07:14:05.618 warn
tahoma.0 2022-01-31 07:14:00.648 warn
tahoma.0 2022-01-31 07:13:55.614 warn
tahoma.0 2022-01-31 07:13:50.611 warn
tahoma.0 2022-01-31 07:13:45.605 warn
tahoma.0 2022-01-31 07:13:40.607 warn
tahoma.0 2022-01-31 07:13:36.339 warn
tahoma.0 2022-01-31 07:13:36.327 warn
tahoma.0 2022-01-31 07:13:36.313 warn
tahoma.0 2022-01-31 07:13:36.299 warn
tahoma.0 2022-01-31 07:13:36.244 warn
tahoma.0 2022-01-31 07:13:36.207 warn
tahoma.0 2022-01-31 07:13:36.193 warn
tahoma.0 2022-01-31 07:13:36.189 warn
tahoma.0 2022-01-31 07:13:36.182 warn
tahoma.0 2022-01-31 07:13:35.603 warn
tahoma.0 2022-01-31 07:13:30.601 warn
tahoma.0 2022-01-31 07:13:25.599 warn
tahoma.0 2022-01-31 07:13:20.596 warn
tahoma.0 2022-01-31 07:13:15.595 warn
tahoma.0 2022-01-31 07:13:14.406 warn
tahoma.0 2022-01-31 07:13:14.406 warn

Is the new TaHoma Switch supported?

Hi,

I'm planning to integrate my Somfy shutter control into ioBroker. Is the new TaHoma Switch supported by your adapter? Or is only the TaHoma Premium box supported?

I checked the following sheet that compares the compatibility of TaHoma Switch, TaHoma DIN Rail and TaHoma Premium.
According to this table the local API is also supported in the new TaHoma Switch. I assume your adapter is using this API for access?
Tahoma

Any hint is appreciated so that I do not buy the wrong box. ;-)

Kind regards
Florian

version 0.5.0.3 does not work

I updated to version 0.5.03 today and since then I get this error and no device is working anymore:

error during tahomalink request: Error: connect ETIMEDOUT 178.32.15.131:443, request path: login with payload: +++redacted+++
 

Missing open/close commands for RTS devices

Hi. Since a couple of day's my RTS devices only have "test" and "identify" commands. IO devices and scenes are ok. I've removed all DP, removed special characters from the names, disconnected all apps from the API and reconnected with fresh crendentials. The log shows no warning.

No commands created for shutter blinds due to nparams being 1 instead of 0 in updateDevice

I did not get any commands for my rts:ExteriorBlindRTSComponent UpDownExteriorScreen component.

The reason is, that Tahoma reports nparams=1 instead of 0 so updateDevice simply discards them without reason.

As a hotfix for myself, I used this change:

` var allowedCommandsWithOneParam = ["up", "down", "open", "close", "stop"];

    if(command.nparams === 0 || (command.nparams === 1 &&  allowedCommandsWithOneParam.indexOf(command.commandName)>=0)) {

`

Then it works correctly.

I strongly suggest to fix that in a more general way asap, and also to add full logging for commands that have been discarded for whatever reason.

Is anyone seriously using this adapter for shutters ?

I find this adapter to be totally erradicate / random in behavior. Sometimes it works, sometimes it doesnt.

I reported already issues a while back e.g. in #18 but even the latest version doesnt work reliably.

The worst thing is, when you close your shutter and then you really need to stop because something is in the way (e.g. flowers or a child or a cat or whatever) . And then it doesnt work.

I am curious, if it really works for other people and you trust this adapter to be used...?

P.S.

I also have the original Tahoma app installed on my mobile phone and it works not perfect but at least the Stop-Button is somewhat more reliable

Compatibility check to js-controller 4.0

Dear Adapter developer,

with js-controller 4.0 object definitions are now also checked that min/max in only provided for number/mixed objects and that the type of the default value matches to the object type.

If something is not correct this is logged as 'warning' or 'info' log.

Please also make sure to update to the lastest @iobroker/testing dependency 2.5.4 or to accept the PR from Apollon77 for legacy testing!

Please spent some time to verify your adapter by ideally starting with a fresh instance and do some actions and verify the log. If you see a warn or info log there from these checks please adjust the adapter and fix the relevant cases.

For questions please refer to ioBroker/ioBroker.js-controller#1749

Please close the issue after you checked it.

Thank you very much for your support to get the best experience for the growing numbers of ioBroker users!

No device

I can´t see any divices at the ioBroker. Is that a Problem with the last update from the Tahoma box.
Or am I doing somthing wrong? BN. and PW are right.
Bildschirmfoto 2021-05-23 um 15 23 45

no longer working

Hi,

i recently updated my raspberry pi and my iobroker. The Adapter is still green, but connection fails.
Does anybody have the same issue? Any ideas?

Best regards
Alexander

Update auf Version 0.3.3

Hallo,
ich nutze ioBroker erst seit kurzem und habe meine TaHoma verbunden.
Ich habe das Problem, dass meine Logins geblockt werden, obwohl ich die Abtastrate schon auf 300000 gestellt habe.
Nun dachte ich, dass ich den Adapter erst einmal auf die Version 0.3.3 updaten sollte.
Könnt ihr mir bitte verraten, wie dieses Update durchführen kann?

Grüße
raspihomegit

enhancement: control temperature for heating

Hello,

i use your adapter to control my tahoma-devices, but i can not change the temperature for my heaters. The devices are there and show the correct data, but i can not change the temperature.

Like the shutters, i assume, that i change core:TargetTemperatureState to set the temperature and see the current temperature in core:TemperatureState.

Maybe you can update your adapter, so that core:TargetTemperatureState can be changed?

Thank you!

Failed getting execution state on local api

Im connecting to the local API and it seems to work but im getting this warining all the time. Any idea?

tahoma.0 2022-06-12 19:51:21.651 warn Failed getting execution state for 44283f5a-12d9-4aaa-a8f6-9a48bab5086b
tahoma.0 2022-06-12 19:51:21.651 warn Body: "{"error":"Unknown object.","errorCode":"UNSPECIFIED_ERROR"}"
tahoma.0 2022-06-12 19:51:21.650 warn Response: {"statusCode":400,"body":"{"error":"Unknown object.","errorCode":"UNSPECIFIED_ERROR"}","headers":{"content-type":"application/json","access-control-allow-origin":"*","access-control-allow-headers":"Authorization","content-length":"59","connection":"close","date":"Sun, 12 Jun 2022 17:51:21 GMT","server":"KizOs"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"gateway-XXXX-XXXX-XXXX:8443","port":"8443","hostname":"gateway-XXXX-XXXX-XXXX","hash":null,"search":null,"query":null,"pathname":"/enduser-mobile-web/1/enduserAPI/history/executions/44283f5a-12d9-4aaa-a8f6-9a48bab5086b","path":"/enduser-mobile-web/1/enduserAPI/history/executions/44283f5a-12d9-4aaa-a8f6-9a48bab5086b","href":"https://gateway-XXXX-XXXX-XXXX:8443/enduser-mobile-web/1/enduserAPI/history/executions/44283f5a-12d9-4aaa-a8f6-9a48bab5086b"},"method":"GET","headers":{"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0","Authorization":"Bearer 629de067aa395421346a","Content-type":"application/json"}}}
tahoma.0 2022-06-12 19:51:21.648 warn error during request: null, request path: history/executions/44283f5a-12d9-4aaa-a8f6-9a48bab5086b with payload:{}

Missing states for up and down

@StrathCole

In order to bring the roller shutter up and down i am missing the states. Last year i was able to do this within ioBroker. Today there are no more such states up and down. Thas all what i have for my RTS shutter.

image

Tahoma Adapter Fehler "no registered even listener"

warn | (1577) Body: {"errorCode":"UNSPECIFIED_ERROR","error":"No registered event listener"}
warn | (1577) Response: {"statusCode":400,"body":{"errorCode":"UNSPECIFIED_ERROR","error":"No registered event listener"},"headers":{"date":"Wed, 13 Jan 2021 13:18:09 GMT","server":"overkiz","strict-transpor
warn | (1577) error during tahomalink request: null, request path: events/fbe2b682-ac10-3e01-5645-036b8c382708/fetch with payload:{}

Ich bekomme diese Fehler in meinem Log einfach nicht weg.
Ich bin der Meinung, dass diese Fehler auftreten, seitdem ich auf der Somfy open API Webseite meinen Account mit OAuth2 authentifiziert habe.

Kennt jemand dafür eine Lösung?

Grüße

Raspihomegit

Ständige Verbindungsprobleme

Jeden zweiten Tag verliert der Adapter die Verbindung. Teilweise helfen erst mehrmalige Neustarts.
Das Protokoll ist voll davon: error during tahomalink request: ->401 retry login

Version v0.6.1
Boxversion 2022.2.4-13

Think about to fix the issues found by adapter checker

I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:

https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/Excodibur/ioBroker.tahoma

  • [E605] No actual year found in copyright. Please add "Copyright (c) 2020-2022 Marius Burkard [email protected]" at the end of README.md
  • [E701] No actual year found in LICENSE. Please add "Copyright (c) 2020-2022 Marius Burkard [email protected]" at the start of LICENSE

Thanks,
your automatic adapter checker.

P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info

Think about to fix the issues found by adapter checker

I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:

https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/Excodibur/ioBroker.tahoma

  • [E605] No actual year found in copyright. Please add "Copyright (c) 2020-2022 Marius Burkard [email protected]" at the end of README.md
  • [E701] No actual year found in LICENSE. Please add "Copyright (c) 2020-2022 Marius Burkard [email protected]" at the start of LICENSE

Thanks,
your automatic adapter checker.

P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info

Error when trying to use local API

I tryed using the local API for tahoma today, but it wont connect to the API. I tryed both w/ and wo/ MDNS.

I activated the developer mode on the Somfy homepage. Is there anything else i have to do to start using the local API?

iobroker log:

tahoma.0 2022-06-02 08:34:39.510 warn {"error":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"gateway-XXXX-XXXX-XXXX"}}
tahoma.0 2022-06-02 08:34:39.510 warn setup failed!
tahoma.0 2022-06-02 08:34:39.509 warn error during request: Error: getaddrinfo ENOTFOUND gateway-XXXX-XXXX-XXXX, request path: setup with payload:{}
tahoma.0 2022-06-02 08:34:39.436 info Using stored bearer token XXXXXXxxxxxxXXXXXxxxx
tahoma.0 2022-06-02 08:34:39.435 info Adapter will connect to Tahoma Box via local API.
tahoma.0 2022-06-02 08:34:39.434 info Configured polling interval: 20000
tahoma.0 2022-06-02 08:34:39.434 info [START] Starting adapter tahoma v0.7.1.3
tahoma.0 2022-06-02 08:34:39.346 info starting. Version 0.7.1 (non-npm: Excodibur/ioBroker.tahoma#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) in /opt/iobroker/node_modules/iobroker.tahoma, node: v14.19.1, js-controller: 4.0.23

Login failed - Retry only possible when adapter is offline for a long time.

Irregularly but filled too often, the Tahoma adapter can no longer connect with.

Then the log says that the login was not successful and a new login will be tried.

If I then take the adapter offline for a longer time and restart it after this time, it can log in again and the listener is registered.

I have also already set the time that the adapter should fetch the data from Tahoma to 0.

I do not need any status from the Tahoma box. I only want to send commands. And for that I am indebted to the greatest thanks. Totally ingenious.

Please let me know, if I do something wrong or check the issue and let me know, what I have to do.

Many thanks in advance.
Sven

Queue

i want to delete the queue everytime you press for example down
because when i dont do this and someone presses more then 1 time the shutter starts a 2nd time if you stop the first attempt with the remote

uncaught exception: Cannot read property 'length' of undefined

I'm on Version 6.1.3 and have oximo io shutters installed. Lately the adapter is being terminated because of the following error:

uncaught exception: Cannot read property 'length' of undefined

TypeError: Cannot read property 'length' of undefined at /opt/iobroker/node_modules/iobroker.tahoma/lib/tahoma.js:957:37 at Request._callback (/opt/iobroker/node_modules/iobroker.tahoma/lib/tahoma.js:331:17) at Request.self.callback (/opt/iobroker/node_modules/request/request.js:185:22) at Request.emit (events.js:400:28) at Request.<anonymous> (/opt/iobroker/node_modules/request/request.js:1154:10) at Request.emit (events.js:400:28) at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/request/request.js:1076:12) at Object.onceWrapper (events.js:519:28) at IncomingMessage.emit (events.js:412:35) at endReadableNT (internal/streams/readable.js:1334:12)

Thanks for your help and good work you are putting into this adapter.

‎192.168.1.30:8081:log:buanet-iobroker1:file1:iobroker.2022-04-03.pdf

No device datapoints - no reaction

Dear Developer,

thank you for very much for your afforts in the developing of a Somfy Tahoma Adapter. Actually i installed new the adapter, but there create no datapoints for the devices, as well the states.

Could you fix the problem?

ThX
Screenshot 2022-04-18 172659
Screenshot 2022-04-18 172720
Screenshot 2022-04-18 172735

Think about to fix the issues found by adapter checker

I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:

https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/Excodibur/ioBroker.tahoma

  • [E605] No actual year found in copyright. Please add "Copyright (c) 2020-2022 Marius Burkard [email protected]" at the end of README.md
  • [E701] No actual year found in LICENSE. Please add "Copyright (c) 2020-2022 Marius Burkard [email protected]" at the start of LICENSE

Thanks,
your automatic adapter checker.

P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.