{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from moncenterlib.stream2file import Stream2File\n",
    "from moncenterlib.gnss.rgs_client import RGSClient\n",
    "from moncenterlib.gnss.cddis_client import CDDISClient\n",
    "\n",
    "import datetime\n",
    "import pathlib\n",
    "from threading import Thread\n",
    "\n",
    "str2file = Stream2File()\n",
    "cddis = CDDISClient()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Скачиваем измерений с сети ФАГС"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "rgs = RGSClient(\"YOUR_API\", False)\n",
    "query = {\n",
    "    \"working_center\": \"NSK1\",\n",
    "    \"date\": \"2024-08-31\",\n",
    "    \"type\": \"O\"\n",
    "}\n",
    "\n",
    "output_path = \"/home/danisimo/Summer_Experiment/data/NSK1\"\n",
    "rgs.download_files(output_path, query)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Скачиваем эфемериды с CDDIS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_path = \"/home/danisimo/Summer_Experiment/data/nav/\"\n",
    "cddis.get_daily_multi_gnss_brd_eph(output_path, {\"start\": \"2024-08-31\", \"end\": \"2024-08-31\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Скачиваем измерений с базовых станций IGS. Сервис CDDIS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "query = {\"dates\": {\"start\": \"2024-08-27\", \"end\": \"2024-08-31\"}, \"station\": \"NOVM\", \"type\": \"o\", \"rinex_v\": \"auto\"}\n",
    "cddis.get_daily_30s_data(\"/home/danisimo/Summer_Experiment/data/NOVM\", query)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Получаем измерения со станций. Формируем список подключений"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Settings connection\n",
    "stations = {\n",
    "        \"NSKN\": {\"connect\": {\n",
    "                    \"type\": \"ntrip\",\n",
    "                    \"user\": \"guest\",\n",
    "                    \"passwd\": \"pass\",\n",
    "                    \"addr\": \"addr_ntrip\",\n",
    "                    \"port\": \"2101\",\n",
    "                    \"mntpnt\": \"MP2717\"\n",
    "                },\n",
    "            },\n",
    "\n",
    "        \"BUZZ\": {\"connect\": {\n",
    "                    \"type\": \"ntrip\",\n",
    "                    \"user\": \"guest\",\n",
    "                    \"passwd\": \"pass\",\n",
    "                    \"addr\": \"addr_ntrip\",\n",
    "                    \"port\": \"2101\",\n",
    "                    \"mntpnt\": \"MP2717a\"\n",
    "                },\n",
    "            },\n",
    "        \n",
    "        \"SNSK00RUS\": {\"connect\": {\n",
    "                    \"type\": \"tcpcli\",\n",
    "                    \"addr\": \"192.168.0.17\",\n",
    "                    \"port\": \"23\"\n",
    "                },\n",
    "            },\n",
    "\n",
    "        \"SNSK01RUS\": {\"connect\": {\n",
    "                    \"type\": \"tcpcli\",\n",
    "                    \"addr\": \"192.168.0.129\",\n",
    "                    \"port\": \"23\"\n",
    "                },\n",
    "            },\n",
    "\n",
    "        \"SNSK02RUS\": {\"connect\": {\n",
    "                    \"type\": \"tcpcli\",\n",
    "                    \"addr\": \"192.168.0.7\",\n",
    "                    \"port\": \"23\"\n",
    "                },\n",
    "            },\n",
    "\n",
    "        \"SNSK03RUS\": {\"connect\": {\n",
    "                    \"type\": \"tcpcli\",\n",
    "                    \"addr\": \"192.168.0.181\",\n",
    "                    \"port\": \"23\"\n",
    "                },\n",
    "            },\n",
    "        }\n",
    "\n",
    "\n",
    "# add connections in str2file obj\n",
    "for name_conn in stations.keys():\n",
    "    if \"connect\" not in stations[name_conn]:\n",
    "        continue\n",
    "    str2file.add_connection(name_conn, stations[name_conn][\"connect\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Запускаем процесс подключений и записи измерений в файлы"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# start connections\n",
    "for name_conn in str2file.get_connection_names():\n",
    "    # create dir and name file\n",
    "    today = datetime.datetime.now().strftime(\"%Y-%m-%d\")\n",
    "    dir_name = pathlib.Path(f\"./data/{name_conn}/{today}\")\n",
    "    try:\n",
    "        dir_name.mkdir(parents=True)\n",
    "    except FileExistsError:\n",
    "        pass\n",
    "    output_file = str2file.create_output_file_name(name_conn, str(dir_name))\n",
    "    \n",
    "    # add output path file and start multithreading\n",
    "    stations[name_conn][\"output_file_raw\"] = output_file\n",
    "    th = Thread(target=str2file.start, args=(name_conn, output_file))\n",
    "    th.start()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Получаем статус подключений"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get status from all connections\n",
    "for name_conn in str2file.get_connection_names():\n",
    "    print(str2file.get_status(name_conn))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Останавливаем подключения"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# stop all connections\n",
    "for name_conn in str2file.get_connection_names():\n",
    "    str2file.stop(name_conn)"
   ]
  }
 ],
 "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.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
