Jump to content

Sensibo mode not displayed correctly


Go to solution Solved by bpwwer,

Recommended Posts

Posted

Running an EISY with 5.9.1 firmware and Polyglot V3.

I'm using the Sensibo plugin and it works fairly well.  But, the mode displayed doesn't always match the mode set.  Setting the mode does send the correct mode to the Sensibo device and air conditioner.  But, the mode displayed is not correct.

I looked over the code and think I found the reason.

In sensibo_node.py line 155 the uom for the mode is defined as 67 which references a table of thermostat modes.  But I think it should be 25 for index since it is used to lookup the value in the arrays defined in line 7 (MODEs) and 19 (MODE_COUNTER). 

The array index look up works for FAN_LEVEL in _update(self, data) and setFan(self, param).   The code for MODES should probably work the same way in _update(self, data) and setMode(self, param).

 

The mode that is displayed matches the table for uom 67.

 

 67 = Thermostat mode
           0 - Off
           1 - Heat
           2 - Cool
           3 - Auto
           4 - Aux/Emergency Heat
           5 - Resume
           6 - Fan Only
           7 - Furnace
           8 - Dry Air
           9 - Moist Air
          10 - Auto Changeover
          11 - Energy Save Heat
          12 - Energy Save Cool
          13 - Away
          14 = Program Auto
          15 = Program Heat
          16 = Program Cool

When it should display the modes defined in MODES

line 7   MODES = ['cool', 'heat', 'fan', 'dry', 'auto']

 

I'm not a python programmer and I am not sure how to make my own version and load it into the EISY or I would test this out myself.

Thanks!

 

Posted (edited)

My assumption above was incorrect.

I figured out how to edit the sensibo plugin code directly on my EISY and debugged the issue.  I made two changes to the file sensibo_node.py.

Here is the diff output

19c19
< MODE_COUNTER = { 'cool': 0, 'heat': 1, 'fan': 2, 'dry': 3, 'auto': 4 }
---
> #MODE_COUNTER = { 'cool': 0, 'heat': 1, 'fan': 2, 'dry': 3, 'auto': 4 }
20a21,23
> # This corrects the display of the mode on the Administrative Console
> MODE_COUNTER = { 'cool': 2, 'heat': 1, 'fan': 6, 'dry': 8, 'auto': 3 }
>
83c86
<         self.setDriver('GV2', data['acState']['targetTemperature'], uom=temp_uom)
---
> #        self.setDriver('GV2', data['acState']['targetTemperature'], uom=temp_uom)
84a88,98
>         # The line above was crashing because the targetTemperature is not returned when
>         # the mode is in fan only mode. Since it is undefined in fan only mode it should
>         # probably be displayed as "-" on the Administrative Console. I don't know how to
>         # do that so I just skipped doing the update.
>
>         try:
>             if(data['acState']['targetTemperature']):
>                 self.setDriver('GV2', data['acState']['targetTemperature'], uom=temp_uom)
>         except:
>             LOGGER.debug('targetTemperature not present in acState')
>
 

The first change to the MODE_COUNTER definition corrected the issue I was having with the Administrative Console displaying wrong values for the Mode.

As I tested that it still correctly controlled the sensibo I observed a crash when the sensibo was set to Fan Only mode.  In this mode the acState doesn't include targetTemperature since it is unused and thus undefined.  This was causing an exception in the code of line 83.  I changed this to not attempt to update the displayed Target Temperature if it was not reported.  It would be better if it displayed "-" or "NA" but I do not know how to code that.

I hope this helps and can be incorporated into the plugin code.  I attached my final version of sensibo_node.py

sensibo_node.py

Edited by Freddy Kilowatt
Posted

Thanks for providing the feedback and solutions.  That makes it easy to update.

Version 2.0.7 is in the store and, if I made the changes correctly, should work for you now.

The eisy/Polisy only accepts numbers for temperature values, there's no way to make that display a '-' or N/A.

Posted (edited)

Thanks!  That was quick. 

I tried version 2.0.7 and at first it did not work. 

I found I needed to add a close parenthesis at the end of line 84 before the colon.  Then it works fine.

 

84c84
<             if('targetTemperature' in data['acState']:
---
>             if('targetTemperature' in data['acState']):
 

I can only edit the file on my EISY so you will need to update the plugin to fix this typo.

Edited by Freddy Kilowatt
  • Solution
Posted

Actually, it doesn't need the open '('.  I've been doing a lot of programming lately in a different language that does require '()' in if statements.   I don't have any Sensibo devices so I can't really test the changes.

Version 2.0.8 with the fix was published to the store.

Posted (edited)

Thanks! 2.0.8 is working fine.

I haven't programmed in python (before my hacking on this).  So, I'm not well versed in the syntax.  But, I can understand what I'm reading.  So I can see your method to test if targetTemperature is returned is a better solution than what I had used in my first attempt at a fix.

Thanks for your help.  I think this one is solved.

Edited by Freddy Kilowatt

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...