From 558ee9f1d27a919eefee1fdc5920c305d213c4d5 Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Fri, 7 Jul 2023 08:52:14 +0000
Subject: [PATCH] L2SS-1316: Added antenna_field selection to observation.
 Renamed /1 devices to /HBA

---
 .gitlab-ci.yml                                |  2 +
 CDB/LOFAR_ConfigDb.json                       | 65 +++++++------------
 .../digitalbeam_cluster_ConfigDb.json         | 38 +++++------
 .../tilebeam_cluster_ConfigDb.json            | 13 ----
 CDB/stations/LTS_ConfigDb.json                | 10 +--
 CDB/stations/simulators_ConfigDb.json         | 12 ++--
 docker-compose/device-antennafield.yml        |  2 +-
 docker-compose/device-aps.yml                 |  2 +-
 docker-compose/device-apsct.yml               |  2 +-
 docker-compose/device-apspu.yml               |  2 +-
 docker-compose/device-beamlet.yml             |  2 +-
 docker-compose/device-boot.yml                |  2 +-
 docker-compose/device-bst.yml                 |  2 +-
 docker-compose/device-calibration.yml         |  2 +-
 docker-compose/device-ccd.yml                 |  2 +-
 docker-compose/device-configuration.yml       |  2 +-
 docker-compose/device-digitalbeam.yml         |  2 +-
 docker-compose/device-docker.yml              |  2 +-
 docker-compose/device-ec.yml                  |  2 +-
 docker-compose/device-observation-control.yml |  2 +-
 docker-compose/device-pcon.yml                |  2 +-
 docker-compose/device-psoc.yml                |  2 +-
 docker-compose/device-recvh.yml               |  2 +-
 docker-compose/device-recvl.yml               |  2 +-
 docker-compose/device-sdp.yml                 |  2 +-
 docker-compose/device-sdpfirmware.yml         |  2 +-
 docker-compose/device-sst.yml                 |  2 +-
 docker-compose/device-station-manager.yml     |  2 +-
 docker-compose/device-temperature-manager.yml |  2 +-
 docker-compose/device-tilebeam.yml            |  2 +-
 docker-compose/device-unb2.yml                |  2 +-
 docker-compose/device-xst.yml                 |  2 +-
 .../definitions/observation-settings.json     | 12 ++++
 .../configDB/LOFAR_ConfigDb.json              | 12 ++--
 .../configDB/simulators_ConfigDb.json         | 12 ++--
 .../interfaces/test_power_hierarchy.py        |  6 +-
 .../devices/test_device_antennafield.py       |  6 +-
 .../default/devices/test_device_beamlet.py    |  4 +-
 .../default/devices/test_device_bst.py        |  4 +-
 .../devices/test_device_calibration.py        |  6 +-
 .../devices/test_device_digitalbeam.py        |  6 +-
 .../devices/test_device_observation.py        |  6 +-
 .../test_device_observation_control.py        |  6 +-
 .../default/devices/test_device_sdp.py        |  2 +-
 .../devices/test_device_sdpfirmware.py        |  2 +-
 .../default/devices/test_device_sst.py        |  6 +-
 .../test_device_temperature_manager.py        |  4 +-
 .../default/devices/test_device_xst.py        |  4 +-
 .../default/devices/test_observation.py       |  4 +-
 .../test_tango_prometheus_client.py           | 10 ++-
 .../test_digitalbeam_performance.py           |  8 +--
 .../test_tilebeam_performance.py              |  6 +-
 tangostationcontrol/requirements.txt          |  2 +-
 .../configuration/observation_settings.py     |  4 ++
 .../tangostationcontrol/devices/boot.py       | 12 ++--
 .../devices/interfaces/hierarchy.py           |  8 ++-
 .../devices/observation.py                    | 20 ++++--
 .../devices/sdp/beamlet.py                    |  2 +-
 .../devices/sdp/digitalbeam.py                |  2 +-
 .../devices/temperature_manager.py            |  2 +-
 .../test/devices/test_observation_base.py     |  1 +
 .../common/test_observation_controller.py     |  1 +
 .../test/configuration/_mock_requests.py      |  4 ++
 .../test_observation_settings.py              | 36 ++++++----
 64 files changed, 216 insertions(+), 196 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1f25acdf1..8bbc48ec8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -417,6 +417,8 @@ integration_test_docker:
         echo "Saving log for container $container"
         docker logs "${container}" >& "log/${container}.log"
       done
+    #    Collect content of the TangoDB
+    - $CI_PROJECT_DIR/bin/dump_ConfigDb.sh >& log/dump_ConfigDb.log
   artifacts:
     when: always
     paths:
diff --git a/CDB/LOFAR_ConfigDb.json b/CDB/LOFAR_ConfigDb.json
index fa6f9b91b..8e4cbe065 100644
--- a/CDB/LOFAR_ConfigDb.json
+++ b/CDB/LOFAR_ConfigDb.json
@@ -23,7 +23,6 @@
                 "STAT/CCD/1",
                 "STAT/PSOC/1",
                 "STAT/AntennaField/HBA",
-                "STAT/AntennaField/LBA",
                 "STAT/PCON/1",
                 "STAT/ObservationControl/1",
                 "STAT/TemperatureManager/1",
@@ -110,20 +109,12 @@
           "STAT/AntennaField/HBA": {
             "properties": {
               "Control_Children": [
-                "STAT/SDPFirmware/1",
+                "STAT/SDPFirmware/HBA",
                 "STAT/TileBeam/HBA",
                 "STAT/DigitalBeam/HBA",
                 "STAT/APS/H0"
               ]
             }
-          },
-          "STAT/AntennaField/LBA": {
-            "properties": {
-              "Control_Children": [
-                "STAT/SDPFirmware/1",
-                "STAT/APS/L0"
-              ]
-            }
           }
         }
       }
@@ -163,7 +154,7 @@
               ],
               "Power_Children": [
                 "STAT/CCD/1",
-                "STAT/SDPFirmware/1"
+                "STAT/SDPFirmware/HBA"
               ]
             }
           }
