{ "cells": [ { "cell_type": "markdown", "id": "d4582341", "metadata": {}, "source": [ "# EagleEyev3 Playground\n", "\n", "To make this playground work, it is easier to read the `access_token` off the filesystem but you can always run the example server `python server.py` to go thorugh the Oauth2 flow. By default it will save the `access_token` into a file named `.lazy_login`. The module looks for that file and tries reading t" ] }, { "cell_type": "markdown", "id": "8355d241", "metadata": {}, "source": [ "## Import Module" ] }, { "cell_type": "code", "execution_count": 1, "id": "1394471a", "metadata": {}, "outputs": [], "source": [ "from EagleEyev3 import EagleEyev3" ] }, { "cell_type": "code", "execution_count": 2, "id": "486a2537", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:root:200 in get_base_url\n", "INFO:root:200 in get_current_user\n" ] } ], "source": [ "een = EagleEyev3()" ] }, { "cell_type": "markdown", "id": "51b8b66e", "metadata": {}, "source": [ "## Adjust Log Level" ] }, { "cell_type": "code", "execution_count": 3, "id": "06d91db2", "metadata": {}, "outputs": [], "source": [ "import logging\n", "logger = logging.getLogger()\n", "#logger.setLevel('DEBUG')\n", "#logger.setLevel('INFO')\n", "logger.setLevel('WARN')\n", "#logger.setLevel('ERROR')\n", "#logger.setLevel('CRITICAL')" ] }, { "cell_type": "markdown", "id": "0311109c-869c-4190-97c1-a6e717a8eeba", "metadata": {}, "source": [ "## Who am I" ] }, { "cell_type": "code", "execution_count": 4, "id": "e14e2be5-a5f9-4b8c-ae60-76c61cb61b8b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Demo User - demo@een.com'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f\"{een.current_user['firstName']} {een.current_user['lastName']} - {een.current_user['email']}\"" ] }, { "cell_type": "code", "execution_count": 5, "id": "4ef47ae2-a010-4b7e-87f6-3dbf0a047e16", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'eyJraWQiOiI2ODYxYjBjYS0wZjI2LTExZWQtODYxZC0wMjQyYWMxMjAwMDIiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJjYTBmNjFhYiIsImF1ZCI6InZtcy5hcGkiLCJpc3MiOiJ2bXMuYXV0aC52MSIsInZtc19hY2NvdW50IjoiMDAwMDExMDYiLCJleHAiOjE2ODYyNTAzMTUsImlhdCI6MTY4NTY0NTUxNiwianRpIjoiMjBiMjZjNzc1MGU4YjQ0YTIzZTdhZWVmYWE5ZjlhZTUiLCJjbGllbnRfaWQiOiJQUkVWSUVXLU1BUkstV0VCIiwidm1zX2NsdXN0ZXIiOiJjMDAwIn0.MTBcdMhHfDMM5__dTtKLcEmJESXEGwTvtTFOpeLwFdg55RvC93N-ay3QdHPfgWl7amQS7RZOb0S1BhEuHvbBJa42_AFzGhgbPX5LZP4ghp2CL6Arbf3ehovt59nd9ZzOBVVSopiBQP_YNT7ap_ojUMy43NSd_W0jZ_54Qz6pthmeKXkpYTyYYccZ4X8bzvyJ4MpMR-WGJsTkgVZ8Ln9UxOadTNWHfGWk2eVZ0ZQsB02qj07va2KTlOCrlFlGjW46_1lOXg8ImiJAfdyJRHI7_y0wF7N3dnpXJO5bix-uzgwiC3msrNmDjYnwlD7rvGssq8L-4gi_9UgO1CTVZPuPkw'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "een.access_token" ] }, { "cell_type": "markdown", "id": "a22ff6c2", "metadata": {}, "source": [ "## Get Cameras" ] }, { "cell_type": "code", "execution_count": 6, "id": "bb457850", "metadata": {}, "outputs": [], "source": [ "ret = een.get_list_of_cameras()" ] }, { "cell_type": "code", "execution_count": 7, "id": "c43f1db1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[✅ [100544a0] - Amsterdam1,\n", " ✅ [10102231] - Australia,\n", " ✅ [100a0565] - Boat Launch PTZ (5MP),\n", " ✅ [10031d80] - CF1 16th Floor Break Room (4MP),\n", " ✅ [1003dc62] - CF1 16th Floor Elevator Lobby (2MP),\n", " ✅ [100eb87d] - CF1 16th Floor Freight Elevator (2MP),\n", " ✅ [10023191] - CF1 16th Floor Kitchen (4MP),\n", " ✅ [10013585] - CF1 16th Floor Library (2MP),\n", " ✅ [1009e1ac] - CF1 16th Floor Lobby Fisheye (10MP),\n", " ✅ [100be266] - CF1 16th Floor Lockers (2MP),\n", " ✅ [10079c0f] - CF1 16th Floor Mentor Area,\n", " ✅ [1007a107] - CF1 16th Floor Metal Room (3MP),\n", " ✅ [1003fdad] - CF1 16th Floor Network Closet (1MP),\n", " ✅ [10061445] - CF1 Astro_Boy,\n", " ✅ [100f881f] - CF1 Dedicated Desks,\n", " ✅ [100b4012] - CF1 Green Room (2MP),\n", " ✅ [100f7041] - CF1 Lobby Center (2MP),\n", " ✅ [10004d85] - CF1 Lobby Fisheye (5MP),\n", " ✅ [10005281] - CF1 Lobby Reception (4MP),\n", " ✅ [10095a7f] - CF1 Lobby Right (2MP),\n", " ✅ [1007ab35] - CF1 North Office (2MP),\n", " ✅ [1007e158] - CF1 Open Work Space 1 (1MP),\n", " ✅ [1009ead6] - CF1 Open Work Space 2 (2MP),\n", " ✅ [100baf8b] - CF1 Open Work Space 3 (2MP),\n", " ✅ [10079cc5] - CF1 Podcast Studio (1MP),\n", " ✅ [1003a079] - CF1 Rear Exit (1MP),\n", " ✅ [100530a8] - CF1 Thermal Station,\n", " ✅ [10058b7a] - CF1 Thermal Station Color View,\n", " ✅ [10099857] - CF2 1st Floor Closet (1MP),\n", " ✅ [1004549e] - CF2 1st Floor Exit (1MP),\n", " ✅ [10107a26] - CF2 1st Floor Hallway (1MP),\n", " ✅ [1001870e] - CF2 1st Floor Network Closet 1 (1MP),\n", " ✅ [10083f1d] - CF2 1st Floor Term Exit (1MP),\n", " ✅ [10032e17] - CF2 BB8 Back,\n", " ✅ [100916ba] - CF2 Beer Robot (1MP),\n", " ✅ [1006c703] - CF2 Device Lab (1MP),\n", " ✅ [10035428] - CF2 Elevator Lobby 1 (4MP),\n", " ✅ [10002b34] - CF2 Elevator Lobby 2 (2MP),\n", " ✅ [1002737c] - CF2 Entrance (Fisheye) (5MP),\n", " ✅ [1000881c] - CF2 Freight Elevator (1MP),\n", " ✅ [1000cdc9] - CF2 Game Room (1MP),\n", " ✅ [10051ab9] - CF2 Johnny-Five Room (1MP),\n", " ✅ [1002931e] - CF2 Main Entrance (1MP),\n", " ✅ [100e25eb] - CF2 Mobility Room (1MP),\n", " ✅ [10035320] - CF2 Network Closet (1MP),\n", " ✅ [10058b99] - CF2 Network Closet 2 (1MP),\n", " ✅ [100ab69f] - CF2 Retail,\n", " ✅ [1008ed00] - CF2 Retail Entrance,\n", " ✅ [100254d4] - CF2 Retail Inventory,\n", " ✅ [10104a9a] - CF2 Robo Cop Room Side Door (4MP),\n", " ✅ [100abbbf] - CF2 Shared Workspace (1MP),\n", " ✅ [1004d2cc] - CF2 Stage (1MP),\n", " ✅ [1002d41b] - CF2 Terminator Room (1MP),\n", " ✅ [10102f00] - CF2 VR Lab (4MP),\n", " ✅ [10057197] - CF2 VR Lab Entrance (1MP),\n", " ✅ [10001523] - CF3 Entry Drive (2MP),\n", " ✅ [100cd8e3] - CF3 Lobby Overhead (1MP),\n", " ✅ [10099a4e] - CF4 1st Floor Elevator (1MP),\n", " ✅ [1004de41] - Chidori Marine Service(Mt.Fuji),\n", " ✅ [100e0d6e] - Display Station View,\n", " ✅ [100d4c42] - EEN HQ Entrance LPR,\n", " ✅ [100ca645] - HD-TVI Encoder (Channel 3),\n", " ✅ [1009d55a] - Hikvision PTZ,\n", " ✅ [1001cdde] - JB1 Bay2 (2MP),\n", " ✅ [1005a220] - JB1 hallway (1MP),\n", " ✅ [1001c44b] - JB1 Lobby (2MP),\n", " ✅ [1006e5ac] - Lagos - Avigilon PTZ,\n", " ✅ [100e0fa0] - Malaysia,\n", " ✅ [1009f383] - Parking,\n", " ✅ [1002cc03] - 店内,\n", " ✅ [1006242c] - 桟橋側]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i for i in een.cameras if i.is_online()]" ] }, { "cell_type": "code", "execution_count": 8, "id": "ad33bf2a-ea36-4ec1-8335-8a44089f5f7e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[? [1001e8e4] - CF4 East Hall (1MP),\n", " ? [10079be3] - CF4 North East Hall (1MP),\n", " ? [10081317] - CF4 West Hall (1MP),\n", " ? [1007e81e] - EE ST01 Thermal Camera (1MP),\n", " ? [100ac28e] - HD-TVI Encoder,\n", " ? [100e1e7d] - JB3 Customer Area (SD),\n", " ? [10097da5] - JB3 Dough Machine (SD),\n", " ? [100a5bc2] - JB3 Make Line (SD),\n", " ? [1001c49e] - JB3 Prep Area Mixer (SD),\n", " ? [1002129c] - SAM1 Showroom (1MP),\n", " ❌ [100d6e2a] - zz_Example of Camera Offline,\n", " ? [10106a81] - zz_Example of Camera turned off]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i for i in een.cameras if not i.is_online()]" ] }, { "cell_type": "code", "execution_count": 9, "id": "f4c6fe67", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[? [1001e8e4] - CF4 East Hall (1MP),\n", " ? [10079be3] - CF4 North East Hall (1MP),\n", " ? [10081317] - CF4 West Hall (1MP),\n", " ? [1007e81e] - EE ST01 Thermal Camera (1MP),\n", " ? [100ac28e] - HD-TVI Encoder,\n", " ? [100e1e7d] - JB3 Customer Area (SD),\n", " ? [10097da5] - JB3 Dough Machine (SD),\n", " ? [100a5bc2] - JB3 Make Line (SD),\n", " ? [1001c49e] - JB3 Prep Area Mixer (SD),\n", " ? [1002129c] - SAM1 Showroom (1MP),\n", " ❌ [100d6e2a] - zz_Example of Camera Offline,\n", " ? [10106a81] - zz_Example of Camera turned off]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i for i in een.cameras if not i.is_online()]" ] }, { "cell_type": "code", "execution_count": null, "id": "b0ec786b-ed07-4486-a4d7-a7483e5a02ce", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8c140aaf-766f-4255-94ef-199d17cbc7a6", "metadata": {}, "source": [ "## Getting list of Events" ] }, { "cell_type": "code", "execution_count": 10, "id": "74e78ee1-33b8-4a88-9d23-cd6281603a5b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2023-06-01T13:54:01.906-05:00 2023-06-01T07:54:01.906-05:00\n" ] } ], "source": [ "print(een.time_now(), een.time_before())" ] }, { "cell_type": "code", "execution_count": 11, "id": "c84c30dd-4b7c-415b-8e6f-e77de70d1924", "metadata": { "scrolled": true }, "outputs": [ { "ename": "ConnectionError", "evalue": "HTTPSConnectionPool(host='api.c000.eagleeyenetworks.com', port=443): Max retries exceeded with url: /api/v3.0/events?pageSize=100&include=data.een.deviceCloudStatusUpdate.v1&startTimestamp__gte=2023-05-31T08:03:00.602-05:00&endTimestamp__lte=2023-05-31T14:03:00.602-05:00&actor=camera%3A10031d80 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mConnectionRefusedError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connection.py:158\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 158\u001b[0m conn \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 159\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mextra_kw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout:\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/util/connection.py:80\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m err \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m---> 80\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\n\u001b[1;32m 82\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m socket\u001b[38;5;241m.\u001b[39merror(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgetaddrinfo returns an empty list\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/util/connection.py:70\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 69\u001b[0m sock\u001b[38;5;241m.\u001b[39mbind(source_address)\n\u001b[0;32m---> 70\u001b[0m \u001b[43msock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43msa\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m sock\n", "\u001b[0;31mConnectionRefusedError\u001b[0m: [Errno 111] Connection refused", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mNewConnectionError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connectionpool.py:597\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 596\u001b[0m \u001b[38;5;66;03m# Make the request on the httplib connection object.\u001b[39;00m\n\u001b[0;32m--> 597\u001b[0m httplib_response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 598\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 599\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 600\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 602\u001b[0m \u001b[38;5;66;03m# If we're going to release the connection in ``finally:``, then\u001b[39;00m\n\u001b[1;32m 603\u001b[0m \u001b[38;5;66;03m# the response doesn't need to know about the connection. Otherwise\u001b[39;00m\n\u001b[1;32m 604\u001b[0m \u001b[38;5;66;03m# it will also try to release it and we'll have a double-release\u001b[39;00m\n\u001b[1;32m 605\u001b[0m \u001b[38;5;66;03m# mess.\u001b[39;00m\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connectionpool.py:343\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 342\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 343\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 344\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 345\u001b[0m \u001b[38;5;66;03m# Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.\u001b[39;00m\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connectionpool.py:839\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 838\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(conn, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msock\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m): \u001b[38;5;66;03m# AppEngine might not have `.sock`\u001b[39;00m\n\u001b[0;32m--> 839\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 841\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_verified:\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connection.py:301\u001b[0m, in \u001b[0;36mVerifiedHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 299\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconnect\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 300\u001b[0m \u001b[38;5;66;03m# Add certificate verification\u001b[39;00m\n\u001b[0;32m--> 301\u001b[0m conn \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 302\u001b[0m hostname \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connection.py:167\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NewConnectionError(\n\u001b[1;32m 168\u001b[0m \u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed to establish a new connection: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m e)\n\u001b[1;32m 170\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m conn\n", "\u001b[0;31mNewConnectionError\u001b[0m: : Failed to establish a new connection: [Errno 111] Connection refused", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/requests/adapters.py:486\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 486\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 487\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 488\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 489\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 490\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 491\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 492\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 493\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 494\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 496\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 498\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 500\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/connectionpool.py:637\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 635\u001b[0m e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m'\u001b[39m, e)\n\u001b[0;32m--> 637\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43me\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 638\u001b[0m \u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 639\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/urllib3/util/retry.py:399\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 398\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m new_retry\u001b[38;5;241m.\u001b[39mis_exhausted():\n\u001b[0;32m--> 399\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause))\n\u001b[1;32m 401\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='api.c000.eagleeyenetworks.com', port=443): Max retries exceeded with url: /api/v3.0/events?pageSize=100&include=data.een.deviceCloudStatusUpdate.v1&startTimestamp__gte=2023-05-31T08:03:00.602-05:00&endTimestamp__lte=2023-05-31T14:03:00.602-05:00&actor=camera%3A10031d80 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[11], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m ts \u001b[38;5;241m=\u001b[39m een\u001b[38;5;241m.\u001b[39mtime_now()\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m cam \u001b[38;5;129;01min\u001b[39;00m een\u001b[38;5;241m.\u001b[39mcameras:\n\u001b[0;32m----> 5\u001b[0m blah \u001b[38;5;241m=\u001b[39m \u001b[43mcam\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_list_of_events\u001b[49m\u001b[43m(\u001b[49m\u001b[43mend_timestamp\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43meen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtime_before\u001b[49m\u001b[43m(\u001b[49m\u001b[43mts\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhours\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m6\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m\\\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mstart_timestamp\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43meen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtime_before\u001b[49m\u001b[43m(\u001b[49m\u001b[43mts\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhours\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m6\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/dev/een/EagleEyev3/EagleEyev3/__init__.py:496\u001b[0m, in \u001b[0;36mCamera.get_list_of_events\u001b[0;34m(self, start_timestamp, end_timestamp)\u001b[0m\n\u001b[1;32m 489\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muser_base_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/api/v3.0/events?pageSize=100&include=data.een.deviceCloudStatusUpdate.v1&startTimestamp__gte=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mstart_timestamp\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m&endTimestamp__lte=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mend_timestamp\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m&actor=camera%3A\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mid\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 491\u001b[0m headers \u001b[38;5;241m=\u001b[39m { \n\u001b[1;32m 492\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAuthorization\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBearer \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39meen_instance\u001b[38;5;241m.\u001b[39maccess_token\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \n\u001b[1;32m 493\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAccept\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mapplication/json\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 494\u001b[0m }\n\u001b[0;32m--> 496\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 497\u001b[0m response_json \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39mjson()\n\u001b[1;32m 499\u001b[0m logging\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresponse\u001b[38;5;241m.\u001b[39mstatus_code\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m returned from \u001b[39m\u001b[38;5;132;01m{\u001b[39;00murl\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m with \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mheaders\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", "File \u001b[0;32m~/.virtualenvs/cls/lib/python3.8/site-packages/requests/adapters.py:519\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 515\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 516\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 517\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 522\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='api.c000.eagleeyenetworks.com', port=443): Max retries exceeded with url: /api/v3.0/events?pageSize=100&include=data.een.deviceCloudStatusUpdate.v1&startTimestamp__gte=2023-05-31T08:03:00.602-05:00&endTimestamp__lte=2023-05-31T14:03:00.602-05:00&actor=camera%3A10031d80 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))" ] } ], "source": [ "for i in range(0,20):\n", " ts = een.time_now()\n", "\n", " for cam in een.cameras:\n", " blah = cam.get_list_of_events(end_timestamp=een.time_before(ts=ts, hours=(6*i)), \\\n", " start_timestamp=een.time_before(ts=ts, hours=(6*(i+1))) )" ] }, { "cell_type": "code", "execution_count": null, "id": "13809cc7-9ec2-4e15-9495-e64feaecca6d", "metadata": {}, "outputs": [], "source": [ "len(een.cameras[2].events['status'])" ] }, { "cell_type": "code", "execution_count": null, "id": "67d4f79b-2b43-4bdb-9068-28ac9d8d921c", "metadata": {}, "outputs": [], "source": [ "len(een.cameras[0].events['motion'])" ] }, { "cell_type": "code", "execution_count": null, "id": "8be8d503-b46d-4ba7-884e-2c21c3987129", "metadata": {}, "outputs": [], "source": [ "for cam in een.cameras:\n", " for i in cam.events['status']:\n", " print(f\"{cam.name} - {i['startTimestamp']} - {i['data'][0]['newStatus']['connectionStatus']} \")" ] }, { "cell_type": "code", "execution_count": null, "id": "1cebbb4e-4c4e-4ab0-9627-251eb812b2f1", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }