BlueConnect : Sonde piscine

Idem que toi j’ai acheté sonde et batterie l’année dernière :face_with_symbols_over_mouth:
Les données doivent bien être stockées dans le Cloud vu qu’on a les infos via l’application…
Et les autres sonde je n’aime pas, je veux un système dans mon local piscine et non dans la piscine

C’est dégeulasse !!! donc plus d’affichage d’infos sur ma domotique. juste leur appli

Je viens d’installer Charles Proxy pour voir un peu ce qui se passe quand on lance l’application mobile et voici le genre d’infos que retourne l’API :

 {
	"status": "OK",
	"last_blue_measure_timestamp": "2021-02-27T20:27:48.000Z",
	"blue_device_serial": "********",
	"swimming_pool_id": "********************",
	"data": [{
		"name": "temperature",
		"priority": 10,
		"timestamp": "2021-02-27T20:27:48.000Z",
		"expired": false,
		"value": 15,
		"trend": "decrease",
		"ok_min": 20,
		"ok_max": 40,
		"warning_high": 50,
		"warning_low": 5,
		"gauge_max": 50,
		"gauge_min": 0,
		"issuer": "sigfox"
	}, {
		"name": "ph",
		"priority": 20,
		"timestamp": "2021-02-27T20:27:48.000Z",
		"expired": false,
		"value": 6.4,
		"trend": "stable",
		"ok_min": 7.2,
		"ok_max": 7.6,
		"warning_high": 8.4,
		"warning_low": 6.6,
		"gauge_max": 10,
		"gauge_min": 5,
		"issuer": "sigfox"
	}, {
		"name": "orp",
		"priority": 30,
		"timestamp": "2021-02-27T20:27:48.000Z",
		"expired": false,
		"value": 558,
		"trend": "stable",
		"ok_min": 650,
		"ok_max": 750,
		"warning_high": 900,
		"warning_low": 400,
		"gauge_max": 1000,
		"gauge_min": 300,
		"issuer": "sigfox"
	}, {
		"name": "salinity",
		"priority": 50,
		"timestamp": "2021-02-27T20:27:48.000Z",
		"expired": false,
		"value": 4.6,
		"trend": "increase",
		"ok_min": 2.7,
		"ok_max": 3.4000000000000004,
		"warning_high": 5.1000000000000005,
		"warning_low": 1.3000000000000003,
		"gauge_max": 10,
		"gauge_min": 0,
		"issuer": "sigfox"
	}]
}

Du coup, je me dit qu’il y a peut être un moyen de récupérer les infos en se connectant régulièrement à l’api de bluriiot :thinking:

1 « J'aime »

J’ai réussi à créer un enchainement dans Postman pour récupérer les données via https://api.riiotlabs.com/ :

  1. Une première requête sur https://api.riiotlabs.com/prod/user/login pour récupérer les « Crédentials »
  2. Une deuxième requête sur https://api.riiotlabs.com/prod/swimming_pool?deleted=false pour récupérer l’identifiant de la piscine
  3. Une troisième requête sur https://api.riiotlabs.com/prod/swimming_pool/{{swimming_pool_id}}/blue pour récupérer l’identifiant du Blue Connect
  4. Enfin une dernière requête sur https://api.riiotlabs.com/prod/swimming_pool/{{swimming_pool_id}}/blue/{{blue_serial}}/lastMeasurements?mode=blue_and_strip pour récupérer les informations ci dessus

La question, comment migrer ces requêtes manuelles de POSTMAN dans Jeedom ??

Sinon j’ai aussi trouvé ça : https://github.com/LordMike/MBW.BlueRiiot2MQTT Un contenu docker qui récupère les infos du Blue Connect et les met à disposition via MQTT

Je suis étonné que le protocole ne soit pas encrypté en ssl, mais tu as donc toutes les infos en json, qui est un protocol de transfert stable et facile à traiter.
Avec pas grand chose, il est possible de faire les appels directement à bluriiot via un cron en se faisant passer pour l’applu
A quelle fréquence le blueconnect envoit ces infos à blueriiot?
Comment s’authentifie l’appli auprès de blueriiot?

