8000 0.42.4 by balloob · Pull Request #7142 · home-assistant/core · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

0.42.4 #7142

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 16, 2017
Merged

0.42.4 #7142

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.

Loading

Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 28 additions & 26 deletions homeassistant/components/device_tracker/mysensors.py
8000
Original file line number Diff line number Diff line change
Expand Up @@ -20,37 +20,39 @@ def mysensors_callback(gateway, msg):
"""Callback for mysensors platform."""
node = gateway.sensors[msg.node_id]
if node.sketch_name is None:
_LOGGER.info('No sketch_name: node %s', msg.node_id)
_LOGGER.debug('No sketch_name: node %s', msg.node_id)
return

pres = gateway.const.Presentation
set_req = gateway.const.SetReq

for child in node.children.values():
position = child.values.get(set_req.V_POSITION)
if child.type != pres.S_GPS or position is None:
continue
try:
latitude, longitude, _ = position.split(',')
except ValueError:
_LOGGER.error('Payload for V_POSITION %s is not of format '
'latitude,longitude,altitude', position)
continue
name = '{} {} {}'.format(
node.sketch_name, msg.node_id, child.id)
attr = {
mysensors.ATTR_CHILD_ID: child.id,
mysensors.ATTR_DESCRIPTION: child.description,
mysensors.ATTR_DEVICE: gateway.device,
mysensors.ATTR_NODE_ID: msg.node_id,
}
see(
dev_id=slugify(name),
host_name=name,
gps=(latitude, longitude),
battery=node.battery_level,
attributes=attr
)
child = node.children.get(msg.child_id)
if child is None:
return
position = child.values.get(set_req.V_POSITION)
if child.type != pres.S_GPS or position is None:
return
try:
latitude, longitude, _ = position.split(',')
except ValueError:
_LOGGER.error('Payload for V_POSITION %s is not of format '
'latitude,longitude,altitude', position)
return
name = '{} {} {}'.format(
node.sketch_name, msg.node_id, child.id)
attr = {
mysensors.ATTR_CHILD_ID: child.id,
mysensors.ATTR_DESCRIPTION: child.description,
mysensors.ATTR_DEVICE: gateway.device,
mysensors.ATTR_NODE_ID: msg.node_id,
}
see(
dev_id=slugify(name),
host_name=name,
gps=(latitude, longitude),
battery=node.battery_level,
attributes=attr
)

gateways = hass.data.get(mysensors.MYSENSORS_GATEWAYS)

Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/ios.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@
IDENTIFY_APP_SCHEMA = vol.Schema({
vol.Required(ATTR_APP_BUNDLE_IDENTIFER): cv.string,
vol.Required(ATTR_APP_BUILD_NUMBER): cv.positive_int,
vol.Required(ATTR_APP_VERSION_NUMBER): cv.positive_int
vol.Optional(ATTR_APP_VERSION_NUMBER): cv.string
}, extra=vol.ALLOW_EXTRA)

IDENTIFY_APP_SCHEMA_CONTAINER = vol.All(dict, IDENTIFY_APP_SCHEMA)
Expand Down
16 changes: 8 additions & 8 deletions homeassistant/components/light/zwave.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,25 +310,25 @@ def turn_on(self, **kwargs):
if self._zw098:
if kwargs[ATTR_COLOR_TEMP] > TEMP_MID_HASS:
self._ct = TEMP_WARM_HASS
rgbw = b'#000000ff00'
rgbw = '#000000ff00'
else:
self._ct = TEMP_COLD_HASS
rgbw = b'#00000000ff'
rgbw = '#00000000ff'

elif ATTR_RGB_COLOR in kwargs:
self._rgb = kwargs[ATTR_RGB_COLOR]
if (not self._zw098 and (
self._color_channels & COLOR_CHANNEL_WARM_WHITE or
self._color_channels & COLOR_CHANNEL_COLD_WHITE)):
rgbw = b'#'
rgbw = '#'
for colorval in color_rgb_to_rgbw(*self._rgb):
rgbw += format(colorval, '02x').encode('utf-8')
rgbw += b'00'
rgbw += format(colorval, '02x')
rgbw += '00'
else:
rgbw = b'#'
rgbw = '#'
for colorval in self._rgb:
rgbw += format(colorval, '02x').encode('utf-8')
rgbw += b'0000'
rgbw += format(colorval, '02x')
rgbw += '0000'

