Files
farmos.py-wagner/Filter.ipynb
2024-09-28 12:40:36 +02:00

213 lines
22 KiB
Plaintext
Executable File

{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"id": "2257ee1d-bcc1-483c-bb74-106e52aa7b46",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ID Name \\\n",
"0 ae417c7e-e1f2-4184-b6f9-e5c8027a2fc4 Harvest log 40 \n",
"1 f873e803-f20a-460e-8c2c-d10835d6b2c7 Harvest log 42 \n",
"2 97f1f184-20ce-44da-bc70-134e3917a701 Harvest log 43 \n",
"3 fa5c7900-ef46-44fb-a160-2594ca00d65b Harvest log 44 \n",
"4 fa014b11-25ef-4a49-9406-0f3900952a2c Harvest log 46 \n",
"5 05fd5f47-15df-4be0-8197-a4927ab87a88 test log \n",
"6 50a16f30-79f6-4c3b-9815-3af6cf107cf3 Harvest log 48 \n",
"7 7159b3fe-bf3b-4fcc-9438-1ed0b1971937 Harvest log 49 \n",
"8 16a3cdd0-a9fb-403a-8e0b-1f390cefe0cd Harvest log 64 \n",
"9 c39d4bc4-4bcb-408c-b2b6-018901dd7e74 Harvest log 65 \n",
"10 ff8a1498-8057-4ede-be2a-a82b88f893ba Harvest log 67 \n",
"11 e8c4b960-6947-426c-8d07-4ab4a1f11578 Harvest log 69 \n",
"12 a1c2eae4-5543-40ee-98b5-6ca92fc54b5a Harvest log 71 \n",
"13 2058bca2-537b-49cb-bcc0-c33496384c2b Harvest log 73 \n",
"\n",
" Timestamp Plant Area Status \\\n",
"0 2024-09-23T09:13:35+00:00 23/24 Grosser Acker Weizen Plant 7.5 done \n",
"1 2024-09-24T14:13:40+00:00 0.0 done \n",
"2 2024-09-24T17:30:47+00:00 0.0 done \n",
"3 2024-09-24T17:33:27+00:00 0.0 done \n",
"4 2024-09-24T17:47:52+00:00 0.0 done \n",
"5 2024-09-24T17:48:49+00:00 0.0 done \n",
"6 2024-09-24T18:10:27+00:00 23/24 Grosser Acker Weizen Plant 7.5 done \n",
"7 2024-09-24T18:15:59+00:00 23/24 Grosser Acker Weizen Plant 7.5 done \n",
"8 2024-09-27T13:52:31+00:00 23/24 Grosser Acker Weizen Plant 7.5 done \n",
"9 2024-09-27T13:52:34+00:00 23/24 Grosser Acker Weizen Plant 7.5 done \n",
"10 2024-09-27T13:56:30+00:00 23/24 Grosser Acker Raps Plant 5.0 done \n",
"11 2024-09-27T13:57:00+00:00 23/24 Grosser Acker Raps Plant 5.0 done \n",
"12 2024-09-27T13:58:03+00:00 23/24 Grosser Acker Raps Plant 5.0 done \n",
"13 2024-09-27T15:29:38+00:00 23/24 Loehle Mais Plant 4.0 done \n",
"\n",
" Revision Created \\\n",
"0 2024-09-23T09:15:08+00:00 \n",
"1 2024-09-24T14:14:12+00:00 \n",
"2 2024-09-24T17:30:52+00:00 \n",
"3 2024-09-24T17:35:08+00:00 \n",
"4 2024-09-24T17:48:16+00:00 \n",
"5 2024-09-24T17:49:12+00:00 \n",
"6 2024-09-24T18:10:47+00:00 \n",
"7 2024-09-25T09:34:35+00:00 \n",
"8 2024-09-27T13:52:33+00:00 \n",
"9 2024-09-27T13:53:09+00:00 \n",
"10 2024-09-27T13:56:59+00:00 \n",
"11 2024-09-27T13:57:37+00:00 \n",
"12 2024-09-27T13:58:36+00:00 \n",
"13 2024-09-27T15:30:13+00:00 \n",
"\n",
" Link \n",
"0 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"1 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"2 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"3 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"4 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"5 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"6 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"7 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"8 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"9 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"10 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"11 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"12 https://farmos.wagframe.duckdns.org/api/log/ha... \n",
"13 https://farmos.wagframe.duckdns.org/api/log/ha... \n"
]
},
{
"ename": "PermissionError",
"evalue": "[Errno 13] Permission denied: 'harvest_logs.csv'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mPermissionError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[9], line 88\u001b[0m\n\u001b[0;32m 86\u001b[0m \u001b[38;5;66;03m# Speichere die Tabelle in einer CSV-Datei\u001b[39;00m\n\u001b[0;32m 87\u001b[0m csv_file_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mharvest_logs.csv\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m---> 88\u001b[0m \u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcsv_file_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindex\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[0;32m 90\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDie Tabelle wurde erfolgreich in der Datei \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcsv_file_path\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m gespeichert.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
"File \u001b[1;32m\\\\?\\C:\\Users\\Wir\\AppData\\Roaming\\jupyterlab-desktop\\jlab_server\\Lib\\site-packages\\pandas\\util\\_decorators.py:333\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments.<locals>.decorate.<locals>.wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 327\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m num_allow_args:\n\u001b[0;32m 328\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[0;32m 329\u001b[0m msg\u001b[38;5;241m.\u001b[39mformat(arguments\u001b[38;5;241m=\u001b[39m_format_argument_list(allow_args)),\n\u001b[0;32m 330\u001b[0m \u001b[38;5;167;01mFutureWarning\u001b[39;00m,\n\u001b[0;32m 331\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39mfind_stack_level(),\n\u001b[0;32m 332\u001b[0m )\n\u001b[1;32m--> 333\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\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[1;32m\\\\?\\C:\\Users\\Wir\\AppData\\Roaming\\jupyterlab-desktop\\jlab_server\\Lib\\site-packages\\pandas\\core\\generic.py:3967\u001b[0m, in \u001b[0;36mNDFrame.to_csv\u001b[1;34m(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, lineterminator, chunksize, date_format, doublequote, escapechar, decimal, errors, storage_options)\u001b[0m\n\u001b[0;32m 3956\u001b[0m df \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m, ABCDataFrame) \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mto_frame()\n\u001b[0;32m 3958\u001b[0m formatter \u001b[38;5;241m=\u001b[39m DataFrameFormatter(\n\u001b[0;32m 3959\u001b[0m frame\u001b[38;5;241m=\u001b[39mdf,\n\u001b[0;32m 3960\u001b[0m header\u001b[38;5;241m=\u001b[39mheader,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 3964\u001b[0m decimal\u001b[38;5;241m=\u001b[39mdecimal,\n\u001b[0;32m 3965\u001b[0m )\n\u001b[1;32m-> 3967\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDataFrameRenderer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mformatter\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_csv\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3968\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath_or_buf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3969\u001b[0m \u001b[43m \u001b[49m\u001b[43mlineterminator\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlineterminator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3970\u001b[0m \u001b[43m \u001b[49m\u001b[43msep\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msep\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3971\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3972\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3973\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompression\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompression\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3974\u001b[0m \u001b[43m \u001b[49m\u001b[43mquoting\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquoting\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3975\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3976\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex_label\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindex_label\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3977\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3978\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunksize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunksize\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3979\u001b[0m \u001b[43m \u001b[49m\u001b[43mquotechar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquotechar\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3980\u001b[0m \u001b[43m \u001b[49m\u001b[43mdate_format\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdate_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3981\u001b[0m \u001b[43m \u001b[49m\u001b[43mdoublequote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdoublequote\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3982\u001b[0m \u001b[43m \u001b[49m\u001b[43mescapechar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mescapechar\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3983\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstorage_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3984\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[1;32m\\\\?\\C:\\Users\\Wir\\AppData\\Roaming\\jupyterlab-desktop\\jlab_server\\Lib\\site-packages\\pandas\\io\\formats\\format.py:1014\u001b[0m, in \u001b[0;36mDataFrameRenderer.to_csv\u001b[1;34m(self, path_or_buf, encoding, sep, columns, index_label, mode, compression, quoting, quotechar, lineterminator, chunksize, date_format, doublequote, escapechar, errors, storage_options)\u001b[0m\n\u001b[0;32m 993\u001b[0m created_buffer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 995\u001b[0m csv_formatter \u001b[38;5;241m=\u001b[39m CSVFormatter(\n\u001b[0;32m 996\u001b[0m path_or_buf\u001b[38;5;241m=\u001b[39mpath_or_buf,\n\u001b[0;32m 997\u001b[0m lineterminator\u001b[38;5;241m=\u001b[39mlineterminator,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1012\u001b[0m formatter\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfmt,\n\u001b[0;32m 1013\u001b[0m )\n\u001b[1;32m-> 1014\u001b[0m \u001b[43mcsv_formatter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1016\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m created_buffer:\n\u001b[0;32m 1017\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(path_or_buf, StringIO)\n",
"File \u001b[1;32m\\\\?\\C:\\Users\\Wir\\AppData\\Roaming\\jupyterlab-desktop\\jlab_server\\Lib\\site-packages\\pandas\\io\\formats\\csvs.py:251\u001b[0m, in \u001b[0;36mCSVFormatter.save\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 247\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 248\u001b[0m \u001b[38;5;124;03mCreate the writer & save.\u001b[39;00m\n\u001b[0;32m 249\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 250\u001b[0m \u001b[38;5;66;03m# apply compression and byte/text conversion\u001b[39;00m\n\u001b[1;32m--> 251\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mget_handle\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\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[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\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[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 256\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompression\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[43mcompression\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 257\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\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[43mstorage_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 258\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m handles:\n\u001b[0;32m 259\u001b[0m \u001b[38;5;66;03m# Note: self.encoding is irrelevant here\u001b[39;00m\n\u001b[0;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwriter \u001b[38;5;241m=\u001b[39m csvlib\u001b[38;5;241m.\u001b[39mwriter(\n\u001b[0;32m 261\u001b[0m handles\u001b[38;5;241m.\u001b[39mhandle,\n\u001b[0;32m 262\u001b[0m lineterminator\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlineterminator,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 267\u001b[0m quotechar\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mquotechar,\n\u001b[0;32m 268\u001b[0m )\n\u001b[0;32m 270\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_save()\n",
"File \u001b[1;32m\\\\?\\C:\\Users\\Wir\\AppData\\Roaming\\jupyterlab-desktop\\jlab_server\\Lib\\site-packages\\pandas\\io\\common.py:873\u001b[0m, in \u001b[0;36mget_handle\u001b[1;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[0;32m 868\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(handle, \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m 869\u001b[0m \u001b[38;5;66;03m# Check whether the filename is to be opened in binary mode.\u001b[39;00m\n\u001b[0;32m 870\u001b[0m \u001b[38;5;66;03m# Binary mode does not support 'encoding' and 'newline'.\u001b[39;00m\n\u001b[0;32m 871\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mencoding \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mmode:\n\u001b[0;32m 872\u001b[0m \u001b[38;5;66;03m# Encoding\u001b[39;00m\n\u001b[1;32m--> 873\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[0;32m 874\u001b[0m \u001b[43m \u001b[49m\u001b[43mhandle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 875\u001b[0m \u001b[43m \u001b[49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 876\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 877\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 878\u001b[0m \u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 879\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 880\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 881\u001b[0m \u001b[38;5;66;03m# Binary mode\u001b[39;00m\n\u001b[0;32m 882\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mopen\u001b[39m(handle, ioargs\u001b[38;5;241m.\u001b[39mmode)\n",
"\u001b[1;31mPermissionError\u001b[0m: [Errno 13] Permission denied: 'harvest_logs.csv'"
]
}
],
"source": [
"from farmOS import farmOS\n",
"\n",
"hostname = \"farmos.wagframe.duckdns.org\"\n",
"username = \"matze\"\n",
"password = \"m6ChEHx5gMqgctr8dpb3fhATZbQS8hv4\"\n",
"\n",
"# Create the client.\n",
"farm_client = farmOS(\n",
" hostname=hostname,\n",
" client_id = \"jupyter\", # Optional. The default oauth client_id \"farm\" is enabled on all farmOS servers.\n",
")\n",
"import json\n",
"# Authorize the client, save the token.\n",
"# A scope can be specified, but will default to the default scope set when initializing the client.\n",
"token = farm_client.authorize(username, password)\n",
"\n",
"import pandas as pd\n",
"\n",
"\n",
"def get_related_logs_of_type(asset, type): \n",
" response = farm_client.resource.get('log', type)\n",
" ret = []\n",
" for log in response['data']:\n",
" assets = log['relationships']['asset']['data']\n",
" for asset in assets:\n",
" if asset['id'] == id:\n",
" ret.append(log)\n",
" return ret\n",
"\n",
"def get_related_quantities_of_measure(log, measure):\n",
" quantities = log['relationships']['quantity']['data']\n",
" ret = []\n",
" for quant_ref in quantities:\n",
" quant_id = quant_ref['id']\n",
" quant = farm_client.resource.get_id('quantity', 'standard', quant_id)\n",
" if quant['data']['attributes']['measure'] == measure:\n",
" ret.append(quant)\n",
" return ret\n",
"\n",
"# Beispiel für eine API-Abfrage mit farm_client\n",
"response = farm_client.resource.get('log', 'harvest')\n",
"\n",
"logs = []\n",
"for item in response['data']:\n",
" # plant name und fläche holen\n",
" assets = item['relationships']['asset']['data']\n",
" plant_name = ''\n",
" plant_area = 0.0\n",
" for asset in assets:\n",
" if asset['type'] == 'asset--plant': \n",
" plant_id = asset['id']\n",
" seedings = get_related_logs_of_type(plant_id, 'seeding')\n",
" for seeding in seedings:\n",
" area_quants = get_related_quantities_of_measure(seeding, 'area')\n",
" for area_quant in area_quants:\n",
" plant_area += float(area_quant['data']['attributes']['value']['decimal'])\n",
" plant = farm_client.asset.get_id('plant', plant_id)\n",
" plant_name = plant['data']['attributes']['name']\n",
" \n",
" \n",
" # log aufbauen\n",
" log = {\n",
" 'ID': item['id'],\n",
" 'Name': item['attributes']['name'],\n",
" 'Timestamp': item['attributes']['timestamp'],\n",
" 'Plant': plant_name,\n",
" 'Area': plant_area,\n",
" 'Status': item['attributes']['status'],\n",
" 'Revision Created': item['attributes']['revision_created'],\n",
" 'Link': item['links']['self']['href']\n",
" }\n",
" logs.append(log)\n",
"\n",
"# Erstelle ein DataFrame aus den Harvest Logs\n",
"df = pd.DataFrame(logs)\n",
"\n",
"# Zeige die Tabelle an\n",
"print(df)\n",
"\n",
"# Speichere die Tabelle in einer CSV-Datei\n",
"csv_file_path = 'harvest_logs.csv'\n",
"df.to_csv(csv_file_path, index=False)\n",
"\n",
"print(f\"Die Tabelle wurde erfolgreich in der Datei '{csv_file_path}' gespeichert.\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0ddcc922-e7c4-4cb8-8414-11c49e11fc6d",
"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.12.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}