[EDIT: commentaire caduque suite au message de @arnault.raes ]

@arnault.raes bonjour alors je ne suis pas un expert, d’ailleurs je vais m’y pencher dessus, mais avec script, et scénario, ne pourrait on pas récupérer les infos toutes les heures ?
J’ai essayé bêtement de mettre l’adresse avec ident et login (ton n.1) je n’ai rien, je vais voir ce qu’est postman.

Il faut faire une requête POST pour le premier lien en passant l’email et le mot de passe en JSON dans la requête. Avec Jeedom je sais faire cette première requête mais pas les suivantes car il faut signer les requêtes GET en AWS4… Ca doit être possible en PHP mais je ne sais pas faire. J’ai Home Assistant en test et j’ai réussi à faire l’enchainement des requêtes dans Node-Red.

J’avais comme idée justement de faire une lecture des données sur leur cloud toutes les heures mais contrairement à IFTTT ca ne veux pas forcement dire de nouvelles données toutes les heures. Les lectures du Blue Connect ne sont pas régulière… Dans les données remontés, il y a la date et l’heure de la mesure donc ca devrait le faire.

Mais comme on se retrouve à mettre les mains complètement dans le cambouis, j’ai même envie de regarder si on peux pas forcer une lecture en bluethoot… Vu que la sonde est dans mon local piscine, les mesures lorsque la filtration n’est pas en cours ne m’intéresse pas !!!

@arnault.raes salut je suis d’accord avec toi 4 relevés par jours c’est largement suffisant, suffisant pour le plugin piscine (qui gère le temps de filtration) suffisant pour le reste (pH, redox…)
Les données d’une piscine ne bougent pas toutes les 30mn :innocent: ou alors il y a un gros soucis en quelque part

Je crois qu’arnault n’a pas parlé de 4 mesures par jour mais 4 identifications pour récupération des infos :wink:

Bonsoir,

On peux appeler l’API autant de fois que l’on veux mais si on ne veux pas être bloqué, je pense qu’une fois par heure c’est bien suffisant. Et pour ma part c’est encore moins car avant de faire appel à l’API je vérifie que la filtration de la piscine est active mais comme je pilote mon électrolyseur de sel en fonction du potentiel RedOx j’ai besoin de plusieurs valeurs par jour…

Etant en plein test de Home Assistant pour voir si je migre ou pas… j’ai profité pour implémenter ce contournement sous Node-RED (surtout que je ne sais pas le faire nativement sous Jeedom). J’ai regardé vite fait, on peux interfacer Node-RED et Jeedom :innocent:.

Voici le flow pour ceux qui veulent l’adapter :

