{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Mobile" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Table of contents**\n", "- Overview\n", "- Setup\n", " - Authentication Token\n", "- Query\n", " - Output Description\n", "- Related Links" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scope 1 emissions are calculations of direct greenhouse gas emissions that can be directly controlled by an organization. The source of the emissions is owned by the organization, for example, fossil fuels.\n", "\n", "Use the Mobile API to calculate emissions from fleet fuel consumption." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ensure that Python 3+ is installed on your system.\n", "\n", "\n", "Note: To run this notebook, you must first add your credentials to `'../../../auth/secrets.ini'` in the following format:\n", "\n", "```\n", "[EAPI]\n", "api.api_key = \n", "api.tenant_id = \n", "api.org_id = \n", "\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Install the prerequisite Python packages\n", "%pip install pandas configparser IPython requests" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import configparser\n", "import requests\n", "import json\n", "from IPython.display import display as display_summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Authentication Token" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the following code snippet to generate a Bearer Token by using your api_key configured in secrets.ini." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Authentication Success\n" ] } ], "source": [ "config = configparser.RawConfigParser()\n", "config.read(['../../../auth/secrets.ini','../../../auth/config.ini'])\n", "\n", "EAPI_API_KEY = config.get('EAPI', 'api.api_key')\n", "EAPI_TENANT_ID = config.get('EAPI', 'api.tenant_id')\n", "EAPI_CLIENT_ID = 'ghgemissions-' + EAPI_TENANT_ID\n", "EAPI_ORG_ID = config.get('EAPI', 'api.org_id')\n", "\n", "EAPI_AUTH_CLIENT_ID = 'saascore-' + EAPI_TENANT_ID\n", "EAPI_AUTH_ENDPOINT = config.get('EAPI', 'api.auth_endpoint')\n", "\n", "EAPI_BASE_URL = config.get('EAPI', 'api.base_url')\n", "EAPI_ENDPOINT = f\"{EAPI_BASE_URL}/mobile\"\n", "\n", "auth_request_headers: dict = {}\n", "auth_request_headers[\"X-IBM-CLIENT-ID\"] = EAPI_AUTH_CLIENT_ID\n", "auth_request_headers[\"X-API-KEY\"] = EAPI_API_KEY\n", "\n", "verify = True\n", "\n", "auth_url = f\"{EAPI_AUTH_ENDPOINT}?orgId={EAPI_ORG_ID}\"\n", " \n", "response = requests.get(url = auth_url,\n", " headers = auth_request_headers,\n", " verify = verify\n", " )\n", "if response.status_code == 200:\n", " jwt_token = response.text\n", " print(\"Authentication Success\")\n", "else: \n", " print(\"Authentication Failed\")\n", " print(response.text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Query" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The example request payload (below) queries IBM Envizi - Emissions API for the emissions generated for a journey in a diesel delivery van (Class I) for a distance of 123.1 km in the United Kingdom:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "payload = {\n", " \"activity\": {\n", " \"type\": \"Delivery - Vans - Diesel - Class I (up to 1.305 t)\",\n", " \"value\": 123.1,\n", " \"unit\": \"km\"\n", " },\n", " \"location\": {\n", " \"country\": \"GBR\"\n", " },\n", " \"time\": {\n", " \"date\": \"2025-01-01\"\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Create the query headers\n", "request_headers: dict = {}\n", "request_headers[\"Content-Type\"] = \"application/json\"\n", "request_headers[\"x-ibm-client-id\"] = EAPI_CLIENT_ID\n", "request_headers[\"Authorization\"] = \"Bearer \" + jwt_token\n", "\n", "# Submit the request\n", "response = requests.post(EAPI_ENDPOINT, \n", " headers = request_headers, \n", " data = json.dumps(payload))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more information about allowable parameters for the payload, please see [Emissions API Developer Guide]()." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
transactionIdtotalCO2eCO2N2Ounitdescription
09f89c558-a4a7-44da-b43c-08b1d1bfe5ee18.90323618.7001210.203115kgCO2eThe delivery - vans - diesel - class i (up to 1.305 t) emissions factor used to calculate this result was obtained from the 2024 Managed - DEFRA factor set
\n", "
" ], "text/plain": [ " transactionId totalCO2e CO2 N2O \\\n", "0 9f89c558-a4a7-44da-b43c-08b1d1bfe5ee 18.903236 18.700121 0.203115 \n", "\n", " unit \\\n", "0 kgCO2e \n", "\n", " description \n", "0 The delivery - vans - diesel - class i (up to 1.305 t) emissions factor used to calculate this result was obtained from the 2024 Managed - DEFRA factor set " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if response.text != \"\":\n", " # Get the response as json\n", " response_json = response.json()\n", " \n", " # Get json and convert to dataframe\n", " json_str = json.dumps(response_json)\n", " dict = json.loads(json_str)\n", " dataframe = pd.json_normalize(dict) \n", " \n", " # display\n", " print(\"\\n\\n\")\n", " pd.set_option('display.max_colwidth', None)\n", " display( dataframe) \n", "else:\n", " print(\"Empty Response\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Output Explanation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "transactionId - An Emissions API transaction id.\n", "\n", "totalCO2e - The total emissions as CO2 equivalent (CO2e)\n", "\n", "co2 - The amount of CO2 (Carbon Dioxide) in the CO2e value.\n", "\n", "ch4 - The amount of CH4 (Methane) in the CO2e value.\n", "\n", "n2O - The amount of N2O (Nitrous Oxide) in the CO2e value.\n", "\n", "hfc - The amount of HFCs (Hydrofluorocarbons) in the CO2e value.\n", "\n", "pfc - The amount of PFCs (Perfluorocarbons) in the CO2e value.\n", "\n", "sf6 - The amount of SF6 (Sulphur Hexafluoride) in the CO2e value.\n", "\n", "nf3 - The amount of NF3 (Nitrogen Trifluoride) in the CO2e value.\n", "\n", "bioCo2 - The amount of bio CO2 in the CO2 value.\n", "\n", "indirectCo2e - The amount of CO2e that is indirect in the CO2e value.\n", "\n", "unit - The unit of measure of the values.\n", "\n", "description - A description of the source factor set of the factor used in the calculation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Links" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Emissions API Developer Guide]()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.1" } }, "nbformat": 4, "nbformat_minor": 4 }