예제 #1
0
def activate_node(payload = None):
    """
        Activate Node
        Called by node to activate itself on the hub
        ---
        tags:
          - nodemcu
        responses:
          200:
            description: Returns a list of sensors
        """

    global nodes
    id   = int(request.args.get("id"))
    ip   = str(request.args.get("ip"))
    port = int(request.args.get("port", 80))
    log = hub.log
    listener = hub.node_listeners

    node = Node.get_by_id(id)
    if node:
        node.update(ip=ip)
        if not listener.is_alive(id):
            t = NodeCollector(id, hub.Webapi, hub.log)
            t.start()
            listener.add_thread(id, t)
            log.log("Node " + str(id) + " is now online.")
            return json.jsonify({'message': "Node " + str(id)
                                            + " is now online."}),201
        if listener.is_alive(id):
            log.log("Node " + str(id)
                    + " is already online but tried"
                    + " to activate again, Updated it's data")
            return json.jsonify({'message': "Node " + str(id)
                                            + " was already online"}),201
    else:
        node = Node(id, ip)
        updates = {"nodes": []}
        node_updates = updates.get("nodes")
        for node in Node.get_all(fresh=True):
            if node.printer_id == None:
                node_updates.append(node.id)
        t = threading.Thread(target=hub.Webapi.update_nodes,args=updates)
        t.start()
        return json.jsonify({"message": str(id) + " has been activated."}),201
예제 #2
0
파일: wink.py 프로젝트: open-iot-stack/HUB
def login():
    """
        Log in to Wink
        ---
        tags:
          - wink
        responses:
          200:
            description: Returns success
        """
    username = request.json.get('username')
    password = request.json.get('password')
    values = dumps({
        "client_id": "quirky_wink_android_app",
        "client_secret": "e749124ad386a5a35c0ab554a4f2c045",
        "username": username,
        "password": password,
        "grant_type": "password",
    }).encode('utf-8')

    headers = {
        "Content-Type":
        "application/json",
        "Connection":
        "keep-alive",
        "X-API-VERSION":
        "1.0 User-Agent: Wink/1.1.9 (iPhone; iOS 7.0.4; Scale/2.00)"
    }

    req = Request("https://winkapi.quirky.com/oauth2/token",
                  data=values,
                  headers=headers)
    response_body = urlopen(req).read()

    data = json.loads(response_body)

    access_token = data['access_token']
    refresh_token = data['refresh_token']
    token_endpoint = data['token_endpoint']
    if access_token and refresh_token and token_endpoint:
        account = Account.get_by_name('wink')
        if account:
            account.update(web_token=access_token,
                           web_refresh_token=refresh_token)
        else:
            account = Account('wink', access_token, refresh_token,
                              token_endpoint)

        devices = get_all_devices(account)
        channels = []
        sub_key = ''

        node_id = ''
        node_frienly_id = ''
        for device in devices['data']:
            if 'hub_id' in device:
                node_id = device['hub_id']
                node_frienly_id = device['name']
                break
        if node_id:
            node = Node.get_by_id(node_id)
            if node is None:
                node = Node(node_id, '0', node_frienly_id)
        #register node
        for device in devices['data']:
            sub = device['subscription']
            if sub:
                channels.append(sub['pubnub']['channel'])
                sub_key = sub['pubnub']['subscribe_key']
            sensor = Sensor.get_by_webid(device['uuid'])
            if sensor is None:
                sensor = Sensor(node.id, 'wink')

            sensor.webid = device['uuid']
            sensor.value = json.dumps(device['desired_state'])
            sensor.raw = json.dumps(device)
            sensor.friendly_id = json.dumps(device['name']).replace('"', '')
            sensor.state = "CONNECTED" if json.dumps(
                device['last_reading']
                ['connection']) == 'true' else "DISCONNECTED"
            sensor.update()

        subcribe_devices_to_pub_nub(sub_key, channels)
        return "success"
    else:
        abort(404)