diff --git a/.gitmodules b/.gitmodules index ef820d4039a54bf590e5c675c97a718b0681dc6e..295ed3b37fc8ff4b3674422af3b799f3041f45ed 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,6 @@ path = docker-compose/tango-prometheus-exporter/ska-tango-grafana-exporter url = https://git.astron.nl/lofar2.0/ska-tango-grafana-exporter.git branch = station-control +[submodule "tangostationcontrol/tangostationcontrol/toolkit/libhdbpp-python"] + path = tangostationcontrol/tangostationcontrol/toolkit/libhdbpp-python + url = https://gitlab.com/tango-controls/hdbpp/libhdbpp-python diff --git a/jupyter-notebooks/HdbppReader_demonstrator.ipynb b/jupyter-notebooks/HdbppReader_demonstrator.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..ea1786979fa6083cc7660176f1ece3da2bba21ad --- /dev/null +++ b/jupyter-notebooks/HdbppReader_demonstrator.ipynb @@ -0,0 +1,1172 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "d0328351", + "metadata": {}, + "outputs": [], + "source": [ + "import sys, time\n", + "sys.path.append('/hosthome/tango/tangostationcontrol/tangostationcontrol/toolkit/libhdbpp-python')\n", + "from hdbpp_reader.timescaledb import TimescaleDbReader" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c2295969", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialise a Reader object\n", + "reader = TimescaleDbReader({'database':'hdb', 'user':'postgres', 'password':'password', 'port':5432,'host':'archiver-timescale'})" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "24cd0dbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'user': 'postgres',\n", + " 'password': 'password',\n", + " 'host': 'archiver-timescale',\n", + " 'database': 'hdb',\n", + " 'port': 5432}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reader.parse_config('postgres:password@archiver-timescale:5432/hdb')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2e01bf2a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<connection object at 0x7fcf8f18ee08; dsn: 'user=postgres password=xxx dbname=hdb host=archiver-timescale port=5432', closed: 0>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check connection\n", + "reader.get_connection()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "582e2c9e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['tango://databaseds:10000/stat/sdp/1/fpga_temp_r',\n", + " 'tango://databaseds:10000/stat/recv/1/version_r',\n", + " 'tango://databaseds:10000/stat/recv/1/opcua_missing_attributes_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_green_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_green_on_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_red_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_red_on_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_mask_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pcb_id_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pcb_number_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pcb_version_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_1v8_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_2v5_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_3v3_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_analog_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_digital_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_good_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_temp_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recvtr_i2c_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recvtr_monitor_rate_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/recvtr_translator_busy_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_colour_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recv_iout_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recv_temp_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recv_vout_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/state',\n", + " 'tango://databaseds:10000/stat/recv/1/status',\n", + " 'tango://databaseds:10000/stat/sdp/1/version_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/opcua_missing_attributes_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_enable_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_enable_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_hdr_eth_destination_mac_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_hdr_eth_destination_mac_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_hdr_ip_destination_address_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_hdr_ip_destination_address_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_hdr_udp_destination_port_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_hdr_udp_destination_port_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_scale_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_beamlet_output_scale_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_boot_image_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_boot_image_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_global_node_index_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_pps_present_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_pps_capture_cnt_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_pps_expected_cnt_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_pps_expected_cnt_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_processing_enable_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_processing_enable_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_scrap_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_scrap_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_antenna_band_index_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_block_period_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_f_adc_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_fsub_type_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_nyquist_sampling_zone_index_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_nyquist_sampling_zone_index_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_observation_id_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_observation_id_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_station_id_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_sdp_info_station_id_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_time_since_last_pps_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_fpga_mask_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_sdp_config_first_fpga_nr_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_sdp_config_nof_beamsets_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_sdp_config_nof_fpgas_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_start_time_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_tod_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_tod_pps_delta_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_bsn_monitor_input_bsn_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_bsn_monitor_input_nof_packets_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_bsn_monitor_input_nof_valid_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_bsn_monitor_input_nof_err_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_error_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_processing_error_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_input_error_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/state',\n", + " 'tango://databaseds:10000/stat/sdp/1/status',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_firmware_version_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/fpga_hardware_version_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_fpga_mask_rw',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_fpga_communication_error_r',\n", + " 'tango://databaseds:10000/stat/sdp/1/tr_software_version_r']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the list of all the archived attributes\n", + "reader.get_attributes()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9f985ceb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['tango://databaseds:10000/stat/recv/1/version_r',\n", + " 'tango://databaseds:10000/stat/recv/1/opcua_missing_attributes_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_green_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_green_on_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_red_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_red_on_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_mask_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pcb_id_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pcb_number_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pcb_version_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_1v8_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_2v5_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_3v3_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_analog_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_digital_on_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_pwr_good_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_temp_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recvtr_i2c_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recvtr_monitor_rate_rw',\n", + " 'tango://databaseds:10000/stat/recv/1/recvtr_translator_busy_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_led_colour_r',\n", + " 'tango://databaseds:10000/stat/recv/1/rcu_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recv_iout_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recv_temp_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/recv_vout_error_r',\n", + " 'tango://databaseds:10000/stat/recv/1/state',\n", + " 'tango://databaseds:10000/stat/recv/1/status']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Given a name pattern, return a list of archived attributes\n", + "device_name = 'STAT/RECV/1'\n", + "reader.get_attributes(pattern=f'*{device_name}*'.lower())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "5517c508", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check if an attribute is archived\n", + "attr_name = 'rcu_mask_rw'\n", + "reader.is_attribute_archived(f'{device_name}/{attr_name}'.lower())" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "740064f3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Return the list of the last n value for a given attribute(s)\n", + "# ! Cannot figure out why it does not work ... on the other hand, the relative code \n", + "# in the next cell works!\n", + "a = 'tango://databaseds:10000/stat/sdp/1/fpga_temp_r'\n", + "columns = [\"value_r\", \"value_w\", \"quality\", \"att_error_desc_id\"]\n", + "reader.get_last_attributes_values(attributes=a,columns=columns,n=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d48fe536", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(datetime.datetime(2022, 3, 9, 12, 0, 27, 686930, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 1),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 34, 497576, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 23, 838368, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2)]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reader._cursor.execute(\"SELECT att_conf_id, table_name, att_name FROM att_conf WHERE att_name LIKE %s;\", ('%'+a+'%',))\n", + "att_id = reader._cursor.fetchall()\n", + "\n", + "reader._cursor.execute(f\"SELECT data_time, value_r, value_w, quality, att_error_desc_id FROM {att_id[0][1]} WHERE att_conf_id={att_id[0][0]} ORDER BY data_time DESC LIMIT 3\")\n", + "reader._cursor.fetchall()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "fcab2a21", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(datetime.datetime(2022, 3, 9, 12, 0, 27, 686930, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 1),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 34, 497576, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 23, 838368, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 23, 401983, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 12, 908590, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 12, 398194, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 1, 974671, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 38, 1, 400801, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 51, 57525, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 50, 398277, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 40, 124000, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 39, 402424, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 29, 194141, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 28, 403995, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 18, 325812, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 17, 414731, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 7, 423699, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 37, 6, 406963, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 56, 399116, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 55, 406792, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 45, 491806, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 44, 401894, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 34, 594970, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 33, 385793, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 23, 718610, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 23, 402214, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 12, 785296, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 12, 392858, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 1, 840443, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 36, 1, 404531, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 50, 913943, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 50, 401988, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 39, 984898, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 39, 393043, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 29, 69789, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 28, 409644, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 18, 114191, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 17, 388089, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 7, 192311, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 35, 6, 400084, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 56, 295447, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 55, 390150, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 45, 458677, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 44, 386107, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 34, 598981, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 33, 384623, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 23, 717252, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 22, 394157, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 12, 660277, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 11, 390295, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 1, 641750, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 34, 0, 385438, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 33, 50, 633679, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 33, 49, 396047, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 33, 39, 494091, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 33, 38, 392001, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 33, 27, 532083, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 33, 7, 927971, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 1),\n", + " (datetime.datetime(2022, 3, 8, 15, 31, 15, 82880, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 31, 4, 961433, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 31, 4, 405487, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 30, 54, 841743, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 30, 54, 402356, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 30, 44, 727440, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 2),\n", + " (datetime.datetime(2022, 3, 8, 15, 30, 44, 400452, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 30, 33, 414200, tzinfo=datetime.timezone.utc),\n", + " [0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0],\n", + " None,\n", + " 0,\n", + " None),\n", + " (datetime.datetime(2022, 3, 8, 15, 30, 15, 378183, tzinfo=datetime.timezone.utc),\n", + " None,\n", + " None,\n", + " 1,\n", + " 1)]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the last attribute values given a start date and optionally a stop date\n", + "reader.get_attribute_values(a, start_date='2022-03-08 00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "StationControl", + "language": "python", + "name": "stationcontrol" + }, + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tangostationcontrol/tangostationcontrol/toolkit/libhdbpp-python b/tangostationcontrol/tangostationcontrol/toolkit/libhdbpp-python new file mode 160000 index 0000000000000000000000000000000000000000..7f3168261290109d64057fd526827bf33089774f --- /dev/null +++ b/tangostationcontrol/tangostationcontrol/toolkit/libhdbpp-python @@ -0,0 +1 @@ +Subproject commit 7f3168261290109d64057fd526827bf33089774f diff --git a/tangostationcontrol/tox.ini b/tangostationcontrol/tox.ini index 97d91f8b083b7774a2b3a60cf8fa254572fa70f5..0dd2a01453d6e5d8a10cbf155df9408eae3a78d5 100644 --- a/tangostationcontrol/tox.ini +++ b/tangostationcontrol/tox.ini @@ -78,4 +78,4 @@ commands = [flake8] filename = *.py,.stestr.conf,.txt select = W292,B601,B602,T100,M001,F401,B001,B002,B003,B004,B005,B006,B007,B008,B009,B010,B011,B012,B013,B014.B015,B016,B017,B018 -exclude=.tox,.egg-info +exclude=.tox,.egg-info,libhdbpp-python