NEWS
Aqualink Pool Automation in iobroker integrieren
-
ORP Wert entspricht bereits dem Chlorinator
Für PH Wert ist es genau das gleiche nur der Sensor 1 => sns_1:
Die Kommastelle kannst du dann mit dem VIS Editor entsprechend setzen.// Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.Pool.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.Pool.Pooldata_PH"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_1` extrahieren let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value; if (sns_1) { console.log("sns_1 extrahiert:", sns_1); // sns_1 in das neue ioBroker-Objekt speichern setState(targetObject, sns_1, true); } else { console.log("Kein sns_1 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } });
Nach diesem Muster kannst du dir auch die Temp Werte bauen.
-
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
ORP Wert entspricht bereits dem Chlorinator
schaut in der App so aus
Meinte Salzelektrolysegerät (Pumpe)
sns_3 ist dann die Temp?
oder wie finde ich das raus?
-
Schau dir die Werte im DP Pooldata an:
0_userdata.0.Pool.PooldataDort sollten alle Daten ersichtlich sein:
Beispiel Temperatur:
"sns_3": { "sensor_type": "Water temp", "state": 1, "value": 25
-
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
Dort sollten alle Daten ersichtlich sein:
ahhh, ich war blind. hab nur die ersten paar zeilen gesehn.
und die gewünschten pack ich alle in das Script von dir?
-
die Pumpe scheint so auf:
"filter_pump": { "state": 1, "type": 1 },
Binde ich die dann so ein?
// Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.Pool.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.Pool.Pooldata_Pumpe"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_2` extrahieren let sns_2 = jsonObject.state.reported.equipment.swc_0.filter_pump.value; if (sns_2) { console.log("sns_2 extrahiert:", filter_pump); // sns_2 in das neue ioBroker-Objekt speichern setState(targetObject, filter_pump, true); } else { console.log("Kein filter_pump gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } });
Und alle 4 in 1 Script?
const axios = require('axios'); // Daten für die POST-Anfrage const daten = { api_key: "EOOEMOW4YR6QNB11", email: "xxxxxxxx@xxxxxx.xx", password: "xxxxxxxxxxx" }; // Erste Anfrage zur Authentifizierung axios.post('https://prod.zodiac-io.com/users/v1/login', daten, { headers: { 'Host': 'prod.zodiac-io.com', 'accept': 'application/json', 'Content-Type': 'application/json', 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.0' } }).then((response) => { setState('0_userdata.0.iAquaLink.IdToken', JSON.stringify(response.data), true); console.log('Daten erfolgreich in ioBroker gespeichert.'); // Extrahieren des idTokens let jsonObject = response.data; let idToken = jsonObject.userPoolOAuth.IdToken; if (idToken) { console.log("idToken extrahiert:", idToken); setState('0_userdata.0.iAquaLink.IdToken_clean', idToken, true); // Zweite Anfrage unter Verwendung des idTokens const options = { method: 'GET', url: 'https://prod.zodiac-io.com/devices/v1/JT22005060/shadow', headers: { 'Host': 'prod.zodiac-io.com', 'accept': 'application/json', 'authorization': idToken, 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.0' } }; return axios.request(options); } else { throw new Error("Kein idToken gefunden!"); } }).then(response => { console.log(response.data); setState('0_userdata.0.iAquaLink.Pooldata', response.data, true); }).catch(error => { console.error('Fehler:', error); }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.Pool.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.Pool.Pooldata_PH"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_1` extrahieren let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value; if (sns_1) { console.log("sns_1 extrahiert:", sns_1); // sns_1 in das neue ioBroker-Objekt speichern setState(targetObject, sns_1, true); } else { console.log("Kein sns_1 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.Pool.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.Pool.Pooldata_ORP"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_2` extrahieren let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value; if (sns_2) { console.log("sns_2 extrahiert:", sns_2); // sns_2 in das neue ioBroker-Objekt speichern setState(targetObject, sns_2, true); } else { console.log("Kein sns_2 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.Pool.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.Pool.Pooldata_Pumpe"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_2` extrahieren let sns_2 = jsonObject.state.reported.equipment.swc_0.filter_pump.value; if (sns_2) { console.log("sns_2 extrahiert:", filter_pump); // sns_2 in das neue ioBroker-Objekt speichern setState(targetObject, filter_pump, true); } else { console.log("Kein filter_pump gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } });
-
Guten Morgen
hab einen Fehler.
Kannst du bitte mal drüberschaun?javascript.0 08:51:34.699 info Start JavaScript script.js.Pool.iAqualink (Javascript/js) javascript.0 08:51:34.700 error script.js.Pool.iAqualink compile failed: at script.js.Pool.iAqualink:79
const axios = require('axios'); // Daten für die POST-Anfrage const daten = { api_key: "EOOEMOW4YR6QNB11", email: "xxxxxxxxx@xxxxxxx.at", password: "xxxxxxxxx" }; // Erste Anfrage zur Authentifizierung axios.post('https://prod.zodiac-io.com/users/v1/login', daten, { headers: { 'Host': 'prod.zodiac-io.com', 'accept': 'application/json', 'Content-Type': 'application/json', 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.0' } }).then((response) => { setState('0_userdata.0.iAquaLink.IdToken', JSON.stringify(response.data), true); console.log('Daten erfolgreich in ioBroker gespeichert.'); // Extrahieren des idTokens let jsonObject = response.data; let idToken = jsonObject.userPoolOAuth.IdToken; if (idToken) { console.log("idToken extrahiert:", idToken); setState('0_userdata.0.iAquaLink.IdToken_clean', idToken, true); // Zweite Anfrage unter Verwendung des idTokens const options = { method: 'GET', url: 'https://prod.zodiac-io.com/devices/v1/JT22005060/shadow', headers: { 'Host': 'prod.zodiac-io.com', 'accept': 'application/json', 'authorization': idToken, 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.0' } }; return axios.request(options); } else { throw new Error("Kein idToken gefunden!"); } }).then(response => { console.log(response.data); setState('0_userdata.0.iAquaLink.Pooldata', response.data, true); }).catch(error => { console.error('Fehler:', error); }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_PH"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_1` extrahieren let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value; if (sns_1) { console.log("sns_1 extrahiert:", sns_1); // sns_1 in das neue ioBroker-Objekt speichern setState(targetObject, sns_1, true); } else { console.log("Kein sns_1 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_ORP"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_2` extrahieren let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value; if (sns_2) { console.log("sns_2 extrahiert:", sns_2); // sns_2 in das neue ioBroker-Objekt speichern setState(targetObject, sns_2, true); } else { console.log("Kein sns_2 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_Pumpe"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_2` extrahieren let sns_2 = jsonObject.state.reported.equipment.swc_0.filter_pump.value; if (sns_2) { console.log("sns_2 extrahiert:", filter_pump); // sns_2 in das neue ioBroker-Objekt speichern setState(targetObject, filter_pump, true); } else { console.log("Kein filter_pump gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } });
-
Der Pfad in Zeile 120 stimmt nicht.
Es gibt unter filter_pump kein "value" sondern nur "state" oder "type"Zudem hast du im Rest vom script alles auf "sns_2" belassen. sns_2 verwendest du bereits für ORP. Du willst aber jetzt den Status der Pumpe auslesen. Also => sns_2 in filter_pump umbenennen.
-
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
Es gibt unter filter_pump kein "value" sondern nur "state" oder "type"
Danke
muss ich dann
let filter_pump = jsonObject.state.reported.equipment.swc_0.filter_pump.state;
verwenden, um zu sehen, ob die Pumpe läuft? -
genau, und darunter ebenfalls alles noch umbenennen wo sns_2 auftaucht.
-
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
genau, und darunter ebenfalls alles noch umbenennen wo sns_2 auftaucht.
es kommt noch immer der Error
javascript.0 15:35:21.966 info Start JavaScript script.js.Pool.iAqualink (Javascript/js) javascript.0 15:35:21.967 error script.js.Pool.iAqualink compile failed: at script.js.Pool.iAqualink:79
const axios = require('axios'); // Daten für die POST-Anfrage const daten = { api_key: "EOOEMOW4YR6QNB11", email: "mail", password: "pwd" }; // Erste Anfrage zur Authentifizierung axios.post('https://prod.zodiac-io.com/users/v1/login', daten, { headers: { 'Host': 'prod.zodiac-io.com', 'accept': 'application/json', 'Content-Type': 'application/json', 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.0' } }).then((response) => { setState('0_userdata.0.iAquaLink.IdToken', JSON.stringify(response.data), true); console.log('Daten erfolgreich in ioBroker gespeichert.'); // Extrahieren des idTokens let jsonObject = response.data; let idToken = jsonObject.userPoolOAuth.IdToken; if (idToken) { console.log("idToken extrahiert:", idToken); setState('0_userdata.0.iAquaLink.IdToken_clean', idToken, true); // Zweite Anfrage unter Verwendung des idTokens const options = { method: 'GET', url: 'https://prod.zodiac-io.com/devices/v1/JT22008430/shadow', headers: { 'Host': 'prod.zodiac-io.com', 'accept': 'application/json', 'authorization': idToken, 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.0' } }; return axios.request(options); } else { throw new Error("Kein idToken gefunden!"); } }).then(response => { console.log(response.data); setState('0_userdata.0.iAquaLink.Pooldata', response.data, true); }).catch(error => { console.error('Fehler:', error); }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_PH"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_1` extrahieren let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value; if (sns_1) { console.log("sns_1 extrahiert:", sns_1); // sns_1 in das neue ioBroker-Objekt speichern setState(targetObject, sns_1, true); } else { console.log("Kein sns_1 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_ORP"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `sns_2` extrahieren let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value; if (sns_2) { console.log("sns_2 extrahiert:", sns_2); // sns_2 in das neue ioBroker-Objekt speichern setState(targetObject, sns_2, true); } else { console.log("Kein sns_2 gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_Pumpe"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `filter_pump` extrahieren let filter_pump = jsonObject.state.reported.equipment.swc_0.filter_pump.value; if (filter_pump) { console.log("filter_pump extrahiert:", filter_pump); // filter_pump in das neue ioBroker-Objekt speichern setState(targetObject, filter_pump, true); } else { console.log("Kein filter_pump gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } }); // Name des Quell-Objekts im ioBroker, das den JSON-String enthält let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; // Name des Ziel-Objekts, in das das idToken gespeichert werden soll let targetObject = "0_userdata.0.iAquaLink.Pooldata_Temp"; // JSON-String aus ioBroker-Objekt abrufen getState(sourceObject, function (err, state) { if (err || !state || !state.val) { console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer."); return; } try { // JSON-String in ein Objekt konvertieren let jsonObject = JSON.parse(state.val); // `Water temp` extrahieren let Water temp = jsonObject.state.reported.equipment.swc_0.Water temp.value; if (Water temp) { console.log("Water temp extrahiert:", Water temp); // Water temp in das neue ioBroker-Objekt speichern setState(targetObject, Water temp, true); } else { console.log("Kein Water temp gefunden!"); } } catch (error) { console.log("Fehler beim Parsen des JSON-Strings:", error); } });
EDIT: das steht im ioB Log
javascript.0 2025-05-13 15:39:33.464 error at processImmediate (node:internal/timers:485:21) javascript.0 2025-05-13 15:39:33.464 error at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1732:17) javascript.0 2025-05-13 15:39:33.464 error at /opt/iobroker/node_modules/iobroker.javascript/main.js:2322:17 javascript.0 2025-05-13 15:39:33.464 error at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2224:37) javascript.0 2025-05-13 15:39:33.464 error at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1956:21) javascript.0 2025-05-13 15:39:33.464 error at new Script (node:vm:117:7) javascript.0 2025-05-13 15:39:33.464 error SyntaxError: Identifier 'sourceObject' has already been declared javascript.0 2025-05-13 15:39:33.464 error ^ javascript.0 2025-05-13 15:39:33.464 error let sourceObject = "0_userdata.0.iAquaLink.Pooldata"; javascript.0 2025-05-13 15:39:33.464 error script.js.Pool.iAqualink compile failed: at script.js.Pool.iAqualink:79
muss da zwischen Token und sns Abfrage eine Pause rein?
-
kannst du dir das noch anschaun?
@negalein sagte in Aqualink Pool Automation in iobroker integrieren:
es kommt noch immer der Error
@negalein sagte in Aqualink Pool Automation in iobroker integrieren:
muss da zwischen Token und sns Abfrage eine Pause rein?