Skip to content

Commit

Permalink
Send heating and fan speed orders
Browse files Browse the repository at this point in the history
  • Loading branch information
daggelpop committed Sep 30, 2018
1 parent cbf5ea2 commit ca0beb8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 3 deletions.
36 changes: 33 additions & 3 deletions DysonPureLinkPlugin/dyson_pure_link_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,40 @@ def connect_device(self):
self.client = None
return False

def set_fan_mode(self, mode):
"""Changes fan mode: ON|OFF|AUTO"""
def set_fan_mode(self, mode, speed=0):
"""
Changes fan mode: FAN|OFF|AUTO
Change fan speed: 1 - 10
"""
data = {'fmod': mode}
if 1 <= speed <= 10:
data['fnsp'] = '{:04d}'.format(speed)

if self._is_connected:
self._change_state(data)

def set_heating_mode(self, mode, max_temperature=None):
"""
Changes heating mode: HEAT|OFF
Change max temperature: 274K - 310K, 1C - 37C, ??F - ??F
"""

data = {'hmod': mode}

if max_temperature:
temperature, unit = int(max_temperature[:-1]), max_temperature[-1]
converters = {
'C': SensorsData.celsius_to_kelvin,
'F': SensorsData.fahrenheit_to_kelvin,
'K': lambda x: x,
}
func = converters.get(unit, lambda x: -1)
kelvins = func(temperature)
if 274 <= kelvins <= 310:
data['hmax'] = '{:04d}'.format(int(kelvins) * 10)

if self._is_connected:
self._change_state({'fmod': mode})
self._change_state(data)

def set_standby_monitoring(self, mode):
"""Changes standby monitoring: ON|OFF"""
Expand Down
12 changes: 12 additions & 0 deletions DysonPureLinkPlugin/value_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,14 @@ def kelvin_to_fahrenheit(kelvin_value):
def kelvin_to_celsius(kelvin_value):
return kelvin_value - 273.15

@staticmethod
def fahrenheit_to_kelvin(fahrenheit_value):
return (fahrenheit_value + 459.67) * 5 / 9

@staticmethod
def celsius_to_kelvin(celsius_value):
return celsius_value + 273.15

@property
def humidex(self):
return self.temperature + 0.5555 * \
Expand All @@ -110,7 +118,11 @@ def __init__(self, message):
data = message['product-state']

self.fan_mode = self._get_field_value(data['fmod'])
self.fan_speed = self._get_field_value(data['fnsp'])
self.fan_state = self._get_field_value(data['fnst'])
self.heating_mode = self._get_field_value(data['hmod'])
self.heating_max_temp = self._get_field_value(data['hmax'])
self.heating_state = self._get_field_value(data['hsta'])
self.night_mode = self._get_field_value(data['nmod'])
self.speed = self._get_field_value(data['fnsp'])
self.oscillation = self._get_field_value(data['oson'])
Expand Down

0 comments on commit ca0beb8

Please sign in to comment.