NEWS
Neuer Adapter ecoflow-mqtt
-
@hossi
Im log ist schön zu sehen, daß alle 5min Werte geholt werden.
Du schreibst ja auch, daß es Aktualisierungen gibt, diese sollten dann durch die 5min Abfragen entstanden sein.
Diese 5min habe ich am Anfang eingebaut um immer mal wieder ein Lebenszeichen zu schicken, bzw. um zu prüfen ob ggf. ein Gerät wieder online ist.In deinen Einstellungen fehlt noch der debug modus des Adapters. Dies kannst du oben beim Aufruf des Adapters machen info->debug.
Dann müssten auch Einträge kommen, daß Daten verarbeitet wurden.
msgUpdateValue kannst du erstmal das Häckchen rausnehmen, sonst ist wirklich viel im Log drin.Wenn du dann nochmal ein Mitschnitt schicken könntest, wo du die App geöffnet hast, könnte ich mal vergleichen, ob diese sich mit anderen Daten meldet und so die Updates aufrecht erhält.
-
@foxthefox
Hi, habe das nach Deiner Anleitung gemacht.
Bekomme den Adapter nicht mehr ans Fliegen.ecoflow-mqtt.0 2025-11-28 15:34:04.020 info state ecoflow-mqtt.0.D3Mxxxxxxxxxx82.info.status changed: offline (ack = true) ecoflow-mqtt.0 2025-11-28 15:34:04.019 info state ecoflow-mqtt.0.D3Mxxxxxxxxxx82.info.status changed: offline (ack = true) ecoflow-mqtt.0 2025-11-28 15:34:03.975 info ecoflow connection closed ecoflow-mqtt.0 2025-11-28 15:34:03.973 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:33:33.939 info [EF] going to connect to mqtt broker ecoflow-mqtt.0 2025-11-28 15:33:33.890 info ========================== ecoflow-mqtt.0 2025-11-28 15:33:33.890 info device states created for D3Mxxxxxxxxxxxx82 / delta3maxplus / EcoFlow Delta3 Max Plus ecoflow-mqtt.0 2025-11-28 15:33:33.427 info start device state creation ->delta3maxplus for Id D3Mxxxxxxxxxxxx82 ecoflow-mqtt.0 2025-11-28 15:33:33.427 info ========================== ecoflow-mqtt.0 2025-11-28 15:33:33.422 info unknown -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.422 info alternator -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info powerocean -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info powerkit -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info smartmeter -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info panel -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info generator -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info glacier -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info wave -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info smartplug -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info powerstation -> [{"devName":"EcoFlow Delta3 Max Plus","devId":"D3xxxxxxxxxxxx82","devType":"delta3maxplus","debugEnable":true,"haEnable":false,"pstationsSlave1":false,"pstationsSlave2":false,"pstationsSlave3":false}] ecoflow-mqtt.0 2025-11-28 15:33:33.421 info powerstream -> [] ecoflow-mqtt.0 2025-11-28 15:33:33.420 info your configration: ecoflow-mqtt.0 2025-11-28 15:33:33.420 info adapter entered ready ecoflow-mqtt.0 2025-11-28 15:33:33.411 info starting. Version 1.4.8 (non-npm: foxthefox/ioBroker.ecoflow-mqtt) in /opt/iobroker/node_modules/iobroker.ecoflow-mqtt, node: v22.21.0, js-controller: 7.0.7 ecoflow-mqtt.0 2025-11-28 15:32:43.805 info terminating ecoflow-mqtt.0 2025-11-28 15:32:43.305 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason ecoflow-mqtt.0 2025-11-28 15:32:43.305 info terminating ecoflow-mqtt.0 2025-11-28 15:32:43.304 info cleaned everything up... ecoflow-mqtt.0 2025-11-28 15:32:43.303 info Got terminate signal TERMINATE_YOURSELF ecoflow-mqtt.0 2025-11-28 15:32:41.121 info ecoflow connection closed ecoflow-mqtt.0 2025-11-28 15:32:41.120 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:32:11.086 info [EF] going to connect to mqtt broker ecoflow-mqtt.0 2025-11-28 15:32:11.033 error delta3maxplus modification or state creation went wrong ->Error: Cannot find module './lib/dict_data/ef_delta3maxplus_data.js'Require stack:- /opt/iobroker/node_modules/iobroker.ecoflow-mqtt/main.js ecoflow-mqtt.0 2025-11-28 15:32:11.033 info unknown -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.033 info alternator -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.033 info powerocean -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.033 info powerkit -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.033 info smartmeter -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.033 info panel -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.033 info generator -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.032 info glacier -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.032 info wave -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.032 info smartplug -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.032 info powerstation -> [{"devName":"EcoFlow Delta3 Max Plus","devId":"D3Mxxxxxxxxxx82","devType":"delta3maxplus","debugEnable":true,"haEnable":false,"pstationsSlave1":false,"pstationsSlave2":false,"pstationsSlave3":false}] ecoflow-mqtt.0 2025-11-28 15:32:11.032 info powerstream -> [] ecoflow-mqtt.0 2025-11-28 15:32:11.032 info your configration: ecoflow-mqtt.0 2025-11-28 15:32:11.032 info adapter entered ready ecoflow-mqtt.0 2025-11-28 15:32:11.023 info starting. Version 1.4.6 in /opt/iobroker/node_modules/iobroker.ecoflow-mqtt, node: v22.21.0, js-controller: 7.0.7 ecoflow-mqtt.0 2025-11-28 15:32:06.452 info terminating ecoflow-mqtt.0 2025-11-28 15:32:05.951 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason ecoflow-mqtt.0 2025-11-28 15:32:05.950 info terminating ecoflow-mqtt.0 2025-11-28 15:32:05.950 info cleaned everything up... ecoflow-mqtt.0 2025-11-28 15:32:05.949 info Got terminate signal TERMINATE_YOURSELF ecoflow-mqtt.0 2025-11-28 15:31:59.132 info ecoflow connection closed ecoflow-mqtt.0 2025-11-28 15:31:59.131 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:31:29.098 info [EF] going to connect to mqtt broker ecoflow-mqtt.0 2025-11-28 15:31:29.044 error delta3maxplus modification or state creation went wrong ->Error: Cannot find module './lib/dict_data/ef_delta3maxplus_data.js'Require stack:- /opt/iobroker/node_modules/iobroker.ecoflow-mqtt/main.js ecoflow-mqtt.0 2025-11-28 15:31:29.044 info unknown -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.044 info alternator -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.044 info powerocean -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.044 info powerkit -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.044 info smartmeter -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.044 info panel -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.044 info generator -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.043 info glacier -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.043 info wave -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.043 info smartplug -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.043 info powerstation -> [{"devName":"EcoFlow Delta3 Max Plus","devId":"D3Mxxxxxxxxxx82","devType":"delta3maxplus","debugEnable":true,"haEnable":false,"pstationsSlave1":false,"pstationsSlave2":false,"pstationsSlave3":false}] ecoflow-mqtt.0 2025-11-28 15:31:29.043 info powerstream -> [] ecoflow-mqtt.0 2025-11-28 15:31:29.043 info your configration: ecoflow-mqtt.0 2025-11-28 15:31:29.043 info adapter entered ready ecoflow-mqtt.0 2025-11-28 15:31:29.034 info starting. Version 1.4.6 in /opt/iobroker/node_modules/iobroker.ecoflow-mqtt, node: v22.21.0, js-controller: 7.0.7 ecoflow-mqtt.0 2025-11-28 15:31:24.955 info terminating ecoflow-mqtt.0 2025-11-28 15:31:24.455 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason ecoflow-mqtt.0 2025-11-28 15:31:24.455 info terminating ecoflow-mqtt.0 2025-11-28 15:31:24.455 info cleaned everything up... ecoflow-mqtt.0 2025-11-28 15:31:24.454 info Got terminate signal TERMINATE_YOURSELF ecoflow-mqtt.0 2025-11-28 15:31:10.391 info state ecoflow-mqtt.0.D3Mxxxxxxxxxx82.info.status changed: offline (ack = true) ecoflow-mqtt.0 2025-11-28 15:31:10.349 info state ecoflow-mqtt.0.D3Mxxxxxxxxxx82.info.status changed: offline (ack = true) ecoflow-mqtt.0 2025-11-28 15:31:10.346 info ecoflow connection closed ecoflow-mqtt.0 2025-11-28 15:31:10.345 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:30:35.387 info state ecoflow-mqtt.0.D3Mxxxxxxxxxx82.info.status changed: offline (ack = true) ecoflow-mqtt.0 2025-11-28 15:30:35.387 info state ecoflow-mqtt.0.D3Mxxxxxxxxxx82.info.status changed: offline (ack = true) ecoflow-mqtt.0 2025-11-28 15:30:35.343 info ecoflow connection closed ecoflow-mqtt.0 2025-11-28 15:30:35.342 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:25:02.883 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:23:50.319 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:23:15.318 error Error inconnection to Ecoflow MQTT-Broker:Error: connack timeout ecoflow-mqtt.0 2025-11-28 15:21:46.514 warn Terminated (UNCAUGHT_EXCEPTION): Without reason ecoflow-mqtt.0 2025-11-28 15:21:46.511 error Unexpected token ' ', " "... is not valid JSON ecoflow-mqtt.0 2025-11-28 15:21:46.511 error SyntaxError: Unexpected token ' ', " "... is not valid JSON at JSON.parse (<anonymous>) at MqttClient.<anonymous> (/opt/iobroker/node_modules/iobroker.ecoflow-mqtt/main.js:919:46) at MqttClient.emit (node:events:519:28) at handlePublish (/opt/iobroker/node_modules/mqtt/build/lib/handlers/publish.js:97:20) at handle (/opt/iobroker/node_modules/mqtt/build/lib/handlers/index.js:28:35) at work (/opt/iobroker/node_modules/mqtt/build/lib/client.js:267:40) at writable._write (/opt/iobroker/node_modules/mqtt/build/lib/client.js:292:13) at writeOrBuffer (/opt/iobroker/node_modules/readable-stream/lib/internal/streams/writable.js:336:12) at _write (/opt/iobroker/node_modules/readable-stream/lib/internal/streams/writable.js:285:10) at Writable.write (/opt/iobroker/node_modules/readable-stream/lib/internal/streams/writable.js:288:10) ecoflow-mqtt.0 2025-11-28 15:21:46.510 error unhandled promise rejection: Unexpected token ' ', " "... is not valid JSON ecoflow-mqtt.0 2025-11-28 15:21:46.510 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(). ecoflow-mqtt.0 2025-11-28 15:21:31.374 warn Terminated (UNCAUGHT_EXCEPTION): Without reason ecoflow-mqtt.0 2025-11-28 15:21:31.371 error Unexpected token ' ', " "... is not valid JSON ecoflow-mqtt.0 2025-11-28 15:21:31.371 error SyntaxError: Unexpected token ' ', " "... is not valid JSON at JSON.parse (<anonymous>) at MqttClient.<anonymous> (/opt/iobroker/node_modules/iobroker.ecoflow-mqtt/main.js:919:46) at MqttClient.emit (node:events:519:28) at handlePublish (/opt/iobroker/node_modules/mqtt/build/lib/handlers/publish.js:97:20) at handle (/opt/iobroker/node_modules/mqtt/build/lib/handlers/index.js:28:35) at work (/opt/iobroker/node_modules/mqtt/build/lib/client.js:267:40) at writable._write (/opt/iobroker/node_modules/mqtt/build/lib/client.js:292:13) at writeOrBuffer (/opt/iobroker/node_modules/readable-stream/lib/internal/streams/writable.js:336:12) at _write (/opt/iobroker/node_modules/readable-stream/lib/internal/streams/writable.js:285:10) at Writable.write (/opt/iobroker/node_modules/readable-stream/lib/internal/streams/writable.js:288:10) ecoflow-mqtt.0 2025-11-28 15:21:31.371 error unhandled promise rejection: Unexpected token ' ', " "... is not valid JSON ecoflow-mqtt.0 2025-11-28 15:21:31.371 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().Die v1.4.8 ist installiert. !

