Ejemplo n.º 1
0
    def setup_gateway(port, persistence, persistence_file, version):
        """Return gateway after setup of the gateway."""
        gateway = mysensors.SerialGateway(port,
                                          event_callback=None,
                                          persistence=persistence,
                                          persistence_file=persistence_file,
                                          protocol_version=version)
        gateway.metric = is_metric
        gateway.debug = config[DOMAIN].get(CONF_DEBUG, False)
        gateway = GatewayWrapper(gateway, version)
        # pylint: disable=attribute-defined-outside-init
        gateway.event_callback = gateway.callback_factory()

        def gw_start(event):
            """Callback to trigger start of gateway and any persistence."""
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())
            if persistence:
                for node_id in gateway.sensors:
                    gateway.event_callback('persistence', node_id)

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Ejemplo n.º 2
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """ Setup the mysensors platform. """

    import mysensors.mysensors as mysensors
    import mysensors.const_14 as const

    devices = {}  # keep track of devices added to HA
    # Just assume celcius means that the user wants metric for now.
    # It may make more sense to make this a global config option in the future.
    is_metric = (hass.config.temperature_unit == TEMP_CELCIUS)

    def sensor_update(update_type, nid):
        """ Callback for sensor updates from the MySensors gateway. """
        _LOGGER.info("sensor_update %s: node %s", update_type, nid)
        sensor = gateway.sensors[nid]
        if sensor.sketch_name is None:
            return
        if nid not in devices:
            devices[nid] = {}

        node = devices[nid]
        new_devices = []
        for child_id, child in sensor.children.items():
            if child_id not in node:
                node[child_id] = {}
            for value_type, value in child.values.items():
                if value_type not in node[child_id]:
                    name = '{} {}.{}'.format(sensor.sketch_name, nid, child.id)
                    node[child_id][value_type] = \
                        MySensorsNodeValue(
                            nid, child_id, name, value_type, is_metric, const)
                    new_devices.append(node[child_id][value_type])
                else:
                    node[child_id][value_type].update_sensor(
                        value, sensor.battery_level)

        if new_devices:
            _LOGGER.info("adding new devices: %s", new_devices)
            add_devices(new_devices)

    port = config.get(CONF_PORT)
    if port is None:
        _LOGGER.error("Missing required key 'port'")
        return False

    persistence = config.get(CONF_PERSISTENCE, True)

    gateway = mysensors.SerialGateway(port,
                                      sensor_update,
                                      persistence=persistence)
    gateway.metric = is_metric
    gateway.debug = config.get(CONF_DEBUG, False)
    gateway.start()

    if persistence:
        for nid in gateway.sensors:
            sensor_update('sensor_update', nid)

    hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                         lambda event: gateway.stop())
Ejemplo n.º 3
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port):
        """Return gateway after setup of the gateway."""
        try:
            socket.inet_aton(device)
            # valid ip address
            gateway = mysensors.TCPGateway(
                device, event_callback=None, persistence=persistence,
                persistence_file=persistence_file, protocol_version=version,
                port=tcp_port)
        except OSError:
            # invalid ip address
            gateway = mysensors.SerialGateway(
                device, event_callback=None, persistence=persistence,
                persistence_file=persistence_file, protocol_version=version,
                baud=baud_rate)
        gateway.metric = is_metric
        gateway.debug = config[DOMAIN].get(CONF_DEBUG, False)
        optimistic = config[DOMAIN].get(CONF_OPTIMISTIC, False)
        gateway = GatewayWrapper(gateway, version, optimistic)
        # pylint: disable=attribute-defined-outside-init
        gateway.event_callback = gateway.callback_factory()

        def gw_start(event):
            """Callback to trigger start of gateway and any persistence."""
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())
            if persistence:
                for node_id in gateway.sensors:
                    gateway.event_callback('persistence', node_id)

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Ejemplo n.º 4
0
def setup(ada, settings, driver):
    import mysensors.mysensors as mysensors

    gateway = mysensors.SerialGateway(settings['device'], event_callback=None, persistence=False,
                                      protocol_version="2.0", baud=settings['baudrate'])
    bridge = Bridge(driver.entities, gateway)
    gateway.event_callback = bridge.event
    gateway.start()
