Blue Connect pool measurements

Hi Damon,

Thanks for the feedback… Your confirmation of ‘t cant be transmitting without a battery.’ is exactly what i expected.

It actually gets a lot stranger… While I was installing the battery i purchased (genuine) I noticed there was a sticker on the black plastic on the inside of the unit identifying the serial and key. I compared the two numbers to those on the outside of the unit and the manual and found they are different. That is, the numbers on the outside of the unit and the manual are identical, but they do not match those on the inside of the unit. SO, someone has gone to the effort of ripping out the guts from a different unit, and installing them into this unit.

So the fact that i am getting readings from the serial on the outside of the unit makes sense, because someone has a unit floating in their pool, which has the serial numbers of MY housing.

I have disconnected the device from my account, and tried to add using the internal serial, but it does not connect.

All i can do now is report the seller (facebook marketplace) as he is not responding to messages… my loss.

Hey LordMike,

i have a bit of time free now - i was thinking of setting up and ESP32 as a Bluetooth Receiver and seeing if i can sniff the protocol - what format or info would you like me to supply ?

I was going to try and unpack the app this weekend and see what i can find in terms of communiction when it is unpaired - any other things you would like ??

Craig

The app, I think, retrieves a measurement from the device by invoking some bluetooth “service”. The app then reports these values to BlueRiiot, which you can then see in the app and their graphs etc…

If you were to acquire these values (temperature, orp, ph, …), we could bypass BlueRiiot.

I’d start by making contact with the device, and seeing if you can discover any services or functionality you can call. When you get responses, you can begin dissecting it to find the values we need. :slight_smile:

No that is not what i am seeing.

The Blueriiot talks to the local Sigfox network for all its measurements - my phone then talks to the servers to download the measurements.

The only time there was any communication was when i paired my phone to the unit for the first time.

I have a couple of older androids here that i can download the app to and see what the first comms looks like

Craig

Ah - but not when you’re doing a bluetooth measurement. These are on-demand, and are also meant for when you’re not on the premium subscription (sigfox), or have the wifi box.

I don’t remember from when I tested it, and it’s winter here, so I can’t test it… But if you do multiple measurements via bluetooth, do the values change? … if so, it’s actually making measurements outside the normal cycle.

Hmm,

Good point - its definitely not showing as a connected BT device.

Will go down to the pool a little later and see what i can do with some playing around

Craig

Hello,
A week ago, Blueriiot updated their FAQ and just announced the end of IFTTT support in March 2021 !!! :scream:

I’ve managed last summer using an old android phone with tasker to make regular reads and then publish on-screen data via mqtt. At every read the app “sends measurement” to the server, so probably some calc are made remotely.
Data retrieved with Your code was accordingly updated (so probably without using sigfox network)

This summer I will try to see if the app measurement are updated “locally” also without internet connection.

I’ve tried to check on android blueriiot app source code but haven’t found the “path” of the readings.

The real goal is to get local reads via another BT device (like a raspberry)

@ArnaultR IFTTT supports end is probably related to the fact that now free IFTTT usage is really limited, I suppose that paying for both subscription (IFTTT and BlueConnect) was not on original plan.

Neat. The fact that the data changes more often than the check interval (20x daily), indicates the device actually makes a measurement and provides data. So in principle, we could do 200 checks daily (at a cost of battery life)…

Do keep working on the bluetooth stuff - I may have to dive into the code again to see what I can find to get any hints I can…

Would be neat to be able to use the BlueRiiot without the companys existence. :slight_smile:

1 Like

I contacted them. After a first response that did not answer anything, they told me that IFTTT’s pricing conditions were no longer sustainable for them and that they were working on an alternative solution.

In the meantime, I created a NodeRed flow that connects me to their server and retrieves the information that if I was the mobile application.

I am very interested to know how you were able to simulate the Bluethoot reading request. Is this possible without an Android phone?

At this stage I’ve only achieved the result with android and tasker app. I have to see how the bluetooth communicates and what kind of data is transferred to the phone from the device. When I re-open the pool in the next months I will make some tests to see if a direct bluetooth connection is possible, now I’m trying to see from the app source how everything works.

You might wanna use this as an IFTTT replacement: https://github.com/LordMike/MBW.BlueRiiot2MQTT

wish there was an easier way than running MQTT

If you contact them, they can do a POST request with JSON data to the url you want. But I don’t know how to create to url in HA

setting MQTT was actually easier than I thought - Thanks!

I use BlueRiiot2MQTT for my blue connect plus. After reading this topic I get more and more questions. I hope @LordMike and @ArnaultR can answer some of them.

Why did you choose MQTT instead of a custom integration? For MQTT we need to set up an MQTT server and a docker container for BlueRiiot2MQTT. Is a custom integration not easier?


I cannot find the announcement on the FAQ. It seems that they have removed almost all of the questions on the FAQ. FAQ - Blueriiot.
They did remove IFTTT from their site Blueriiot Premium.
Blue connect is still available on IFTTT for now. https://ifttt.com/blueconnect


How did you get in touch with them?
The help button on the website does not work. I use the chat on the FAQ page, but it only opens when you click on the “:slightly_frowning_face:” feedback button.
When I contact them through chat, it takes an average of 10 days before I receive an answer. I now have two email addresses of employees so I can easily contact them.
I am curious how you did it because for me it was almost impossible.


Can you share the NodeRED flow? Which API endpoints do you connect to? And how does authentication work? Have they shared how to use the API?

Can you share the communication you had with them? Then I and other home assistant users don’t have to ask the same questions again.

Why did you choose MQTT instead of a custom integration? For MQTT we need to set up an MQTT server and a docker container for BlueRiiot2MQTT. Is a custom integration not easier?

At the point in time where I created this integration, I was neck deep in the MQTT integration as that’s what Zwave2MQTT uses to link Z-Wave and HASS. So as I already had experience with the MQTT integration in HASS, it made sense for me to do this.

MQTT also brings other benefits:

  • Non-HA users can skip the discovery part (disable it in settings), and make their own adaptations of the values that BR2MQTT publishes on MQTT
  • Not having to code in Python :slight_smile:
  • If I were to stay outside integrations within HA, I would have to interact with their HTTP/Websocket API. This and all other kinds of apis brings issues like response times, failures, retries etc. A queued setup like MQTT has fewer moving parts and less that can fail.
  • I just looked into the HTTP API, and it seems that I can’t immediately see how to create new entities using it - so it might be that the only two options I had were MQTT and a custom integration.

Additionally - I imagine (hope) that you’ll quickly find other users for an MQTT broker - at least I did as I started looking into ESP8266’s, Tasmota, and all that stuff. I’m aware that some users will have to set up an MQTT broker just for this projects - but I hope it won’t be too tricky.

Hello @milanmeu ,

I’ll try to answer some of your questions.

I contacted them via their FAQ on the French site. They told me that Blueriiot Pool & Spa Assistant will end compatibility with IFTTT on April 22. Then they were going to try to make the thing last longer but that the IFTTT pricing conditions did not suit them.

I did reverse on the iPhone app and here is my flow. I check that the filtration is working and if so, I connect and retrieve the last measurements.

