diff --git a/bmsapp/periodic_scripts/ambientweather.py b/bmsapp/periodic_scripts/ambientweather.py new file mode 100644 index 0000000000000000000000000000000000000000..7a42a7a43d3662edb5d4b5c65ad9d021b72e699b --- /dev/null +++ b/bmsapp/periodic_scripts/ambientweather.py @@ -0,0 +1,40 @@ +"""Periodic script to collect readings from AmbientWeather weather stations. +AmbientWeather provides API access to the data. +""" +import requests + +def run(application_key: str, api_key: str, **kwargs) -> dict: + + # collecting the data from the ambient weather site for a sensor + # gathered into a json file format + api_url = 'https://api.ambientweather.net/v1/devices?' + payload = dict(applicationKey=application_key, apiKey=api_key) + response = requests.get(api_url, params=payload) + response_body = response.json() + + # Empty list created to hold all reading data from all sensors. + sensors_reading_list = [] + + for sensor in response_body: + # dicts with the neccesary information from api repsonse + mac_address = sensor['macAddress'].replace(':','') + sensor_data = sensor['lastData'] + + # desired sensor data values for extraction + # hard wire values here for extraction + desired_data_keys = ["windgustmph","winddir_avg10m", "windspdmph_avg10m", "tempf", "humidity", "baromrelin", "baromabsin", "tempinf", "humidityin", "hourlyrainin", "solarradiation"] + data_log_timestamp = int(sensor_data['dateutc'] / 1000) + + # extracting data from api response and adding proper key names for value + for key in desired_data_keys: + if key in sensor_data.keys(): + sensor_id = mac_address + '_' + key + sensor_data_value = sensor_data[key] + + sensor_data_tuple = (data_log_timestamp, sensor_id, sensor_data_value) + + # appending timestamp sensor data values to readings list + sensors_reading_list.append(sensor_data_tuple) + + # return of function in dict form for bmon data + return {'readings': sensors_reading_list} diff --git a/bmsapp/views.py b/bmsapp/views.py index 309a00dd2347dd51c0bd1d86901b89593ae858d5..f7900cca955907cbf7683c7feef23cef9db95bd7 100644 --- a/bmsapp/views.py +++ b/bmsapp/views.py @@ -694,7 +694,7 @@ def delete_sensor_values(request): elif delete_where == 'values_lt': where_clause = f'WHERE val < {where_value}' elif delete_where == 'dates_between': - where_clause = f'WHERE ts > {bmsapp.data_util.datestr_to_ts(start_date)} and ts < {bmsapp.data_util.datestr_to_ts(end_date)}' + where_clause = f'WHERE ts > {bmsapp.data_util.datestr_to_ts(where_start_date)} and ts < {bmsapp.data_util.datestr_to_ts(where_end_date)}' else: return HttpResponse(f'Invalid parameter: {delete_where}', status=406) @@ -716,12 +716,12 @@ def delete_sensor_values(request): if delete_where == 'all_values': db.cursor.execute(f'DROP TABLE [{sensor_id}]') qs = models.Sensor.objects.filter( - sensor_id=params['sensor_id']) + sensor_id=sensor_id) if len(qs) > 0: qs[0].delete() db.conn.commit() except Exception as e: - return HttpResponse(e, status=500) + return HttpResponse(repr(e), status=500) return HttpResponse('Records Deleted')