NEWS
Aqualink Pool Automation in iobroker integrieren
-
Alle DPs => Typ: "String" und Rolle: "State"
Am besten alle DP in 0_userdata.0.xxxx vorab anlegen.ich bekomm einen Fehler.
Ist nicht ersichtlich woher.javascript.0 14:59:13.580 info Start JavaScript script.js.Pool.iAqualink (Javascript/js) javascript.0 14:59:13.589 info registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 14:59:14.322 error Fehler: -
ich bekomm einen Fehler.
Ist nicht ersichtlich woher.javascript.0 14:59:13.580 info Start JavaScript script.js.Pool.iAqualink (Javascript/js) javascript.0 14:59:13.589 info registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 14:59:14.322 error Fehler: -
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
Zeile 29: Richtige bzw. eigene Serien Nr. verwendet ?
ahhhhh, übersehn
jetzt kommen Daten, aber mit Warn.
DP werden befüllt
javascript.0 15:35:55.780 info Start JavaScript script.js.Pool.iAqualink (Javascript/js) javascript.0 15:35:55.789 info registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 15:35:56.600 info Daten erfolgreich in ioBroker gespeichert. javascript.0 15:35:56.600 info idToken extrahiert: javascript.0 15:35:56.886 info { state: { reported: { aws: [Object], vr: 'V85E4', vr_esp: 'V85E4', equipment: [Object], schedules: [Object] } }, deviceId: 'JT22008430', ts: 1747056956 } javascript.0 15:35:56.889 warn at script.js.Pool.iAqualink:45:5 -
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
Zeile 29: Richtige bzw. eigene Serien Nr. verwendet ?
ahhhhh, übersehn
jetzt kommen Daten, aber mit Warn.
DP werden befüllt
javascript.0 15:35:55.780 info Start JavaScript script.js.Pool.iAqualink (Javascript/js) javascript.0 15:35:55.789 info registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 15:35:56.600 info Daten erfolgreich in ioBroker gespeichert. javascript.0 15:35:56.600 info idToken extrahiert: javascript.0 15:35:56.886 info { state: { reported: { aws: [Object], vr: 'V85E4', vr_esp: 'V85E4', equipment: [Object], schedules: [Object] } }, deviceId: 'JT22008430', ts: 1747056956 } javascript.0 15:35:56.889 warn at script.js.Pool.iAqualink:45:5ok prima, jetzt kannst du mit entsprechenden Filterungen weitere Datenpunkte befüllen, je nachdem was du benötigst:
Beispiel für ORP Werte:
// 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); } }); -
ok prima, jetzt kannst du mit entsprechenden Filterungen weitere Datenpunkte befüllen, je nachdem was du benötigst:
Beispiel für ORP Werte:
// 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); } });@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
ok prima, jetzt kannst du mit entsprechenden Filterungen weitere Datenpunkte befüllen, je nachdem was du benötigst:
Danke
hast du auch noch für pH, Chlorination und Temp?
-
@hexagon sagte in Aqualink Pool Automation in iobroker integrieren:
ok prima, jetzt kannst du mit entsprechenden Filterungen weitere Datenpunkte befüllen, je nachdem was du benötigst:
Danke
hast du auch noch für pH, Chlorination und Temp?
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.
-
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?
-
@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?
-
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": 25die 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); } }); -
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": 25Guten 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:79const 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); } }); -
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:79const 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.
-
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? -
@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? -
@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:79const 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:79muss da zwischen Token und sns Abfrage eine Pause rein?
-
@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:79const 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:79muss 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?
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden