Blue Connect pool measurements

Good news :slight_smile:
It is working now. I updated to the newest esphome version 2023.8.2 and also to a nodemcu-32s board. Now its really working fine. Thanks for all who assisted me!
I am now unsure about the data quality itself. The blue connect is not yet inside the pool, its still „new“. For the ph-value I get from the espdevice a value of 4.4, if I re-calculate it including the temperature I get 7.02 which looks more to be the correct value. The „bat“ value is probably really something else, I get something between 25 and 27, the current outdoor temp is 19.29 the water temp is 23.5 and the room temp where the blueconnect is right now is 20.5. So I really have no clue about the interpretation of this value.

3 Likes

Hi folks,
thanks for the fantastic work.

But i have some problems finding my the ble macadress of the blue connect go,
any tips?

Use the link in this post. Instructions are on the ESP-Home website

Thanks Peter,
I firste used a esp32 BLE scanner to find the blue connect go mac adress,
now it works fine.

(i am captured in an apple environment, so it was harder to get the mac adress)

Really nice work, that makes the blue connect go a much more useable device :slight_smile:

1 Like

Glad that ii isworking now. The battery data is not the battery data. Its looks like temperature as the value is close to outside temperature (see the latest post before yours).

How did you make the gauges?

I had the same problem. This helped me: How to find new devices with esp32_ble_tracker when nothing appears in the logs

1 Like

thanks for link. i solved with hardware reset. disconnected the battery :slight_smile:

Hi, I am also looking for a way to add salt readings. Please let me know if (and how) you have managed to do this. Thanks!

After some more reading of the excellent contributions in this thread, I manged to add the salt sensor:

sensor:
#insert below temp, ph, orp and battery sensors
  - platform: template 
    id: sensor_${blueriiot_id_prefix}_salt
    name: ${blueriiot_name_prefix} Salt
    # Optional variables:
    unit_of_measurement: "g/L"
    icon: "mdi:water-percent"
    state_class: "measurement"
    accuracy_decimals: 1

and

text_sensor:
  - platform: ble_client
    id: ${blueriiot_id_prefix}_reading_data
    name: ${blueriiot_name_prefix} reading data
    internal: true
    ble_client_id: ble_client_${blueriiot_id_prefix}
    service_uuid: ${blueriiot_receive_service_uuid}
    characteristic_uuid: ${blueriiot_receive_characteristic_uuid}
    notify: true
    update_interval: never
    on_notify:
      then:
       lambda: |-
          std::string rawhex = format_hex_pretty((uint8_t *) x.c_str(), x.size()).c_str();
          ESP_LOGD("raw_hex", "%s", rawhex.c_str());

          float temperature = (float)((int16_t)(x[2]<< 8) + x[1])/100;
          ESP_LOGD("temp", "%f", temperature);
          id(sensor_${blueriiot_id_prefix}_temperature).publish_state(temperature);
              
          float raw_ph = (float)( (int16_t) (x[4]<< 8) + x[3]) ;
          float ph = (float)( (int16_t) (2048 - raw_ph)) / 232  + 7 ; 
          ESP_LOGD("ph", "%f", ph);
          id(sensor_${blueriiot_id_prefix}_ph).publish_state(ph);
          
          float orp = (float)( (int16_t) (x[6]<< 8) + x[5]) / 3.86 - 21.57826;
          ESP_LOGD("orp", "%f", orp);
          id(sensor_${blueriiot_id_prefix}_orp).publish_state(orp);
          
          float salt = (float)( (int16_t) (x[8]<< 8) + x[7]) / 25.0;
          ESP_LOGD("salt", "%f", salt);
          id(sensor_${blueriiot_id_prefix}_salt).publish_state(salt);
          
          float bat = (float)( (int16_t) x[11]) / 36 * 100;
          ESP_LOGD("bat", "%f", bat);
          id(sensor_${blueriiot_id_prefix}_bat).publish_state(bat);
          
          id(switch_${blueriiot_id_prefix}_enable).turn_off();

My only challenge is that my probe is no longer working. I have ordered a new one and will let you know once I’ve tested everything.

Thanks everyone for amazing work!

4 Likes

