Grizzelbee / ioBroker.mielecloudservice

Integrates your MieleCloudService (aka Miele@Home) Devices to ioBroker
MIT License
20 stars 9 forks source link

improvement request: Add option to push new startTime #163

Closed Magnus8513 closed 2 years ago

Magnus8513 commented 3 years ago

As discussed in the forum I would like to push a new startTime to the machine in order to properly use the Smart Grid/Start functionality of my dishwasher making it run at the time of lowest energy prices. The Miele API documentation says this value can be edited, but changing it in the states today, does not result in a push to Miele, but just gets overwritten at next update with the old value.

see forum discussion here: https://forum.iobroker.net/topic/29836/mielecloudservice-adapter/356

Grizzelbee commented 3 years ago

Just took a look in to this issue and thought about implementing it. But found that it might work already in your version (or even in my development version) -> please provide a debug log if it does not work for you. My Log looks good to me on the first sight.

If it only works in my development branch I might have fixed it by accident. ;)

mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.616 | debug | Result returned from Action(startTime)-execution: ["OK, no content."] -- | -- | -- | -- | -- mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.616 | debug | createString: Path[mielecloudservice.0.000149137623.Action_Information] Value[startTime: OK, no content.] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.616 | debug | API returned Information: [""] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.616 | debug | API returned Status: [204] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.486 | debug | axios options: [{"headers":{"Authorization":"Bearer DE_5fbbxxx","Accept":"application/json","Content-Type":"application/json"},"method":"PUT","data":{"startTime":["15","00"]},"dataType":"json","json":true,"url":"https://api.mcs3.miele.com/v1/devices/000149137xxx/actions"}] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.486 | debug | APISendRequest: Awaiting requested data. mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.486 | debug | APIStartAction: Executing Action: [{"startTime":["15","00"]}] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.486 | debug | APIStartAction: received Action: [startTime] with value: [15:00] for device [000149137623] / path:[mielecloudservice.0.000149137xxx] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.486 | debug | stateChange: permitted actions for device [000149137xxx]->[{"processAction":[],"light":[],"ambientLight":[],"startTime":[],"ventilationStep":[],"programId":[],"targetTemperature":[],"deviceName":false,"powerOn":true,"powerOff":false,"colors":[],"modes":[]}] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.486 | debug | API returned Information: [{"processAction":[],"light":[],"ambientLight":[],"startTime":[],"ventilationStep":[],"programId":[],"targetTemperature":[],"deviceName":false,"powerOn":true,"powerOff":false,"colors":[],"modes":[]}] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.485 | debug | API returned Status: [200] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.329 | debug | axios options: [{"headers":{"Authorization":"Bearer DE_5fbbxxx","Accept":"application/json","Content-Type":"application/json"},"method":"GET","data":"","dataType":"json","json":true,"url":"https://api.mcs3.miele.com/v1/devices/000149137xxx/actions"}] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.329 | debug | APISendRequest: Awaiting requested data. mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.329 | debug | stateChange: DeviceId [000149137xxx], requested action [startTime], state [15:00] mielecloudservice.0 | 14948 | 2021-10-19 16:12:23.329 | debug | stateChange: [mielecloudservice.0.000149137xxxstartTime] [{"val":"15:00","ack":false,"ts":1634652743328,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1634652743328}]  
Magnus8513 commented 2 years ago

Ok, will try again and give feedback.

Magnus8513 commented 2 years ago

Ich habe es nochmal versucht mit der 5.0.0 - Falls ich das richtig lese, scheint er die Änderung von StartTime zu erkennen und auch etwas zu Miele zu schicken, funktionieren tut es aber nicht. Anbei ein Log Auszug von dem Versuch die startTime von 6:17 (übermittelt von der API initial aktuell) auf 1:17 zu setzten. Am Ende wird der Wert wieder von der API mit 6:17 überschrieben.

