Ejemplo n.º 1
0
def ip_cron():
    import json
    from app.arduino.common import PublicIPInteractor
    from urllib2 import urlopen

    ip = PublicIPInteractor.get()
    currentIP = "%s:%s" % ( json.load(urlopen('http://httpbin.org/ip'))['origin'].rstrip(), settings.PORT )

    app.logger.info("---- START IP cron START----")
    app.logger.info("IP ADDRESS - %s" % currentIP)

    if ( not ip.address or ip.address != currentIP ):
        try:
            for gateway in GatewayInteractor.get_all_device_registered():
                r = request_helper.delete_device(gateway.address, gateway.post_authorization)
                if r != False:
                    app.logger.info("Delete dev: %d" % r.status_code)
                    ip.address = currentIP
                    ip.save()
                    r = request_helper.init_device(gateway.address, gateway.post_authorization)
                    if r != False:
                        app.logger.info("Init dev: %d" % r.status_code)
                        r = request_helper.init_descriptor(gateway.address, gateway.post_authorization)
                        if r != False:
                            app.logger.info("Init descriptor: %d" % r.status_code)
                            r = request_helper.send_descriptor(gateway.address, gateway.post_authorization)
                            if r != False:
                                app.logger.info("Descriptor: %d" % r.status_code)
                                for sensor in SensorInteractor.get_all_active():
                                    for sensor_method in sensor.sensor_methods:
                                        r = request_helper.delete_sensor(gateway.address, gateway.post_authorization, sensor.identificator, sensor_method.method.path)
                                        if r != False:
                                            app.logger.info("Delete sensor method %s: %d" % (sensor_method.method.path, r.status_code))
                                            r = request_helper.init_sensor(gateway.address, gateway.post_authorization, sensor.identificator, sensor_method.method.path)
                                            if r != False:
                                                app.logger.info("Init sensor method %s: %d" % (sensor_method.method.path, r.status_code))
                                                if sensor_method.method.type in ["read", "write"]:
                                                    r = request_helper.send_sensor_value(gateway.address, gateway.post_authorization, sensor.identificator, sensor_method.method.path, sensor_method.value)
                                                    if r != False:
                                                        app.logger.info("Send method value %s: %d" % (sensor_method.method.path, r.status_code))
                                                        log = "%s - %s %s %s - %s (%s)" % ( gateway.address, sensor.module.hardware.name, sensor.module.name, sensor.identificator, sensor_method.method.path, sensor_method.value )
                                                        app.logger.info(log)
                            else:
                                ip.address = ""
                                ip.save()
                        else:
                            ip.address = ""
                            ip.save()
                    else:
                        ip.address = ""
                        ip.save()
        except:
            app.logger.error( "%s" % sys.exc_info()[0] )
            ip.address = ""
            ip.save()
    else:
        app.logger.warning("address wasn't changed")
    app.logger.info("----END IP cron END----")
    return make_response()
Ejemplo n.º 2
0
def delete_sensor(sensor_id=None):
    if not sensor_id:
        sensor_id = request.form.get('sensor_id')

    sensor = SensorInteractor.get(sensor_id)

    if sensor:
        if sensor.active:
            gateways = GatewayInteractor.get_all_device_registered()

            if gateways:
                deleted_all_remote = True
                for gateway in gateways:
                    for sensor_method in sensor.sensor_methods:
                        r = request_helper.delete_sensor(gateway.address, gateway.post_authorization, sensor.identificator, sensor_method.method.path)
                        if r == False:
                            flash("Sensor method %s was not deleted on gateway %s!" % (sensor_method.method.path, gateway.address), category={ 'theme': 'warning' } )
                            deleted_all_remote = False

                    if deleted_all_remote:
                        if SensorInteractor.delete(sensor_id):
                            flash("Sensor deleted from gateway %s!" % gateway.address, category={ 'theme': 'success' } )
                    else:
                        flash("Sensor could not be deleted!", category={ 'theme': 'error' })
                        app.logger.error("Deleting sensor: Couldn't delete sensor from db because not all sensor methods could be deleted from GW")
                        return redirect("/sensors/#%s" % sensor.identificator)

                    request_helper.send_descriptor(gateway.address, gateway.post_authorization)
            else:
                flash("No gateways with registered device", category={ 'theme': 'warning' } )

        else:
            if SensorInteractor.delete(sensor_id):
                flash("Sensor deleted!", category={ 'theme': 'success' } )
            else:
                flash("Sensor could not be deleted!", category={ 'theme': 'error' } )
                app.logger.error("Deleting sensor: Could not delete sensor from db")
                return redirect("/sensors/#%s" % sensor.identificator)

    else:
        flash('Sensor does not exist!', category={ 'theme': 'error' } )
        app.logger.error("Deleting sensor: Sensor does not exist")
    return redirect("/sensors/")
