Beispiel #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()
Beispiel #2
0
def get_ip():
    import json
    from app.arduino.common import PublicIPInteractor
    from urllib2 import urlopen
    ip = PublicIPInteractor.get()
    currentIP = json.load(urlopen('http://httpbin.org/ip'))['origin'].rstrip()
    ip.address = "%s:%s" % (currentIP, settings.PORT)
    ip.save()
Beispiel #3
0
def init_device(address, post_authorization):

    from app.arduino.hardware.interactor import PinInteractor

    xml = '<?xml version="1.0" encoding="UTF-8"?>\
<m2m:application appId="%(app_id)s" xmlns:m2m="http://uri.etsi.org/m2m">\
    <m2m:aPoC>http://%(public_ip)s/</m2m:aPoC>\
          <m2m:aPoCPaths>\
                    <m2m:aPoCPath>\
                              <m2m:path>/m2m/applications/%(app_id)s/retargeting1</m2m:path>\
                              <m2m:accessRightID>/m2m/accessRights/Locadmin_AR2</m2m:accessRightID>\
                    </m2m:aPoCPath>\
          </m2m:aPoCPaths>\
    <m2m:accessRightID>/m2m/accessRights/Locadmin_AR/</m2m:accessRightID>\
    <m2m:searchStrings>\
        <m2m:searchString>ETSI.ObjectType/ETSI.AN_APP</m2m:searchString>\
        <m2m:searchString>ETSI.ObjectTechnology/FER.%(app_id)s</m2m:searchString>\
    </m2m:searchStrings>\
</m2m:application>' % { "app_id" : settings.DEVICE_ID, "public_ip" : PublicIPInteractor.get().address }

    headers = {'Authorization': 'Basic %s' % post_authorization, "content-type":"application/xml"}

    try:
        r = requests.post("%s%s" % (
                address,
                settings.APPLICATIONS
            ),
            headers = headers,
            timeout = 5,
            data = xml
        )

        return r
    except ConnectionError as e:
        flash("Cannot connect to gateway %s!" % address, category={ 'theme': 'error' } )
        app.logger.error("Device initialization: %s" % (str(e), ))
        return False

    except Timeout as e:
        flash("Request timed out. Wrong IP?", category={ 'theme': 'error' } )
        app.logger.error("Device initialization: %s" % (str(e), ))
        return False