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()
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()
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