Freddy Kilowatt Posted May 24 Posted May 24 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! Quote
Freddy Kilowatt Posted May 26 Author Posted May 26 (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 May 26 by Freddy Kilowatt Quote
bpwwer Posted May 26 Posted May 26 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. Quote
Freddy Kilowatt Posted May 26 Author Posted May 26 (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 May 27 by Freddy Kilowatt Quote
Solution bpwwer Posted May 27 Solution Posted May 27 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. Quote
Freddy Kilowatt Posted May 27 Author Posted May 27 (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 May 27 by Freddy Kilowatt Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.