Closed aschmidt74 closed 3 years ago
Hi! What is a "Hotwater virtual room"?
That's not an actual room, but the hot water preparation feature of my boiler/heater - as shown in the tado app:
Thanks for clarification! It looks like there is a specific API behavior for this. Will be a challenge to get this API definition!
Do you have the technical skills to trace API calls in Google Chrome by using the dev tool?
I have not specifically done that - but sounds not too difficult. yet my browser calls no api. iobroker runs remotely on the NAS. what I'd actually be curious to know is, what api-call the app or IFTTT issues when it sets an 1h ON-timer in the https://my.tado.com/api
1) Go to my.tado.com by using Google Chrome 2) Navigate to the place where you can turn ON/OFF 3) Before turn ON/OFF press F12 and switch to Network Tab 4) Turn ON or OFF and check what calls are in the network tab
Then you should find something like
The request payload is the interesting thing
it seems, this is it! thank you so far! lets test if we can inject this from javascript as well:
{
"termination": {
"typeSkillBasedApp": "TIMER",
"durationInSeconds": 3600
},
"setting": {
"power": "ON",
"type": "HOT_WATER"
}
}
{
"type": "MANUAL",
"setting": {
"type": "HOT_WATER",
"power": "ON",
"temperature": null
},
"termination": {
"type": "TIMER",
"typeSkillBasedApp": "TIMER",
"durationInSeconds": 3600,
"expiry": "2021-01-02T20:17:07Z",
"remainingTimeInSeconds": 3599,
"projectedExpiry": "2021-01-02T20:17:07Z"
}
}
{
"tadoMode": "HOME",
"geolocationOverride": false,
"geolocationOverrideDisableTime": null,
"preparation": null,
"setting": {
"type": "HOT_WATER",
"power": "ON",
"temperature": null
},
"overlayType": "MANUAL",
"overlay": {
"type": "MANUAL",
"setting": {
"type": "HOT_WATER",
"power": "ON",
"temperature": null
},
"termination": {
"type": "TIMER",
"typeSkillBasedApp": "TIMER",
"durationInSeconds": 3600,
"expiry": "2021-01-02T20:17:07Z",
"remainingTimeInSeconds": 3599,
"projectedExpiry": "2021-01-02T20:17:07Z"
}
},
"openWindow": null,
"nextScheduleChange": null,
"nextTimeBlock": null,
"link": {
"state": "ONLINE"
},
"activityDataPoints": {},
"sensorDataPoints": {}
}
last one repeats with the remainingTimeInSeconds
counting down.
I'm not there yet. My goal is to let node-red
trigger the Rooms.0
timer.
Of course I could implement a workflow that:
clientSecret
via https://my.tado.com/webapp/env.jshttps://auth.tado.com/oauth/token?client_id=tado-web-app&client_secret={{client_secret}}&grant_type=password&password={{password}}&scope=home.user&username={{username}}
in order to get the access_token
/ bearer token
- which in turn Ihttps://my.tado.com/api/v2/homes/DDDDDD/zones/0/overlay
- together with the{"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":3600},"setting":{"power":"ON","type":"HOT_WATER"}}
...which indeed solves the case.
however; is there a simpler way? let ioBroker.tado do all the oAuth/API stuff?
just a manual change of the 4 values there does NOT work:
tado.0.DDDDDD.Rooms.0.overlay.setting
does not even have a power
property.422 error
tado.0.DDDDDD.Rooms.0.overlay.setting.type
isn't even writable (write allowed
unchecked in ioBroker)your help's appreciated! ;)
You can test a quick fix by installing the version https://github.com/HGlab01/ioBroker.tado/archive/v0.0.14.tar.gz manually by using the "cat icon" in the adapter tab. Let's see if it works!
Good morning & thank you for that! ;) but what xactly do I test? what to look for?
Issue ON/OFF ends in error code 422 should be solved
I am running your quickfix now, and see some more promising functionality working - good!
var trigger = "deconz.0.Sensors.2.buttonpressed";
on(trigger, function(dp) {
setState('tado.0.DDDDDD.Rooms.0.overlay.termination.typeSkillBasedApp', 'TIMER');
setState('tado.0.DDDDDD.Rooms.0.overlay.termination.durationInSeconds', 600);
setState('tado.0.DDDDDD.Rooms.0.overlay.setting.type', 'HOT_WATER');
setState('tado.0.DDDDDD.Rooms.0.overlay.setting.power', 'ON'); /* <--- here's an issue, imho */
});
04:35:10.600 warn javascript.0 (32280) at Object.<anonymous> (script.js.common.tado_Wasser_EIN:7:5)
04:35:10.790 warn javascript.0 (32280) at Object.<anonymous> (script.js.common.tado_Wasser_EIN:7:5)
04:35:11.401 warn javascript.0 (32280) at Object.<anonymous> (script.js.common.tado_Wasser_EIN:7:5)
tado.0 2021-01-04 04:35:12.428 info (7499) API called with {"setting":{"type":"HOT_WATER","power":"OFF"},"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":600}}
// almost xactly what we wanted, except for "power":"OFF"
tado.0 2021-01-04 04:35:11.440 info (7499) DurationInSecond changed for room : 0 in home : DDDDDD to API with : 600
tado.0 2021-01-04 04:35:11.437 info (7499) TypeSkillBasedApp changed for room : 0 in home : DDDDDD to API with : TIMER
javascript.0 2021-01-04 04:35:11.403 warn (32280) at processImmediate (internal/timers.js:461:21)
javascript.0 2021-01-04 04:35:11.403 warn (32280) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
javascript.0 2021-01-04 04:35:11.402 warn (32280) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:463:25)
javascript.0 2021-01-04 04:35:11.402 warn (32280) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1065:38)
javascript.0 2021-01-04 04:35:11.401 warn (32280) at Object.<anonymous> (script.js.common.tado_Wasser_EIN:7:5)
javascript.0 2021-01-04 04:35:11.400 warn (32280) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1407:20)
javascript.0 2021-01-04 04:35:11.394 warn (32280) State "tado.0.DDDDDD.Rooms.0.overlay.setting.power" not found
tado.0 2021-01-04 04:35:10.846 info (7499) DurationInSecond changed for room : 0 in home : DDDDDD to API with : 600
tado.0 2021-01-04 04:35:10.842 info (7499) TypeSkillBasedApp changed for room : 0 in home : DDDDDD to API with : TIMER
javascript.0 2021-01-04 04:35:10.794 warn (32280) at processImmediate (internal/timers.js:461:21)
javascript.0 2021-01-04 04:35:10.793 warn (32280) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
javascript.0 2021-01-04 04:35:10.792 warn (32280) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:463:25)
javascript.0 2021-01-04 04:35:10.791 warn (32280) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1065:38)
javascript.0 2021-01-04 04:35:10.790 warn (32280) at Object.<anonymous> (script.js.common.tado_Wasser_EIN:7:5)
javascript.0 2021-01-04 04:35:10.788 warn (32280) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1407:20)
javascript.0 2021-01-04 04:35:10.783 warn (32280) State "tado.0.DDDDDD.Rooms.0.overlay.setting.power" not found
tado.0 2021-01-04 04:35:10.658 info (7499) DurationInSecond changed for room : 0 in home : DDDDDD to API with : 600
tado.0 2021-01-04 04:35:10.655 info (7499) TypeSkillBasedApp changed for room : 0 in home : DDDDDD to API with : TIMER
javascript.0 2021-01-04 04:35:10.603 warn (32280) at processImmediate (internal/timers.js:461:21)
javascript.0 2021-01-04 04:35:10.603 warn (32280) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
javascript.0 2021-01-04 04:35:10.602 warn (32280) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:463:25)
javascript.0 2021-01-04 04:35:10.601 warn (32280) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1065:38)
javascript.0 2021-01-04 04:35:10.600 warn (32280) at Object.<anonymous> (script.js.common.tado_Wasser_EIN:7:5)
javascript.0 2021-01-04 04:35:10.599 warn (32280) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1407:20)
javascript.0 2021-01-04 04:35:10.596 warn (32280) State "tado.0.DDDDDD.Rooms.0.overlay.setting.power" not found
which alltogether results in an 10min timer, that counts down!
however; it's running in the OFF state.
there is simply no objects-branch tado.0.DDDDDD.Rooms.0.overlay.setting.power
to set power:ON
what am I missing here?!
to manually add a power
state object under settings
works, is javascript-filled with ON
, but has no effect on the APIcall that uses OFF
nonetheless.
What should work and being efficient:
on(trigger, function(dp) {
setState('tado.0.DDDDDD.Rooms.0.overlay.termination.typeSkillBasedApp', 'TIMER');
setState('tado.0.DDDDDD.Rooms.0.overlay.termination.durationInSeconds', 600);
setState('tado.0.DDDDDD.Rooms.0.setting.power', 'ON');
});
Hi there! Am I mistaken, or are you rather more here than there, located in Vienna as well? ;)
In any case, I was mistaken and assumed ...termination
and ...setting
, as in the request, were on the same branch/level.
So I removed the manually added ...overlay.setting.power
state.
Furthermore I had to remove my HUE-switch-trigger (because one button-press fires several events).
So we have a clean 3-liner, as provided above {...}
It setState
s the 3 values, that's visible in the objects-tab.
and then, this:
host.raspberrypi 2021-01-04 21:17:27.758 info Restart adapter system.adapter.tado.0 because enabled
host.raspberrypi 2021-01-04 21:17:27.757 info instance system.adapter.tado.0 terminated with code 0 (NO_ERROR)
host.raspberrypi 2021-01-04 21:17:27.756 error Caught by controller[0]: at processTicksAndRejections (internal/process/task_queues.js:80:21)
host.raspberrypi 2021-01-04 21:17:27.755 error Caught by controller[0]: at endReadableNT (_stream_readable.js:1327:12)
host.raspberrypi 2021-01-04 21:17:27.754 error Caught by controller[0]: at IncomingMessage.EventEmitter.emit (domain.js:486:12)
host.raspberrypi 2021-01-04 21:17:27.754 error Caught by controller[0]: at IncomingMessage.emit (events.js:327:22)
host.raspberrypi 2021-01-04 21:17:27.753 error Caught by controller[0]: at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/adapters/http.js:260:11)
host.raspberrypi 2021-01-04 21:17:27.753 error Caught by controller[0]: at settle (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/settle.js:17:12)
host.raspberrypi 2021-01-04 21:17:27.752 error Caught by controller[0]: at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15)
host.raspberrypi 2021-01-04 21:17:27.750 error Caught by controller[0]: Error: Request failed with status code 422
host.raspberrypi 2021-01-04 21:17:27.741 error Caught by controller[0]: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected
tado.0 2021-01-04 21:17:27.122 info (14505) Terminated (NO_ERROR): Without reason
tado.0 2021-01-04 21:17:27.118 info (14505) terminating
tado.0 2021-01-04 21:17:27.020 info (14505) cleaned everything up...
tado.0 2021-01-04 21:17:27.017 error (14505) Error: Request failed with status code 422 at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15) at settle (/opt/iobroker/node_modu
tado.0 2021-01-04 21:17:27.010 error (14505) unhandled promise rejection: Request failed with status code 422
tado.0 2021-01-04 21:17:27.009 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
tado.0 2021-01-04 21:17:25.977 info (14505) Power changed for room : 0 in home : DDDDDD to API with : ON and Temperature : 20 and mode : TIMER
tado.0 2021-01-04 21:17:25.970 info (14505) DurationInSecond changed for room : 0 in home : DDDDDD to API with : 600
tado.0 2021-01-04 21:17:25.961 info (14505) TypeSkillBasedApp changed for room : 0 in home : DDDDDD to API with : TIMER
javascript.0 2021-01-04 21:17:25.918 info (31445) script.js.common.tado_Wasser_EIN: registered 0 subscriptions and 0 schedules
javascript.0 2021-01-04 21:17:25.852 info (31445) Start javascript script.js.common.tado_Wasser_EIN
Hi neighbor (yes, from Vienna, too) Not really an idea why it is not working. Can you please do: 1) start adapter in debug mode (Tab instances and switch in the corresponding adapter line from info to debug) 2) check wich state is stored in tado.0.DDDDDD.Rooms.0.overlay.setting.type (I guess HOT_WATER ist stored?) 3) change manually (not by the JS script) the state tado.0.DDDDDD.Rooms.0.overlay.setting.power to ON/OFF and check log. This log would be nice to have for further analyzes,
Sorry, but ti seams to take a couple of round trips to solve the very specific issue.
Is there a possibility to switch a classical thermostat into this mode or is it a specific device?
Hi neighbor ;) If you prefer a shortcut, we can resolve this in deutsch und per fon & post a solution afterwards.
tado.0.DDDDDD.Rooms.0.overlay.setting.type
is normally empty and set to HOT_WATER
when the App sets the entire 'room'/mode to ON
tado.0.DDDDDD.Rooms.0.overlay.setting.power
. I assume you refer to tado.0.DDDDDD.Rooms.0.setting.power
so I watched and edited a) ioBrokers objects tab and b) the tado app on my iPhone.this is the .log.html.zip, and this is what I did in that log-period:
Rooms.0
is OFF
tado.0.DDDDDD.Rooms.0.setting.power
to ON
OFF
upon the next 30s updateRooms.0
to ON
via the App (timer: 20min)tado.0.DDDDDD.Rooms.0.setting.power
to OFF
OFF
-modeRooms.1
(Wohnzimmer) and Rooms.2
(Badezimmer) behave a bit different:
.overlay
and tado.0.DDDDDD.Rooms.1.setting.power
is ON
OFF
puts the room in timer-mode-OFF
('Until You Cancel', as preset in the App)ON
puts the room in timer-mode-ON
our 3-line-script applied to Rooms.1
instead of Rooms.0
... just works.
the only apparent difference is the precondition: Rooms.1
isn't xactly OFF
, just in timer-mode-OFF
(which runs indefinitely, until cancelled)
Hallo! Ich glaub wir kommen den Problem näher und ich denke es sind 2 unterschiedliche Probleme Im Log finde ich keinen ERROR --> das Schalten auf OFF hat funktioniert
2021-01-05 01:09:04.727 - info: tado.0 (2905) Power changed for room : 0 in home : DDDDDD to API with : off and Temperature : 20 and mode : TIMER
2021-01-05 01:09:04.730 - debug: tado.0 (2905) Send API ZoneOverlay API call Home : DDDDDD zone : 0 config : {"setting":{"type":"HOT_WATER","power":"OFF"},"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":1200}}
2021-01-05 01:09:05.484 - debug: tado.0 (2905) Timeout set for timer 'DDDDDD0' with 750ms
2021-01-05 01:09:05.748 - info: tado.0 (2905) API called with {"setting":{"type":"HOT_WATER","power":"OFF"},"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":1200}}
2021-01-05 01:09:05.750 - debug: tado.0 (2905) Data refreshed (DoConnect()) called
Beim Schalten auf ON finde ich jedoch die dazugehörigen Log-Einträge nicht - da hat was nicht funktioniert.
Wenn man nach "Room power set :" sucht, findet man zwar den State-Wechsel, dann klappt es aber nicht.
2021-01-05 01:07:27.734 - debug: tado.0 (2905) Room power set : ON
Kannst du daher bitte prüfen ob es für das Device einen Eintrag tado.0.XXXXXX.Rooms.0.overlay.clearZoneOverlay gibt mit einem Button
1) Adapter anhalten 2) Tad.0 komplett mit allen Unterknoten löschen 3) Adapter restarten (wieder im Debug-Modus) 4) Über die App Warmwasser einschalten und warten bis der Adapter die Aktualisierung hat 5) Über die App Warmwasser ausschalten und warten 6) Screenshot auf dem man folgende Bereich mit Werten sieht 7) bitte prüfen ob es den Eintrag tado.0.XXXXXX.Rooms.0.overlay.clearZoneOverlay gibt mit einem Button 8) wenn ja den Button drücken 9) die paar Zeilen log schicken, durch das Klicken entstanden sind und erneut Screenshot 10) dann auf OFF Log-Ausschnitt und Screenshot 11) dann auf ON Log-Ausschnitt und Screenshot
Sorry, ist ein wenig mühsam, aber das Device verhält sich irgendwo noch anders als die Thermostate und das gilt es rauszufinden!
hej auch auf .de!
Ja, einen laufenden ON
-timer auf OFF
-timer setzen scheint zu funktionieren.
Kann es sein, dass das setting.power:ON
nur mit passendem overlay
funktioniert?
Ich sehe noch immer nicht klar, was der unterschied zum browser API-call ist, und dem was ioBroker absetzt.
Und, ja, klar, den Button tado.0.DDDDDD.Rooms.0.overlay.clearZoneOverlay
gibt's.
Dann schauen wir 'mal! Hoffe der run ist ergiebiger:
post App ON
post App OFF
tado.0.XXXXXX.Rooms.0.overlay.clearZoneOverlay
gibt [...]tado.0.DDDDDD.Rooms.0.overlay
war schon leer, hat augenschinlich nichs zum vorigen Snap verändert.OFF
, also hab ich manuell auf ON
geändert. 📷 post manual ON
- fällt aber mit dem nächsten update wieder zurück auf OFF
📷 post1 manual ON - OFF agn
clearZoneOverlay
-Button pressed 📷 App ON - button pressed
und nach dem nächsten update: 📷 button pressed - OFF
Hier das .log & snapshots ich habe links daneben das log mitlaufen lassen, damit du die timecodes der snapshots siehst.
Ich sehe aber gerade, dass es diesmal keine info: tado.0 (0000) API called with ...
-Zeilen gibt. strange.
Die Bilder waren sehr hilfreich, somit ist nun zumindest klar, dass der Code eigentlich funktionieren müsste. Die Logs sind recht verwirrend, zu den Zeitpunkten der Screenshots finde ich ganz andere Aktivitäten im Log und daher ist es ziemliches raten wann/was passiert ist.
Nächster Wunsch von meiner Seite: Es geht nur mehr um ON/OFF über die Objects (also manuell im ioBroker). Zuvor wäre es aber gut den JavaScript Adapter zu deaktivieren um SideEffects auszuschließen.
Wichtig wäre es nach der jeweiligen Aktion die richtigen Zeilen Logs zu bekommen. Wie du schon gesehen hast wird extrem viel im Debug-Mode mitgeschrieben, da verliert man, auch wenn man den SourceCode kennt, rasch den Überblick.
Daher folgender Vorschlag: neue Version installieren https://github.com/HGlab01/ioBroker.tado/archive/v0.0.15.tar.gz
1) Refresh intervall der Instanz auf 10000 stellen (damit ein Refresh nicht ins Log reinfunkt) 2) Tado device auf ON (via APP) 2) ein Browser-Tab das Log offen lassen ein weiterer Browser-Tab die Objects öffnen 3) wenn alles bereit ist mit dem Icon den Log für den Tag löschen (ACHTUNG: Ja, der Log für den Tag ist dann wirklich ganz weg, ich hoffe das macht dir keine Probleme) 4) über ioBroker ON auf OFF in Tado Objects umstellen 5) "Download log" --> heutiges Datum --> eigener Browsertab mit den aktuellen Logs 6) die ersten ca 30 Zeilen direkt hier in das Issue reinkopieren; Log sollte starten mit "GETS INTERESSTING!!!" 7) 3) dann über ioBrokoer OFF auf ON und 5+6 ausführen 8) 3) dann über iobroker tado.DDDDD.Rooms.x.overlay.termination.durationInSeconds auf 10000 stellen 9) 5+6 10) 3) dann über iobroker tado.0.DDDDD.Rooms.x.overlay.termination.typeSkillBasedApp auf "permanent" stellen 11) 5+6
Die Logs sollten ca. so aussehen:
2021-01-07 10:28:11.685 - debug: tado.0 (26655) DurationInSeconds set : 1800
2021-01-07 10:28:11.685 - debug: tado.0 (26655) Room Temperature set : 22.9
2021-01-07 10:28:11.685 - debug: tado.0 (26655) Room mode set : NEXT_TIME_BLOCK
2021-01-07 10:28:11.685 - debug: tado.0 (26655) Room power set : OFF
2021-01-07 10:28:11.686 - debug: tado.0 (26655) Device id channel : tado
2021-01-07 10:28:11.686 - debug: tado.0 (26655) Device id channel : 0
2021-01-07 10:28:11.686 - debug: tado.0 (26655) Device id channel : 283178
2021-01-07 10:28:11.686 - debug: tado.0 (26655) Device id channel : Rooms
2021-01-07 10:28:11.686 -:: debug: tado.0 (26655) Device id channel : 1
2021-01-07 10:28:11.686 - debug: tado.0 (26655) Device id channel : setting
2021-01-07 10:28:11.687 - debug: tado.0 (26655) Device id channel : power
2021-01-07 10:28:11.687 - info: tado.0 (26655) Power changed for room : 1 in home : XXXXXXXX to API with : off and Temperature : 22.9 and mode : NEXT_TIME_BLOCK
2021-01-07 10:28:11.687 - debug: tado.0 (26655) Send API ZoneOverlay API call Home : XXXXXX zone : 1 config : {"setting":{"type":"HEATING","power":"OFF"},"termination":{"typeSkillBasedApp":"NEXT_TIME_BLOCK","durationInSeconds":null}}
2021-01-07 10:28:12.440 - debug: tado.0 (26655) Timeout set for timer 'XXXXXXX1' with 750ms
2021-01-07 10:28:12.674 - info: tado.0 (26655) API called with {"setting":{"type":"HEATING","power":"OFF"},"termination":{"typeSkillBasedApp":"NEXT_TIME_BLOCK","durationInSeconds":null}}
2021-01-07 10:28:12.674 - debug: tado.0 (26655) Data refreshed (DoConnect()) called
oder
2021-01-07 10:42:29.682 - debug: tado.0 (26655) DurationInSeconds set : 1800
2021-01-07 10:42:29.683 - debug: tado.0 (26655) Room Temperature set : 22.9
2021-01-07 10:42:29.683 - debug: tado.0 (26655) Room mode set : NEXT_TIME_BLOCK
2021-01-07 10:42:29.684 - debug: tado.0 (26655) Room power set : ON
2021-01-07 10:42:29.684 - debug: tado.0 (26655) Device id channel : tado
2021-01-07 10:42:29.684 - debug: tado.0 (26655) Device id channel : 0
2021-01-07 10:42:29.684 - debug: tado.0 (26655) Device id channel : 283178
2021-01-07 10:42:29.685 - debug: tado.0 (26655) Device id channel : Rooms
2021-01-07 10:42:29.685 - debug: tado.0 (26655) Device id channel : 1
2021-01-07 10:42:29.685 - debug: tado.0 (26655) Device id channel : setting
2021-01-07 10:42:29.685 - debug: tado.0 (26655) Device id channel : power
2021-01-07 10:42:29.685 - info: tado.0 (26655) Power changed for room : 1 in home : XXXXXX to API with : on and Temperature : 22.9 and mode : NEXT_TIME_BLOCK
2021-01-07 10:42:29.686 - debug: tado.0 (26655) Send API ZoneOverlay API call Home : XXXXXX zone : 1 config : {"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":22.9}},"termination":{"typeSkillBasedApp":"NEXT_TIME_BLOCK","durationInSeconds":null}}
2021-01-07 10:42:30.436 - debug: tado.0 (26655) Timeout set for timer 'XXXXXXX1' with 750ms
2021-01-07 10:42:30.878 - info: tado.0 (26655) API called with {"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":22.9}},"termination":{"typeSkillBasedApp":"NEXT_TIME_BLOCK","durationInSeconds":null}}
2021-01-07 10:42:30.879 - debug: tado.0 (26655) Data refreshed (DoConnect()) called
2021-01-07 10:42:30.880 - debug: tado.0 (26655) State change detected from different source then adapter
2021-01-07 10:42:30.881 - debug: tado.0 (26655) state tado.0.283178.Rooms.1.setting.power changed: on (ack = false)
Hej there! tja... das schaut bei dir ja recht sauber aus! Ich habe das auch mal mit meinem Rooms.1 gemacht:
tado.0 2021-01-08 01:18:41.722 debug (9082) state tado.0.DDDDDD.Rooms.1.setting.power changed: off (ack = false)
tado.0 2021-01-08 01:18:41.720 debug (9082) State change detected from different source then adapter
tado.0 2021-01-08 01:18:41.719 debug (9082) Data refreshed (DoConnect()) called
tado.0 2021-01-08 01:18:41.717 info (9082) API called with {"setting":{"type":"HEATING","power":"OFF"},"termination":{"typeSkillBasedApp":"MANUAL","durationInSeconds":null}}
tado.0 2021-01-08 01:18:41.430 debug (9082) Timeout set for timer 'DDDDDD1' with 750ms
tado.0 2021-01-08 01:18:40.677 debug (9082) Send API ZoneOverlay API call Home : DDDDDD zone : 1 config : {"setting":{"type":"HEATING","power":"OFF"},"termination":{"typeSkillBasedApp":"MANUAL","durationInSeconds":null}}
tado.0 2021-01-08 01:18:40.675 info (9082) Power changed for room : 1 in home : DDDDDD to API with : off and Temperature : 21 and mode : MANUAL
tado.0 2021-01-08 01:18:40.674 debug (9082) Device id channel : power
tado.0 2021-01-08 01:18:40.674 debug (9082) Device id channel : setting
tado.0 2021-01-08 01:18:40.673 debug (9082) Device id channel : 1
tado.0 2021-01-08 01:18:40.673 debug (9082) Device id channel : Rooms
tado.0 2021-01-08 01:18:40.672 debug (9082) Device id channel : DDDDDD
tado.0 2021-01-08 01:18:40.671 debug (9082) Device id channel : 0
tado.0 2021-01-08 01:18:40.671 debug (9082) Device id channel : tado
tado.0 2021-01-08 01:18:40.670 debug (9082) Room power set : OFF
tado.0 2021-01-08 01:18:40.669 debug (9082) Room mode set : NO_OVERLAY
tado.0 2021-01-08 01:18:40.669 debug (9082) Room Temperature set : 21
tado.0 2021-01-08 01:18:40.668 debug (9082) DurationInSeconds set : 1800
tado.0 2021-01-08 01:18:40.667 debug (9082) Type set : HEATING
tado.0 2021-01-08 01:18:40.666 info (9082) GETS INTERESSTING!!!
^^^ app: ON. manuell: OFF
tado.0 2021-01-08 01:19:56.646 debug (9082) state tado.0.DDDDDD.Rooms.1.setting.power changed: on (ack = false)
tado.0 2021-01-08 01:19:56.645 debug (9082) State change detected from different source then adapter
tado.0 2021-01-08 01:19:56.644 debug (9082) Data refreshed (DoConnect()) called
tado.0 2021-01-08 01:19:56.642 info (9082) API called with {"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":21}},"termination":{"typeSkillBasedApp":"MANUAL","durationInSeconds":null}}
tado.0 2021-01-08 01:19:56.424 debug (9082) Timeout set for timer 'DDDDDD1' with 750ms
tado.0 2021-01-08 01:19:55.672 debug (9082) Send API ZoneOverlay API call Home : DDDDDD zone : 1 config : {"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":21}},"termination":{"typeSkillBasedApp":"MANUAL","durationInSeco
tado.0 2021-01-08 01:19:55.671 info (9082) Power changed for room : 1 in home : DDDDDD to API with : on and Temperature : 21 and mode : MANUAL
tado.0 2021-01-08 01:19:55.671 debug (9082) Device id channel : power
tado.0 2021-01-08 01:19:55.670 debug (9082) Device id channel : setting
tado.0 2021-01-08 01:19:55.670 debug (9082) Device id channel : 1
tado.0 2021-01-08 01:19:55.669 debug (9082) Device id channel : Rooms
tado.0 2021-01-08 01:19:55.669 debug (9082) Device id channel : DDDDDD
tado.0 2021-01-08 01:19:55.668 debug (9082) Device id channel : 0
tado.0 2021-01-08 01:19:55.668 debug (9082) Device id channel : tado
tado.0 2021-01-08 01:19:55.667 debug (9082) Room power set : ON
tado.0 2021-01-08 01:19:55.667 debug (9082) Room mode set : MANUAL
tado.0 2021-01-08 01:19:55.665 debug (9082) Room Temperature set : 21
tado.0 2021-01-08 01:19:55.665 debug (9082) DurationInSeconds set : 1800
tado.0 2021-01-08 01:19:55.664 debug (9082) Type set : HEATING
tado.0 2021-01-08 01:19:55.662 info (9082) GETS INTERESSTING!!!
^^^ app: OFF. manuell: ON
scheint wie gewünscht zu funktionieren.
.logs löschen ist kein problem, ich fahre diese updates/tests nur am pensionierten raspberry.
also, zurück zum wundersamen Rooms.0 Ich musste den refresh timer auf 2min setzen, weil sonst initial garkein overlay branch vorhanden war, und ich die app-settings nie erfahre. Manuelle obj-Änderungen werden scheinbar nur im zuge eines refresh' propagiert. Bei objekt dropdown-auswahl und check - daraufhin passiert erstmal garnichts im log - bis eben zum nächsten refresh.
Das folgende sind die 4 .logs dazu. Sorry, ich habe die ersten zwei vom logs-tab/screen (abgeschnitten) kopiert, und erst die zweiten beiden per download - also leserichtung beachten ;)
tado.0 2021-01-08 00:56:00.404 debug (30531) Write value : false
tado.0 2021-01-08 00:56:00.402 debug (30531) Create_state called for : Stage_02_HomeData with value : {"id":DDDDDD,"name":"MyHomeName","dateTimeZone":"Europe/Vienna","dateCreated":"2018-11-26T16:19:50.348Z","temperatureUnit":"CELSIUS","p
tado.0 2021-01-08 00:56:00.400 debug (30531) Create_state called for : DDDDDD._info.JSON_response.Stage_02_HomeData with value : {"id":DDDDDD,"name":"MyHomeName","dateTimeZone":"Europe/Vienna","dateCreated":"2018-11-26T16:19:50.348Z","te
tado.0 2021-01-08 00:56:00.385 debug (30531) Home_data id with value : DDDDDD
tado.0 2021-01-08 00:56:00.383 debug (30531) HomeId DDDDDD name : Stage_02_HomeDataStage_02_HomeData value {"id":DDDDDD,"name":"MyHomeName","dateTimeZone":"Europe/Vienna","dateCreated":"2018-11-26T16:19:50.348Z","temperatureUnit":"CELSIU
tado.0 2021-01-08 00:56:00.382 debug (30531) JSON data written for Stage_02_HomeData with values : {"id":DDDDDD,"name":"MyHomeName","dateTimeZone":"Europe/Vienna","dateCreated":"2018-11-26T16:19:50.348Z","temperatureUnit":"CELSIUS","part
tado.0 2021-01-08 00:56:00.380 debug (30531) Home_data Result : {"id":DDDDDD,"name":"MyHomeName","dateTimeZone":"Europe/Vienna","dateCreated":"2018-11-26T16:19:50.348Z","temperatureUnit":"CELSIUS","partner":null,"simpleSmartScheduleEnabl
tado.0 2021-01-08 00:56:00.374 debug (30531) No type defined for name : Stage_01_GetMe_Data|value : |{"name":"My Name","email":"my.eMail@redact.ed","username":"my.eMail@redact.ed","id":"0x000000000000000000000","homes":[{"id":DDDDDD
tado.0 2021-01-08 00:56:00.372 debug (30531) Write value : false
tado.0 2021-01-08 00:56:00.370 debug (30531) Create_state called for : Stage_01_GetMe_Data with value : {"name":"My Name","email":"my.eMail@redact.ed","username":"my.eMail@redact.ed","id":"0x000000000000000000000","homes":[{"id":000
tado.0 2021-01-08 00:56:00.369 debug (30531) Create_state called for : DDDDDD._info.JSON_response.Stage_01_GetMe_Data with value : {"name":"My Name","email":"my.eMail@redact.ed","username":"my.eMail@redact.ed","id":"0x000000000000000000
tado.0 2021-01-08 00:56:00.364 debug (30531) HomeId DDDDDD name : Stage_01_GetMe_DataStage_01_GetMe_Data value {"name":"My Name","email":"my.eMail@redact.ed","username":"my.eMail@redact.ed","id":"0x000000000000000000000","homes":[{"
tado.0 2021-01-08 00:56:00.364 debug (30531) JSON data written for Stage_01_GetMe_Data with values : {"name":"My Name","email":"my.eMail@redact.ed","username":"my.eMail@redact.ed","id":"0x000000000000000000000","homes":[{"id":DDDDDD
tado.0 2021-01-08 00:56:00.362 debug (30531) GetMe result : {"name":"My Name","email":"my.eMail@redact.ed","username":"my.eMail@redact.ed","id":"0x000000000000000000000","homes":[{"id":DDDDDD,"name":"MyHomeName"}],"locale":"en_AT","
tado.0 2021-01-08 00:55:59.753 debug (30531) state tado.0.DDDDDD.Rooms.0.setting.power changed: off (ack = false)
tado.0 2021-01-08 00:55:59.752 debug (30531) State change detected from different source then adapter
tado.0 2021-01-08 00:55:59.750 debug (30531) Data refreshed (DoConnect()) called
tado.0 2021-01-08 00:55:59.745 info (30531) API called with {"setting":{"type":"HOT_WATER","power":"OFF"},"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":1200}}
tado.0 2021-01-08 00:55:59.385 debug (30531) Timeout set for timer 'DDDDDD0' with 750ms
tado.0 2021-01-08 00:55:58.631 debug (30531) Send API ZoneOverlay API call Home : DDDDDD zone : 0 config : {"setting":{"type":"HOT_WATER","power":"OFF"},"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":1200}}
tado.0 2021-01-08 00:55:58.629 info (30531) Power changed for room : 0 in home : DDDDDD to API with : off and Temperature : 20 and mode : TIMER
tado.0 2021-01-08 00:55:58.628 debug (30531) Device id channel : power
tado.0 2021-01-08 00:55:58.626 debug (30531) Device id channel : setting
tado.0 2021-01-08 00:55:58.625 debug (30531) Device id channel : 0
tado.0 2021-01-08 00:55:58.624 debug (30531) Device id channel : Rooms
tado.0 2021-01-08 00:55:58.623 debug (30531) Device id channel : DDDDDD
tado.0 2021-01-08 00:55:58.622 debug (30531) Device id channel : 0
tado.0 2021-01-08 00:55:58.620 debug (30531) Device id channel : tado
tado.0 2021-01-08 00:55:58.619 debug (30531) Room power set : OFF
tado.0 2021-01-08 00:55:58.618 debug (30531) Room mode set : TIMER
tado.0 2021-01-08 00:55:58.616 debug (30531) Room Temperature set : 20
tado.0 2021-01-08 00:55:58.615 debug (30531) DurationInSeconds set : 1200
tado.0 2021-01-08 00:55:58.613 debug (30531) Type set : HOT_WATER
tado.0 2021-01-08 00:55:58.610 info (30531) GETS INTERESSTING!!!
^^^ per App auf ON (timer) gesetzt. Dann: Object manuell auf OFF
host.raspberrypi 2021-01-08 00:58:31.253 info Restart adapter system.adapter.tado.0 because enabled
host.raspberrypi 2021-01-08 00:58:31.252 info instance system.adapter.tado.0 terminated with code 0 (NO_ERROR)
host.raspberrypi 2021-01-08 00:58:31.251 error Caught by controller[1]: at processTicksAndRejections (internal/process/task_queues.js:80:21)
host.raspberrypi 2021-01-08 00:58:31.250 error Caught by controller[1]: at endReadableNT (_stream_readable.js:1327:12)
host.raspberrypi 2021-01-08 00:58:31.250 error Caught by controller[1]: at IncomingMessage.EventEmitter.emit (domain.js:486:12)
host.raspberrypi 2021-01-08 00:58:31.249 error Caught by controller[1]: at IncomingMessage.emit (events.js:327:22)
host.raspberrypi 2021-01-08 00:58:31.249 error Caught by controller[1]: at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/adapters/http.js:260:11)
host.raspberrypi 2021-01-08 00:58:31.248 error Caught by controller[1]: at settle (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/settle.js:17:12)
host.raspberrypi 2021-01-08 00:58:31.247 error Caught by controller[1]: at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15)
host.raspberrypi 2021-01-08 00:58:31.246 error Caught by controller[1]: Error: Request failed with status code 422
host.raspberrypi 2021-01-08 00:58:31.234 error Caught by controller[0]: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected
tado.0 2021-01-08 00:58:30.722 debug (30531) Polling-Timer cleared.
tado.0 2021-01-08 00:58:30.721 debug (30531) Check if timer DDDDDD2 to be cleared.
tado.0 2021-01-08 00:58:30.720 debug (30531) Check if timer DDDDDD1 to be cleared.
tado.0 2021-01-08 00:58:30.719 debug (30531) Timer DDDDDD0 cleared.
tado.0 2021-01-08 00:58:30.718 debug (30531) Check if timer DDDDDD0 to be cleared.
tado.0 2021-01-08 00:58:30.659 info (30531) Terminated (NO_ERROR): Without reason
tado.0 2021-01-08 00:58:30.658 debug (30531) Plugin sentry destroyed
tado.0 2021-01-08 00:58:30.647 info (30531) terminating
tado.0 2021-01-08 00:58:30.550 debug (30531) No suitable Lua script, fallback to keys!: function(doc) { if (doc.type === 'state') emit(doc._id, doc) }
tado.0 2021-01-08 00:58:30.514 info (30531) cleaned everything up...
tado.0 2021-01-08 00:58:30.510 error (30531) Error: Request failed with status code 422 at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15) at settle (/opt/iobroker/node_modu
tado.0 2021-01-08 00:58:30.499 error (30531) unhandled promise rejection: Request failed with status code 422
tado.0 2021-01-08 00:58:30.498 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
tado.0 2021-01-08 00:58:30.267 debug (30531) Timeout set for timer 'DDDDDD0' with 750ms
tado.0 2021-01-08 00:58:29.516 debug (30531) Send API ZoneOverlay API call Home : DDDDDD zone : 0 config : {"setting":{"type":"HOT_WATER","power":"ON","temperature":{"celsius":20}},"termination":{"typeSkillBasedApp":"TIMER","durationInSe
tado.0 2021-01-08 00:58:29.515 info (30531) Power changed for room : 0 in home : DDDDDD to API with : on and Temperature : 20 and mode : TIMER
tado.0 2021-01-08 00:58:29.515 debug (30531) Device id channel : power
tado.0 2021-01-08 00:58:29.515 debug (30531) Device id channel : setting
tado.0 2021-01-08 00:58:29.514 debug (30531) Device id channel : 0
tado.0 2021-01-08 00:58:29.514 debug (30531) Device id channel : Rooms
tado.0 2021-01-08 00:58:29.514 debug (30531) Device id channel : DDDDDD
tado.0 2021-01-08 00:58:29.513 debug (30531) Device id channel : 0
tado.0 2021-01-08 00:58:29.513 debug (30531) Device id channel : tado
tado.0 2021-01-08 00:58:29.513 debug (30531) Room power set : ON
tado.0 2021-01-08 00:58:29.512 debug (30531) Room mode set : TIMER
tado.0 2021-01-08 00:58:29.512 debug (30531) Room Temperature set : 20
tado.0 2021-01-08 00:58:29.512 debug (30531) DurationInSeconds set : 1200
tado.0 2021-01-08 00:58:29.511 debug (30531) Type set : HOT_WATER
tado.0 2021-01-08 00:58:29.511 info (30531) GETS INTERESSTING!!!
^^^ per App auf OFF gesetzt. Dann: Object manuell auf ON
vvv per App auf ON (timer) gesetzt. Dann: Object manuell auf 10000
2021-01-08 01:02:09.196 - info: tado.0 (424) GETS INTERESSTING!!!
2021-01-08 01:02:09.198 - debug: tado.0 (424) Type set : HOT_WATER
2021-01-08 01:02:09.199 - debug: tado.0 (424) DurationInSeconds set : 10000
2021-01-08 01:02:09.200 - debug: tado.0 (424) Room Temperature set : 20
2021-01-08 01:02:09.201 - debug: tado.0 (424) Room mode set : TIMER
2021-01-08 01:02:09.202 - debug: tado.0 (424) Room power set : ON
2021-01-08 01:02:09.203 - debug: tado.0 (424) Device id channel : tado
2021-01-08 01:02:09.204 - debug: tado.0 (424) Device id channel : 0
2021-01-08 01:02:09.205 - debug: tado.0 (424) Device id channel : DDDDDD
2021-01-08 01:02:09.205 - debug: tado.0 (424) Device id channel : Rooms
2021-01-08 01:02:09.206 - debug: tado.0 (424) Device id channel : 0
2021-01-08 01:02:09.207 - debug: tado.0 (424) Device id channel : overlay
2021-01-08 01:02:09.208 - debug: tado.0 (424) Device id channel : termination
2021-01-08 01:02:09.208 - debug: tado.0 (424) Device id channel : durationInSeconds
2021-01-08 01:02:09.209 - info: tado.0 (424) DurationInSecond changed for room : 0 in home : DDDDDD to API with : 10000
2021-01-08 01:02:09.212 - debug: tado.0 (424) Send API ZoneOverlay API call Home : DDDDDD zone : 0 config : {"setting":{"type":"HOT_WATER","power":"ON","temperature":{"celsius":20}},"termination":{"typeSkillBasedApp":"TIMER","durationInSeconds":10000}}
2021-01-08 01:02:09.256 - debug: tado.0 (424) state tado.0.DDDDDD.Rooms.0.overlay.termination.typeSkillBasedApp changed: TIMER (ack = true)
2021-01-08 01:02:09.966 - debug: tado.0 (424) Timeout set for timer 'DDDDDD0' with 750ms
2021-01-08 01:02:10.260 - error: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
2021-01-08 01:02:10.261 - error: tado.0 (424) unhandled promise rejection: Request failed with status code 422
2021-01-08 01:02:10.272 - error: tado.0 (424) Error: Request failed with status code 422
at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15)
at settle (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/settle.js:17:12)
at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/adapters/http.js:260:11)
at IncomingMessage.emit (events.js:327:22)
at IncomingMessage.EventEmitter.emit (domain.js:486:12)
at endReadableNT (_stream_readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
2021-01-08 01:02:10.277 - info: tado.0 (424) cleaned everything up...
2021-01-08 01:02:10.319 - debug: tado.0 (424) No suitable Lua script, fallback to keys!: function(doc) { if (doc.type === 'state') emit(doc._id, doc) }
2021-01-08 01:02:10.403 - info: tado.0 (424) terminating
2021-01-08 01:02:10.406 - debug: tado.0 (424) Plugin sentry destroyed
2021-01-08 01:02:10.407 - info: tado.0 (424) Terminated (NO_ERROR): Without reason
2021-01-08 01:02:10.411 - debug: tado.0 (424) Check if timer DDDDDD0 to be cleared.
2021-01-08 01:02:10.412 - debug: tado.0 (424) Timer DDDDDD0 cleared.
2021-01-08 01:02:10.417 - debug: tado.0 (424) Check if timer DDDDDD1 to be cleared.
2021-01-08 01:02:10.418 - debug: tado.0 (424) Check if timer DDDDDD2 to be cleared.
2021-01-08 01:02:10.419 - debug: tado.0 (424) Polling-Timer cleared.
2021-01-08 01:02:10.983 - error: host.raspberrypi Caught by controller[0]: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:
2021-01-08 01:02:10.992 - error: host.raspberrypi Caught by controller[1]: Error: Request failed with status code 422
2021-01-08 01:02:10.993 - error: host.raspberrypi Caught by controller[1]: at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15)
2021-01-08 01:02:10.994 - error: host.raspberrypi Caught by controller[1]: at settle (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/settle.js:17:12)
2021-01-08 01:02:10.995 - error: host.raspberrypi Caught by controller[1]: at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/adapters/http.js:260:11)
2021-01-08 01:02:10.995 - error: host.raspberrypi Caught by controller[1]: at IncomingMessage.emit (events.js:327:22)
2021-01-08 01:02:10.996 - error: host.raspberrypi Caught by controller[1]: at IncomingMessage.EventEmitter.emit (domain.js:486:12)
2021-01-08 01:02:10.996 - error: host.raspberrypi Caught by controller[1]: at endReadableNT (_stream_readable.js:1327:12)
2021-01-08 01:02:10.997 - error: host.raspberrypi Caught by controller[1]: at processTicksAndRejections (internal/process/task_queues.js:80:21)
vvv per App auf ON (timer) gesetzt. Dann: Object manuell auf 'Permanent(Manual)' (per dropdown auswahl)
2021-01-08 01:10:11.731 - info: tado.0 (2957) GETS INTERESSTING!!!
2021-01-08 01:10:11.732 - debug: tado.0 (2957) Type set : HOT_WATER
2021-01-08 01:10:11.733 - debug: tado.0 (2957) DurationInSeconds set : 1800
2021-01-08 01:10:11.733 - debug: tado.0 (2957) Room Temperature set : 20
2021-01-08 01:10:11.733 - debug: tado.0 (2957) Room mode set : MANUAL
2021-01-08 01:10:11.734 - debug: tado.0 (2957) Room power set : ON
2021-01-08 01:10:11.734 - debug: tado.0 (2957) Device id channel : tado
2021-01-08 01:10:11.734 - debug: tado.0 (2957) Device id channel : 0
2021-01-08 01:10:11.735 - debug: tado.0 (2957) Device id channel : DDDDDD
2021-01-08 01:10:11.735 - debug: tado.0 (2957) Device id channel : Rooms
2021-01-08 01:10:11.735 - debug: tado.0 (2957) Device id channel : 0
2021-01-08 01:10:11.736 - debug: tado.0 (2957) Device id channel : overlay
2021-01-08 01:10:11.736 - debug: tado.0 (2957) Device id channel : termination
2021-01-08 01:10:11.736 - debug: tado.0 (2957) Device id channel : typeSkillBasedApp
2021-01-08 01:10:11.737 - info: tado.0 (2957) TypeSkillBasedApp changed for room : 0 in home : DDDDDD to API with : MANUAL
2021-01-08 01:10:11.738 - debug: tado.0 (2957) Send API ZoneOverlay API call Home : DDDDDD zone : 0 config : {"setting":{"type":"HOT_WATER","power":"ON","temperature":{"celsius":20}},"termination":{"typeSkillBasedApp":"MANUAL","durationInSeconds":null}}
2021-01-08 01:10:12.490 - debug: tado.0 (2957) Timeout set for timer 'DDDDDD0' with 750ms
2021-01-08 01:10:12.776 - error: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
2021-01-08 01:10:12.777 - error: tado.0 (2957) unhandled promise rejection: Request failed with status code 422
2021-01-08 01:10:12.783 - error: tado.0 (2957) Error: Request failed with status code 422
at createError (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/createError.js:16:15)
at settle (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/core/settle.js:17:12)
at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.tado/node_modules/axios/lib/adapters/http.js:260:11)
at IncomingMessage.emit (events.js:327:22)
at IncomingMessage.EventEmitter.emit (domain.js:486:12)
at endReadableNT (_stream_readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
2021-01-08 01:10:12.787 - info: tado.0 (2957) cleaned everything up...
2021-01-08 01:10:12.818 - debug: tado.0 (2957) No suitable Lua script, fallback to keys!: function(doc) { if (doc.type === 'state') emit(doc._id, doc) }
2021-01-08 01:10:12.925 - info: tado.0 (2957) terminating
HTH & haveaniceday!
Ich glaub ich hab das besondere Verhalten der HOT_WATER Devices gefunden. To be tested with: https://github.com/HGlab01/ioBroker.tado/archive/v0.0.20.tar.gz
Same issue with the tado.0.43494.Rooms.2.setting.power (power on/off) for the aircondtions units.
Hi rvdgaag! Have you brougfht your adapter installation up to the above mentioned quickfix v0.0.20
level?
Good we have another excotic tado "room" - an aircondition is on my wishlist, actually :)
Yup I did since I had the same 422 error code I hoped this would solve the issue.
Yessss! I think you did it!
Just did a quickcheck for your quickfix v0.0.20
and ... it works!
It's not sufficient to set the setting.power
alone, but the triplet works as expected, also in .js
setState('tado.0.262223.Rooms.0.overlay.termination.typeSkillBasedApp', 'TIMER');
setState('tado.0.262223.Rooms.0.overlay.termination.durationInSeconds', 600);
setState('tado.0.262223.Rooms.0.setting.power', 'ON');
I guess it's the scripts responsibility to cleanup the overlay
branch.
Setting just the setting.power
to OFF would continue the timer, just in OFF mode.
Thanks a lot, neighbour! You deserve a well airconditioned room now! :->
@aschmidt74
Yessss! I think you did it!
cool!
Setting just the
setting.power
to OFF would continue the timer, just in OFF mode.
This is the expected behavior. You can mainly steer by setting overlay.termination.typeSkillBasedApp to one of the three modes: If, for example, you want to turn off until any manual action set typeSkillBasedApp to Permanent (MANUAL) If you want to do until next time block set it to "next block" (NEXT_TIME_BLOCK). If you want to use a timer it is sufficient to set just overlay.termination.durationInSeconds, typeSkillBasedApp will be set to "Use Timer" (TIMER) by the adapter.
So I would not say you have to clean up anything on the script, but you have to say the adapter what you want to have ;-)
Thanks a lot, neighbour!
Welcome!
You can update to https://github.com/HGlab01/ioBroker.tado/archive/v0.0.21.tar.gz where log are set back to standard.
@rvdgaag if there is an issue on Adapter for AC please create a new issue and execute the steps mentioned in https://github.com/iobroker-community-adapters/ioBroker.tado/issues/138#issuecomment-756122413 Before executing this please ensure you have installed Adapter https://github.com/HGlab01/ioBroker.tado/archive/v0.0.20.tar.gz Please do not forget to switch to debug mode, information in info mode will not help to solve the issue. Is ON and OFF not working? Are other changes like only changing the temperature working? As the API behaves different for HEATING, HOT_WATER and AIRCONDITION I need your support for understanding the differences.
@DutchmanNL PR #117 includes the Pooling and the fix. I believe it is now time to merge the PR ;-)
this is a node-red
example on how to start a timer in Rooms.0
and set it to power: ON
, or OFF
i.e. ClearZoneOverlay: true
[ { "id": "b154e726.b6e4b8", "type": "link in", "z": "bb6c2f8.9ed29d", "name": "Switch", "links": [ "c6ece992.e8d068" ], "x": 195, "y": 760, "wires": [ [ "ce6bae94.85a44" ] ] }, { "id": "cfde84e4.5ddac8", "type": "inject", "z": "bb6c2f8.9ed29d", "name": "ON", "props": [ { "p": "payload.on", "v": "true", "vt": "bool" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 170, "y": 720, "wires": [ [ "ce6bae94.85a44" ] ] }, { "id": "eb585a38.5b0098", "type": "inject", "z": "bb6c2f8.9ed29d", "name": "OFF", "props": [ { "p": "payload.on", "v": "false", "vt": "bool" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 170, "y": 800, "wires": [ [ "ce6bae94.85a44" ] ] }, { "id": "5d1db1c4.759af", "type": "group", "z": "bb6c2f8.9ed29d", "name": "Warmwasser EIN für 5min", "style": { "label": true, "label-position": "sw" }, "nodes": [ "7494ef8d.e72c6", "5041be8b.2616", "d3519ac1.d613d8", "ce6bae94.85a44", "dc779881.9485a8" ], "x": 294, "y": 659, "w": 612, "h": 210 }, { "id": "7494ef8d.e72c6", "type": "ioBroker out", "z": "bb6c2f8.9ed29d", "g": "5d1db1c4.759af", "name": "overlay.termination.typeSkillBasedApp", "topic": "tado.0.DDDDDD.Rooms.0.overlay.termination.typeSkillBasedApp", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 730, "y": 740, "wires": [] }, { "id": "5041be8b.2616", "type": "ioBroker out", "z": "bb6c2f8.9ed29d", "g": "5d1db1c4.759af", "name": "overlay.termination.durationInSeconds", "topic": "tado.0.DDDDDD.Rooms.0.overlay.termination.durationInSeconds", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 730, "y": 780, "wires": [] }, { "id": "d3519ac1.d613d8", "type": "ioBroker out", "z": "bb6c2f8.9ed29d", "g": "5d1db1c4.759af", "name": "setting.power", "topic": "tado.0.DDDDDD.Rooms.0.setting.power", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 650, "y": 700, "wires": [] }, { "id": "ce6bae94.85a44", "type": "function", "z": "bb6c2f8.9ed29d", "g": "5d1db1c4.759af", "name": "tado.0.DDDDDD.Rooms.0", "func": "var POW=null\nvar TSBA=null\nvar DIS=null\nvar CZO=null\n\nif (msg.payload.on || false) {\n// node.warn('Warmwasser ON');\n POW={payload:\"ON\"}\n TSBA={payload:\"TIMER\"}\n DIS={payload:60*5}\n} else {\n// node.warn('Warmwasser OFF');\n CZO={payload:true}\n}\n\nreturn [ POW, TSBA, DIS,CZO ]", "outputs": 4, "noerr": 0, "initialize": "", "finalize": "", "x": 430, "y": 760, "wires": [ [ "d3519ac1.d613d8" ], [ "7494ef8d.e72c6" ], [ "5041be8b.2616" ], [ "dc779881.9485a8" ] ] }, { "id": "dc779881.9485a8", "type": "ioBroker out", "z": "bb6c2f8.9ed29d", "g": "5d1db1c4.759af", "name": "overlay.clearZoneOverlay", "topic": "tado.0.DDDDDD.Rooms.0.overlay.clearZoneOverlay", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 690, "y": 820, "wires": [] } ]
tnx alot & close.
Hello, I have the same problem (Error: Request failed with status code 422) and therefore wanted to install version v0.0.21. (URL: https://github.com/HGlab01/ioBroker.tado/archive/v0.0.21.tar.gz)
When I try I get the following error message:
$ ./iobroker url "https://github.com/HGlab01/ioBroker.tado/archive/v0.0.21.tar.gz" --debug
install HGlab01/ioBroker.tado#v0.0.21.tar
NPM version: 6.14.10
npm install HGlab01/ioBroker.tado#v0.0.21.tar --loglevel error --prefix "/opt/iobroker" (System call)
npm ERR! code 1
npm ERR! Command failed: git checkout v0.0.21.tar
npm ERR! error: Pfadspezifikation 'v0.0.21.tar' stimmt mit keinen git-bekannten Dateien überein.npm ERR!
npm ERR! A complete log of this run can be found in:npm ERR! /home/iobroker/.npm/_logs/2021-02-06T16_41_43_351Z-debug.log
upload [5] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/words.js words.js application/javascript
upload [4] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/tado.png tado.png image/png
upload [3] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/style.css style.css text/css
upload [2] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/index_m.html index_m.html text/html
upload [1] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/button.png button.png image/png
upload [0] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/admin.d.ts admin.d.ts video/mp2t
process exited with code 0
Does anyone have any ideas? Looking forward to your feedback.
try the latest one https://github.com/HGlab01/ioBroker.tado/archive/v0.0.31.tar.gz
It tested this one a couple of seconds ago:
$ ./iobroker url "https://github.com/HGlab01/ioBroker.tado/archive/v0.0.31.tar.gz"
install https://github.com/HGlab01/ioBroker.tado/archive/v0.0.31.tar.gz
NPM version: 6.14.4
npm install https://github.com/HGlab01/ioBroker.tado/archive/v0.0.31.tar.gz --loglevel error (System call)
upload [17] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/words.js words.js application/javascript
upload [16] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/tsconfig.json tsconfig.json application/json
upload [15] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/tado.png tado.png image/png
upload [14] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/style.css style.css text/css
upload [13] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/index_m.html index_m.html text/html
upload [12] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/zh-cn/translations.json i18n/zh-cn/translations.json application/json
upload [11] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/ru/translations.json i18n/ru/translations.json application/json
upload [10] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/pt/translations.json i18n/pt/translations.json application/json
upload [9] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/pl/translations.json i18n/pl/translations.json application/json
upload [8] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/nl/translations.json i18n/nl/translations.json application/json
upload [7] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/it/translations.json i18n/it/translations.json application/json
upload [6] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/fr/translations.json i18n/fr/translations.json application/json
upload [5] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/es/translations.json i18n/es/translations.json application/json
upload [4] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/en/translations.json i18n/en/translations.json application/json
upload [3] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/i18n/de/translations.json i18n/de/translations.json application/json
upload [2] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/button.png button.png image/png
upload [1] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/admin.d.ts admin.d.ts video/mp2t
upload [0] tado.admin C:/iobroker/node_modules/iobroker.tado/admin/.DS_Store .DS_Store null
Update "system.adapter.tado.0"
process exited with code 0
manually by using the "cat icon" in the adapter tab
Unfortunately, the same problem:
$ ./iobroker url "https://github.com/HGlab01/ioBroker.tado/archive/v0.0.31.tar.gz" --debug
install HGlab01/ioBroker.tado#v0.0.31.tar
NPM version: 6.14.10
npm install HGlab01/ioBroker.tado#v0.0.31.tar --loglevel error --prefix "/opt/iobroker" (System call)
npm ERR! code 1
npm ERR! Command failed: git checkout v0.0.31.tar
npm ERR! error: Pfadspezifikation 'v0.0.31.tar' stimmt mit keinen git-bekannten Dateien überein.npm ERR!
npm ERR! A complete log of this run can be found in:npm ERR! /home/iobroker/.npm/_logs/2021-02-06T17_16_16_903Z-debug.log
upload [5] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/words.js words.js application/javascript
upload [4] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/tado.png tado.png image/png
upload [3] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/style.css style.css text/css
upload [2] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/index_m.html index_m.html text/html
upload [1] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/button.png button.png image/png
upload [0] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/admin.d.ts admin.d.ts video/mp2t
Update "system.adapter.tado.0"
process exited with code 0
not really an idea... what you can try: download the file and save it to the disk/volume where iobroker is runnning use the path to your lokal drive (e.g. /home/iobroker/v0.0.31.tar.gz) instead of https://.... maybe this works? no idea why it is not working in your environment
Thanks for the tip, I will give it a try. I will get back to you.
Previously, I uninstalled the tado instance and the adapter. Is that right?
Now I get this message:
$ ./iobroker url "/home/iobroker/v0.0.31.tar.gz" --debug
install /home/iobroker/v0.0.31.tar.gz
NPM version: 6.14.10npm install /home/iobroker/v0.0.31.tar.gz --loglevel error --prefix "/opt/iobroker" (System call)
+ iobroker.tado@0.2.4updated 1 package in 25.561s
40 packages are looking for funding run `npm fund` for details
ERROR: host.raspberrypi4-iob Cannot install /home/iobroker/v0.0.31.tar.gz: 0
ERROR: process exited with code 25
Apparently the adapter was installed despite error message. The adapter page shows version 0.2.4. Is this correct? After that I added an instance on the adapter page. How can I check the version?
At least I can now turn off the hot water device in the tado.0 object and turn it on again by clearZoneOverlay.
in https://github.com/HGlab01/ioBroker.tado/archive/v0.2.6-1.tar.gz I also updated the version number in the package to v0.2.6-1
Even with this version I get the error message. What is your recommendation? First uninstall the instance and the adapter then install the new version via the cat icon?
$ ./iobroker url "https://github.com/HGlab01/ioBroker.tado/archive/v0.2.6-1.tar.gz" --debug
install HGlab01/ioBroker.tado#v0.2.6-1.tar
NPM version: 6.14.10
npm install HGlab01/ioBroker.tado#v0.2.6-1.tar --loglevel error --prefix "/opt/iobroker" (System call)
npm ERR! code 1
npm ERR! Command failed: git checkout v0.2.6-1.tar
npm ERR! error: Pfadspezifikation 'v0.2.6-1.tar' stimmt mit keinen git-bekannten Dateien überein.
npm ERR!
npm ERR! A complete log of this run can be found in:
npm ERR! /home/iobroker/.npm/_logs/2021-02-07T11_20_10_929Z-debug.log
upload [17] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/words.js words.js application/javascript
upload [16] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/tsconfig.json tsconfig.json application/json
upload [15] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/tado.png tado.png image/png
upload [14] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/style.css style.css text/css
upload [13] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/index_m.html index_m.html text/html
upload [12] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/zh-cn/translations.json i18n/zh-cn/translations.json application/json
upload [11] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/ru/translations.json i18n/ru/translations.json application/json
upload [10] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/pt/translations.json i18n/pt/translations.json application/json
upload [9] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/pl/translations.json i18n/pl/translations.json application/json
upload [8] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/nl/translations.json i18n/nl/translations.json application/json
upload [7] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/it/translations.json i18n/it/translations.json application/json
upload [6] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/fr/translations.json i18n/fr/translations.json application/json
upload [5] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/es/translations.json i18n/es/translations.json application/json
upload [4] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/en/translations.json i18n/en/translations.json application/json
upload [3] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/i18n/de/translations.json i18n/de/translations.json application/json
upload [2] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/button.png button.png image/png
upload [1] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/admin.d.ts admin.d.ts video/mp2t
upload [0] tado.admin /opt/iobroker/node_modules/iobroker.tado/admin/.DS_Store .DS_Store null
Update "system.adapter.tado.0"
process exited with code 0
Here is the log file from /home/iobroker/.npm/_logs/:
0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli '/usr/bin/node',
1 verbose cli '/usr/bin/npm',
1 verbose cli 'install',
1 verbose cli 'HGlab01/ioBroker.tado#v0.2.6-1.tar',
1 verbose cli '--loglevel',
1 verbose cli 'error',
1 verbose cli '--prefix',
1 verbose cli '/opt/iobroker'
1 verbose cli ]
2 info using npm@6.14.10
3 info using node@v12.20.1
4 verbose npm-session 0fa59c193e74bee0
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 silly fetchPackageMetaData error for github:HGlab01/ioBroker.tado#v0.2.6-1.tar Command failed: git checkout v0.2.6-1.tar
7 silly fetchPackageMetaData error: Pfadspezifikation 'v0.2.6-1.tar' stimmt mit keinen git-bekannten Dateien überein.
8 timing stage:rollbackFailedOptional Completed in 2ms
9 timing stage:runTopLevelLifecycles Completed in 6255ms
10 verbose stack Error: Command failed: git checkout v0.2.6-1.tar
10 verbose stack error: Pfadspezifikation 'v0.2.6-1.tar' stimmt mit keinen git-bekannten Dateien überein.
10 verbose stack
10 verbose stack at ChildProcess.exithandler (child_process.js:308:12)
10 verbose stack at ChildProcess.emit (events.js:314:20)
10 verbose stack at maybeClose (internal/child_process.js:1022:16)
10 verbose stack at Socket.<anonymous> (internal/child_process.js:444:11)
10 verbose stack at Socket.emit (events.js:314:20)
10 verbose stack at Pipe.<anonymous> (net.js:675:12)
11 verbose cwd /opt/iobroker
12 verbose Linux 5.10.11-v7l+
13 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "HGlab01/ioBroker.tado#v0.2.6-1.tar" "--loglevel" "error" "--prefix" "/opt/iobroker"
14 verbose node v12.20.1
15 verbose npm v6.14.10
16 error code 1
17 error Command failed: git checkout v0.2.6-1.tar
17 error error: Pfadspezifikation 'v0.2.6-1.tar' stimmt mit keinen git-bekannten Dateien überein.
18 verbose exit [ 1, true ]
I did not expect, that it works now (still no idea why in your eco system the install does not work). But if you install it via lokal drive you should be able to double check afterwards the installed version number.
This happens when I download the file and copy it to the local directory. Then start the installation via the cat icon:
$ ./iobroker url "/home/iobroker/ioBroker.tado-0.2.6-1.tar.gz" --debug
install /home/iobroker/ioBroker.tado-0.2.6-1.tar.gz
NPM version: 6.14.10
npm install /home/iobroker/ioBroker.tado-0.2.6-1.tar.gz --loglevel error --prefix "/opt/iobroker" (System call)
+ iobroker.tado@0.2.6-1updated 1 package in 24.23s
40 packages are looking for funding run `npm fund` for details
ERROR: host.raspberrypi4-iob Cannot install /home/iobroker/ioBroker.tado-0.2.6-1.tar.gz: 0
ERROR: process exited with code 25
and which version number is shown afterwards in the adapter tab?
This is displayed:
not sure what the screen shows. I meant this one:
Then I guess the installation worked somehow. This is the best I can offer as long as the Pull Request was not merged (Dutchman seams to be very busy at the moment...)
All right, then I want to thank you for your quick support. Well done.
I would have one more question ;) Do you have or is there a description how to use the functions from the adapter? What can be used at the moment and how?
the bug
tado.0.DDDDDD.Rooms.0.setting.power
fromOFF
toON
- orsetState("tado.DDDDDD.Rooms.0.setting.power"/*Power*/, 'ON');
- wherebyRooms.0
is the Hotwater virtual room - andthe above fails with the following line in the ioBroker Log tab:
tado.0 | 2021-01-02 17:31:34.296 | error | (12405) Issue at state change : Error: Request failed with status code 422
obiously; I'd expect the control via ioBroker to work as via mobile-app or ifttt.
what works great
tado.0.DDDDDD.Rooms
branch, and all the data, updated periodically as configured.tado.0.DDDDDD.Rooms.1.setting.power
toON
|OFF
, which is the livingroom. The effect is shown in the app swiftly, and no error is logged.Versions:
0.2.5
(via browser, ioBroker Adaptors tab)3.1.6
(viaiobroker -v
) /4.8.4
(js script engine adapter installed)v12.20.0
(vianode -v
)PRETTY_NAME="Debian GNU/Linux 10 (buster)"
on a Synology DS918+ in a Docker containerps; Happy New Year! 🍀