Blue Connect pool measurements

Yeah it seems to vary quite a bit…

I’ve been trying to use the automation to record what the delay is, but I don’t have the code quite right yet and haven’t had the time to fix it. This is what I’ve been experimenting with, bit didn’t work…

   - service: input_number.set_value
     data_template:
       entity_id: input_number.blue_connect_time_delay
       value: '{{((as_timestamp(utcnow())-as_timestamp(strptime("trigger.json.time","%d/%m/%Y
         %H:%M:%S")))/60)|float -600}}'

I’ve also noticed fewer than 20 readings per day. Did you notice the same?

Yes, I have more like 10-15 measurements per day. However, I have my pool on a timer 9 am - 9 pm, also registered in Blue Connect so I thought this was the reason. Is it also your experience that the delay is from Blue Connect to IFTTT, but not from IFTTT to HA?

Hi folks,

I’m looking at buying a second hand unit, looks like it could be a fit for me. I’m really only after stats.

How did efforts with integration go? Able to iron out frequency issues?

Does this unit require calibration or something at some point?

I have not spent more time looking into the delays. It works really well, but gives more like 10 readings per day and with delays up to an hour. For me that is not a big concern.

So just to update on the delay between a reading being taken and how soon it is showing in HA.
I have now changed how I handle the incoming data from IFTTT to use Node-Red instead of a HA automation, and as part of my flow I am recording the difference between the current time and the timestamp on the reading…

Having run it for more than 24hrs, I can now see that the delay is highly variable…

The quickest update took just 84s while the slowest was 1712s - almost half an hour!

I don’t know of a way to tell where any delays would come from as the data flow is this…

  1. Reading taken
  2. Is there any sigfox delay (I don’t know anything about how this network works)
  3. BlueConnect “cloud”
  4. IFTTT
  5. Nabu Casa (I think this just passes packets, so probably not this)
  6. HA (via Node Red)

All up, even at the slowest update delay, I don’t think 28 mins is that bad - the value with the greatest variance in a pool - the ORP doesn’t change that rapidly, so for me this delay is not an issue really. Still pretty happy with the BlueConnect and the data it gives me!

Hey guys - this worked like a charm! However - been trying to get the property “AnalysedAt” of the IFTTT integration for BlueConnect - to read when the measurement was done - anyone had success with this one? I’ve been trying both input_number and input_text…

Hi, my pool is still in vinterized mode but this is what I have in my configuration.yaml file:

input_datetime:
  bc_analysed_at:
    has_date: true
    has_time: true

sensor:
  - platform: template
    sensors:
      pool_analysed_at:
        friendly_name: 'Analyserad'
        icon_template: mdi:calendar-clock
        value_template: >-
          {{states.input_datetime.bc_analysed_at.attributes.timestamp|timestamp_custom("%Y-%m-%d %H:%M")}}

…and this is what I have in my automation.yaml

- alias: 'BC from IFTTT'
  trigger:
    platform: event
    event_type: ifttt_webhook_received
    event_data:
      action: bc_measurement
  action:
  - service: input_datetime.set_datetime
    entity_id: input_datetime.bc_analysed_at
    data_template:
      date: "{{strptime(trigger.event.data.analysed_at_iso8601,'%B %d, %Y at %I:%M%p').strftime('%Y-%m-%d')}}"
      time: "{{strptime(trigger.event.data.analysed_at_iso8601,'%B %d, %Y at %I:%M%p').strftime('%H:%M')}}"
...

Hopefully helpful for you to convert the IFTTT input to the correct format.

1 Like

hello everyone

This is my first message, a greeting of thanks to all this wonderful community.

I just started with this HA, although I’ve been reading for a while now I’m taking advantage of the confinement to start
I think that these steps you indicate are very complex, do you know if there is a plugin or a simpler method?

Thank you very much and greetings

Thanks - i’ll give it a go!

  • but from what i can gather from your port - you are using the “AnalysedAtIso8601” instead of “AnalysedAt” ingredient of the IFTTT webhook?

Hello
I have managed to connect the Blue Connect with IFTTT and it already sends the data well.
What I am not able to achieve is for IFTTT to send the data to HA or HA to capture that data.
Could you pass me the configuration that I have to put in cofiguration.yaml and if I have to do something else in HA?
I copied all the ones you have here in the thread but for some reason it does not detect my IFTTT.
Thank you so much for everything

Hi all. Thanks for this info.

I’m super keen to get it working.

I procured a Blue Connect yesterday. Happily taking sigfox and BT readings.

configuration.yaml and automations.yaml appear to be good.

IFTTT seems to load ok with the key.

I’m struggling with my skills and the IFTTT documentation:

My IFTTT looks nothing like the documentation screen shots.