Ejemplo n.º 5
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port, in_prefix,
                      out_prefix):
        """Return gateway after setup of the gateway."""
        if device == MQTT_COMPONENT:
            if not setup_component(hass, MQTT_COMPONENT, config):
                return
            mqtt = get_component(MQTT_COMPONENT)
            retain = config[DOMAIN].get(CONF_RETAIN)

            def pub_callback(topic, payload, qos, retain):
                """Call MQTT publish function."""
                mqtt.publish(hass, topic, payload, qos, retain)

            def sub_callback(topic, callback, qos):
                """Call MQTT subscribe function."""
                mqtt.subscribe(hass, topic, callback, qos)
            gateway = mysensors.MQTTGateway(
                pub_callback, sub_callback,
                event_callback=None, persistence=persistence,
                persistence_file=persistence_file,
                protocol_version=version, in_prefix=in_prefix,
                out_prefix=out_prefix, retain=retain)
        else:
            try:
                is_serial_port(device)
                gateway = mysensors.SerialGateway(
                    device, event_callback=None, persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version, baud=baud_rate)
            except vol.Invalid:
                try:
                    socket.getaddrinfo(device, None)
                    # valid ip address
                    gateway = mysensors.TCPGateway(
                        device, event_callback=None, persistence=persistence,
                        persistence_file=persistence_file,
                        protocol_version=version, port=tcp_port)
                except OSError:
                    # invalid ip address
                    return
        gateway.metric = hass.config.units.is_metric
        gateway.optimistic = config[DOMAIN].get(CONF_OPTIMISTIC)
        gateway.device = device
        gateway.event_callback = gw_callback_factory(hass)

        def gw_start(event):
            """Trigger to start of the gateway and any persistence."""
            if persistence:
                discover_persistent_devices(hass, gateway)
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Ejemplo n.º 6
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port, in_prefix,
                      out_prefix):
        """Return gateway after setup of the gateway."""
        # pylint: disable=too-many-arguments
        if device == MQTT_COMPONENT:
            if not setup_component(hass, MQTT_COMPONENT, config):
                return
            mqtt = get_component(MQTT_COMPONENT)
            retain = config[DOMAIN].get(CONF_RETAIN)

            def pub_callback(topic, payload, qos, retain):
                """Call mqtt publish function."""
                mqtt.publish(hass, topic, payload, qos, retain)

            def sub_callback(topic, callback, qos):
                """Call mqtt subscribe function."""
                mqtt.subscribe(hass, topic, callback, qos)
            gateway = mysensors.MQTTGateway(
                pub_callback, sub_callback,
                event_callback=None, persistence=persistence,
                persistence_file=persistence_file,
                protocol_version=version, in_prefix=in_prefix,
                out_prefix=out_prefix, retain=retain)
        else:
            try:
                socket.inet_aton(device)
                # valid ip address
                gateway = mysensors.TCPGateway(
                    device, event_callback=None, persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version, port=tcp_port)
            except OSError:
                # invalid ip address
                gateway = mysensors.SerialGateway(
                    device, event_callback=None, persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version, baud=baud_rate)
        gateway.metric = hass.config.units.is_metric
        gateway.debug = config[DOMAIN].get(CONF_DEBUG)
        optimistic = config[DOMAIN].get(CONF_OPTIMISTIC)
        gateway = GatewayWrapper(gateway, optimistic, device)
        # pylint: disable=attribute-defined-outside-init
        gateway.event_callback = gateway.callback_factory()

        def gw_start(event):
            """Callback to trigger start of gateway and any persistence."""
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())
            if persistence:
                for node_id in gateway.sensors:
                    gateway.event_callback('persistence', node_id)

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Ejemplo n.º 7
0
 def __init__(self, parent):
     self.parent = parent
     gateway = mysensors.SerialGateway(
         '/dev/ttyUSB0',
         baud=115200,  #timeout=1.0, reconnect_timeout=10.0,
         event_callback=self.event,
         persistence=True,
         persistence_file='mysensors.pickle',
         protocol_version='2.2')
     gateway.start_persistence()
     gateway.on_conn_made = self.conn_made
     gateway.on_conn_lost = self.conn_lost
     self.parent.mySensorsGateway = gateway