if rgbw and self.values.color:
self.values.color.data = rgbw
Expand Down
56 changes: 27 additions & 29 deletions homeassistant/components/mysensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
MQTT_COMPONENT = 'mqtt'
REQUIREMENTS = [
'https://github.com/theolind/pymysensors/archive/'
'ff3476b70edc9c995b939cddb9d51f8d2d018581.zip#pymysensors==0.9.0']
'c6990eaaa741444a638608e6e00488195e2ca74c.zip#pymysensors==0.9.1']


def is_socket_address(value):
Expand Down Expand Up @@ -206,12 +206,9 @@ def gw_start(event):
for node_id in gateway.sensors:
node = gateway.sensors[node_id]
for child_id in node.children:
child = node.children[child_id]
for value_type in child.values:
msg = mysensors.Message().modify(
node_id=node_id, child_id=child_id, type=1,
sub_type=value_type)
gateway.event_callback(msg)
msg = mysensors.Message().modify(
node_id=node_id, child_id=child_id)
gateway.event_callback(msg)
gateway.start()
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
lambda event: gateway.stop())
Expand Down Expand Up @@ -274,32 +271,33 @@ def mysensors_callback(gateway, msg):
_LOGGER.debug('No sketch_name: node %s', msg.node_id)
return
child = gateway.sensors[msg.node_id].children.get(msg.child_id)
if child is None or child.values.get(msg.sub_type) is None:
if child is None:
return
key = msg.node_id, child.id, msg.sub_type
if child.type not in map_sv_types or \
msg.sub_type not in map_sv_types[child.type]:
return
if key in devices:
for value_type in child.values:
key = msg.node_id, child.id, value_type
if child.type not in map_sv_types or \
value_type not in map_sv_types[child.type]:
continue
if key in devices:
if add_devices:
devices[key].schedule_update_ha_state(True)
else:
devices[key].update()
continue
name = '{} {} {}'.format(
gateway.sensors[msg.node_id].sketch_name, msg.node_id,
child.id)
if isinstance(entity_class, dict):
device_class = entity_class[child.type]
else:
device_class = entity_class
devices[key] = device_class(
gateway, msg.node_id, child.id, name, value_type)
if add_devices:
devices[key].schedule_update_ha_state(True)
_LOGGER.info('Adding new devices: %s', [devices[key]])
add_devices([devices[key]], True)
else:
devices[key].update()
return
name = '{} {} {}'.format(
gateway.sensors[msg.node_id].sketch_name, msg.node_id,
child.id)
if isinstance(entity_class, dict):
device_class = entity_class[child.type]
else:
device_class = entity_class
devices[key] = device_class(
gateway, msg.node_id, child.id, name, msg.sub_type)
if add_devices:
_LOGGER.info('Adding new devices: %s', [devices[key]])
add_devices([devices[key]], True)
else:
devices[key].update()
return mysensors_callback


Expand Down
2 changes: 1 addition & 1 deletion homeassistant/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"""Constants used by Home Assistant components."""
MAJOR_VERSION = 0
MINOR_VERSION = 42
PATCH_VERSION = '3'
PATCH_VERSION = '4'
__short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION)
__version__ = '{}.{}'.format(__short_version__, PATCH_VERSION)
REQUIRED_PYTHON_VER = (3, 4, 2)
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/package_constraints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ pip>=7.1.0
jinja2>=2.9.5
voluptuous==0.9.3
typing>=3,<4
aiohttp==2.0.5
aiohttp==2.0.7
async_timeout==1.2.0
4 changes: 2 additions & 2 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ pip>=7.1.0
jinja2>=2.9.5
voluptuous==0.9.3
typing>=3,<4
aiohttp==2.0.5
aiohttp==2.0.7
async_timeout==1.2.0

# homeassistant.components.nuimo_controller
Expand Down Expand Up @@ -314,7 +314,7 @@ https://github.com/tfriedel/python-lightify/archive/d6eadcf311e6e21746182d1480e9
https://github.com/thecynic/pylutron/archive/v0.1.0.zip#pylutron==0.1.0

# homeassistant.components.mysensors
https://github.com/theolind/pymysensors/archive/ff3476b70edc9c995b939cddb9d51f8d2d018581.zip#pymysensors==0.9.0
https://github.com/theolind/pymysensors/archive/c6990eaaa741444a638608e6e00488195e2ca74c.zip#pymysensors==0.9.1