Ejemplo n.º 3
0
def deactivate_sensor(sensor_id, descriptor=True):
    sensor = SensorInteractor.get(sensor_id)
    if sensor:
        sensor.active = False
        sensor.save()
        gateways = GatewayInteractor.get_all_device_registered()

        if gateways:
            for gateway in gateways:
                if descriptor:
                    r = request_helper.send_descriptor(gateway.address, gateway.post_authorization)
                for sensor_method in sensor.sensor_methods:
                    r = request_helper.delete_sensor(gateway.address, gateway.post_authorization, sensor.identificator, sensor_method.method.path)
                if r != False:
                    flash('Sensor successfully removed from gateway %s!' % gateway.address, category={ 'theme': 'success' } )
        else:
            flash("No gateways with registered device", category={ 'theme': 'warning' } )
        flash("Sensor deactivated!", category={ 'theme': 'success' } )
        return redirect("/sensors/#%s" % sensor.identificator)

    flash("Sensor does not exist!", category={ 'theme': 'error' } )
    app.logger.error("Activating sensor: Sensor does not exist")
    return redirect("/sensors/")
Ejemplo n.º 4
0
def update_sensor(sensor_id):
    identificator = request.form.get("identificator").lower().replace(" ", "_")
    old_sensor = SensorInteractor.get(sensor_id)
    old_io = old_sensor.pin.io
    sensor = SensorInteractor.get_by_identificator(identificator)

    if old_sensor:
        if sensor and sensor != old_sensor:
            flash("Sensor with same identifier already exists!", category={ 'theme': 'error' } )
            app.logger.error("Editing sensor: Identificator already exists")
            return redirect("/sensors/%d/edit/" % sensor_id)

        identificator_changed = False

        if old_sensor.identificator != identificator:
            identificator_changed= True
            old_sensor.identificator = identificator
            gateways = GatewayInteractor.get_all_device_registered()
            if gateways:
                for gateway in gateways:
                    for sensor_method in old_sensor.sensor_methods:
                        request_helper.delete_sensor(gateway.address, gateway.post_authorization, old_sensor.identificator, sensor_method.method.path)

        if request.form.get('type'):
            old_sensor.type = request.form.get('type')

        old_sensor.pin_id = request.form.get("pin")

        if old_sensor.module_id != request.form.get("module"):
            old_sensor.module_id = request.form.get("module")

            if not identificator_changed:
                gateways = GatewayInteractor.get_all_device_registered()
                if gateways:
                    for gateway in gateways:
                        for sensor_method in old_sensor.sensor_methods:
                            request_helper.delete_sensor(gateway.address, gateway.post_authorization, old_sensor.identificator, sensor_method.method.path)

            old_sensor.save()

            SensorMethodsInteractor.delete_all_for_sensor(old_sensor.id)

            for method in old_sensor.module.methods:
                sm = SensorMethods()
                sm.method = method
                old_sensor.sensor_methods.append(sm)

        old_sensor.save()

        if request.form.get('is_active'):

            activate_sensor(old_sensor.id)

            if old_sensor.pin.arduino_pin[0] == "D" and old_sensor.pin.io != old_io:
                r = request_helper.change_pin_mode(old_sensor.pin.arduino_pin[1:], old_sensor.pin.io)

                if r!= False:
                    flash("Pin %s mode successfully changed to %s!" % (old_sensor.pin.arduino_pin, old_sensor.pin.io), category={'theme' : 'success'} )
                else:
                    flash("Pin mode could not be changed!", category={'theme': 'error'})
                    app.logger.error("Editing sensor: Couldn't change pin mode - %s (%s)" % (old_sensor.pin.arduino_pin, old_sensor.pin.io))

        elif old_sensor.active:
            deactivate_sensor(old_sensor.id)

        flash("Sensor edited!", category={ 'theme': 'success' } )
        return redirect("/sensors/#%s" % old_sensor.identificator)

    flash("Sensor doesn't exist!", category={ 'theme': 'error' } )
    app.logger.error("Editing sensor: Sensor doesn't exist")
    return redirect("/sensors/")