Ejemplo n.º 8
0
"""Example for using pymysensors."""
import mysensors.mysensors as mysensors


def event(update_type, nid):
    """Callback for mysensors updates."""
    print(update_type + " " + str(nid))


# To create a serial gateway.
GATEWAY = mysensors.SerialGateway('/dev/ttyACM0',
                                  event,
                                  protocol_version='2.0')

# To create a TCP gateway.
# GATEWAY = mysensors.TCPGateway('127.0.0.1', event, True)

GATEWAY.debug = True
GATEWAY.start()
# To set sensor 1, child 1, sub-type V_LIGHT (= 2), with value 1.
# GATEWAY.set_child_value(1, 1, 2, 1)
# GATEWAY.stop()
Ejemplo n.º 9
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port, in_prefix,
                      out_prefix):
        """Return gateway after setup of the gateway."""
        if device == MQTT_COMPONENT:
            if not setup_component(hass, MQTT_COMPONENT, config):
                return
            mqtt = get_component(MQTT_COMPONENT)
            retain = config[DOMAIN].get(CONF_RETAIN)

            def pub_callback(topic, payload, qos, retain):
                """Call mqtt publish function."""
                mqtt.publish(hass, topic, payload, qos, retain)

            def sub_callback(topic, callback, qos):
                """Call mqtt subscribe function."""
                mqtt.subscribe(hass, topic, callback, qos)

            gateway = mysensors.MQTTGateway(pub_callback,
                                            sub_callback,
                                            event_callback=None,
                                            persistence=persistence,
                                            persistence_file=persistence_file,
                                            protocol_version=version,
                                            in_prefix=in_prefix,
                                            out_prefix=out_prefix,
                                            retain=retain)
        else:
            try:
                is_serial_port(device)
                gateway = mysensors.SerialGateway(
                    device,
                    event_callback=None,
                    persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version,
                    baud=baud_rate)
            except vol.Invalid:
                try:
                    socket.getaddrinfo(device, None)
                    # valid ip address
                    gateway = mysensors.TCPGateway(
                        device,
                        event_callback=None,
                        persistence=persistence,
                        persistence_file=persistence_file,
                        protocol_version=version,
                        port=tcp_port)
                except OSError:
                    # invalid ip address
                    return
        gateway.metric = hass.config.units.is_metric
        optimistic = config[DOMAIN].get(CONF_OPTIMISTIC)
        gateway = GatewayWrapper(gateway, optimistic, device)
        # pylint: disable=attribute-defined-outside-init
        gateway.event_callback = gateway.callback_factory()

        def gw_start(event):
            """Callback to trigger start of gateway and any persistence."""
            if persistence:
                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)
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Ejemplo n.º 10
0
"""Example for using pymysensors."""
import logging

import mysensors.mysensors as mysensors

logging.basicConfig(level=logging.DEBUG)


def event(message):
    """Callback for mysensors updates."""
    print("sensor_update " + str(message.node_id))


# To create a serial gateway.
GATEWAY = mysensors.SerialGateway("/dev/ttyACM0",
                                  event_callback=event,
                                  protocol_version="2.0")

# To create a TCP gateway.
# GATEWAY = mysensors.TCPGateway('127.0.0.1', event_callback=event)

GATEWAY.start()
# To set sensor 1, child 1, sub-type V_LIGHT (= 2), with value 1.
# GATEWAY.set_child_value(1, 1, 2, 1)
# GATEWAY.stop()
Ejemplo n.º 11
0
# bot.message_loop(handle)
print('running Sensor Controller ...')