mielecloudservice.0 2021-10-26 12:23:20.360 debug refreshMieleData: handover all devices data to splitMieleDevices
mielecloudservice.0 2021-10-26 12:23:20.359 debug API returned Information: [{"000711955298":{"ident":{"type":{"key_localized":"Gerätetyp","value_raw":19,"value_localized":"Kühlschrank"},"deviceName":"","deviceIdentLabel":{"fabNumber":"000711955298","fabIndex":"00","techType":"K 7774 D","matNumber":"11641850","swids":["5407"]},"xkmIdentLabel":{"techType":"EK037LHBM","releaseVersion":"32.16"}},"state":{"ProgramID":{"value_raw":0,"value_localized":"","key_localized":"Programmbezeichnung"},"status":{"value_raw":5,"value_localized":"In Betrieb","key_localized":"Status"},"programType":{"value_raw":0,"value_localized":"Programm","key_localized":"Programmart"},"programPhase":{"value_raw":0,"value_localized":"","key_localized":"Programmphase"},"remainingTime":[0,0],"startTime":[0,0],"targetTemperature":[{"value_raw":600,"value_localized":6,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"temperature":[{"value_raw":600,"value_localized":6,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"signalInfo":false,"signalFailure":false,"signalDoor":false,"remoteEnable":{"fullRemoteControl":true,"smartGrid":false,"mobileStart":false},"ambientLight":null,"light":null,"elapsedTime":[],"spinningSpeed":{"unit":"U/min","value_raw":null,"value_localized":null,"key_localized":"Schleuderdrehzahl"},"dryingStep":{"value_raw":null,"value_localized":"","key_localized":"Trockenstufe"},"ventilationStep":{"value_raw":null,"value_localized":"","key_localized":"Lüfterstufe"},"plateStep":[],"ecoFeedback":null,"batteryLevel":null}},"000104695514":{"ident":{"type":{"key_localized":"Gerätetyp","value_raw":7,"value_localized":"Geschirrspüler"},"deviceName":"","deviceIdentLabel":{"fabNumber":"000104695514","fabIndex":"64","techType":"G7965","matNumber":"10992660","swids":["5420","20467","20497","25199","20502","35538","25294","4684","20454","25168","4928","20475","25266","4875","20366","20462","5361","25272","20444"]},"xkmIdentLabel":{"techType":"EK037","releaseVersion":"03.88"}},"state":{"ProgramID":{"value_raw":6,"value_localized":"Auto","key_localized":"Programmbezeichnung"},"status":{"value_raw":4,"value_localized":"Start verzögert","key_localized":"Status"},"programType":{"value_raw":0,"value_localized":"Programm","key_localized":"Programmart"},"programPhase":{"value_raw":0,"value_localized":"","key_localized":"Programmphase"},"remainingTime":[2,44],"startTime":[6,17],"targetTemperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"temperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"signalInfo":false,"signalFailure":false,"signalDoor":false,"remoteEnable":{"fullRemoteControl":true,"smartGrid":true,"mobileStart":true},"ambientLight":null,"light":2,"elapsedTime":[0,0],"spinningSpeed":{"unit":"U/min","value_raw":null,"value_localized":null,"key_localized":"Schleuderdrehzahl"},"dryingStep":{"value_raw":null,"value_localized":"","key_localized":"Trockenstufe"},"ventilationStep":{"value_raw":null,"value_localized":"","key_localized":"Lüfterstufe"},"plateStep":[],"ecoFeedback":{"currentWaterConsumption":{"unit":"l","value":13},"currentEnergyConsumption":{"unit":"kWh","value":0.9},"waterForecast":0.3,"energyForecast":0.4},"batteryLevel":null}},"000149861133":{"ident":{"type":{"key_localized":"Gerätetyp","value_raw":1,"value_localized":"Waschmaschine"},"deviceName":"Waschmaschine Bowie","deviceIdentLabel":{"fabNumber":"000149861133","fabIndex":"11","techType":"WCI670","matNumber":"10692170","swids":["5004","20456","25213","25191","25227","25205","25319"]},"xkmIdentLabel":{"techType":"EK037","releaseVersion":"03.88"}},"state":{"ProgramID":{"value_raw":1,"value_localized":"Baumwolle","key_localized":"Programmbezeichnung"},"status":{"value_raw":1,"value_localized":"Aus","key_localized":"Status"},"programType":{"value_raw":1,"value_localized":"Eigenes Programm","key_localized":"Programmart"},"programPhase":{"value_raw":268,"value_localized":"Ende","key_localized":"Programmphase"},"remainingTime":[0,0],"startTime":[0,0],"targetTemperature":[{"value_raw":4000,"value_localized":40,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"temperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"signalInfo":false,"signalFailure":false,"signalDoor":false,"remoteEnable":{"fullRemoteControl":true,"smartGrid":false,"mobileStart":false},"ambientLight":null,"light":null,"elapsedTime":[0,0],"spinningSpeed":{"unit":"U/min","value_raw":1600,"value_localized":"1600","key_localized":"Schleuderdrehzahl"},"dryingStep":{"value_raw":null,"value_localized":"","key_localized":"Trockenstufe"},"ventilationStep":{"value_raw":null,"value_localized":"","key_localized":"Lüfterstufe"},"plateStep":[],"ecoFeedback":null,"batteryLevel":null}},"000118960382":{"ident":{"type":{"key_localized":"Gerätetyp","value_raw":1,"value_localized":"Waschmaschine"},"deviceName":"","deviceIdentLabel":{"fabNumber":"000118960382","fabIndex":"10","techType":"WMV960","matNumber":"09945500","swids":["3474","25065","25033","20163","3626","20242","25042","25043","25026","2971","20166"]},"xkmIdentLabel":{"techType":"XKM3000Z","releaseVersion":"01.02"}},"state":{"ProgramID":{"value_raw":8,"value_localized":"Wolle ","key_localized":"Programmbezeichnung"},"status":{"value_raw":1,"value_localized":"Aus","key_localized":"Status"},"programType":{"value_raw":0,"value_localized":"Programm","key_localized":"Programmart"},"programPhase":{"value_raw":268,"value_localized":"Ende","key_localized":"Programmphase"},"remainingTime":[0,0],"startTime":[0,0],"targetTemperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"temperature":[],"signalInfo":false,"signalFailure":false,"signalDoor":false,"remoteEnable":{"fullRemoteControl":true,"smartGrid":true,"mobileStart":false},"ambientLight":null,"light":null,"elapsedTime":[0,0],"spinningSpeed":{"unit":"U/min","value_raw":0,"value_localized":"0","key_localized":"Schleuderdrehzahl"},"dryingStep":{"value_raw":null,"value_localized":"","key_localized":"Trockenstufe"},"ventilationStep":{"value_raw":null,"value_localized":"","key_localized":"Lüfterstufe"},"plateStep":[],"ecoFeedback":null,"batteryLevel":null}}}]
mielecloudservice.0 2021-10-26 12:23:20.358 debug API returned Status: [200]
mielecloudservice.0 2021-10-26 12:23:20.276 warn State "mielecloudservice.0.000104695514.Action_Information" has no existing object, this might lead to an error in future versions
mielecloudservice.0 2021-10-26 12:23:20.251 debug axios options: [{"headers":{"Authorization":"Bearer DE_47b8168a02999b3e102a444dbb285d84","Accept":"application/json","Content-Type":"application/json"},"method":"GET","data":"","dataType":"json","json":true,"url":"https://api.mcs3.miele.com/v1/devices/?language=de"}]
mielecloudservice.0 2021-10-26 12:23:20.251 debug APISendRequest: Awaiting requested data.
mielecloudservice.0 2021-10-26 12:23:20.251 debug refreshMieleData: get data from API
mielecloudservice.0 2021-10-26 12:23:20.250 debug Result returned from Action(startTime)-execution: [undefined]
mielecloudservice.0 2021-10-26 12:23:20.250 debug createString: Path[mielecloudservice.0.000104695514.Action_Information] Value[startTime: undefined]
mielecloudservice.0 2021-10-26 12:23:20.250 warn HTTP 500: Internal Server Error @Miele-API servers. There is nothing you can do but waiting if if solves itself or get in contact with Miele.
mielecloudservice.0 2021-10-26 12:23:20.249 debug [APISendRequest] {"message":"Request failed with status code 500","name":"Error","stack":"Error: Request failed with status code 500\n at createError (/opt/iobroker/node_modules/iobroker.mielecloudservice/node_modules/axios/lib/core/createError.js:16:15)\n at settle (/opt/iobroker/node_modules/iobroker.mielecloudservice/node_modules/axios/lib/core/settle.js:17:12)\n at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.mielecloudservice/node_modules/axios/lib/adapters/http.js:293:11)\n at IncomingMessage.emit (events.js:326:22)\n at IncomingMessage.EventEmitter.emit (domain.js:483:12)\n at endReadableNT (_stream_readable.js:1241:12)\n at processTicksAndRejections (internal/process/task_queues.js:84:21)","config":{"transitional":{"silentJSONParsing":true,"forcedJSONParsing":true,"clarifyTimeoutError":false},"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"maxBodyLength":-1,"headers":{"Accept":"application/json","Content-Type":"application/json","Authorization":"Bearer DE_47b8168a02999b3e102a444dbb285d84","User-Agent":"axios/0.23.0","Content-Length":24},"method":"put","data":"{\"startTime\":[\"1\",\"17\"]}","dataType":"json","json":true,"url":"https://api.mcs3.miele.com/v1/devices/000104695514/actions"},"status":500} | [Stack]: Error: Request failed with status code 500 at createError (/opt/iobroker/node_modules/iobroker.mielecloudservice/node_modules/axios/lib/core/createError.js:16:15) at settle (/opt/iobroker/node_modules/iobroker.mielecloudservice/node_modules/axios/lib/core/settle.js:17:12) at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.mielecloudservice/node_modules/axios/lib/adapters/http.js:293:11) at IncomingMessage.emit (events.js:326:22) at IncomingMessage.EventEmitter.emit (domain.js:483:12) at endReadableNT (_stream_readable.js:1241:12) at processTicksAndRejections (internal/process/task_queues.js:84:21)
mielecloudservice.0 2021-10-26 12:23:20.247 debug Payload: [{"startTime":["1","17"]}]
mielecloudservice.0 2021-10-26 12:23:20.246 debug Method: [PUT]
mielecloudservice.0 2021-10-26 12:23:20.246 debug Endpoint: [v1/devices/000104695514/actions]
mielecloudservice.0 2021-10-26 12:23:20.245 debug Auth: [{"access_token":"DE_47b8168a02999b3e102a444dbb285d84","refresh_token":"DE_e261294a17350a06f511dc5edf9946dd","token_type":"Bearer","expires_in":2592000}]
mielecloudservice.0 2021-10-26 12:23:20.244 debug Given parameters:
mielecloudservice.0 2021-10-26 12:23:18.096 debug axios options: [{"headers":{"Authorization":"Bearer DE_47b8168a02999b3e102a444dbb285d84","Accept":"application/json","Content-Type":"application/json"},"method":"PUT","data":{"startTime":["1","17"]},"dataType":"json","json":true,"url":"https://api.mcs3.miele.com/v1/devices/000104695514/actions"}]
mielecloudservice.0 2021-10-26 12:23:18.095 debug APISendRequest: Awaiting requested data.
mielecloudservice.0 2021-10-26 12:23:18.095 debug APIStartAction: Executing Action: [{"startTime":["1","17"]}]
mielecloudservice.0 2021-10-26 12:23:18.095 debug APIStartAction: received Action: [startTime] with value: [1:17] for device [000104695514] / path:[mielecloudservice.0.000104695514]
mielecloudservice.0 2021-10-26 12:23:18.095 debug stateChange: permitted actions for device [000104695514]->[{"processAction":[1,2],"light":[1],"ambientLight":[],"startTime":[[0,0],[23,59]],"ventilationStep":[],"programId":[],"targetTemperature":[],"deviceName":true,"powerOn":false,"powerOff":true,"colors":[],"modes":[]}]
mielecloudservice.0 2021-10-26 12:23:18.094 debug API returned Information: [{"processAction":[1,2],"light":[1],"ambientLight":[],"startTime":[[0,0],[23,59]],"ventilationStep":[],"programId":[],"targetTemperature":[],"deviceName":true,"powerOn":false,"powerOff":true,"colors":[],"modes":[]}]
mielecloudservice.0 2021-10-26 12:23:18.094 debug API returned Status: [200]
mielecloudservice.0 2021-10-26 12:23:17.974 debug axios options: [{"headers":{"Authorization":"Bearer DE_47b8168a02999b3e102a444dbb285d84","Accept":"application/json","Content-Type":"application/json"},"method":"GET","data":"","dataType":"json","json":true,"url":"https://api.mcs3.miele.com/v1/devices/000104695514/actions"}]
mielecloudservice.0 2021-10-26 12:23:17.970 debug APISendRequest: Awaiting requested data.
mielecloudservice.0 2021-10-26 12:23:17.970 debug stateChange: DeviceId [000104695514], requested action [startTime], state [1:17]
mielecloudservice.0 2021-10-26 12:23:17.969 debug stateChange: [mielecloudservice.0.000104695514.startTime] [{"val":"1:17","ack":false,"ts":1635243797964,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1635243797964}]
mielecloudservice.0 2021-10-26 12:23:02.602 info Received ACTIONS message by SSE.
Grizzelbee commented 2 years ago

Hmm. Ja. Bei dir geht der mit enem "Error 500: Internal Server Error" aus der Kurve. in Meinem Versuch habe ich einen 204 (Ok, ohne weitere Infos) zurück bekommen. Im Moment häufen sich bei mir aber auch die Error 500 - quer durch diverse Funktionen. Für mich scheint es, als hätte Miele gerade ein Problem mit seiner API. Vielleicht müssen wir uns noch etwas gedulden.

Grizzelbee commented 2 years ago

Should work with V6.0.0. Please open a new or reopen this issue if not.