diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ff459e83dfb1382b260b44d514ac7d2c2bbb07ed..78333fd4763995583933059e3308e4d74a4dc02c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,7 +4,7 @@ stages:
   - deploy
 
 image:
-  name: esphome/esphome:2023.10.6
+  name: esphome/esphome:2024.6.0
   entrypoint: [""]
 
 validate_configs:
@@ -17,7 +17,7 @@ validate_configs:
     paths:
       - packages/secrets.yaml
   tags:
-    - docker
+    - kubernetes
 
 deploy_configs:
   stage: deploy
diff --git a/packages/air_scd40.yaml b/packages/air_scd40.yaml
index 0bb05e44469afbe102c6afed5c407c8fcfa08aa3..36736bc6485e1e200a0c7a77e093f37f6f4f1946 100644
--- a/packages/air_scd40.yaml
+++ b/packages/air_scd40.yaml
@@ -2,7 +2,7 @@ sensor:
 - platform: scd4x
   id: scd40
   update_interval: 5s
-  temperature_offset: 4.7
+  temperature_offset: 4.9
   ambient_pressure_compensation_source: bme280_pressure
   co2:
     id: scd40_co2
diff --git a/packages/base.yaml b/packages/base.yaml
index 7e026de6c907ad93805c40fd4c61d5000c24c9d0..ff4a3ab37af432cd8f29a5058109b17fb2edcc8c 100644
--- a/packages/base.yaml
+++ b/packages/base.yaml
@@ -27,6 +27,7 @@ api:
   reboot_timeout: 0s
 
 ota:
+  platform: esphome
   password: !secret ota_password
 
 wifi:
@@ -108,7 +109,7 @@ text_sensor:
         mnts = trunc(dur / 60);
         dur = dur - (mnts * 60);
       }
-      char buffer[17];
+      char buffer[38];
       sprintf(buffer, "%ud %02uh %02um %02us", dys, hrs, mnts, dur);
       return {buffer};
 
@@ -120,6 +121,7 @@ button:
 http_request:
   id: http_request_data
   useragent: esphome/${devicename}
+  verify_ssl: false
   timeout: 1s
 
 script:
diff --git a/packages/esp32.yaml b/packages/esp32.yaml
index c0f6e298c818d03b5fc3806b31c21e8002e31b61..1ae23cf41b06930171960250c865ca87e42cf784 100644
--- a/packages/esp32.yaml
+++ b/packages/esp32.yaml
@@ -2,8 +2,6 @@ esp32:
   board: esp32dev
   framework:
     type: arduino
-    version: latest
-    platform_version: 6.4.0
 
 i2c:
   sda: 21
diff --git a/packages/esp32s3.yaml b/packages/esp32s3.yaml
index 4923f99b0759136af5a003c36da77c11915b8b8b..724746624bf53f18e2e8ed27fd78e308b226e9b5 100644
--- a/packages/esp32s3.yaml
+++ b/packages/esp32s3.yaml
@@ -1,14 +1,14 @@
 esp32:
-  board: seeed_xiao_esp32s3
-  variant: esp32s3
+  board: esp32-s3-devkitc-1
   framework:
     type: arduino
-    version: latest
-    platform_version: 6.4.0
 
 esphome:
   platformio_options:
-    board_build.flash_mode: dio
+    build_flags: -DBOARD_HAS_PSRAM
+    board_build.arduino.memory_type: qio_opi
+    board_build.f_flash: 80000000L
+    board_build.flash_mode: qio
 
 psram:
   mode: octal
@@ -22,7 +22,7 @@ status_led:
 i2c:
   sda: 5
   scl: 6
-  frequency: 10khz
+  frequency: 100khz
 
 wifi:
   power_save_mode: none
diff --git a/packages/fan_power.yaml b/packages/fan_power.yaml
index 1bd411d0ae3a957b104825b94ad8ea67626b4acd..b264223899e05f34c9de260fb23336266c4eb612 100644
--- a/packages/fan_power.yaml
+++ b/packages/fan_power.yaml
@@ -27,11 +27,15 @@ script:
     then: 
       - http_request.get:
           url: "http://${hostname_fan}/switch/power"
+          headers:
+            Content-Type: application/json
+          capture_response: true
           on_response:
             then:
               - lambda: |-
-                  json::parse_json(id(http_request_data).get_string(), [](JsonObject root) {
+                  json::parse_json(body, [](JsonObject root) -> bool {
                     id(power_fan).publish_state(root["value"]);
+                    return true;
                   });
 
 prometheus:
diff --git a/packages/level.yaml b/packages/level.yaml
index 6f2fe8785af1a759908f9f779b474b3d1b26013f..6e95bf4ffaebaa7023efffd44d3f4eff55349801 100644
--- a/packages/level.yaml
+++ b/packages/level.yaml
@@ -78,3 +78,12 @@ sensor:
       float dataCurrent = id(waterlevel_system_voltage).state * 1024.0 / 120.0; // Sense Resistor: 120ohm
       float depth = (dataCurrent - id(waterlevel_current_init)) * (id(waterlevel_range) / id(waterlevel_density) / 16.0) / 10;
       return depth;
+
+prometheus:
+  relabel:
+    waterlevel_system:
+      id: waterlevel_system
+      name: "Waterlevel System"
+    waterlevel_tank:
+      id: waterlevel_tank
+      name: "Waterlevel Tank"
diff --git a/packages/light_power.yaml b/packages/light_power.yaml
index 716f51d475b0b0386fab7678786e12c5b447bb00..95bd17a3a6f5d634760a50a89e9a52a34d40b85a 100644
--- a/packages/light_power.yaml
+++ b/packages/light_power.yaml
@@ -27,11 +27,15 @@ script:
     then:
       - http_request.get:
           url: "http://${hostname_light}/switch/power"
+          headers:
+            Content-Type: application/json
+          capture_response: true
           on_response:
             then:
               - lambda: |-
-                  json::parse_json(id(http_request_data).get_string(), [](JsonObject root) {
+                  json::parse_json(body, [](JsonObject root) -> bool {
                     id(power_light).publish_state(root["value"]);
+                    return true;
                   });
 
 prometheus:
diff --git a/packages/water_ds18b20.yaml b/packages/water_ds18b20.yaml
index 13ae488107db1a6776e6cba6640e358c2b061047..e5f57863da4d9563f687c08e9bb3ffb3fb130d46 100644
--- a/packages/water_ds18b20.yaml
+++ b/packages/water_ds18b20.yaml
@@ -1,10 +1,9 @@
-dallas:
-  - pin: GPIO23
-    update_interval: 5s
+one_wire:
+  - platform: gpio
+    pin: GPIO23
 
 sensor:
-- platform: dallas
-  index: 0
+- platform: dallas_temp
   id: temperature_water
   name: "Water: Temperature"
   accuracy_decimals: 2