myIPaddress = str(
    subprocess.check_output(
        ['dig', '+short', 'myip.opendns.com', '@resolver1.opendns.com']))

import mysensors.mysensors as mysensors

ALARM_STATUS = 1

############### WORKING HERE ##################

GATEWAY = mysensors.SerialGateway(
    '/dev/ttyMySensorsGateway',
    MySensorEvent,
    persistence=True,
    persistence_file='/home/pi/git/thermostat/thermostat/mysensors.pickle')
GATEWAY.start()

# generate a name for this maggiordomo if does not exist
try:
    MaggiordomoIDFile = open(IDpath, 'r')
    MaggiordomoID = MaggiordomoIDFile.read().strip()
    MaggiordomoIDFile.close()
#    bot.sendMessage(CHATID, "sono "+MaggiordomoID+". Mi sono appena svegliato")

except IOError:
    #logging.error("Non ho trovato il file con ID del maggiordomo. Genero ID e lo salvo")
    MaggiordomoID = "Maggiordomo-" + ''.join(
        random.SystemRandom().choice(string.ascii_uppercase + string.digits)
Ejemplo n.º 12
0
def init_gw_thread(event_handler):
    """ instantiate the SerialGateway """
    global gw_thread
    gw_thread = mysensors.SerialGateway(
        config["device"], event_handler, protocol_version='1.5',
        baud=config["baud_rate"])
Ejemplo n.º 13
0
import mysensors.mysensors as mysensors


def event(type, nid):
    print(type + " " + str(nid))


gw = mysensors.SerialGateway('/dev/ttyACM0', event, True)
gw.debug = True
gw.start()
# To set sensor 2, child 1, sub-type V_LIGHT (= 2), with value 1.
gw.set_child_value(2, 1, 2, 1)
gw.stop()
Ejemplo n.º 14
0
    
Getting the type and values of node 23, child sensor 4 would be performed as follows:

s_type = GATEWAY.sensors[23].children[4].type
values = GATEWAY.sensors[23].children[4].values
'''

ALARM_STATUS = 1
ALARM_ACTIVE = 1
MOVING_STATUS = 1

#GATEWAY = mysensors.SerialGateway('/dev/ttyMySensorsGateway', MySensorEvent, persistence=False)
GATEWAY = mysensors.SerialGateway(
    '/dev/ttyMySensorsGateway',
    baud=115200,
    event_callback=MySensorEvent,
    persistence=True,
    persistence_file='/home/pi/git/thermostat/thermostat/mysensors.pickle',
    protocol_version='2.0')

GATEWAY.start_persistence()
_LOGGER.debug("Starting Gateway")
GATEWAY.start()

# generate a name for this maggiordomo if does not exist
try:
    MaggiordomoIDFile = open(IDpath, 'r')
    MaggiordomoID = MaggiordomoIDFile.read().strip()
    MaggiordomoIDFile.close()
#    bot.sendMessage(CHATID, "sono "+MaggiordomoID+". Mi sono appena svegliato")
Ejemplo n.º 15
0
CURSOR_OFF = '20'
BLINK_CURSOR_ON = '40'
BLINK_CURSOR_OFF = '41'


def event_callback(msg):
    """Callback for mysensors updates."""

    print('MSG | '\
        ' NodeId: {} | ChildId: {}  | Type:{}'.format(
            msg.node_id,msg.child_id,msg.type)
        )


GATEWAY = mysensors.SerialGateway(port=SERIAL_PORT,
                                  baud=115200,
                                  event_callback=event_callback,
                                  protocol_version='2.2')

GATEWAY.start()
# To set sensor 1, child 1, sub-type V_LIGHT (= 2), with value 1.

print("Wait for gateway ...")
time.sleep(2)
print("Sensors detected: {}".format(len(GATEWAY.sensors)))

is_sensor = GATEWAY.is_sensor(0, 1)
# Check if there is a sensor
print('Check for a valid sensor at node 0 child 1: {}'.format(is_sensor))

### Start Test