def __init__(self): super(ComposedAarhusPollutionWrapper, self).__init__() metadatafile = AbstractComposedWrapper.getFileObject(__file__, "metadata.json", "rU") metadata = JOb(metadatafile) basesensordescription = SensorDescription() basesensordescription.source = "???" # TODO basesensordescription.namespace = "http://ict-citypulse.eu/" basesensordescription.author = "cityofaarhus" basesensordescription.sensorType = "Aarhus_Pollution" basesensordescription.graphName = "aarhus_pollution#" basesensordescription.sourceType = "pull_http" basesensordescription.sourceFormat = "application/json" basesensordescription.information = "Pollution data for the City of Aarhus" basesensordescription.cityName = "Aarhus" basesensordescription.countryName = "Denmark" basesensordescription.movementBuffer = 3 basesensordescription.maxLatency = 2 basesensordescription.updateInterval = 5 * 60 basesensordescription.fields = ["ozone", "particullate_matter", "carbon_monoxide", "sulfure_dioxide", "nitrogen_dioxide", "longitude", "latitude", "timestamp"] basesensordescription.field.ozone.propertyName = "Property" basesensordescription.field.ozone.propertyPrefix = "ssn" basesensordescription.field.ozone.propertyURI = basesensordescription.namespace + "city#Ozone" basesensordescription.field.ozone.unit = basesensordescription.namespace + "unit:km-per-hour" basesensordescription.field.ozone.min = 0 basesensordescription.field.ozone.max = 150 basesensordescription.field.ozone.dataType = "int" basesensordescription.field.ozone.showOnCityDashboard = True basesensordescription.field.vehicleCount.aggregationMethod = "sax" basesensordescription.field.vehicleCount.aggregationConfiguration = {"alphabet_size": 5, "word_length": 3, "unit_of_window": "hours", "window_duration": 1} basesensordescription.field.particullate_matter.propertyName = "Property" basesensordescription.field.particullate_matter.propertyPrefix = "ssn" basesensordescription.field.particullate_matter.propertyURI = basesensordescription.namespace + "city#ParticleMatter" basesensordescription.field.particullate_matter.unit = basesensordescription.namespace + "unit:number-of-vehicle-per-5min" basesensordescription.field.particullate_matter.min = 0 basesensordescription.field.particullate_matter.max = 10000 basesensordescription.field.particullate_matter.dataType = "int" basesensordescription.field.particullate_matter.showOnCityDashboard = True basesensordescription.field.vehicleCount.aggregationMethod = "sax" basesensordescription.field.vehicleCount.aggregationConfiguration = {"alphabet_size": 5, "word_length": 3, "unit_of_window": "hours", "window_duration": 1} basesensordescription.field.carbon_monoxide.propertyName = "Property" basesensordescription.field.carbon_monoxide.propertyPrefix = "ssn" basesensordescription.field.carbon_monoxide.propertyURI = basesensordescription.namespace + "city#CarbonMonoxide" basesensordescription.field.carbon_monoxide.unit = basesensordescription.namespace + "unit:minutes" basesensordescription.field.carbon_monoxide.min = 0 basesensordescription.field.carbon_monoxide.max = 1000 basesensordescription.field.carbon_monoxide.dataType = "int" basesensordescription.field.vehicleCount.aggregationMethod = "sax" basesensordescription.field.vehicleCount.aggregationConfiguration = {"alphabet_size": 5, "word_length": 3, "unit_of_window": "hours", "window_duration": 1} basesensordescription.field.sulfure_dioxide.propertyName = "Property" basesensordescription.field.sulfure_dioxide.propertyPrefix = "ssn" basesensordescription.field.sulfure_dioxide.propertyURI = basesensordescription.namespace + "city#SulfureDioxide" basesensordescription.field.sulfure_dioxide.unit = basesensordescription.namespace + "unit:minutes" basesensordescription.field.sulfure_dioxide.min = 0 basesensordescription.field.sulfure_dioxide.max = 1000 basesensordescription.field.sulfure_dioxide.dataType = "int" basesensordescription.field.vehicleCount.aggregationMethod = "sax" basesensordescription.field.vehicleCount.aggregationConfiguration = {"alphabet_size": 5, "word_length": 3, "unit_of_window": "hours", "window_duration": 1} basesensordescription.field.nitrogen_dioxide.propertyName = "Property" basesensordescription.field.nitrogen_dioxide.propertyPrefix = "ssn" basesensordescription.field.nitrogen_dioxide.propertyURI = basesensordescription.namespace + "city#NitrogenDioxide" basesensordescription.field.nitrogen_dioxide.unit = basesensordescription.namespace + "unit:minutes" basesensordescription.field.nitrogen_dioxide.min = 0 basesensordescription.field.nitrogen_dioxide.max = 1000 basesensordescription.field.nitrogen_dioxide.dataType = "int" basesensordescription.field.vehicleCount.aggregationMethod = "sax" basesensordescription.field.vehicleCount.aggregationConfiguration = {"alphabet_size": 5, "word_length": 3, "unit_of_window": "hours", "window_duration": 1} basesensordescription.field.longitude.propertyName = "Property" basesensordescription.field.longitude.propertyPrefix = "ssn" basesensordescription.field.longitude.propertyURI = basesensordescription.namespace + "city#Longitude" basesensordescription.field.longitude.unit = basesensordescription.namespace + "unit:degrees" basesensordescription.field.longitude.min = 0 basesensordescription.field.longitude.max = 180 basesensordescription.field.longitude.dataType = "float" basesensordescription.field.vehicleCount.aggregationMethod = None basesensordescription.field.latitude.propertyName = "Property" basesensordescription.field.latitude.propertyPrefix = "ssn" basesensordescription.field.latitude.propertyURI = basesensordescription.namespace + "city#Latitude" basesensordescription.field.latitude.unit = basesensordescription.namespace + "unit:degrees" basesensordescription.field.latitude.min = 0 basesensordescription.field.latitude.max = 180 basesensordescription.field.latitude.dataType = "float" basesensordescription.field.vehicleCount.aggregationMethod = None basesensordescription.field.timestamp.propertyName = "MeasuredTime" basesensordescription.field.timestamp.propertyURI = basesensordescription.namespace + "city#MeasuredTime" basesensordescription.field.timestamp.unit = basesensordescription.namespace + "unit:time" basesensordescription.field.timestamp.min = "2012-01-01T00:00:00" basesensordescription.field.timestamp.max = "2099-12-31T23:59:59" basesensordescription.field.timestamp.dataType = "datetime.datetime" basesensordescription.field.timestamp.format = "%Y-%m-%d %H:%M:%S" basesensordescription.field.timestamp.skip_annotation = True basesensordescription.timestamp.inField = "timestamp" basesensordescription.timestamp.format = "%Y-%m-%d %H:%M:%S" for point in metadata: sensordescription = basesensordescription.deepcopy() sensordescription.sensorName = "aarhus_pollution_" + point["id"] sensordescription.sensorID = str(point["id"]) sensordescription.fullSensorID = basesensordescription.namespace + "sensor/Aarhus-Pollution-" + sensordescription.sensorID sensordescription.location = "POINT(%(long)s %(lat)s)" % point sensordescription.messagebus.routingKey = "Aarhus.Pollution." + sensordescription.sensorID self.addWrapper(AarhusPollutionWrapper(sensordescription))
def __init__(self): super(BrasovPollutionWrapper, self).__init__() basesensordescription = SensorDescription() basesensordescription.namespace = "http://ict-citypulse.eu/" basesensordescription.author = "cityofbrasov" basesensordescription.graphName = "brasov_air_pollution#" basesensordescription.sourceType = "pull_http" basesensordescription.sourceFormat = "application/json" basesensordescription.information = "Air pollution in the city of Brasov" basesensordescription.cityName = "Brasov" basesensordescription.countryName = "Romania" basesensordescription.movementBuffer = 0 basesensordescription.maxLatency = 2 basesensordescription.updateInterval = 60 * 5 basesensordescription.fields = ['aqisitionStation', 'aqisitionStationDetails', 'eventTypeName', 'qualityLevelType', 'timestamp'] basesensordescription.field.aqisitionStation.propertyName = "Property" basesensordescription.field.aqisitionStation.propertyPrefix = "ssn" basesensordescription.field.aqisitionStation.propertyURI = basesensordescription.namespace + "brasov/pollution#Station" basesensordescription.field.aqisitionStation.min = "" basesensordescription.field.aqisitionStation.max = "" basesensordescription.field.aqisitionStation.dataType = "str" basesensordescription.field.aqisitionStation.showOnCityDashboard = True basesensordescription.field.aqisitionStationDetails.propertyName = "Property" basesensordescription.field.aqisitionStationDetails.propertyPrefix = "ssn" basesensordescription.field.aqisitionStationDetails.propertyURI = basesensordescription.namespace + "brasov/pollution#StationDetails" basesensordescription.field.aqisitionStationDetails.min = "" basesensordescription.field.aqisitionStationDetails.max = "" basesensordescription.field.aqisitionStationDetails.dataType = "str" basesensordescription.field.aqisitionStationDetails.showOnCityDashboard = True basesensordescription.field.eventTypeName.propertyName = "AirPollutionIndex" basesensordescription.field.eventTypeName.propertyURI = basesensordescription.namespace + "brasov/pollution#EventType" basesensordescription.field.eventTypeName.min = "" basesensordescription.field.eventTypeName.max = "" basesensordescription.field.eventTypeName.dataType = "str" basesensordescription.field.eventTypeName.showOnCityDashboard = True basesensordescription.field.qualityLevelType.propertyName = "AirPollutionLevel" basesensordescription.field.qualityLevelType.propertyURI = basesensordescription.namespace + "brasov/pollution#QualityLevelType" basesensordescription.field.qualityLevelType.min = "" basesensordescription.field.qualityLevelType.max = "" basesensordescription.field.qualityLevelType.dataType = "str" basesensordescription.field.qualityLevelType.showOnCityDashboard = True basesensordescription.field.timestamp.propertyName = "MeasuredTime" basesensordescription.field.timestamp.propertyURI = basesensordescription.namespace + "city#MeasuredTime" basesensordescription.field.timestamp.unit = basesensordescription.namespace + "unit:time" basesensordescription.field.timestamp.min = "" basesensordescription.field.timestamp.max = "" basesensordescription.field.timestamp.dataType = "str" basesensordescription.field.timestamp.skip_annotation = True basesensordescription.timestamp.inField = "timestamp" basesensordescription.timestamp.format = "UNIX5" locations = [ ("BV-1", "Brasov, Calea Bucuresti, Str. Soarelui", "POINT(25.63272 45.636742)"), ("BV-2", "Brasov, Str. Castanilor, FN, cod postal 500097", "POINT(25.604125 45.649339)"), ("BV-3", "Brasov, Bdul. Garii, Aleea Lacramioarelor", "POINT(25.6169 45.658564)"), ("BV-4", "Brasov, Sanpetru, Str. Morii, FN", "POINT(25.625372 45.718173)"), ("BV-5", "Brasov, Bdul. Vlahuta, Str. Parcul Mic, Nr. 9", "POINT(25.625952 45.651784)") ] eventTypeNames = ["SO2", "PM10", "NO2", "O3", "CO"] for _id, loc, coords in locations: for eventTypeName in eventTypeNames: sensordescription = basesensordescription.deepcopy() sensordescription.source = "http://www.bamct.siemens.ro:9000/brasovDataCollector/pollutionView?location=%s&pollutionType=%s" % (_id, eventTypeName) sensordescription.sensorName = "brasov_air_pollution_%s_%s" % (eventTypeName, _id) sensordescription.sensorID = _id + "-" + eventTypeName sensordescription.fullSensorID = basesensordescription.namespace + "brasov/pollution/" + _id + "/" + eventTypeName sensordescription.location = coords #sensordescription.sensorType = "Brasov_Air_Pollution_" + eventTypeName sensordescription.sensorType = "Brasov_Air_Pollution" sensordescription.field.aqisitionStation.equals = _id sensordescription.field.aqisitionStationDetails.equals = loc sensordescription.field.eventTypeName.equals = eventTypeName sensordescription.messagebus.routingKey = "Brasov.Air.Pollution.%s.%s" % (eventTypeName, _id) self.addWrapper(InternalBrasovWrapper(sensordescription))
def __init__(self): super(AarhusParkingWrapper, self).__init__() metadatafile = AbstractComposedWrapper.getFileObject(__file__, "aarhus_parking-address.csv", "rU") basesensordescription = SensorDescription() basesensordescription.source = "http://www.odaa.dk/api/action/datastore_search?resource_id=2a82a145-0195-4081-a13c-b0e587e9b89c" basesensordescription.namespace = "http://ict-citypulse.eu/" basesensordescription.author = "cityofaarhus" basesensordescription.sensorType = "Aarhus_Road_Parking" basesensordescription.graphName = "aarhus_road_parking#" basesensordescription.sourceType = "pull_http" basesensordescription.sourceFormat = "application/xml" basesensordescription.information = "Parking data for the City of Aarhus" basesensordescription.cityName = "Aarhus" basesensordescription.countryName = "Denmark" basesensordescription.movementBuffer = 3 basesensordescription.maxLatency = 2 basesensordescription.updateInterval = 60 # basesensordescription.fields = ["vehicleCount", "totalSpaces", "garageCode"] basesensordescription.fields = ["vehicleCount", "totalSpaces"] # basesensordescription.field.garageCode.propertyName = "Property" # basesensordescription.field.garageCode.propertyPrefix = "ssn" # basesensordescription.field.garageCode.propertyURI = basesensordescription.namespace + "city#Garagecode" # basesensordescription.field.garageCode.min = "" # basesensordescription.field.garageCode.max = "" # basesensordescription.field.garageCode.dataType = "str" basesensordescription.field.totalSpaces.propertyName = "ParkingCapacity" basesensordescription.field.totalSpaces.propertyURI = basesensordescription.namespace + "city#TotalSpaces" # basesensordescription.field.totalSpaces.unit = "http://muo.net/Number" basesensordescription.field.totalSpaces.min = 0 basesensordescription.field.totalSpaces.max = 10000 basesensordescription.field.totalSpaces.dataType = "int" basesensordescription.field.totalSpaces.showOnCityDashboard = True basesensordescription.field.totalSpaces.aggregationMethod = None basesensordescription.field.vehicleCount.propertyName = "ParkingVehicleCount" basesensordescription.field.vehicleCount.propertyURI = basesensordescription.namespace + "city#ParkingVehicleCount" basesensordescription.field.vehicleCount.unit = basesensordescription.namespace + "unit:number-of-vehicle-per-1min" basesensordescription.field.vehicleCount.min = 0 basesensordescription.field.vehicleCount.max = "@totalSpaces" basesensordescription.field.vehicleCount.dataType = "int" basesensordescription.field.vehicleCount.showOnCityDashboard = True basesensordescription.field.vehicleCount.aggregationMethod = "sax" basesensordescription.field.vehicleCount.aggregationConfiguration = {"alphabet_size": 5, "word_length": 3, "unit_of_window": "hours", "window_duration": 1} # basesensordescription.timestamp.inField = "updatetime" basesensordescription.timestamp.format = "%Y-%m-%d %H:%M:%S" metadata = csv.DictReader(metadatafile) for row in metadata: sensordescription = basesensordescription.deepcopy() sensordescription.sensorName = "aarhus_road_parking_" + nicename(row['garagecode']) sensordescription.sensorID = nicename(row['garagecode']) sensordescription.fullSensorID = basesensordescription.namespace + "sensor/" + sensordescription.sensorID sensordescription.location = "POINT(%s %s)" % (row['longitude'], row['latitude']) sensordescription.messagebus.routingKey = "Aarhus.Road.Parking." + sensordescription.sensorID sensordescription.streetName = self.__getattr(row, "street", "n/a") sensordescription.postalCode = self.__getattr(row, "postalcode", "n/a") # garage code only as sensorID embedded in an URI. Possibilities to read it unknown at this point. # sensordescription.staticproperties.garageCode.propertyName = "Property" # sensordescription.staticproperties.garageCode.propertyPrefix = "ssn" # sensordescription.staticproperties.garageCode.propertyURI = basesensordescription.namespace + "city#Garagecode" # sensordescription.staticproperties.garageCode.dataType = "str" # sensordescription.staticproperties.garageCode.value = sensordescription.sensorID self.addWrapper(InternalWrapper(sensordescription)) self.connection = HttpPullConnection(self, basesensordescription.source) self.splitter = AarhusParkingSplitterJson(self)