Mach Dir bitte keine StressGrüße
Ich hatte bei meinem Testen auch den gleichen Fehler festgestellt und sogleich einen Patch auf github geladen, allerdings in der Hektik wohl den Merge auf den Hauptpfad vergessen :-(
Habe das nachgeholt und es sollte nun laufen.
Also bitte nochmal im expert mode die github Version 1.4.8 nachladen (update) und dann sollte es schon laufen. -
@hossi
Im log ist schön zu sehen, daß alle 5min Werte geholt werden.
Du schreibst ja auch, daß es Aktualisierungen gibt, diese sollten dann durch die 5min Abfragen entstanden sein.
Diese 5min habe ich am Anfang eingebaut um immer mal wieder ein Lebenszeichen zu schicken, bzw. um zu prüfen ob ggf. ein Gerät wieder online ist.In deinen Einstellungen fehlt noch der debug modus des Adapters. Dies kannst du oben beim Aufruf des Adapters machen info->debug.
Dann müssten auch Einträge kommen, daß Daten verarbeitet wurden.
msgUpdateValue kannst du erstmal das Häckchen rausnehmen, sonst ist wirklich viel im Log drin.Wenn du dann nochmal ein Mitschnitt schicken könntest, wo du die App geöffnet hast, könnte ich mal vergleichen, ob diese sich mit anderen Daten meldet und so die Updates aufrecht erhält.
THX!!
Es ist korrekt, er aktualisiert nur alle 5 Minuten die Werte. Sobald ich die App auf dem iPhone öffne aktualisiert er sofort und hält die Daten "LIVE" solange die App geöffnet ist. Sobald die App "nicht aktiv" im Hintergrund läuft schläft auch die Aktualisierung nach < 1 Minuten wieder ein.
Puhhh, das Log läuft extrem schnell voll. Herunterladen ging schon nicht mehr, da geht der Raspberry Pi 4 B (8 GB) mal ordentlich in die Knie ...
Hier mal ein Log, wo die Werte "standen" und ich dann die App auf dem iPhone gestartet habe:
Ich hoffe das ist aussagekräftig, sonst muss ich noch mal ran.
Danke, Dir einen schönen Sonntag und 1. Advent
Hossi -
Danke.
Ja, dein Setup hat viele Daten und da sind die Telegramme schon an sich groß.
Interessant ist das Log auf jeden Fall, da es auch sehr viele "set" enthält und da hast du wahrscheinlich nicht allzuviel in der App neu eingestellt. Sondern die App schickt halt bestimmte Werte nochmals und dies veranlasst die PowerOcean wahrscheinlich zum senden der updates. -
Ich hatte bei meinem Testen auch den gleichen Fehler festgestellt und sogleich einen Patch auf github geladen, allerdings in der Hektik wohl den Merge auf den Hauptpfad vergessen :-(
Habe das nachgeholt und es sollte nun laufen.
Also bitte nochmal im expert mode die github Version 1.4.8 nachladen (update) und dann sollte es schon laufen.@foxthefox
Hi, danke Dir :-)Jetzt läuft der Adapter wieder. Einzig diese Meldung kommt noch kommt noch jeder Minute:
ecoflow-mqtt.0 2025-11-30 17:09:38.008 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7125" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:08:37.044 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7126" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:07:25.900 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7127" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:06:55.464 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7128" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:04:05.661 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7130" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:02:54.430 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7131" greater than max "5999"Grüße
-
Danke.
Ja, dein Setup hat viele Daten und da sind die Telegramme schon an sich groß.
Interessant ist das Log auf jeden Fall, da es auch sehr viele "set" enthält und da hast du wahrscheinlich nicht allzuviel in der App neu eingestellt. Sondern die App schickt halt bestimmte Werte nochmals und dies veranlasst die PowerOcean wahrscheinlich zum senden der updates.genau so ist es.
Die App vor 4 Monaten mit Installation der Anlage einmal eingerichtet und eingestellt und seit dem eigentlich keine wirklichen Veränderungen in den Einstellungen mehr vorgenommen. Es gibt jetzt auch nur noch die eine installiere App auf dem iPhone und Deinen Adapter, mehr brauche ich auch nicht.
Aber bis dato hatte ich ja auch immer echte LIVE Daten über den Adapter?!
Hast Du eine Idee wie ich Deinen Adapter wieder (wie die letzten 3 Monate problemlos) zum fliegen bekomme?
Die Anlage läuft zwar normal und im Moment kommt eh nicht viel Strom über Photovoltaik, aber ohne LIVE Daten werde ich ab Frühjahr weder evcc, noch den PV-Überschuss sinnvoll steuern können …
-
@foxthefox
Hi, danke Dir :-)Jetzt läuft der Adapter wieder. Einzig diese Meldung kommt noch kommt noch jeder Minute:
ecoflow-mqtt.0 2025-11-30 17:09:38.008 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7125" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:08:37.044 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7126" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:07:25.900 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7127" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:06:55.464 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7128" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:04:05.661 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7130" greater than max "5999" ecoflow-mqtt.0 2025-11-30 17:02:54.430 warn State value to set for "ecoflow-mqtt.0.D3Mxxxxxxxxxx82.BMSHeartBeatReport0.remainTime" has value "7131" greater than max "5999"Grüße
-
genau so ist es.
Die App vor 4 Monaten mit Installation der Anlage einmal eingerichtet und eingestellt und seit dem eigentlich keine wirklichen Veränderungen in den Einstellungen mehr vorgenommen. Es gibt jetzt auch nur noch die eine installiere App auf dem iPhone und Deinen Adapter, mehr brauche ich auch nicht.
Aber bis dato hatte ich ja auch immer echte LIVE Daten über den Adapter?!
Hast Du eine Idee wie ich Deinen Adapter wieder (wie die letzten 3 Monate problemlos) zum fliegen bekomme?
Die Anlage läuft zwar normal und im Moment kommt eh nicht viel Strom über Photovoltaik, aber ohne LIVE Daten werde ich ab Frühjahr weder evcc, noch den PV-Überschuss sinnvoll steuern können …
@hossi
Ich schau mir dein Log mal an, ob was zu sehen ist.
Solche Aussetzer wurden schon öfter berichtet. Ich habe keine Ahnung was vor geraumer Zeit die Ursache war, aber ich hatte den Eindruck, daß es vermehrt beim Einsatz des Scriptes bzw. in einer frühen Version von Homeassistant hing. Da war mein Verdacht, daß für jedes Gerät oder bei jedem Neustart jeweils eigne bzw. neue Accounts aufgemacht wurden. Das lässt sich ggf. ganz gut seitens EF auswerten.Was noch eine Idee ist, auf die Cloud zu verzichten und den Server lokal laufen lassen.
Dazu gibt es Ansätze, ist aber recht schwierig, da man die Namensauflösung umbiegen muss und einen MQTT Server für diese Zwecke herrichten muß.
Immerhin wurde dadurch schon festgestellt, daß die Kommunikation der App nicht auf dem gleichen Abo läuft wie die Geräte. Also ist immer ein Vermittler zwischengeschaltet, der solche Kommunikation beeinflussen kann.Ohne es ganeu zu wissen, schienen diese Aussetzer bei anderen aber nicht permanent zu sein.
Also ist ggf. etwas Geduld angesagt.Aber lass mich mal dein Log noch durchschauen.
-
@hossi
Ich hab mal reingeschaut, die ganzen set Befehle haben meist keine Daten enthalten. Evtl könnte das schon so etwas wie Lebenszeichen oder Abruf sein. Muss das mal noch weiter analysieren.
Und es gibt in bekannten Strukturen noch neue Datenpunkte, allerdings unbekannt.