[{"id":"e28768f8.fb1468","type":"tab","label":"RiiotLabs","disabled":false,"info":""},{"id":"93bd29f9.079478","type":"http request","z":"e28768f8.fb1468","name":"Request Login","method":"POST","ret":"obj","paytoqs":"ignore","url":"https://api.riiotlabs.com/prod/user/login","tls":"","persist":false,"proxy":"","authType":"","x":420,"y":280,"wires":[["10bbea77.af0426","4c197c58.b6d7e4"]]},{"id":"1686c8ec.1ff4d7","type":"function","z":"e28768f8.fb1468","name":"AWS Signature","func":"var aws4Module = global.get('aws4Module');\n\nvar opts = { \n    host: 'api.riiotlabs.com',\n    path: '/prod/swimming_pool?deleted=false',\n    service: 'execute-api',\n    region: 'eu-west-1'\n};\n\naws4Module.sign(opts, {\n  accessKeyId: flow.get('access_key'),\n  secretAccessKey: flow.get('secret_key'),\n  sessionToken: flow.get('session_token')\n});\n\nmsg.headers = opts.headers;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":180,"y":400,"wires":[["1485414f.8a61df"]]},{"id":"48c2a67e.709258","type":"debug","z":"e28768f8.fb1468","name":"Debug Swimming Pool","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":380,"wires":[]},{"id":"aec473dd.669f6","type":"comment","z":"e28768f8.fb1468","name":"2. On s'identifie sur l'API de RiiotLabs","info":"","x":190,"y":240,"wires":[]},{"id":"10bbea77.af0426","type":"function","z":"e28768f8.fb1468","name":"Save access_key, secret_key et session_token","func":"flow.set('access_key', msg.payload.credentials.access_key);\nflow.set('secret_key', msg.payload.credentials.secret_key);\nflow.set('session_token', msg.payload.credentials.session_token);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":720,"y":300,"wires":[["1686c8ec.1ff4d7"]]},{"id":"4c197c58.b6d7e4","type":"debug","z":"e28768f8.fb1468","name":"Debug Credentials","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.credentials","targetType":"msg","statusVal":"","statusType":"auto","x":630,"y":260,"wires":[]},{"id":"8e81189f.1240e8","type":"comment","z":"e28768f8.fb1468","name":"3. On récupère l'identifiant de la piscine","info":"","x":190,"y":360,"wires":[]},{"id":"1485414f.8a61df","type":"http request","z":"e28768f8.fb1468","name":"Request Swimming Pool","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.riiotlabs.com/prod/swimming_pool?deleted=false","tls":"","persist":false,"proxy":"","authType":"","x":410,"y":400,"wires":[["48c2a67e.709258","a4ff4396.e03f3"]]},{"id":"a4ff4396.e03f3","type":"function","z":"e28768f8.fb1468","name":"Save swimming_pool_id","func":"flow.set('swimming_pool_id', msg.payload.data[0].swimming_pool_id);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":670,"y":420,"wires":[["b741599d.3e03b8"]]},{"id":"1f6c4977.8c2f57","type":"comment","z":"e28768f8.fb1468","name":"4. On récupère l'identifiant du Blue Connect","info":"","x":200,"y":480,"wires":[]},{"id":"b741599d.3e03b8","type":"function","z":"e28768f8.fb1468","name":"AWS Signature","func":"var aws4Module = global.get('aws4Module');\n\nvar opts = { \n    host: 'api.riiotlabs.com',\n    path: '/prod/swimming_pool/' + flow.get('swimming_pool_id') + '/blue',\n    service: 'execute-api',\n    region: 'eu-west-1'\n};\n\naws4Module.sign(opts, {\n  accessKeyId: flow.get('access_key'),\n  secretAccessKey: flow.get('secret_key'),\n  sessionToken: flow.get('session_token')\n});\n\nmsg.headers = opts.headers;\nmsg.swimming_pool_id = flow.get('swimming_pool_id');\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":170,"y":520,"wires":[["4bf2e9af.3d1158"]]},{"id":"1d0f9da6.31ec92","type":"debug","z":"e28768f8.fb1468","name":"Debug Blue Device","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":620,"y":500,"wires":[]},{"id":"4bf2e9af.3d1158","type":"http request","z":"e28768f8.fb1468","name":"Request Blue Device","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.riiotlabs.com/prod/swimming_pool/{{{swimming_pool_id}}}/blue","tls":"","persist":false,"proxy":"","authType":"","x":390,"y":520,"wires":[["1d0f9da6.31ec92","43047113.5b874"]]},{"id":"43047113.5b874","type":"function","z":"e28768f8.fb1468","name":"Save blue_serial","func":"flow.set('blue_serial', msg.payload.data[0].blue_device.serial);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":620,"y":540,"wires":[["df5da1bd.b208a"]]},{"id":"479b50e9.9a031","type":"comment","z":"e28768f8.fb1468","name":"5. On récupère les dernieres mesures","info":"","x":190,"y":600,"wires":[]},{"id":"df5da1bd.b208a","type":"function","z":"e28768f8.fb1468","name":"AWS Signature","func":"var aws4Module = global.get('aws4Module');\n\nvar opts = { \n    host: 'api.riiotlabs.com',\n    path: '/prod/swimming_pool/' + flow.get('swimming_pool_id') + '/blue/' + flow.get('blue_serial') + '/lastMeasurements?mode=blue_and_strip',\n    service: 'execute-api',\n    region: 'eu-west-1'\n};\n\naws4Module.sign(opts, {\n  accessKeyId: flow.get('access_key'),\n  secretAccessKey: flow.get('secret_key'),\n  sessionToken: flow.get('session_token')\n});\n\nmsg.headers = opts.headers;\nmsg.swimming_pool_id = flow.get('swimming_pool_id');\nmsg.blue_serial = flow.get('blue_serial');\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":180,"y":640,"wires":[["cec4ed0a.4fbac"]]},{"id":"cec4ed0a.4fbac","type":"http request","z":"e28768f8.fb1468","name":"Request Last Measurements","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.riiotlabs.com/prod/swimming_pool/{{{swimming_pool_id}}}/blue/{{{blue_serial}}}/lastMeasurements?mode=blue_and_strip","tls":"","persist":false,"proxy":"","authType":"","x":420,"y":640,"wires":[["7f2c0cc1.9cdc94"]]},{"id":"793e9d88.e620b4","type":"debug","z":"e28768f8.fb1468","name":"Debug Measurements","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"blue_measure","targetType":"msg","statusVal":"","statusType":"auto","x":920,"y":640,"wires":[]},{"id":"a25c83f2.9cfd7","type":"comment","z":"e28768f8.fb1468","name":"6. On met à jour les données dans HA","info":"","x":190,"y":720,"wires":[]},{"id":"8aa34cb8.eb4a2","type":"inject","z":"e28768f8.fb1468","name":"Every hour","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":80,"wires":[["91333625.f07bf8"]]},{"id":"91333625.f07bf8","type":"api-current-state","z":"e28768f8.fb1468","name":"","server":"cfe85b65.cca4e8","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"switch.piscine_filtration","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":250,"y":120,"wires":[["6274ecf4.66c214"]]},{"id":"6274ecf4.66c214","type":"switch","z":"e28768f8.fb1468","name":"Is Power On ?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"off","vt":"str"},{"t":"eq","v":"on","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":520,"y":120,"wires":[["da5d0377.1a13b"],["d9f36f78.22f07"]]},{"id":"249ce9b0.91f896","type":"comment","z":"e28768f8.fb1468","name":"1. On vérifie que la piscine filtre depuis au moins 5 minutes","info":"","x":250,"y":40,"wires":[]},{"id":"45bbe207.61cc5c","type":"debug","z":"e28768f8.fb1468","name":"Debug State Filtration","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":920,"y":100,"wires":[]},{"id":"da5d0377.1a13b","type":"function","z":"e28768f8.fb1468","name":"Off Message","func":"msg.payload = \"La filtration de la piscine est éteinte.\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":710,"y":100,"wires":[["45bbe207.61cc5c"]]},{"id":"d9f36f78.22f07","type":"function","z":"e28768f8.fb1468","name":"Compare Time","func":"// Date et heure de la mise en route\nvar chgDate = new Date(msg.data.last_changed);\nvar last_changed = chgDate.getTime()\n\n// Date actuelle\nvar nowDate = new Date();\nvar current_time = nowDate.getTime()\n\n// On retourne la différence en minutes\nmsg.payload = Math.floor((current_time-last_changed) / 1000 / 60);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":220,"y":160,"wires":[["9c9f919e.4b5c9"]]},{"id":"9c9f919e.4b5c9","type":"switch","z":"e28768f8.fb1468","name":"More 5 min ?","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"5","vt":"str"},{"t":"gte","v":"5","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":410,"y":160,"wires":[["faa3013c.dd18"],["592c5018.a7589"]]},{"id":"f8577f7a.7eee8","type":"debug","z":"e28768f8.fb1468","name":"Debug State Filtration","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":880,"y":160,"wires":[]},{"id":"faa3013c.dd18","type":"function","z":"e28768f8.fb1468","name":"Less 5 min Message","func":"msg.payload = \"La filtration est allumé depuis moins de 5 minutes.\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":160,"wires":[["f8577f7a.7eee8"]]},{"id":"592c5018.a7589","type":"function","z":"e28768f8.fb1468","name":"Identifiants RiiotLabs","func":"msg.payload = {\n    \"email\": \"LOGIN\",\n    \"password\": \"PASSWORD\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":200,"y":280,"wires":[["93bd29f9.079478"]]},{"id":"d7452b6d.6cdc58","type":"api-call-service","z":"e28768f8.fb1468","name":"Update Temperature","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.pool_temperature","data":"{\"value\":msg.blue_measure.temperature}","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":640,"y":820,"wires":[[]]},{"id":"ae067e9d.393a4","type":"api-call-service","z":"e28768f8.fb1468","name":"Update pH","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.pool_ph","data":"{\"value\":msg.blue_measure.ph}","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":610,"y":860,"wires":[[]]},{"id":"7f2c0cc1.9cdc94","type":"function","z":"e28768f8.fb1468","name":"Format Blue Data","func":"msg.blue_measure = {\n    last_measure: msg.payload.last_blue_measure_timestamp,\n    temperature: msg.payload.data.filter(elm => elm.name == \"temperature\").pop().value,\n    ph: msg.payload.data.filter(elm => elm.name == \"ph\").pop().value,\n    orp: msg.payload.data.filter(elm => elm.name == \"orp\").pop().value,\n    salinity: msg.payload.data.filter(elm => elm.name == \"salinity\").pop().value\n}\nmsg.payload = \"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":670,"y":640,"wires":[["793e9d88.e620b4","41b617dc.8bd2e8"]]},{"id":"41b617dc.8bd2e8","type":"api-current-state","z":"e28768f8.fb1468","name":"","server":"cfe85b65.cca4e8","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"switch.piscine_filtration","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"filtration","override_data":"msg","blockInputOverrides":false,"x":230,"y":760,"wires":[["d5530516.ad4af8"]]},{"id":"d5530516.ad4af8","type":"function","z":"e28768f8.fb1468","name":"Start 5min ?","func":"// Date et heure de la mise en route\nvar chgDate = new Date(msg.filtration.last_changed);\nvar start_filtration = chgDate.getTime()\n\n// Date et heure de la mesrue du Blue Connect\nvar measureDate = new Date(msg.blue_measure.last_measure);\nvar last_measure = measureDate.getTime()\n\n// On vérifie si la mesure à été prise 5 minutes aprés le démarrage de la filtration\nmsg.payload = (last_measure > (start_filtration + 5*60*1000))\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":190,"y":820,"wires":[["4022e44f.6d671c"]]},{"id":"4022e44f.6d671c","type":"switch","z":"e28768f8.fb1468","name":"Measure after filtration start ?","property":"payload","propertyType":"msg","rules":[{"t":"false"},{"t":"true"}],"checkall":"true","repair":false,"outputs":2,"x":320,"y":880,"wires":[["247a3a94.925f26"],["d7452b6d.6cdc58","ae067e9d.393a4","b5dbfc28.7c2c","d21d3fbe.11a6e","6bcd23c8.b5911c"]]},{"id":"b5dbfc28.7c2c","type":"api-call-service","z":"e28768f8.fb1468","name":"Update ORP","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.pool_orp","data":"{\"value\":msg.blue_measure.orp}","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":610,"y":900,"wires":[[]]},{"id":"d21d3fbe.11a6e","type":"api-call-service","z":"e28768f8.fb1468","name":"Update Salinity","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.pool_salinity","data":"{\"value\":msg.blue_measure.salinity}","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":620,"y":940,"wires":[[]]},{"id":"5fdb888b.438f18","type":"debug","z":"e28768f8.fb1468","name":"Debug Measurements","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":900,"y":760,"wires":[]},{"id":"247a3a94.925f26","type":"function","z":"e28768f8.fb1468","name":"Before Filtration Message","func":"msg.payload = \"La mesure a été prise avant la mise en marche de la filtration.\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":760,"wires":[["5fdb888b.438f18"]]},{"id":"6bcd23c8.b5911c","type":"api-call-service","z":"e28768f8.fb1468","name":"Update Analysed at","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"input_datetime","service":"set_datetime","entityId":"input_datetime.pool_analysed_at","data":"{\"datetime\":msg.blue_measure.last_measure}","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":630,"y":980,"wires":[[]]},{"id":"cfe85b65.cca4e8","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

What they are proposing today is to make a POST request on the URL you want when a new measurement is made and pass the data in JSON. Only I’m a new HA user and I don’t know how to create this kind of URL yet.

I hope I partially answered your questions.

do you now how to change region? I live in canada

var opts = {
host: ‘api.riiotlabs.com’,
path: ‘/prod/swimming_pool?deleted=false’,
service: ‘execute-api’,
region: ‘eu-west-1’

Hi Michael, thanks for your work, it’s working fine and I noticed you are actively developing it, 2-3 updates in last week. :slight_smile:

In the github readme you write that it creates sensors/binary sensors, but I can’t find them in HA. Were you referring to MQTT? I wanted to create a lovelace card with those sensors, but I can’t make it work, I’m using the MQTT sensors approach, but all sensors return an “unknown” value. I guess I’m not using the correct approach, any suggestion or example is more than welcome.

I also wanted to ask you if there is a changelog somewhere, I checked the changelog link in the integration, but it throws an error saying there’s no changelog for this addon.

Thanks,

Alessandro