So, the entity of the middle gauge is: BLEproxy SK-Pool Battery.
it could not be the temperatur, du to the fact that i live in Germany :wink:
Today it shows 28°C, thats an impossible value for a temperature right now …
this is the yaml part of the three gauges:
its a basic visualisation:

square: true
type: grid
cards:
  - type: gauge
    entity: sensor.esphome_web_1cc2b0_sk_pool_ph
    name: pH
    needle: true
    severity:
      green: 7.2
      yellow: 7.6
      red: 0
    min: 6.8
    max: 8
  - type: gauge
    entity: sensor.esphome_web_1cc2b0_sk_pool_battery
    needle: true
    severity:
      green: 80
      yellow: 20
      red: 0
    name: Batterie
  - type: gauge
    entity: sensor.esphome_web_1cc2b0_sk_pool_orp
    needle: true
    name: ORP
    severity:
      green: 650
      yellow: 750
      red: 0
    min: 600
    max: 800
columns: 3

Thats the battery part, am i wrong here?

          float bat = (float)( (int16_t) x[11]) ;
          ESP_LOGD("bat", "%f", bat);
          id(sensor_${blueriiot_id_prefix}_bat).publish_state(bat);

Hi,
With my unit, it comes really close to the temperature. (Buitengevel is dutch for the outside wall of a house). When it was hotter there was a bigger difference, my guess due to the water temperature that influences the sensor.

I think it is the Battery Temperature, this would explain why it is neaby the outside temparute.
Because the post of the gauge I was able to optimize mine.

square: false
type: grid
cards:
  - type: gauge
    entity: sensor.esphome_web_1cc2b0_sk_pool_ph
    name: pH
    needle: true
    min: 6.2
    max: 8.6
    segments:
      - from: 0
        color: '#FF0000'
      - from: 6.6
        color: '#FFA500'
      - from: 7.2
        color: '#008000'
      - from: 7.6
        color: '#FFA500'
      - from: 8.2
        color: '#FF0000'
  - type: gauge
    entity: sensor.esphome_web_1cc2b0_sk_pool_temperature
    name: Temperatur
    needle: true
    max: 32
    min: 18
    segments:
      - from: 0
        color: '#0000FF'
      - from: 22
        color: '#008000'
      - from: 28
        color: '#FF0000'
  - type: gauge
    entity: sensor.esphome_web_1cc2b0_sk_pool_orp
    needle: true
    name: ORP
    min: 350
    max: 1050
    segments:
      - from: 0
        color: '#FF0000'
      - from: 400
        color: '#FFA500'
      - from: 650
        color: '#008000'
      - from: 750
        color: '#FFA500'
      - from: 1000
        color: '#FF0000'
columns: 3
1 Like

Yes, the Pico-CPU could be a problem. Thanks for the hint!
Do you think, the ESP32-S3FN8 variant could be better? I’m thinking about buying a M5Stack C123 for this purpose…

To be honest, i dont know.

I looked at the PICO specs and thought that this would not be good enough for the BT LE to do what we need. What you can do is buy a cheap development board with the same chip (ESP32-S3-MINI-1) and try it out and then go for the M5Stack version.

1 Like

the battery in blue connect device, is this one , noe extacly the same but very similar with the same form factor and same chemistry

As you can see, the voltage of the battery is constat until complete discharge.
For this reason we can assume that no information about battery level is sent .
Instead battery temperature can help the hardware in the device to estimate the correct lifetime.

1 Like

I have the exact same problem. The probe isn’t working correctly anymore, needs replacement. :frowning:

I’ll buy it next summer, but I’ll apply your code additions for salt in the meanwhile.

Could you post the complete yaml file please? Because I noticed some differences vs the code I was using.

Thanks a lot.

Ciao Daniele,

I replaced the original battery with this one (it’s 2.6Ah vs 1.8Ah of the original, and it’s working): https://www.amazon.it/gp/product/B097MR4FJ9

image

The code relies on the voltage so I shouldn’t change anything, correct?

The original one is 1800mAh:

Ciao Alex. That’s correct. Mine is reporting 69% after 45 days with a reading every hour when the pump is on (12 hours) and 1 every 2 when off.