# homeassistant.components.sensor.modem_callerid
https://github.com/vroomfonde1/basicmodem/archive/0.7.zip#basicmodem==0.7
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
'jinja2>=2.9.5',
'voluptuous==0.9.3',
'typing>=3,<4',
'aiohttp==2.0.5',
'aiohttp==2.0.7',
'async_timeout==1.2.0',
]

Expand Down
42 changes: 21 additions & 21 deletions tests/components/light/test_zwave.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,66 +207,66 @@ def test_set_rgb_color(mock_openzwave):
"""Test setting zwave light color."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGB only
color_channels = MockValue(data=0 10000 x1c, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})

assert color.data == b'#0000000000'
assert color.data == '#0000000000'

device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)})

assert color.data == b'#c896640000'
assert color.data == '#c896640000'


def test_set_rgbw_color(mock_openzwave):
"""Test setting zwave light color."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGBW
color_channels = MockValue(data=0x1d, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})

assert color.data == b'#0000000000'
assert color.data == '#0000000000'

device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)})

assert color.data == b'#c86400c800'
assert color.data == '#c86400c800'


def test_zw098_set_color_temp(mock_openzwave):
"""Test setting zwave light color."""
node = MockNode(manufacturer_id='0086', product_id='0062',
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGB, warm white, cold white
color_channels = MockValue(data=0x1f, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})

assert color.data == b'#0000000000'
assert color.data == '#0000000000'

device.turn_on(**{ATTR_COLOR_TEMP: 200})

assert color.data == b'#00000000ff'
assert color.data == '#00000000ff'

device.turn_on(**{ATTR_COLOR_TEMP: 400})

assert color.data == b'#000000ff00'
assert color.data == '#000000ff00'


def test_rgb_not_supported(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts color temperature only
color_channels = MockValue(data=0x01, node=node)
values = MockLightValues(primary=value, color=color,
Expand All @@ -290,7 +290,7 @@ def test_no_color_channels_value(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
values = MockLightValues(primary=value, color=color)
device = zwave.get_device(node=node, values=values, node_config={})

Expand All @@ -301,7 +301,7 @@ def test_rgb_value_changed(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGB only
color_channels = MockValue(data=0x1c, node=node)
values = MockLightValues(primary=value, color=color,
Expand All @@ -310,7 +310,7 @@ def test_rgb_value_changed(mock_openzwave):

assert device.rgb_color == [0, 0, 0]

color.data = b'#c896640000'
color.data = '#c896640000'
value_changed(color)

assert device.rgb_color == [200, 150, 100]
Expand All @@ -320,7 +320,7 @@ def test_rgbww_value_changed(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGB, Warm White
color_channels = MockValue(data=0x1d, node=node)
values = MockLightValues(primary=value, color=color,
Expand All @@ -329,7 +329,7 @@ def test_rgbww_value_changed(mock_openzwave):

assert device.rgb_color == [0, 0, 0]

color.data = b'#c86400c800'
color.data = '#c86400c800'
value_changed(color)

assert device.rgb_color == [200, 150, 100]
Expand All @@ -339,7 +339,7 @@ def test_rgbcw_value_changed(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGB, Cold White
color_channels = MockValue(data=0x1e, node=node)
values = MockLightValues(primary=value, color=color,
Expand All @@ -348,7 +348,7 @@ def test_rgbcw_value_changed(mock_openzwave):

assert device.rgb_color == [0, 0, 0]

color.data = b'#c86400c800'
color.data = '#c86400c800'
value_changed(color)

assert device.rgb_color == [200, 150, 100]
Expand All @@ -359,7 +359,7 @@ def test_ct_value_changed(mock_openzwave):
node = MockNode(manufacturer_id='0086', product_id='0062',
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
color = MockValue(data='#0000000000', node=node)
# Suppoorts RGB, Cold White
color_channels = MockValue(data=0x1f, node=node)
values = MockLightValues(primary=value, color=color,
Expand All @@ -368,12 +368,12 @@ def test_ct_value_changed(mock_openzwave):

assert device.color_temp == zwave.TEMP_MID_HASS

color.data = b'#000000ff00'
color.data = '#000000ff00'
value_changed(color)

assert device.color_temp == zwave.TEMP_WARM_HASS

color.data = b'#00000000ff'
color.data = '#00000000ff'
value_changed(color)

assert device.color_temp == zwave.TEMP_COLD_HASS
0