[
    {
        "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": 320,
        "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": 480,
        "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": 460,
        "wires": []
    },
    {
        "id": "aec473dd.669f6",
        "type": "comment",
        "z": "e28768f8.fb1468",
        "name": "2. On s'identifie sur l'API de RiiotLabs",
        "info": "",
        "x": 190,
        "y": 280,
        "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": 340,
        "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": 300,
        "wires": []
    },
    {
        "id": "8e81189f.1240e8",
        "type": "comment",
        "z": "e28768f8.fb1468",
        "name": "3. On récupère l'identifiant de la piscine",
        "info": "",
        "x": 190,
        "y": 440,
        "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": 480,
        "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": 500,
        "wires": [
            [
                "b741599d.3e03b8"
            ]
        ]
    },
    {
        "id": "1f6c4977.8c2f57",
        "type": "comment",
        "z": "e28768f8.fb1468",
        "name": "4. On récupère l'identifiant du Blue Connect",
        "info": "",
        "x": 210,
        "y": 600,
        "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": 180,
        "y": 640,
        "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": 630,
        "y": 620,
        "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": 400,
        "y": 640,
        "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": 630,
        "y": 660,
        "wires": [
            [
                "df5da1bd.b208a"
            ]
        ]
    },
    {
        "id": "479b50e9.9a031",
        "type": "comment",
        "z": "e28768f8.fb1468",
        "name": "5. On récupère les dernieres mesures",
        "info": "",
        "x": 190,
        "y": 760,
        "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": 800,
        "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": 800,
        "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": 800,
        "wires": []
    },
    {
        "id": "a25c83f2.9cfd7",
        "type": "comment",
        "z": "e28768f8.fb1468",
        "name": "6. On met à jour les données dans HA",
        "info": "",
        "x": 190,
        "y": 880,
        "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": 140,
        "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": 140,
        "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": 120,
        "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": 120,
        "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": 200,
        "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": 200,
        "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": 200,
        "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": 200,
        "wires": [
            [
                "f8577f7a.7eee8"
            ]
        ]
    },
    {
        "id": "592c5018.a7589",
        "type": "function",
        "z": "e28768f8.fb1468",
        "name": "Identifiants RiiotLabs",
        "func": "msg.payload = {\n    \"email\": \"EMAIL\",\n    \"password\": \"PASSWORD\"\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 200,
        "y": 320,
        "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": 980,
        "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": 1020,
        "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": 800,
        "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": 920,
        "wires": [
            [
                "d5530516.ad4af8"
            ]
        ]
    },
    {
        "id": "d5530516.ad4af8",
        "type": "function",
        "z": "e28768f8.fb1468",
        "name": "Compare Time",
        "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": 200,
        "y": 980,
        "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": 1040,
        "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": 1060,
        "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": 1100,
        "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": 860,
        "y": 920,
        "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": 610,
        "y": 920,
        "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": 1140,
        "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
    }
]

Tu devrais en faire un plugin pour jeedoom :wink:

Vu que je songe de plus en plus sérieusement à switcher de Jeedom à Home Assistant, je vais pas me lancer dans un plugin :slight_smile:

1 « J'aime »

Reponse blueriiot : Bonjour,

C’est une décision qui a été difficile à prendre mais qui a été néanmoins prise.

Nous voulions arrêter le service avant le début de la saison pour éviter que de nouveaux utilisateurs utilisent ce service pour ensuite, être coupé quelques semaines plus tard.

Nous discutons actuellement au sein de l’équipe pour garder le service encore quelques mois et espérons trouver une autre solution qui vous conviendra.

Bien cordialement,

L’équipe Blueriiot

Bonjour,

Je prends connaissance de cette information et je partage votre déception, je viens également de leur faire savoir mon mécontentement via la Faq et j’encourage les autres utilisateurs mécontents de faire de même !

1 « J'aime »

C’est une réponse bateau, j’ai eu exactement la même au mot près !!!

Idem j’ai fait part de mon mécontentement et même réponse copiée collée. J’ai prévenu que je demanderais le remboursement si aucune solution de lier Blue connect avec Jeedom n’est proposée.

je vais également en faire de même… c’est honteux. et c’est évidemment surement lié à un pb de cout. car maintenant ils doivent probablement être facturé à la connection. IFTTT a du changer le plan tarifaire pour les pro comme ils l’ont fait pour les utilisateurs. Ils auraient pu nous proposer un complément d’abo IFTTT si c’est ça la raison…

« Ils auraient pu nous proposer un complément d’abo IFTTT si c’est ça la raison… »
Ben non, perso je n’ai pas acheté un abonnement, mais un pack je les cites « Blue Connect Plus est le pack ultime et sans abonnement »
Une API serait la solution que quelqu’un de plus compétent que moi puisse faire un plugin. Ils m’avaient dit qu’il en proposerait une lorsque je me suis renseigné avant l’achat. J’en ai 3 de blue connect Plus :frowning:

oui moi aussi, j’ai acheté le pack premium . Mais si maintenant IFTTT a changé son modèle tarifaire, et qu’ils font payer qquechose qui était gratuit auparavant, je peux comprendre que ça pose pb à BLUE RIIOT à terme, c’est l’objet de mon message.

Ce n’est pas faut en effet ! Pour ma part je n’utilise plus qu’IFTTT pour… ma sonde Blue Connect… J’ai supprimé toutes les autres applets quand c’est passé payant au delà des 3 applets.