@@ -215,8 +206,8 @@
                 "RECVL, RECV_TEMP_error_R"
               ],
               "Shutdown_Device_List": [
-                "STAT/SDPFirmware/1",
-                "STAT/SDP/1",
+                "STAT/SDPFirmware/HBA",
+                "STAT/SDP/HBA",
                 "STAT/UNB2/1",
                 "STAT/RECVH/1",
                 "STAT/RECVL/1",
@@ -242,14 +233,14 @@
         "DigitalBeam": {
           "STAT/DigitalBeam/HBA": {
             "properties": {
+              "Control_Children": [
+                "STAT/Beamlet/HBA"
+              ],
               "Beam_tracking_interval": [
                 "1.0"
               ],
               "Beam_tracking_preparation_period": [
                 "0.5"
-              ],
-              "Control_Children": [
-                "STAT/Beamlet/1"
               ]
             }
           }
@@ -259,7 +250,7 @@
     "Beamlet": {
       "STAT": {
         "Beamlet": {
-          "STAT/Beamlet/1": {
+          "STAT/Beamlet/HBA": {
             "properties": {
               "FPGA_beamlet_output_hdr_eth_source_mac_RW_default": [
                 "00:22:86:08:00:00",
@@ -350,16 +341,6 @@
                 "STAT/RECVH/1"
               ]
             }
-          },
-          "STAT/APS/L0": {
-            "properties": {
-              "Control_Children": [
-                "STAT/APSCT/1",
-                "STAT/APSPU/1",
-                "STAT/UNB2/1",
-                "STAT/RECVL/1"
-              ]
-            }
           }
         }
       }
@@ -407,19 +388,20 @@
     "SDPFirmware": {
       "STAT": {
         "SDPFirmware": {
-          "STAT/SDPFirmware/1": {
+          "STAT/SDPFirmware/HBA": {
             "properties": {
               "Control_Children": [
-                "STAT/SDP/1",
-                "STAT/XST/1",
-                "STAT/SST/1",
-                "STAT/BST/1"
+                "STAT/SDP/HBA",
+                "STAT/XST/HBA",
+                "STAT/SST/HBA",
+                "STAT/BST/HBA"
               ],
               "Power_Children": [
-                "STAT/SDP/1",
-                "STAT/BST/1",
-                "STAT/SST/1",
-                "STAT/XST/1"
+                "STAT/SDP/HBA",
+                "STAT/BST/HBA",
+                "STAT/SST/HBA",
+                "STAT/XST/HBA",
+                "STAT/Beamlet/HBA"
               ]
             }
           }
@@ -429,11 +411,8 @@
     "SDP": {
       "STAT": {
         "SDP": {
-          "STAT/SDP/1": {
+          "STAT/SDP/HBA": {
             "properties": {
-              "Power_Children": [
-                "STAT/Beamlet/1"
-              ]
             }
           }
         }
@@ -442,7 +421,7 @@
     "BST": {
       "STAT": {
         "BST": {
-          "STAT/BST/1": {
+          "STAT/BST/HBA": {
             "properties": {
               "Statistics_Client_UDP_Port": [
                 "5003"
@@ -473,7 +452,7 @@
     "SST": {
       "STAT": {
         "SST": {
-          "STAT/SST/1": {
+          "STAT/SST/HBA": {
             "properties": {
               "Statistics_Client_UDP_Port": [
                 "5001"
@@ -507,7 +486,7 @@
     "XST": {
       "STAT": {
         "XST": {
-          "STAT/XST/1": {
+          "STAT/XST/HBA": {
             "properties": {
               "Statistics_Client_UDP_Port": [
                 "5002"
diff --git a/CDB/integrations/digitalbeam_cluster_ConfigDb.json b/CDB/integrations/digitalbeam_cluster_ConfigDb.json
index 21daaa805..17b7e675e 100644
--- a/CDB/integrations/digitalbeam_cluster_ConfigDb.json
+++ b/CDB/integrations/digitalbeam_cluster_ConfigDb.json
@@ -3,10 +3,10 @@
         "SDPFirmware":{
             "STAT": {
                 "SDPFirmware": {
-                    "STAT/SDPFirmware/1":{
+                    "STAT/SDPFirmware/HBA":{
                         "properties": {
                             "Control_Children": [
-                                "STAT/SDP/1"
+                                "STAT/SDP/HBA"
                             ],
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -18,14 +18,14 @@
                                 "5.0"
                             ],
                             "Power_Children": [
-                                "STAT/SDP/1"
+                                "STAT/SDP/HBA"
                             ]
                         }
                     },
-                    "STAT/SDPFirmware/2":{
+                    "STAT/SDPFirmware/LBA":{
                         "properties": {
                             "Control_Children": [
-                                "STAT/SDP/2"
+                                "STAT/SDP/LBA"
                             ],
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -37,7 +37,7 @@
                                 "5.0"
                             ],
                             "Power_Children": [
-                                "STAT/SDP/2"
+                                "STAT/SDP/LBA"
                             ]
                         }
                     }
@@ -47,7 +47,7 @@
         "SDP": {
             "STAT": {
                 "SDP": {
-                    "STAT/SDP/1": {
+                    "STAT/SDP/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -60,7 +60,7 @@
                             ]
                         }
                     },
-                    "STAT/SDP/2": {
+                    "STAT/SDP/LBA": {
                           "properties": {
                               "OPC_Server_Name": [
                                   "sdptr-sim"
@@ -79,10 +79,10 @@
         "Beamlet": {
             "STAT": {
                 "Beamlet": {
-                    "STAT/Beamlet/1": {
+                    "STAT/Beamlet/HBA": {
                         "properties": {
                             "SDP_device": [
-                                "STAT/SDP/1"
+                                "STAT/SDP/HBA"
                             ],
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -167,10 +167,10 @@
                             ]
                         }
                     },
-                    "STAT/Beamlet/2": {
+                    "STAT/Beamlet/LBA": {
                         "properties": {
                             "SDP_device": [
-                              "STAT/SDP/2"
+                              "STAT/SDP/LBA"
                             ],
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -303,7 +303,7 @@
                                 "STAT/AntennaField/HBA"
                             ],
                             "Beamlet_Device": [
-                                "STAT/Beamlet/1"
+                                "STAT/Beamlet/HBA"
                             ],
                             "Beam_tracking_interval": [
                                 "1.0"
@@ -312,7 +312,7 @@
                                 "0.5"
                             ],
                             "Control_Children": [
-                                "STAT/Beamlet/1"
+                                "STAT/Beamlet/HBA"
                             ]
                         }
                     },
@@ -322,7 +322,7 @@
                                 "STAT/AntennaField/LBA"
                             ],
                             "Beamlet_Device": [
-                                "STAT/Beamlet/2"
+                                "STAT/Beamlet/LBA"
                             ],
                             "Beam_tracking_interval": [
                                 "1.0"
@@ -331,7 +331,7 @@
                                 "0.5"
                             ],
                             "Control_Children": [
-                                "STAT/Beamlet/2"
+                                "STAT/Beamlet/LBA"
                             ]
                         }
                     }
@@ -344,7 +344,7 @@
                     "STAT/AntennaField/LBA": {
                         "properties": {
                               "Control_Children": [
-                                "STAT/SDPFirmware/2",
+                                "STAT/SDPFirmware/LBA",
                                 "STAT/digitalbeam/LBA",
                                 "STAT/RECVL/1",
                                 "STAT/RECVL/2"
@@ -558,8 +558,8 @@
                     "STAT/AntennaField/HBA": {
                         "properties": {
                             "Control_Children": [
-                                "STAT/SDPFirmware/1",
-                                "STAT/digitalbeam/HBA",
+                                "STAT/SDPFirmware/HBA",
+                                "STAT/DigitalBeam/HBA",
                                 "STAT/RECVH/1",
                                 "STAT/RECVH/2"
                             ],
diff --git a/CDB/integrations/tilebeam_cluster_ConfigDb.json b/CDB/integrations/tilebeam_cluster_ConfigDb.json
index d334521b2..f9fe278be 100644
--- a/CDB/integrations/tilebeam_cluster_ConfigDb.json
+++ b/CDB/integrations/tilebeam_cluster_ConfigDb.json
@@ -579,19 +579,6 @@
                     }
                 }
             }
-        },
-        "SDPFirmware":{
-            "STAT": {
-                "SDPFirmware": {
-                    "STAT/SDPFirmware/1":{
-                        "properties": {
-                            "Control_Children": [
-                                "STAT/SDP/1"
-                            ]
-                        }
-                    }
-                }
-            }
         }
     }
 }
diff --git a/CDB/stations/LTS_ConfigDb.json b/CDB/stations/LTS_ConfigDb.json
index a6af15dbd..65333660b 100644
--- a/CDB/stations/LTS_ConfigDb.json
+++ b/CDB/stations/LTS_ConfigDb.json
@@ -147,7 +147,7 @@
         "SDPFirmware":{
             "STAT": {
                 "SDPFirmware": {
-                    "STAT/SDPFirmware/1": {
+                    "STAT/SDPFirmware/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "dop369.astron.nl"
@@ -172,7 +172,7 @@
         "SDP": {
             "STAT": {
                 "SDP": {
-                    "STAT/SDP/1": {
+                    "STAT/SDP/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "dop369.astron.nl"
@@ -209,7 +209,7 @@
         "BST": {
             "STAT": {
                 "BST": {
-                    "STAT/BST/1": {
+                    "STAT/BST/HBA": {
                         "properties": {
                             "Statistics_Client_UDP_Port": [
                                 "5003"
@@ -288,7 +288,7 @@
         "SST": {
             "STAT": {
                 "SST": {
-                    "STAT/SST/1": {
+                    "STAT/SST/HBA": {
                         "properties": {
                             "Statistics_Client_UDP_Port": [
                                 "5001"
@@ -367,7 +367,7 @@
         "XST": {
             "STAT": {
                 "XST": {
-                    "STAT/XST/1": {
+                    "STAT/XST/HBA": {
                         "properties": {
                             "Statistics_Client_UDP_Port": [
                                 "5002"
diff --git a/CDB/stations/simulators_ConfigDb.json b/CDB/stations/simulators_ConfigDb.json
index 3342f9bef..e298e70ae 100644
--- a/CDB/stations/simulators_ConfigDb.json
+++ b/CDB/stations/simulators_ConfigDb.json
@@ -99,7 +99,7 @@
         "Beamlet": {
             "STAT": {
                 "Beamlet": {
-                    "STAT/Beamlet/1": {
+                    "STAT/Beamlet/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -238,7 +238,7 @@
         "SDPFirmware": {
             "STAT": {
                 "SDPFirmware": {
-                    "STAT/SDPFirmware/1": {
+                    "STAT/SDPFirmware/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -257,7 +257,7 @@
         "SDP": {
             "STAT": {
                 "SDP": {
-                    "STAT/SDP/1": {
+                    "STAT/SDP/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -276,7 +276,7 @@
         "BST": {
             "STAT": {
                 "BST": {
-                    "STAT/BST/1": {
+                    "STAT/BST/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -331,7 +331,7 @@
         "SST": {
             "STAT": {
                 "SST": {
-                    "STAT/SST/1": {
+                    "STAT/SST/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -386,7 +386,7 @@
         "XST": {
             "STAT": {
                 "XST": {
-                    "STAT/XST/1": {
+                    "STAT/XST/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
diff --git a/docker-compose/device-antennafield.yml b/docker-compose/device-antennafield.yml
index b1f4dc6c0..21461e4ec 100644
--- a/docker-compose/device-antennafield.yml
+++ b/docker-compose/device-antennafield.yml
@@ -40,7 +40,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5815
       - TANGO_ZMQ_HEARTBEAT_PORT=5915
     healthcheck:
-      test: l2ss-health STAT/AntennaField/HBA
+      test: l2ss-health dserver/AntennaField/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-aps.yml b/docker-compose/device-aps.yml
index 5944909d5..6094efb52 100644
--- a/docker-compose/device-aps.yml
+++ b/docker-compose/device-aps.yml
@@ -31,7 +31,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5828
       - TANGO_ZMQ_HEARTBEAT_PORT=5928
     healthcheck:
-      test: l2ss-health STAT/APS/H0
+      test: l2ss-health dserver/APS/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-apsct.yml b/docker-compose/device-apsct.yml
index 57a90c10c..921c4cfa5 100644
--- a/docker-compose/device-apsct.yml
+++ b/docker-compose/device-apsct.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5809
       - TANGO_ZMQ_HEARTBEAT_PORT=5909
     healthcheck:
-      test: l2ss-health STAT/Apsct/1
+      test: l2ss-health dserver/APSCT/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-apspu.yml b/docker-compose/device-apspu.yml
index 5e2de1a66..88752625b 100644
--- a/docker-compose/device-apspu.yml
+++ b/docker-compose/device-apspu.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5810
       - TANGO_ZMQ_HEARTBEAT_PORT=5910
     healthcheck:
-      test: l2ss-health STAT/Apspu/1
+      test: l2ss-health dserver/APSPU/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-beamlet.yml b/docker-compose/device-beamlet.yml
index def12d9ab..b998eaf7e 100644
--- a/docker-compose/device-beamlet.yml
+++ b/docker-compose/device-beamlet.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5812
       - TANGO_ZMQ_HEARTBEAT_PORT=5912
     healthcheck:
-      test: l2ss-health STAT/Beamlet/1
+      test: l2ss-health dserver/Beamlet/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-boot.yml b/docker-compose/device-boot.yml
index 5c4a58689..77585f8da 100644
--- a/docker-compose/device-boot.yml
+++ b/docker-compose/device-boot.yml
@@ -38,7 +38,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5808
       - TANGO_ZMQ_HEARTBEAT_PORT=5908
     healthcheck:
-      test: l2ss-health STAT/BOOT/1
+      test: l2ss-health dserver/BOOT/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-bst.yml b/docker-compose/device-bst.yml
index 0f4a39eeb..e199b3dba 100644
--- a/docker-compose/device-bst.yml
+++ b/docker-compose/device-bst.yml
@@ -46,7 +46,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5817
       - TANGO_ZMQ_HEARTBEAT_PORT=5917
     healthcheck:
-      test: l2ss-health STAT/BST/1
+      test: l2ss-health dserver/BST/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-calibration.yml b/docker-compose/device-calibration.yml
index 3ff6353c5..7c7388660 100644
--- a/docker-compose/device-calibration.yml
+++ b/docker-compose/device-calibration.yml
@@ -41,7 +41,7 @@ services:
       - MINIO_ROOT_USER=${MINIO_ROOT_USER}
       - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
     healthcheck:
-      test: l2ss-health STAT/Calibration/1
+      test: l2ss-health dserver/Calibration/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-ccd.yml b/docker-compose/device-ccd.yml
index 4e2810dda..1621c7257 100644
--- a/docker-compose/device-ccd.yml
+++ b/docker-compose/device-ccd.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5821
       - TANGO_ZMQ_HEARTBEAT_PORT=5921
     healthcheck:
-      test: l2ss-health STAT/CCD/1
+      test: l2ss-health dserver/CCD/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-configuration.yml b/docker-compose/device-configuration.yml
index 346a999a5..d3dbeb273 100644
--- a/docker-compose/device-configuration.yml
+++ b/docker-compose/device-configuration.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5822
       - TANGO_ZMQ_HEARTBEAT_PORT=5922
     healthcheck:
-      test: l2ss-health STAT/Configuration/1
+      test: l2ss-health dserver/Configuration/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-digitalbeam.yml b/docker-compose/device-digitalbeam.yml
index 766c4317d..e6ba98a0e 100644
--- a/docker-compose/device-digitalbeam.yml
+++ b/docker-compose/device-digitalbeam.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5813
       - TANGO_ZMQ_HEARTBEAT_PORT=5913
     healthcheck:
-      test: l2ss-health STAT/DigitalBeam/HBA
+      test: l2ss-health dserver/DigitalBeam/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-docker.yml b/docker-compose/device-docker.yml
index bf51663ae..9ef0917b0 100644
--- a/docker-compose/device-docker.yml
+++ b/docker-compose/device-docker.yml
@@ -41,7 +41,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5805
       - TANGO_ZMQ_HEARTBEAT_PORT=5905
     healthcheck:
-      test: l2ss-health STAT/Docker/1
+      test: l2ss-health dserver/Docker/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-ec.yml b/docker-compose/device-ec.yml
index cdb95022b..48e015f2a 100644
--- a/docker-compose/device-ec.yml
+++ b/docker-compose/device-ec.yml
@@ -34,7 +34,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5829
       - TANGO_ZMQ_HEARTBEAT_PORT=5929
     healthcheck:
-      test: l2ss-health STAT/ec/1
+      test: l2ss-health dserver/ec/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-observation-control.yml b/docker-compose/device-observation-control.yml
index f5fcaa1a6..baf3b68c7 100644
--- a/docker-compose/device-observation-control.yml
+++ b/docker-compose/device-observation-control.yml
@@ -38,7 +38,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5803
       - TANGO_ZMQ_HEARTBEAT_PORT=5903
     healthcheck:
-      test: l2ss-health STAT/ObservationControl/1
+      test: l2ss-health dserver/ObservationControl/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-pcon.yml b/docker-compose/device-pcon.yml
index 093c22c10..e5b9d1d30 100644
--- a/docker-compose/device-pcon.yml
+++ b/docker-compose/device-pcon.yml
@@ -34,7 +34,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5820
       - TANGO_ZMQ_HEARTBEAT_PORT=5920
     healthcheck:
-      test: l2ss-health STAT/pcon/1
+      test: l2ss-health dserver/pcon/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-psoc.yml b/docker-compose/device-psoc.yml
index 3610a7e34..ab8ee4388 100644
--- a/docker-compose/device-psoc.yml
+++ b/docker-compose/device-psoc.yml
@@ -34,7 +34,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5819
       - TANGO_ZMQ_HEARTBEAT_PORT=5919
     healthcheck:
-      test: l2ss-health STAT/PSOC/1
+      test: l2ss-health dserver/PSOC/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-recvh.yml b/docker-compose/device-recvh.yml
index f23371840..0f16da4f6 100644
--- a/docker-compose/device-recvh.yml
+++ b/docker-compose/device-recvh.yml
@@ -31,7 +31,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5825
       - TANGO_ZMQ_HEARTBEAT_PORT=5925
     healthcheck:
-      test: l2ss-health STAT/RECVH/1
+      test: l2ss-health dserver/RECVH/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-recvl.yml b/docker-compose/device-recvl.yml
index 67d098e2f..f6c905623 100644
--- a/docker-compose/device-recvl.yml
+++ b/docker-compose/device-recvl.yml
@@ -31,7 +31,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5826
       - TANGO_ZMQ_HEARTBEAT_PORT=5926
     healthcheck:
-      test: l2ss-health STAT/RECVL/1
+      test: l2ss-health dserver/RECVL/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml
index e47185925..52bb3d72c 100644
--- a/docker-compose/device-sdp.yml
+++ b/docker-compose/device-sdp.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5801
       - TANGO_ZMQ_HEARTBEAT_PORT=5901
     healthcheck:
-      test: l2ss-health STAT/SDP/1
+      test: l2ss-health dserver/SDP/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-sdpfirmware.yml b/docker-compose/device-sdpfirmware.yml
index b643bb0b0..731c975ab 100644
--- a/docker-compose/device-sdpfirmware.yml
+++ b/docker-compose/device-sdpfirmware.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5827
       - TANGO_ZMQ_HEARTBEAT_PORT=5927
     healthcheck:
-      test: l2ss-health STAT/SDPFirmware/1
+      test: l2ss-health dserver/SDPFirmware/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-sst.yml b/docker-compose/device-sst.yml
index 8020af212..b1712b91d 100644
--- a/docker-compose/device-sst.yml
+++ b/docker-compose/device-sst.yml
@@ -46,7 +46,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5802
       - TANGO_ZMQ_HEARTBEAT_PORT=5902
     healthcheck:
-      test: l2ss-health STAT/SST/1
+      test: l2ss-health dserver/SST/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-station-manager.yml b/docker-compose/device-station-manager.yml
index fb27bec2d..f35e7f1e9 100644
--- a/docker-compose/device-station-manager.yml
+++ b/docker-compose/device-station-manager.yml
@@ -34,7 +34,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5823
       - TANGO_ZMQ_HEARTBEAT_PORT=5923
     healthcheck:
-      test: l2ss-health STAT/StationManager/1
+      test: l2ss-health dserver/StationManager/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-temperature-manager.yml b/docker-compose/device-temperature-manager.yml
index a62613803..14c8f3bb6 100644
--- a/docker-compose/device-temperature-manager.yml
+++ b/docker-compose/device-temperature-manager.yml
@@ -34,7 +34,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5816
       - TANGO_ZMQ_HEARTBEAT_PORT=5916
     healthcheck:
-      test: l2ss-health STAT/TemperatureManager/1
+      test: l2ss-health dserver/TemperatureManager/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-tilebeam.yml b/docker-compose/device-tilebeam.yml
index 5f36c7b30..ecad1f162 100644
--- a/docker-compose/device-tilebeam.yml
+++ b/docker-compose/device-tilebeam.yml
@@ -35,7 +35,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5811
       - TANGO_ZMQ_HEARTBEAT_PORT=5911
     healthcheck:
-      test: l2ss-health STAT/TileBeam/HBA
+      test: l2ss-health dserver/TileBeam/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-unb2.yml b/docker-compose/device-unb2.yml
index fdfa1938e..9377bc0c6 100644
--- a/docker-compose/device-unb2.yml
+++ b/docker-compose/device-unb2.yml
@@ -39,7 +39,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5804
       - TANGO_ZMQ_HEARTBEAT_PORT=5904
     healthcheck:
-      test: l2ss-health STAT/UNB2/1
+      test: l2ss-health dserver/UNB2/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/device-xst.yml b/docker-compose/device-xst.yml
index bb9a3e6d4..104472ebf 100644
--- a/docker-compose/device-xst.yml
+++ b/docker-compose/device-xst.yml
@@ -46,7 +46,7 @@ services:
       - TANGO_ZMQ_EVENT_PORT=5806
       - TANGO_ZMQ_HEARTBEAT_PORT=5906
     healthcheck:
-      test: l2ss-health STAT/XST/1
+      test: l2ss-health dserver/XST/STAT
       interval: 1m
       timeout: 30s
       retries: 3
diff --git a/docker-compose/http-json-schemas/definitions/observation-settings.json b/docker-compose/http-json-schemas/definitions/observation-settings.json
index 7e0aef69c..2162b6007 100644
--- a/docker-compose/http-json-schemas/definitions/observation-settings.json
+++ b/docker-compose/http-json-schemas/definitions/observation-settings.json
@@ -4,6 +4,7 @@
   "required": [
     "observation_id",
     "stop_time",
+    "antenna_field",
     "antenna_set",
     "filter",
     "SAPs"
@@ -17,6 +18,17 @@
       "type": "string",
       "format": "date-time"
     },
+    "antenna_field": {
+      "default": "HBA",
+      "description": "Antenna field to use",
+      "type": "string",
+      "enum": [
+        "LBA",
+        "HBA",
+        "HBA0",
+        "HBA1"
+      ]
+    },
     "antenna_set": {
       "default": "ALL",
       "description": "Fields & antennas to use",
diff --git a/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json b/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json
index d569a7f99..799763fc6 100644
--- a/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json
+++ b/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json
@@ -101,7 +101,7 @@
                                 "RECVL, RECV_TEMP_error_R"
                             ],
                             "Shutdown_Device_List":[
-                                "STAT/SDP/1", "STAT/UNB2/1", "STAT/RECVH/1", "STAT/RECVL/1", "STAT/APSCT/1", "STAT/CCD/1", "STAT/APSPU/1"
+                                "STAT/SDP/HBA", "STAT/UNB2/1", "STAT/RECVH/1", "STAT/RECVL/1", "STAT/APSCT/1", "STAT/CCD/1", "STAT/APSPU/1"
                             ]
                         }
                     }
@@ -119,7 +119,7 @@
         "Beamlet": {
             "STAT": {
                 "Beamlet": {
-                    "STAT/Beamlet/1": {
+                    "STAT/Beamlet/HBA": {
                         "properties": {
                             "FPGA_beamlet_output_hdr_eth_source_mac_RW_default": [
                                 "00:22:86:08:00:00",
@@ -274,7 +274,7 @@
         "SDP": {
             "STAT": {
                 "SDP": {
-                    "STAT/SDP/1": {
+                    "STAT/SDP/HBA": {
                         "properties": {
                         }
                     }
@@ -284,7 +284,7 @@
         "BST": {
             "STAT": {
                 "BST": {
-                    "STAT/BST/1": {
+                    "STAT/BST/HBA": {
                         "properties": {
                             "Statistics_Client_UDP_Port": [
                                 "5003"
@@ -318,7 +318,7 @@
         "SST": {
             "STAT": {
                 "SST": {
-                    "STAT/SST/1": {
+                    "STAT/SST/HBA": {
                         "properties": {
                             "Statistics_Client_UDP_Port": [
                                 "5001"
@@ -352,7 +352,7 @@
         "XST": {
             "STAT": {
                 "XST": {
-                    "STAT/XST/1": {
+                    "STAT/XST/HBA": {
                         "properties": {
                             "Statistics_Client_UDP_Port": [
                                 "5002"
diff --git a/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json b/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json
index 4d7cc3644..ec768aa28 100644
--- a/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json
+++ b/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json
@@ -73,7 +73,7 @@
         "Beamlet": {
             "STAT": {
                 "Beamlet": {
-                    "STAT/Beamlet/1": {
+                    "STAT/Beamlet/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -186,7 +186,7 @@
         "SDPFirmware": {
             "STAT": {
                 "SDPFirmware": {
-                    "STAT/SDPFirmware/1": {
+                    "STAT/SDPFirmware/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -205,7 +205,7 @@
         "SDP": {
             "STAT": {
                 "SDP": {
-                    "STAT/SDP/1": {
+                    "STAT/SDP/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -224,7 +224,7 @@
         "BST": {
             "STAT": {
                 "BST": {
-                    "STAT/BST/1": {
+                    "STAT/BST/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -279,7 +279,7 @@
         "SST": {
             "STAT": {
                 "SST": {
-                    "STAT/SST/1": {
+                    "STAT/SST/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
@@ -334,7 +334,7 @@
         "XST": {
             "STAT": {
                 "XST": {
-                    "STAT/XST/1": {
+                    "STAT/XST/HBA": {
                         "properties": {
                             "OPC_Server_Name": [
                                 "sdptr-sim"
diff --git a/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py b/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py
index 8fcb8592c..8e6cbd04d 100644
--- a/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py
+++ b/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py
@@ -24,12 +24,12 @@ class TestPowerHierarchy(base.IntegrationTestCase):
     ccd_name = "STAT/CCD/1"
     pcon_name = "STAT/PCON/1"
     psoc_name = "STAT/PSOC/1"
-    sdp_name = "STAT/SDP/1"
+    sdp_name = "STAT/SDP/HBA"
     unb2_name = "STAT/UNB2/1"
     recvh_name = "STAT/RECVH/1"
     recvl_name = "STAT/RECVL/1"
-    sdp_name = "STAT/SDP/1"
-    sdpfirmware_name = "STAT/SDPFirmware/1"
+    sdp_name = "STAT/SDP/HBA"
+    sdpfirmware_name = "STAT/SDPFirmware/HBA"
 
     def setUp(self):
         super().setUp()
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py b/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py
index 084798625..85c81dc5d 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py
@@ -61,7 +61,7 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
 
     @staticmethod
     def shutdown_sdp():
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
 
     def setup_recv_proxy(self):
@@ -74,14 +74,14 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase):
 
     def setup_sdpfirmware_proxy(self):
         # setup SDPFirmware
-        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1")
+        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA")
         sdpfirmware_proxy.off()
         sdpfirmware_proxy.warm_boot()
         return sdpfirmware_proxy
 
     def setup_sdp_proxy(self):
         # setup SDP
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         return sdp_proxy
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py b/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py
index 3e6bb3d09..02814dcbe 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py
@@ -22,7 +22,7 @@ from integration_test.default.devices.base import AbstractTestBases
 class TestDeviceBeamlet(AbstractTestBases.TestDeviceBase):
     def setUp(self):
         """Intentionally recreate the device object in each test"""
-        super().setUp("STAT/Beamlet/1")
+        super().setUp("STAT/Beamlet/HBA")
 
     def test_device_read_all_attributes(self):
         # We need to connect to SDP first to read some of our attributes
@@ -32,7 +32,7 @@ class TestDeviceBeamlet(AbstractTestBases.TestDeviceBase):
 
     def setup_sdp(self, antenna_type="HBA", clock=CLK_200_MHZ):
         # setup SDP, on which this device depends
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         sdp_proxy.set_defaults()
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_bst.py b/tangostationcontrol/integration_test/default/devices/test_device_bst.py
index aadefbc35..c4a08d430 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_bst.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_bst.py
@@ -8,7 +8,7 @@ from integration_test.default.devices.base import AbstractTestBases
 class TestDeviceBST(AbstractTestBases.TestDeviceBase):
     def setUp(self):
         """Intentionally recreate the device object in each test"""
-        super().setUp("STAT/BST/1")
+        super().setUp("STAT/BST/HBA")
 
     def test_device_read_all_attributes(self):
         # We need to connect to SDP first to read some of our attributes
@@ -18,7 +18,7 @@ class TestDeviceBST(AbstractTestBases.TestDeviceBase):
 
     def setup_sdp(self):
         # setup SDP, on which this device depends
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         sdp_proxy.set_defaults()
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_calibration.py b/tangostationcontrol/integration_test/default/devices/test_device_calibration.py
index 7f9313d90..725d50a60 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_calibration.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_calibration.py
@@ -106,7 +106,7 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
 
     @staticmethod
     def shutdown_sdp():
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
 
     @staticmethod
@@ -127,14 +127,14 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
 
     def setup_sdpfirmware_proxy(self):
         # setup SDP
-        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1")
+        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA")
         sdpfirmware_proxy.off()
         sdpfirmware_proxy.warm_boot()
         return sdpfirmware_proxy
 
     def setup_sdp_proxy(self):
         # setup SDP
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         return sdp_proxy
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py b/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py
index 4fcbae3f1..76cfd79e1 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py
@@ -34,10 +34,10 @@ class TestDeviceDigitalBeam(AbstractTestBases.TestDeviceBase):
     antenna_use_ok = numpy.array([AntennaUse.AUTO] * MAX_ANTENNA)
 
     antennafield_iden = "STAT/AntennaField/HBA"
-    beamlet_iden = "STAT/Beamlet/1"
+    beamlet_iden = "STAT/Beamlet/HBA"
     recv_iden = "STAT/RECVH/1"
-    sdpfirmware_iden = "STAT/SDPFirmware/1"
-    sdp_iden = "STAT/SDP/1"
+    sdpfirmware_iden = "STAT/SDPFirmware/HBA"
+    sdp_iden = "STAT/SDP/HBA"
 
     def setUp(self):
         """Intentionally recreate the device object in each test"""
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_observation.py b/tangostationcontrol/integration_test/default/devices/test_device_observation.py
index 83332db52..4c41ef96d 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_observation.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_observation.py
@@ -140,14 +140,14 @@ class TestDeviceObservation(AbstractTestBases.TestDeviceBase):
 
     def setup_sdpfirmware_proxy(self):
         # setup SDPFirmware
-        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1")
+        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA")
         sdpfirmware_proxy.off()
         sdpfirmware_proxy.warm_boot()
         return sdpfirmware_proxy
 
     def setup_sdp_proxy(self):
         # setup SDP
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         return sdp_proxy
@@ -181,7 +181,7 @@ class TestDeviceObservation(AbstractTestBases.TestDeviceBase):
 
     def setup_beamlet_proxy(self):
         # setup Digitalbeam
-        beamlet_proxy = TestDeviceProxy("STAT/Beamlet/1")
+        beamlet_proxy = TestDeviceProxy("STAT/Beamlet/HBA")
         beamlet_proxy.off()
         beamlet_proxy.warm_boot()
         beamlet_proxy.set_defaults()
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py b/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py
index c570b79d3..1f27234f5 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py
@@ -136,14 +136,14 @@ class TestObservationControlDevice(AbstractTestBases.TestDeviceBase):
 
     def setup_sdpfirmware_proxy(self):
         # setup SDPFirmware
-        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1")
+        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA")
         sdpfirmware_proxy.off()
         sdpfirmware_proxy.warm_boot()
         return sdpfirmware_proxy
 
     def setup_sdp_proxy(self):
         # setup SDP
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         return sdp_proxy
@@ -166,7 +166,7 @@ class TestObservationControlDevice(AbstractTestBases.TestDeviceBase):
 
     def setup_beamlet_proxy(self):
         # setup Digitalbeam
-        beamlet_proxy = TestDeviceProxy("STAT/Beamlet/1")
+        beamlet_proxy = TestDeviceProxy("STAT/Beamlet/HBA")
         beamlet_proxy.off()
         beamlet_proxy.warm_boot()
         beamlet_proxy.set_defaults()
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_sdp.py b/tangostationcontrol/integration_test/default/devices/test_device_sdp.py
index bfcf1bb6a..ec89efef3 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_sdp.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_sdp.py
@@ -7,4 +7,4 @@ from integration_test.default.devices.base import AbstractTestBases
 class TestDeviceSDP(AbstractTestBases.TestDeviceBase):
     def setUp(self):
         """Intentionally recreate the device object in each test"""
-        super().setUp("STAT/SDP/1")
+        super().setUp("STAT/SDP/HBA")
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py b/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py
index deb9ef968..dfaf90301 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py
@@ -9,7 +9,7 @@ from integration_test.default.devices.base import AbstractTestBases
 class TestDeviceSDPFirmware(AbstractTestBases.TestDeviceBase):
     def setUp(self):
         """Intentionally recreate the device object in each test"""
-        super().setUp("STAT/SDPFirmware/1")
+        super().setUp("STAT/SDPFirmware/HBA")
 
     def test_device_sdpfirmware_read_attribute(self):
         """Test if we can read an attribute obtained over OPC-UA"""
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_sst.py b/tangostationcontrol/integration_test/default/devices/test_device_sst.py
index 9ad21fcbe..1f0781110 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_sst.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_sst.py
@@ -14,7 +14,7 @@ from integration_test.default.devices.base import AbstractTestBases
 class TestDeviceSST(AbstractTestBases.TestDeviceBase):
     def setUp(self):
         """Intentionally recreate the device object in each test"""
-        super().setUp("STAT/SST/1")
+        super().setUp("STAT/SST/HBA")
 
     def test_device_read_all_attributes(self):
         # We need to connect to SDP first to read some of our attributes
@@ -25,7 +25,7 @@ class TestDeviceSST(AbstractTestBases.TestDeviceBase):
 
     def setup_sdpfirmware(self):
         # setup SDP Firmware
-        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1")
+        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA")
         sdpfirmware_proxy.off()
         sdpfirmware_proxy.warm_boot()
         sdpfirmware_proxy.set_defaults()
@@ -33,7 +33,7 @@ class TestDeviceSST(AbstractTestBases.TestDeviceBase):
 
     def setup_sdp(self):
         # setup SDP, on which this device depends
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         sdp_proxy.set_defaults()
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py b/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py
index ac0484695..32bf3719c 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py
@@ -21,8 +21,8 @@ logger = logging.getLogger()
 
 
 class TestDeviceTemperatureManager(AbstractTestBases.TestDeviceBase):
-    sdp_name = "STAT/SDP/1"
-    sdp_firmware_name = "STAT/SDPFirmware/1"
+    sdp_name = "STAT/SDP/HBA"
+    sdp_firmware_name = "STAT/SDPFirmware/HBA"
     rcu2h_name = "STAT/RECVH/1"
     temperature_manager_name = "STAT/TemperatureManager/1"
 
diff --git a/tangostationcontrol/integration_test/default/devices/test_device_xst.py b/tangostationcontrol/integration_test/default/devices/test_device_xst.py
index 4b0811b2a..806f3148d 100644
--- a/tangostationcontrol/integration_test/default/devices/test_device_xst.py
+++ b/tangostationcontrol/integration_test/default/devices/test_device_xst.py
@@ -8,7 +8,7 @@ from integration_test.default.devices.base import AbstractTestBases
 class TestDeviceSST(AbstractTestBases.TestDeviceBase):
     def setUp(self):
         """Intentionally recreate the device object in each test"""
-        super().setUp("STAT/XST/1")
+        super().setUp("STAT/XST/HBA")
 
     def test_device_read_all_attributes(self):
         # We need to connect to SDP first to read some of our attributes
@@ -18,7 +18,7 @@ class TestDeviceSST(AbstractTestBases.TestDeviceBase):
 
     def setup_sdp(self):
         # setup SDP, on which this device depends
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         sdp_proxy.warm_boot()
         sdp_proxy.set_defaults()
diff --git a/tangostationcontrol/integration_test/default/devices/test_observation.py b/tangostationcontrol/integration_test/default/devices/test_observation.py
index 05b26a192..e262c512d 100644
--- a/tangostationcontrol/integration_test/default/devices/test_observation.py
+++ b/tangostationcontrol/integration_test/default/devices/test_observation.py
@@ -25,8 +25,8 @@ class TestObservation(base.IntegrationTestCase):
         # make sure any devices we depend on are also started
         for device in [
             "STAT/RECVH/1",
-            "STAT/SDP/1",
-            "STAT/Beamlet/1",
+            "STAT/SDP/HBA",
+            "STAT/Beamlet/HBA",
             "STAT/DigitalBeam/HBA",
             "STAT/TileBeam/HBA",
             "STAT/AntennaField/HBA",
diff --git a/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py b/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py
index e67423f9d..533366f5d 100644
--- a/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py
+++ b/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py
@@ -4,6 +4,7 @@
 import importlib
 import os
 import sys
+import fnmatch
 
 import numpy
 from tango import Database
@@ -70,9 +71,12 @@ class TestPrometheusClient(BaseIntegrationTestCase):
         config_retrieved_devices = [
             *policy.config["devices"].keys()
         ]  # list of device names from policy file
-        for d in config_retrieved_devices:
-            if "*" not in d:  # filter out wildcards
-                self.assertIn(d, policy_devices)
+
+        # any device in the db matching a key should be present
+        for d in db_devices:
+            for c in config_retrieved_devices:
+                if fnmatch.fnmatch(d.casefold(), c.casefold()):
+                    self.assertIn(d, policy_devices)
 
     def test_archiver_policy_attribute_list(self):
         """Test if the full set of archiving policy for the given device is retrieved"""
diff --git a/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py b/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py
index 0f92a29ee..0b48e86d4 100644
--- a/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py
+++ b/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py
@@ -37,10 +37,10 @@ class TestDigitalbeamPerformance(base.IntegrationTestCase):
         tracking=False,
     ):
         # Setup multi SDP / recv and separate hba / lba antennafield / digitalbeam
-        for i, item in enumerate(["HBA", "LBA"]):
-            sdpfirmware_proxies.append(TestDeviceProxy(f"STAT/SDPFirmware/{i + 1}"))
-            sdp_proxies.append(TestDeviceProxy(f"STAT/SDP/{i + 1}"))
-            beamlet_proxies.append(TestDeviceProxy(f"STAT/Beamlet/{i + 1}"))
+        for item in ["HBA", "LBA"]:
+            sdpfirmware_proxies.append(TestDeviceProxy(f"STAT/SDPFirmware/{item}"))
+            sdp_proxies.append(TestDeviceProxy(f"STAT/SDP/{item}"))
+            beamlet_proxies.append(TestDeviceProxy(f"STAT/Beamlet/{item}"))
             antenna_field_proxies.append(TestDeviceProxy(f"STAT/AntennaField/{item}"))
             beam_proxies.append(TestDeviceProxy(f"STAT/DigitalBeam/{item}"))
             recv_proxies.append(TestDeviceProxy(f"STAT/RECV{item[0]}/1"))
diff --git a/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py b/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py
index 247f1188e..8eda5ab52 100644
--- a/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py
+++ b/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py
@@ -40,14 +40,14 @@ class TestTilebeamPerformance(base.IntegrationTestCase):
         manager_proxy.put_property({"Control_Children": manager_children})
 
         # SDPFirmware and SDP must be ready before AntennaField
-        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1")
+        sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA")
         sdpfirmware_proxy.off()
         self.assertTrue(sdpfirmware_proxy.state() is DevState.OFF)
         sdpfirmware_proxy.warm_boot()
         sdpfirmware_proxy.set_defaults()
         self.assertTrue(sdpfirmware_proxy.state() is DevState.ON)
 
-        sdp_proxy = TestDeviceProxy("STAT/SDP/1")
+        sdp_proxy = TestDeviceProxy("STAT/SDP/HBA")
         sdp_proxy.off()
         self.assertTrue(sdp_proxy.state() is DevState.OFF)
         sdp_proxy.warm_boot()
@@ -78,7 +78,7 @@ class TestTilebeamPerformance(base.IntegrationTestCase):
             proxy.put_property(
                 {
                     "Control_Children": [
-                        "STAT/SDPFirmware/1",
+                        "STAT/SDPFirmware/HBA",
                         f"STAT/RECVH/{n}",
                         f"STAT/tilebeam/HBA{n-1}",
                     ],
diff --git a/tangostationcontrol/requirements.txt b/tangostationcontrol/requirements.txt
index 235750e1e..0c2234af9 100644
--- a/tangostationcontrol/requirements.txt
+++ b/tangostationcontrol/requirements.txt
@@ -10,7 +10,7 @@ psycopg2-binary >= 2.9.2 # LGPL
 pyasn1 == 0.4.8 # BSD, pinned because https://github.com/pyasn1/pyasn1/issues/28
 pysnmp >= 0.1.7 # BSD
 h5py >= 3.1.0 # BSD
-jsonschema >= 4.0.0 # MIT
+jsonschema == 4.17.3 # MIT
 docker >= 5.0.3 # Apache 2
 python-logstash-async >= 2.5.0 # MIT
 python-casacore >= 3.3.1 # LGPLv3
diff --git a/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py b/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py
index 19cf94f2b..4e8c4e5df 100644
--- a/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py
+++ b/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py
@@ -14,6 +14,7 @@ class ObservationSettings(_ConfigurationBase):
         self,
         observation_id: int,
         stop_time: datetime,
+        antenna_field: str,
         antenna_set: str,
         filter: str,
         SAPs: Sequence[Sap],
@@ -22,6 +23,7 @@ class ObservationSettings(_ConfigurationBase):
     ):
         self.observation_id = observation_id
         self.stop_time = stop_time
+        self.antenna_field = antenna_field
         self.antenna_set = antenna_set
         self.filter = filter
         self.SAPs = SAPs
@@ -32,6 +34,7 @@ class ObservationSettings(_ConfigurationBase):
         yield from {
             "observation_id": self.observation_id,
             "stop_time": self.stop_time.isoformat(),
+            "antenna_field": self.antenna_field,
             "antenna_set": self.antenna_set,
             "filter": self.filter,
             "SAPs": [dict(s) for s in self.SAPs],
@@ -45,6 +48,7 @@ class ObservationSettings(_ConfigurationBase):
         return ObservationSettings(
             json_dct["observation_id"],
             datetime.fromisoformat(json_dct["stop_time"]),
+            json_dct["antenna_field"],
             json_dct["antenna_set"],
             json_dct["filter"],
             json_dct["SAPs"],
diff --git a/tangostationcontrol/tangostationcontrol/devices/boot.py b/tangostationcontrol/tangostationcontrol/devices/boot.py
index 152fdf154..d942e27da 100644
--- a/tangostationcontrol/tangostationcontrol/devices/boot.py
+++ b/tangostationcontrol/tangostationcontrol/devices/boot.py
@@ -263,13 +263,13 @@ class Boot(LOFARDevice):
             "STAT/RECVH/1",
             "STAT/RECVL/1",
             "STAT/UNB2/1",  # Uniboards host SDP, so initialise them first
-            "STAT/SDPFirmware/1",
-            "STAT/SDP/1",
+            "STAT/SDPFirmware/HBA",
+            "STAT/SDP/HBA",
             # SDP controls the mask for SST/XST/BST/Beamlet, so initialise it first
-            "STAT/BST/1",
-            "STAT/SST/1",
-            "STAT/XST/1",
-            "STAT/Beamlet/1",
+            "STAT/BST/HBA",
+            "STAT/SST/HBA",
+            "STAT/XST/HBA",
+            "STAT/Beamlet/HBA",
             "STAT/AntennaField/HBA",  # Accesses RECVH
             # "STAT/AntennaField/LBA",  # Accesses RECVL
             "STAT/TileBeam/HBA",  # Accesses AntennaField
diff --git a/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py b/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py
index 2eef35a17..a6c72933a 100644
--- a/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py
+++ b/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py
@@ -163,7 +163,13 @@ class AbstractHierarchy(ABC):
         proxies = {}
         for child in children:
             child = child.casefold()
-            proxies[child] = self._get_children(child, depth - 1)
+
+            try:
+                proxies[child] = self._get_children(child, depth - 1)
+            except Exception as e:
+                raise ValueError(
+                    f"Could not obtain proxy to child {child} of parent {proxy.dev_name()}"
+                ) from e
 
         return {"proxy": proxy, "children": proxies}
 
diff --git a/tangostationcontrol/tangostationcontrol/devices/observation.py b/tangostationcontrol/tangostationcontrol/devices/observation.py
index 8a9a2427d..f7c871f68 100644
--- a/tangostationcontrol/tangostationcontrol/devices/observation.py
+++ b/tangostationcontrol/tangostationcontrol/devices/observation.py
@@ -52,6 +52,7 @@ class Observation(LOFARDevice):
     )
     observation_id_R = attribute(dtype=numpy.int64, access=AttrWriteType.READ)
     stop_time_R = attribute(dtype=numpy.float64, access=AttrWriteType.READ)
+    antenna_field_R = attribute(dtype=str, access=AttrWriteType.READ)
     antenna_set_R = attribute(dtype=str, access=AttrWriteType.READ)
     filter_R = attribute(dtype=str, access=AttrWriteType.READ)
     saps_subband_R = attribute(
@@ -107,26 +108,30 @@ class Observation(LOFARDevice):
         self._num_saps = len(self._observation_settings.SAPs)
         self._saps_pointing = self._build_saps_pointing(self._observation_settings)
 
+        antennafield = self._observation_settings.antenna_field
+
         # Set a reference of AntennaField device that is correlated to this device
         util = Util.instance()
         # TODO(Stefano): set a proper policy for the devices instance number
         # It cannot be inherited from the Observation instance number
         # (i.e. Observation_id)
         self.antennafield_proxy = create_device_proxy(
-            f"{util.get_ds_inst_name()}/AntennaField/HBA"
+            f"{util.get_ds_inst_name()}/AntennaField/{antennafield}"
         )
 
         # Set a reference of Beamlet device that is correlated to this device
-        self.beamlet_proxy = create_device_proxy(f"{util.get_ds_inst_name()}/Beamlet/1")
+        self.beamlet_proxy = create_device_proxy(
+            f"{util.get_ds_inst_name()}/Beamlet/{antennafield}"
+        )
 
         # Set a reference of DigitalBeam device that is correlated to this device
         self.digitalbeam_proxy = create_device_proxy(
-            f"{util.get_ds_inst_name()}/DigitalBeam/HBA"
+            f"{util.get_ds_inst_name()}/DigitalBeam/{antennafield}"
         )
 
         # Set a reference of TileBeam device that is correlated to this device
         self.tilebeam_proxy = create_device_proxy(
-            f"{util.get_ds_inst_name()}/Tilebeam/HBA"
+            f"{util.get_ds_inst_name()}/Tilebeam/{antennafield}"
         )
 
         logger.info(
@@ -202,6 +207,13 @@ class Observation(LOFARDevice):
         """Return the stop_time_R attribute."""
         return self._observation_settings.stop_time.timestamp()
 
+    @only_in_states([DevState.STANDBY, DevState.ON])
+    @fault_on_error()
+    @log_exceptions()
+    def read_antenna_field_R(self):
+        """Return the antenna_field_R attribute."""
+        return self._observation_settings.antenna_field
+
     @only_in_states([DevState.STANDBY, DevState.ON])
     @fault_on_error()
     @log_exceptions()
diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py b/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py
index f5c6dd33e..4bd3906a9 100644
--- a/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py
+++ b/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py
@@ -101,7 +101,7 @@ class Beamlet(OPCUADevice):
         dtype=str,
         doc="Which SDP device subscribed for this beamlet",
         mandatory=False,
-        default_value="STAT/SDP/1",
+        default_value="STAT/SDP/HBA",
     )
 
     FIRST_DEFAULT_SETTINGS = [
diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py
index 4e9656dbe..15c06b24d 100644
--- a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py
+++ b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py
@@ -70,7 +70,7 @@ class DigitalBeam(BeamDevice):
         dtype=str,
         doc="Which Beamlet represents the FPGAs to steer.",
         mandatory=False,
-        default_value="STAT/Beamlet/1",
+        default_value="STAT/Beamlet/HBA",
     )
 
     # ----------
diff --git a/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py b/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py
index ba6ce85c2..bd006b767 100644
--- a/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py
+++ b/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py
@@ -69,7 +69,7 @@ class TemperatureManager(LOFARDevice):
         dtype=[str],
         mandatory=False,
         default_value=[
-            "STAT/SDP/1",
+            "STAT/SDP/HBA",
             "STAT/UNB2/1",
             "STAT/RECVH/1",
             "STAT/RECVL/1",
diff --git a/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py b/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py
index a8740461a..18cb8feb5 100644
--- a/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py
+++ b/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py
@@ -7,6 +7,7 @@ class TestObservationBase:
             {
               "observation_id": 12345,
               "stop_time": "2106-02-07T00:00:00",
+              "antenna_field": "HBA",
               "antenna_set": "ALL",
               "filter": "HBA_110_190",
               "SAPs": [{
diff --git a/tangostationcontrol/test/common/test_observation_controller.py b/tangostationcontrol/test/common/test_observation_controller.py
index 16e81ad5c..3aa1091ab 100644
--- a/tangostationcontrol/test/common/test_observation_controller.py
+++ b/tangostationcontrol/test/common/test_observation_controller.py
@@ -43,6 +43,7 @@ class TestRunningObservation(base.TestCase):
     SETTINGS = ObservationSettings(
         5,
         datetime.fromisoformat("2022-10-26T11:35:54.704150"),
+        "HBA",
         "ALL",
         "filter settings",
         [Sap([3, 2], Pointing(1.2, 2.1, "LMN")), Sap([1], Pointing(3.3, 4.4, "MOON"))],
diff --git a/tangostationcontrol/test/configuration/_mock_requests.py b/tangostationcontrol/test/configuration/_mock_requests.py
index cf9c17700..314c1b40d 100644
--- a/tangostationcontrol/test/configuration/_mock_requests.py
+++ b/tangostationcontrol/test/configuration/_mock_requests.py
@@ -79,6 +79,7 @@ OBSERVATION_SETTINGS_SCHEMA = """
   "required": [
     "observation_id",
     "stop_time",
+    "antenna_field",
     "antenna_set",
     "filter",
     "SAPs"
@@ -92,6 +93,9 @@ OBSERVATION_SETTINGS_SCHEMA = """
       "type": "string",
       "format": "date-time"
     },
+    "antenna_field": {
+      "type": "string"
+    },
     "antenna_set": {
       "type": "string"
     },
diff --git a/tangostationcontrol/test/configuration/test_observation_settings.py b/tangostationcontrol/test/configuration/test_observation_settings.py
index 4a3effeaa..7f67d02e1 100644
--- a/tangostationcontrol/test/configuration/test_observation_settings.py
+++ b/tangostationcontrol/test/configuration/test_observation_settings.py
@@ -18,6 +18,7 @@ class TestObservationSettings(base.TestCase):
     def test_from_json(self, _):
         sut = ObservationSettings.from_json(
             '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", '
+            '"antenna_field": "HBA", '
             '"antenna_set": "ALL", "filter": "filter_settings",'
             '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}]}'
         )
@@ -30,6 +31,7 @@ class TestObservationSettings(base.TestCase):
 
         sut = ObservationSettings.from_json(
             '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", '
+            '"antenna_field": "HBA", '
             '"antenna_set": "ALL", "filter": "filter_settings",'
             '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],'
             '"tile_beam": {"angle1":2.2, "angle2": 3.1, "direction_type":"MOON"} }'
@@ -41,6 +43,7 @@ class TestObservationSettings(base.TestCase):
 
         sut = ObservationSettings.from_json(
             '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", '
+            '"antenna_field": "HBA", '
             '"antenna_set": "ALL", "filter": "filter_settings",'
             '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],'
             '"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}'
@@ -51,19 +54,19 @@ class TestObservationSettings(base.TestCase):
     def test_from_json_type_missmatch(self, _):
         for json in [
             # observation_id
-            '{"observation_id": "3", "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": "3", "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # stop_time
-            '{"observation_id": 3, "stop_time": "test", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "test", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # antenna_set
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": 4, "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": 4, "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # filter
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": 1,"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": 1,"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # SAPs
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": {"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}},"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
-            # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [1],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
-            # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": 1, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": {"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}},"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [1],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": 1, "first_beamlet": 2}',
             # first_beamlet
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": "2"}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": "2"}',
         ]:
             with self.assertRaises((ValidationError, ValueError), msg=f"{json}"):
                 ObservationSettings.from_json(json)
@@ -71,17 +74,19 @@ class TestObservationSettings(base.TestCase):
     def test_from_json_missing_fields(self, _):
         for json in [
             # observation_id
-            '{"stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # stop_time
-            '{"observation_id": 3, "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            # antenna_field
+            '{"observation_id": 3, "antenna_set": "ALL", "stop_time": "2012-04-23T18:25:43", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # antenna_set
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "antenna_field": "HBA", "stop_time": "2012-04-23T18:25:43", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # filter
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # SAPs
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
             # SAPs (empty list)
-            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
+            '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}',
         ]:
             with self.assertRaises((ValidationError, ValueError), msg=f"{json}"):
                 ObservationSettings.from_json(json)
@@ -90,6 +95,7 @@ class TestObservationSettings(base.TestCase):
         sut = ObservationSettings(
             5,
             datetime.fromisoformat("2022-10-26T11:35:54.704150"),
+            "HBA",
             "ALL",
             "filter settings",
             [
@@ -100,6 +106,7 @@ class TestObservationSettings(base.TestCase):
         self.assertEqual(
             sut.to_json(),
             '{"observation_id": 5, "stop_time": "2022-10-26T11:35:54.704150", '
+            '"antenna_field": "HBA", '
             '"antenna_set": "ALL", "filter": "filter settings", "SAPs": '
             '[{"subbands": [3, 2], "pointing": {"angle1": 1.2, "angle2": 2.1, '
             '"direction_type": "LMN"}}, {"subbands": [1], "pointing": {"angle1": 3.3, '
@@ -112,6 +119,7 @@ class TestObservationSettings(base.TestCase):
         with self.assertRaises(RefResolutionError):
             ObservationSettings.from_json(
                 '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", '
+                '"antenna_field": "HBA", '
                 '"antenna_set": "ALL", "filter": "filter_settings",'
                 '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}]}'
             )
-- 
GitLab