Skip to content
Merged
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
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ omit =
homeassistant/components/sensor/xbox_live.py
homeassistant/components/sensor/yweather.py
homeassistant/components/sensor/zamg.py
homeassistant/components/shiftr.py
homeassistant/components/spc.py
homeassistant/components/switch/acer_projector.py
homeassistant/components/switch/anel_pwrctrl.py
Expand Down
77 changes: 77 additions & 0 deletions homeassistant/components/shiftr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""
Support for Shiftr.io.

For more details about this component, please refer to the documentation at
https://home-assistant.io/components/shiftr/
"""
import logging

import voluptuous as vol

import homeassistant.helpers.config_validation as cv
from homeassistant.const import (
CONF_PASSWORD, CONF_USERNAME, EVENT_STATE_CHANGED,
EVENT_HOMEASSISTANT_STOP)
from homeassistant.helpers import state as state_helper

REQUIREMENTS = ['paho-mqtt==1.2.3']

_LOGGER = logging.getLogger(__name__)

DOMAIN = 'shiftr'

SHIFTR_BROKER = 'broker.shiftr.io'

CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string,
}),
}, extra=vol.ALLOW_EXTRA)


def setup(hass, config):
"""Initialize the Shiftr.io MQTT consumer."""
import paho.mqtt.client as mqtt
conf = config[DOMAIN]
username = conf.get(CONF_USERNAME)
password = conf.get(CONF_PASSWORD)

client_id = 'HomeAssistant'
port = 1883
keepalive = 600

mqttc = mqtt.Client(client_id, protocol=mqtt.MQTTv311)
mqttc.username_pw_set(username, password=password)
mqttc.connect(SHIFTR_BROKER, port=port, keepalive=keepalive)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that need inside a yield from hass.async_add_job() to not block the loop.


def stop_shiftr(event):
"""Stop the Shiftr.io MQTT component."""
mqttc.disconnect()

hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_shiftr)

def shiftr_event_listener(event):
"""Listen for new messages on the bus and sends them to Shiftr.io."""
state = event.data.get('new_state')
topic = state.entity_id.replace('.', '/')

try:
_state = state_helper.state_as_number(state)
except ValueError:
_state = state.state

try:
mqttc.publish(topic, _state, qos=0, retain=False)

if state.attributes:
for attribute, data in state.attributes.items():
mqttc.publish(
'/{}/{}'.format(topic, attribute), str(data), qos=0,
retain=False)
except RuntimeError:
pass

hass.bus.listen(EVENT_STATE_CHANGED, shiftr_event_listener)

return True
1 change: 1 addition & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,7 @@ openhomedevice==0.4.2
orvibo==1.1.1

# homeassistant.components.mqtt
# homeassistant.components.shiftr
paho-mqtt==1.2.3

# homeassistant.components.media_player.panasonic_viera
Expand Down
1 change: 1 addition & 0 deletions requirements_test_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ libsoundtouch==0.3.0
mficlient==0.3.0

# homeassistant.components.mqtt
# homeassistant.components.shiftr
paho-mqtt==1.2.3

# homeassistant.components.device_tracker.aruba
Expand Down