robertklep / nefit-easy-client

Nefit Easy™ client for Node.js
MIT License
14 stars 3 forks source link

Unknown or unimplemented command #4

Closed pepijng closed 8 years ago

pepijng commented 8 years ago

First of all .. thanks for your great work!

I've installed on Ubuntu 14.04 and i'm able to retrieve status and pressure from my Nefit boiler. When using: easy set temperature 15 i get an error message: Unknown or unimplemented command 15

This also occurs when using the easy get command, for example easy get /system/appliance/systemPressure

The error: Unknown or unimplemented command /system/appliance/systemPressure

robertklep commented 8 years ago

Yeah, I just noticed this myself, I broke the CLI option handling :(

robertklep commented 8 years ago

Fixed in f3c94cc3a34d425ccba3e48d8d3a3a3852e82bfb.

If you reinstall it should work again.

kraades commented 8 years ago

No errors but I don't think it is working yet...

root@linux:~/nefit-easy-client# ./bin/easy set temperature 20 {"status":"ok"} root@linux:~/nefit-easy-client# node ./example/current-status.js Temperature is set to 21.5°C, current is 22.2°C. Outside temperature is 5.0°C. System pressure is 1.9 bar. root@linux:~/nefit-easy-client#

robertklep commented 8 years ago

@kraades can you create a new issue for this? And please include the output of easy status as well.

Perhaps the thermostat needs to be put in manual mode before it accepts a temp override.

pepijng commented 8 years ago

Please take a close look at your Easy. When pushing a new temperature using easy set temperature it wil briefly show it on your thermostat. The easy's internal clock program will set it back to the temperature defined in the clock program. So as Robert suggested: put your easy on manual first :)

robertklep commented 8 years ago

@kraades @pepijng

The Android app sends the following requests to the backend when changing the temp:

PUT /heatingCircuits/hc1/temperatureRoomManual {"value":19}
PUT /heatingCircuits/hc1/manualTempOverride/status {"status":"on"}
PUT /heatingCircuits/hc1/manualTempOverride/temperature {"value":19}

The easy client will only send the first one, so my guess is that the other two are also required (unless the thermostat is already in manual mode).

However, I'm not sure if this will permanently put the "manual temp override" status to "on", which would be a side-effect that should be avoided.

kraades commented 8 years ago

Correct, setting the temperature works if the Easy is in manual mode.

robertklep commented 8 years ago

@kraades later today or tomorrow I'll try and see if I can get it working without having to put the Easy in manual mode 😀

kraades commented 8 years ago

I tried this one and I think it works without setting the Easy in manual mode.

./bin/easy put /heatingCircuits/hc1/temperatureRoomManual '{"value":20}'
./bin/easy put /heatingCircuits/hc1/manualTempOverride/status '{"value":"on"}'
./bin/easy put /heatingCircuits/hc1/manualTempOverride/temperature '{"value":20}'
robertklep commented 8 years ago

@kraades nice! I was wondering if perhaps the second request could be skipped as well.

robertklep commented 8 years ago

@kraades I pushed an update, set temperature should work properly now.

rostykk commented 8 years ago

i think /heatingCircuits/hc1/manualTempOverride/status {"status":"on"} responsible for temporary temperature override (will be reseted after next clock update) in nefit easy "manual/auto" correspond to /heatingCircuits/hc1/usermode which can be clock or manual

so in set temperature command we need really all three commands

or read first a /heatingCircuits/hc1/usermode if 'manual' then use only 1 command: /heatingCircuits/hc1/temperatureRoomManual '{"value":20}' if 'clock' use /heatingCircuits/hc1/manualTempOverride/status '{"value":"on"}' and /heatingCircuits/hc1/manualTempOverride/temperature '{"value":20}'

rostykk commented 8 years ago

just tested with override temp (16 deg) in clock mode (18 degree after 10 minutes): windows/android test its automaticaly switch off when clock programm is coming next so in clock mode only 2 command used manualTempOverride/status and manualTempOverride/temperature

kraades commented 8 years ago

Imo checking usermode and either use the temperatureroommanual or manualtempoverride would be most clear. Maybe a new issue should be created?

robertklep commented 8 years ago

@rostykk @kraades it seems to me that the client can always issue the three commands (as the "manual temp override" commands would just be ignored if the user mode is already set to "manual")?

rostykk commented 8 years ago

@robertklep in "clock" mode android-client don't send command to /heatingCircuits/hc1/temperatureRoomManual

before:

{"id":"/heatingCircuits/hc1/manualTempOverride/status","type":"stringValue","recordable":0,"writeable":1,"value":"off"}`

{ "user mode": "clock", "clock program": "auto", "in house status": "ok", "in house temp": 21.3, "boiler indicator": "off", "control": "room", "temp override duration": 0, "current switchpoint": 14, "ps active": false, "fp active": false, "temp override": false, "holiday mode": false, "boiler block": null, "boiler lock": null, "boiler maintainance": null, "temp setpoint": 20, "temp override temp setpoint": 17, "temp manual setpoint": 18, "hed enabled": null, "hed device at home": null, "outdoor temp": 7, "outdoor source type": "virtual" } after when i press temperature up in clock mode (clock setpoint was 20 become 23) {"id":"/heatingCircuits/hc1/manualTempOverride/status","type":"stringValue","recordable":0,"writeable":1,"value":"on"} { "user mode": "clock", "clock program": "auto", "in house status": "ok", "in house temp": 21.2, "boiler indicator": "central heating", "control": "room", "temp override duration": 0, "current switchpoint": 14, "ps active": false, "fp active": false, "temp override": true, "holiday mode": false, "boiler block": null, "boiler lock": null, "boiler maintainance": null, "temp setpoint": 23, "temp override temp setpoint": 23, "temp manual setpoint": 18, "hed enabled": null, "hed device at home": null, "outdoor temp": 7, "outdoor source type": "virtual" }`

robertklep commented 8 years ago

@rostykk hmm I'll take a closer look at my logfiles (perhaps the iOS agent, which I use to trace the comms, behaves differently in that respect).

But besides that, it seems to me that the Easy will ignore temp manual setpoint when the user mode is set to "clock", wouldn't you agree?

So calling temperatureRoomManual when it's in clock mode would have no impact, and calling manualTempOverride/status and manualTempOverride/temperature when in manual mode also wouldn't have an impact.

I'm trying to determine if I can use a shortcut by just always issuing those three commands for the set temperature command, instead of first checking the current user mode and pick the correct command(s).

rostykk commented 8 years ago

@robertklep yes fully agree: even if user click on manual mode Nefit easy made "bumpless switch": it overrite old temp manual setpoint with existing in "clock" mode So for me working solution: use all three command at once to be sure the temperature are set without checking mode (but its not intelegent way, probably)

robertklep commented 8 years ago

@rostykk not intelligent perhaps, but "good enough" 😉