Nor does my lovelace UI for Development > Services. Mine asks for the service name (ifttt.trigger) and Service Data (YAML, optional). Not the JSON in the documentation and @danps description above.

When I set up the webhooks service there is no UI that asks to complete a trigger field as shown in the documentation.

I’m not sure if there is a fundamental problem with my understanding of the solution (likely) or if the documentation hasn’t been updated for a fair while.

Any pointers greatly appreciated. Thanks

When you setup the IFTTT on HA, you get a webhook_id, something like http://your_ha_ip_address:8123/api/webhook/your_webhook_id

You need to add BlueConnect on IFTTT.

You create a webhook on IFTTT if a new measurement with these settings:
URL: http://your_ha_ip_address:8123/api/webhook/your_webhook_id
method: POST
content type : application/json
action: { "action": "my_action_name", "property":"{{property_value}}"}

On HA you have to consume it this way:

input_number:
  property:

automation:
 - alias: my alias
    trigger:
        platform: event
        event_type: ifttt_webhook_received
        event_data: 
          action: my_action_name
    condition: []
    action: 
      - service: input_number.set_value
        data_template:
          entity_id: input_number.property
          value: '{{ trigger.event.data.property }}'

Hi All,

Here is the updated Node-Red JSON for my inbound data flow…

[{"id":"a2345807.bbc9c8","type":"ha-webhook","z":"1bb50542.81126b","name":"BlueConnect Webhook","server":"a23a4d01.eeb32","outputs":1,"webhookId":"blue_connect","payloadLocation":"payload","payloadLocationType":"msg","headersLocation":"","headersLocationType":"none","x":180,"y":320,"wires":[["ebc5b5a.3c2a248"]]},{"id":"ebc5b5a.3c2a248","type":"switch","z":"1bb50542.81126b","name":"New Measure?","property":"payload.time","propertyType":"msg","rules":[{"t":"neq","v":"","vt":"prev"}],"checkall":"true","repair":false,"outputs":1,"x":400,"y":320,"wires":[["d2c85e6f.f164e","3770976e.784fb8","5f5d6f7f.8c305","dae8675e.10b038","747b5a26.135d64","b048c2c3.9025d","7d0176e9.094a18"]]},{"id":"d2c85e6f.f164e","type":"function","z":"1bb50542.81126b","name":"x1000","func":"var x=Number(msg.payload.salinity)\nmsg.payload.salinity=x*1000\nreturn msg;","outputs":1,"noerr":0,"x":650,"y":360,"wires":[["f38fab54.5fe968"]]},{"id":"3770976e.784fb8","type":"change","z":"1bb50542.81126b","name":"Measure Delay","rules":[{"t":"set","p":"payload","pt":"msg","to":"(\t   $toMillis($now()) - $toMillis(\t       payload.time,\t       '[D01]/[M01]/[Y0001] [H01]:[m01]:[s01]' \t   )\t)/1000\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":480,"wires":[["a256dbf0.03bb48"]]},{"id":"6424dda6.4cc674","type":"ha-entity","z":"1bb50542.81126b","name":"Blue Connect Measurement Delay","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Blue Connect Measurement Delay"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"s"}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":1020,"y":480,"wires":[[]]},{"id":"5f5d6f7f.8c305","type":"ha-entity","z":"1bb50542.81126b","name":"Temperature","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"pool_temperature"},{"property":"device_class","value":"temperature"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"°C"}],"state":"payload.temperature","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"msg","inputOverride":"allow","x":790,"y":180,"wires":[[]]},{"id":"dae8675e.10b038","type":"ha-entity","z":"1bb50542.81126b","name":"pH","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"pool_ph"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"pH"}],"state":"payload.ph","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":770,"y":240,"wires":[[]]},{"id":"747b5a26.135d64","type":"ha-entity","z":"1bb50542.81126b","name":"Orp","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"pool_orp"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"mV"}],"state":"payload.orp","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":770,"y":300,"wires":[[]]},{"id":"f38fab54.5fe968","type":"ha-entity","z":"1bb50542.81126b","name":"Salinity","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"pool_salinity"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"ppm"}],"state":"payload.salinity","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":780,"y":360,"wires":[[]]},{"id":"b048c2c3.9025d","type":"ha-entity","z":"1bb50542.81126b","name":"Conductivity","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"pool_conductivity"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"mho"}],"state":"payload.conductivity","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":790,"y":420,"wires":[[]]},{"id":"2e3b8fff.7ed07","type":"ha-entity","z":"1bb50542.81126b","name":"Update Count","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Blue Connect Update Count"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":800,"y":540,"wires":[[]]},{"id":"7d0176e9.094a18","type":"api-current-state","z":"1bb50542.81126b","name":"Count","server":"a23a4d01.eeb32","version":1,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.blue_connect_update_count","state_type":"num","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":490,"y":540,"wires":[["b94912c.85ab7f"]]},{"id":"b94912c.85ab7f","type":"function","z":"1bb50542.81126b","name":"+1","func":"var x=Number(msg.payload)\nmsg.payload=x+1\nreturn msg;","outputs":1,"noerr":0,"x":630,"y":540,"wires":[["2e3b8fff.7ed07"]]},{"id":"88995690.f6b7b8","type":"inject","z":"1bb50542.81126b","name":"Reset Counter","topic":"","payload":"0","payloadType":"num","repeat":"","crontab":"00 00 * * *","once":false,"onceDelay":0.1,"x":160,"y":600,"wires":[["5230267f.9a7e68"]]},{"id":"a256dbf0.03bb48","type":"function","z":"1bb50542.81126b","name":"Single Decimal Place","func":"var x = Number(msg.payload)\n\nmsg.payload = x.toFixed(1)\nreturn msg;","outputs":1,"noerr":0,"x":760,"y":480,"wires":[["6424dda6.4cc674"]]},{"id":"c22f216.ef67ae","type":"ha-entity","z":"1bb50542.81126b","name":"Yesterday Count","server":"a23a4d01.eeb32","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Blue Connect Updates Yesterday"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","x":480,"y":600,"wires":[["8215815e.5dfc2"]]},{"id":"5230267f.9a7e68","type":"api-current-state","z":"1bb50542.81126b","name":"Count","server":"a23a4d01.eeb32","version":1,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.blue_connect_update_count","state_type":"num","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":330,"y":600,"wires":[["c22f216.ef67ae"]]},{"id":"8215815e.5dfc2","type":"change","z":"1bb50542.81126b","name":"Zero","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":600,"wires":[["2e3b8fff.7ed07"]]},{"id":"a23a4d01.eeb32","type":"server","z":"","name":"Home Assistant"}]

One thing we noticed when I was helping a friend set his up using my exported JSON, is that for the HA nodes, we needed to go in and change the server name from “Home Assistant” to “Home Assistant”!!
I’m assuming there is some hidden id in play, and the imported “Home Assistant” which was selected was not the correct one.
The flow now looks like this…


It depends on having not just the node red addon installed, but also the integration installed (via HACS) and configured. I no longer use the “input-numbers” as NR can now create sensors directly in HA which is great.
As a previous poster mentioned, after deploying this flow, you’ll need to go into HA config and find the webhook that has been created. I use Nabu Casa cloud for this inbound webhook so it’s auto-created, but you could also port-map your HA server from the outside world.
Hope that helps

Hey thank you @rzulian and @danps.

I’m still struggling with my skills and understanding of the solution but it is becoming clearer for me now. Cheers.

The IFTTT part looks to be working but my automation doesn’t seem to have been triggered.

I’m assuming my casa URL below is doing the same thing in calling my HA server:

My automation.blue_connect_data_update shows last_triggered: null and there aren’t any instances of webhook or IFTTT in my log.

The automation I have was from dan’s post above which looks inline with the advice from Riccardo:

- id: blue_connect_data_update
  alias: Blue Connect Data Update
  trigger:
  - platform: webhook
    webhook_id: blueconnect
  action:
  - service: input_number.set_value
    data_template:
      entity_id: input_number.pool_temperature
      value: '{{trigger.json.temperature | float}}'

Any ideas appreciated.

Should I stick with the input-number or try the node-red method? Concerned that it may further stretch my ability.

Thanks!!

Hi,

On the product page it says that it can communicate via bluetooth, does someone tried to scan the data advertised by BLE?
This would enable a more direct integration.

@thetastate Did you check if this is triggering the automation?
curl -H 'Content-Type: application/json' -X POST -d '{ "temperature":"16.4" }' https://hooks.nabu.casa/everything-else
@1technophile I’ve no idea on how to scan the data advertised by BLE. If you can suggest me how to do it I can try. In any case, if the Blueconnect is in the pool, it can be difficult to read it via Bluetooth. They are also selling a Bluetooth extender via wifi, but it’s not clear if you can control the extender and request more readings. I suspect they have limited readings to preserve battery life.

You may try to scan the device with a bluetooth app and see if it advertise service data like below:

If it is the case, there is a possibility that we could use these data directly from the sensor.

I am quite certain that this would be possible, as I can use my iPhone to request and receive a reading. The phone and blue connect communicates over Bluetooth. But has someone experience for how to understand Bluetooth protocols? Is there a Bluetooth “hub” that integrates with Home Assistant?

1 Like

You can use either the embedded bluetooth chip of a Pi or an ESP32

Yes I have