{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import os\n", "from flask import Flask, json, send_file, request, make_response, jsonify, after_this_request, Response\n", "from configparser import ConfigParser\n", "from Config_Manager import Config_Manager\n", "import sys" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0.0.0\n", " * Serving Flask app '__main__' (lazy loading)\n", " * Environment: production\n", "\u001b[31m WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n", "\u001b[2m Use a production WSGI server instead.\u001b[0m\n", " * Debug mode: on\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " * Running on all addresses (0.0.0.0)\n", " WARNING: This is a development server. Do not use it in a production deployment.\n", " * Running on http://127.0.0.1:8080\n", " * Running on http://10.151.246.13:8080 (Press CTRL+C to quit)\n", " * Restarting with stat\n", "Traceback (most recent call last):\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ipykernel_launcher.py\", line 17, in \n", " app.launch_new_instance()\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/traitlets/config/application.py\", line 975, in launch_instance\n", " app.initialize(argv)\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/traitlets/config/application.py\", line 110, in inner\n", " return method(app, *args, **kwargs)\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ipykernel/kernelapp.py\", line 666, in initialize\n", " self.init_sockets()\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ipykernel/kernelapp.py\", line 307, in init_sockets\n", " self.shell_port = self._bind_socket(self.shell_socket, self.shell_port)\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ipykernel/kernelapp.py\", line 244, in _bind_socket\n", " return self._try_bind_socket(s, port)\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ipykernel/kernelapp.py\", line 220, in _try_bind_socket\n", " s.bind(\"tcp://%s:%i\" % (self.ip, port))\n", " File \"/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/zmq/sugar/socket.py\", line 229, in bind\n", " super().bind(addr)\n", " File \"zmq/backend/cython/socket.pyx\", line 562, in zmq.backend.cython.socket.Socket.bind\n", " File \"zmq/backend/cython/checkrc.pxd\", line 28, in zmq.backend.cython.checkrc._check_rc\n", "zmq.error.ZMQError: Address already in use\n" ] }, { "ename": "SystemExit", "evalue": "1", "output_type": "error", "traceback": [ "An exception has occurred, use %tb to see the full traceback.\n", "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m 1\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/salva/.pyenv/versions/3.10.2/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/IPython/core/interactiveshell.py:3406: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n", " warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n" ] } ], "source": [ "app = Flask(__name__)\n", "\n", "\n", "\n", "if __name__ == '__main__':\n", " config = ConfigParser()\n", " manager = Config_Manager()\n", " if config.read('./config.ini'):\n", " if not config.has_section('helio'):\n", " print(\"Missing 'helio' mandatory section in 'config.ini'.\")\n", " exit()\n", " if not config.has_option('helio', 'host'):\n", " print(\"Missing 'host' option in 'helio' section in 'config.ini'.\")\n", " exit()\n", " if not config.has_option('helio', 'port'):\n", " print(\"Missing 'port' option in 'helio' section in 'config.ini'.\")\n", " exit()\n", " if not config.has_section('adapter'):\n", " print(\"Missing 'helio' mandatory section in 'config.ini'.\")\n", " exit()\n", " if not config.has_option('adapter', 'host'):\n", " print(\"Missing 'host' option in 'adapter' section in 'config.ini'.\")\n", " exit()\n", " if not config.has_option('adapter', 'port'):\n", " print(\"Missing 'port' option in 'adapter' section in 'config.ini'.\")\n", " exit()\n", " manager.adapter_host = config.get('adapter', 'host')\n", " manager.adapter_port = config.get('adapter', 'port')\n", " manager.helio_host = config.get('helio', 'host')\n", " manager.helio_port = config.get('helio', 'port')\n", "\n", " print(manager.adapter_host)\n", "\n", " app.run(debug=True, host=manager.adapter_host, port=manager.adapter_port)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from service.Map_Generator_Service import Map_Generator_Service" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "generator = Map_Generator_Service({\"Metadata\":{\"mod_id\":\"MOD1\",\"mac\":\"12AB12CD23\"},\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"},\"HW\":{\"CPU_Usage\":7.50963,\"CPU_Temp\":53.5,\"RAM_Total\":1917.6,\"RAM_Usage\":781.8,\"RAM_Free\":440.8,\"DISK_Total\":29,\"DISK_Usage\":40,\"DISK_Free\":17},\"Weather\":{\"clouds\":20,\"humidity\":89,\"detailed_status\":\"few clouds\",\"visibility_distance\":10000,\"dewpoint\":13.59,\"uvi\":0.71,\"wind_speed\":3.6,\"wind_deg\":160,\"wind_gust\":8.75,\"press\":1016,\"temp\":15.39,\"temp_feels_like\":15.31},\"Sensors\":[{\"model\":\"Grove_-_VOC_and_eCO2_Gas_Sensor(SGP30)\",\"port\":\"Bus port\",\"value\":403,\"unit_of_measure\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/partsPerMillion\",\"measure_property\":\"CO2eq\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}},{\"model\":\"Grove_-_VOC_and_eCO2_Gas_Sensor(SGP30)\",\"port\":\"Bus port\",\"value\":0,\"unit_of_measure\":\"https://bimerr.iot.linkeddata.es/def/weather#partsPerBillion\",\"measure_property\":\"TVOC(Total Volatile Organic Compounds)\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}},{\"model\":\"Grove_-_Light_Sensor_1*2\",\"port\":\"1\",\"value\":343,\"unit_of_measure\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/candela\",\"measure_property\":\"LuminousIntensity\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}},{\"model\":\"Grove_-_Light_Sensor_1*2\",\"port\":\"1\",\"value\":19.83,\"unit_of_measure\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/ohm\",\"measure_property\":\"LuminousResistance\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}},{\"model\":\"Grove_-_Temperature&Humidity_Sensor_Pro(DHT22)\",\"port\":\"4\",\"value\":24.1,\"unit_of_measure\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius\",\"measure_property\":\"Temperature\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}},{\"model\":\"Grove_-_Temperature&Humidity_Sensor_Pro(DHT22)\",\"port\":\"4\",\"value\":51.6,\"unit_of_measure\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/percentage\",\"measure_property\":\"RelativeHumidity\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}},{\"model\":\"Grove_-_Loudness_Sensor\",\"port\":\"0\",\"value\":41.87,\"unit_of_measure\":\"http://www.ontology-of-units-of-measure.org/resource/om-2/decibel\",\"measure_property\":\"Loudness\",\"Time\":{\"date\":\"2022-10-21\",\"time\":\"11~12~09\",\"timeStamp\":\"2022/10/21 11:12:09\",\"weekday\":\"Friday\",\"season\":\"Fall\"},\"Location\":{\"ip\":\"138.4.195.144\",\"lat\":40.4486,\"lon\":-3.71928,\"str_lat\":\"40*4486\",\"str_lon\":\"-3*71928\",\"city\":\"Madrid\",\"region\":\"MD\",\"region_name\":\"Madrid\",\"country\":\"Spain\",\"country_code\":\"ES\",\"postal\":28040,\"timezone\":\"Europe/Madrid\"}}]})" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "result = generator.render_template()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "<#assign jpath=handlers(\"JsonHandler\")>\n", "<#assign dataset=\"{'Metadata': {'mod_id': 'MOD1', 'mac': '12AB12CD23'}, 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}, 'HW': {'CPU_Usage': 7.50963, 'CPU_Temp': 53.5, 'RAM_Total': 1917.6, 'RAM_Usage': 781.8, 'RAM_Free': 440.8, 'DISK_Total': 29, 'DISK_Usage': 40, 'DISK_Free': 17}, 'Weather': {'clouds': 20, 'humidity': 89, 'detailed_status': 'few clouds', 'visibility_distance': 10000, 'dewpoint': 13.59, 'uvi': 0.71, 'wind_speed': 3.6, 'wind_deg': 160, 'wind_gust': 8.75, 'press': 1016, 'temp': 15.39, 'temp_feels_like': 15.31}, 'Sensors': [{'model': 'Grove_-_VOC_and_eCO2_Gas_Sensor(SGP30)', 'port': 'Bus port', 'value': 403, 'unit_of_measure': 'http://www.ontology-of-units-of-measure.org/resource/om-2/partsPerMillion', 'measure_property': 'CO2eq', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}, {'model': 'Grove_-_VOC_and_eCO2_Gas_Sensor(SGP30)', 'port': 'Bus port', 'value': 0, 'unit_of_measure': 'https://bimerr.iot.linkeddata.es/def/weather#partsPerBillion', 'measure_property': 'TVOC(Total Volatile Organic Compounds)', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}, {'model': 'Grove_-_Light_Sensor_1*2', 'port': '1', 'value': 343, 'unit_of_measure': 'http://www.ontology-of-units-of-measure.org/resource/om-2/candela', 'measure_property': 'LuminousIntensity', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}, {'model': 'Grove_-_Light_Sensor_1*2', 'port': '1', 'value': 19.83, 'unit_of_measure': 'http://www.ontology-of-units-of-measure.org/resource/om-2/ohm', 'measure_property': 'LuminousResistance', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}, {'model': 'Grove_-_Temperature&Humidity_Sensor_Pro(DHT22)', 'port': '4', 'value': 24.1, 'unit_of_measure': 'http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius', 'measure_property': 'Temperature', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}, {'model': 'Grove_-_Temperature&Humidity_Sensor_Pro(DHT22)', 'port': '4', 'value': 51.6, 'unit_of_measure': 'http://www.ontology-of-units-of-measure.org/resource/om-2/percentage', 'measure_property': 'RelativeHumidity', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}, {'model': 'Grove_-_Loudness_Sensor', 'port': '0', 'value': 41.87, 'unit_of_measure': 'http://www.ontology-of-units-of-measure.org/resource/om-2/decibel', 'measure_property': 'Loudness', 'Time': {'date': '2022-10-21', 'time': '11~12~09', 'timeStamp': '2022/10/21 11:12:09', 'weekday': 'Friday', 'season': 'Fall'}, 'Location': {'ip': '138.4.195.144', 'lat': 40.4486, 'lon': -3.71928, 'str_lat': '40*4486', 'str_lon': '-3*71928', 'city': 'Madrid', 'region': 'MD', 'region_name': 'Madrid', 'country': 'Spain', 'country_code': 'ES', 'postal': 28040, 'timezone': 'Europe/Madrid'}}]}\">\n", "\n", "@prefix rdf: .\n", "@prefix rdfs: .\n", "@prefix xsd: .\n", "@prefix owl: .\n", "@prefix geo: .\n", "@prefix time: .\n", "@prefix om: .\n", "@prefix saref: .\n", "@prefix sensor: \n", "@prefix ex: .\n", "\n", "\n", "ex:mod/[=jpath.filter('$.Metadata.mod_id', dataset)]_[=jpath.filter('$.Metadata.mac', dataset)]\n", " a saref:Device ;\n", " sensor:hasPointGeometry ex:point/[=jpath.filter('$.Metadata.mod_id', dataset)]_[=jpath.filter('$.Metadata.mac', dataset)] .\n", "\n", "ex:point/[=jpath.filter('$.Metadata.mod_id', dataset)]_[=jpath.filter('$.Metadata.mac', dataset)]\n", " a geo:Point ;\n", " geo:hasSerialization \"Point([=jpath.filter('$.Location.lat', dataset)] [=jpath.filter('$.Location.lon', dataset)])\"^^ .\n", "\n", "\n", "<#list jpath.filter('$.Sensors', dataset) as sensors>\n", " ex:sensor/[=jpath.filter('$.model', sensors)]\n", " a saref:Sensor ;\n", " saref:consistsOf ex:mod/[=jpath.filter('$.Metadata.mod_id', dataset)]_[=jpath.filter('$.Metadata.mac', dataset)] ;\n", " saref:makesMeasurement ex:measurement/[=jpath.filter('$.measure_property', sensors)].\n", "\n", " ex:measurement/[=jpath.filter('$.measure_property', sensors)]\n", " a saref:Measurement ;\n", " saref:hasTimeStamp \"[=jpath.filter('$.Time.timeStamp', sensors)]\"^^xsd:dateTime ;\n", " saref:hasValue [=jpath.filter('$.value', sensors)]^^xsd:float ;\n", " saref:isMeasuredIn [=jpath.filter('$.unit_of_measure', sensors)] ;\n", " saref:relatesToProperty sensor:[=jpath.filter('$.measure_property', sensors)] .\n", "\n", " [=jpath.filter('$.unit_of_measure', sensors)]\n", " a saref:UnitOfMeasure .\n", "\n", "\n", "\n" ] } ], "source": [ "print(result)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.2 64-bit ('3.10.2')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.2" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "a9c44c8ff930b067c6bc3f134a348d3cb9f19f01dfb46c39e0c18c228169b636" } } }, "nbformat": 4, "nbformat_minor": 2 }