NEWS
Test Intext App v0.0.x
-
Hi,
nachdem ich bei der 0.6 Version nicht mehr schalten konnte und folgendes im Log sehen konnte:
intex.0 2022-06-05 14:20:27.106 info (3669) starting. Version 0.0.6 in /opt/iobroker/node_modules/iobroker.intex, node: v14.17.0, js-controller: 4.0.21 intex.0 2022-06-05 14:19:51.174 warn (1852) Terminated (UNCAUGHT_EXCEPTION): Without reason intex.0 2022-06-05 14:19:51.171 info (1852) terminating intex.0 2022-06-05 14:19:51.143 error (1852) Cannot read property 'toString' of undefined intex.0 2022-06-05 14:19:51.142 error at Intex.onStateChange (/opt/iobroker/node_modules/iobroker.intex/main.js:581:37) intex.0 2022-06-05 14:19:51.142 error (1852) TypeError: Cannot read property 'toString' of undefined intex.0 2022-06-05 14:19:51.137 error (1852) unhandled promise rejection: Cannot read property 'toString' of undefined intex.0 2022-06-05 14:19:51.136 error (1852) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). intex.0 2022-06-05 14:15:05.598 error (1852) {"code":404,"msg":"The device is not found in IOT Hub."} intex.0 2022-06-05 14:15:05.597 error (1852) AxiosError: Request failed with status code 404habe ich vergeblich versucht auf die 0.7 zu updaten. Habe seit 5 min den Spinner bei der Installation per Githublink:
iobroker url https://github.com/TA2k/ioBroker.intex --host raspberrypi-iob install TA2k/ioBroker.intex#600bfb66f1f4d1... NPM version: 6.14.13 Installing TA2k/ioBroker.intex#600bf...ef... (System call) ERROR: Process exited with code 25Per App kann ich schalten. Was kann ich machen?
Adapter selbst ist grün.Grüße und schöne Pfingsten
Thomas -
@tklein said in Test Intext App v0.0.x:
intex.0 2022-06-05 14:19:51.142 error at Intex.onStateChange (/opt/iobroker/node_modules/iobroker.intex/main.js:581:37)
Ich hab den Fehler gefunden....
@plchome-0 :+1:
-
@grex1975 said in Test Intext App v0.0.x:
Wie oft fragt der iobroker Adapter den Status über die cloud ab?
Das liegt an deiner (inneren) Einstellung ich hab 1 eingestellt :-)

Meine Intex-Fernbedienung ist ziemlich wasserempfindlich - ein paar Tropfen und sie spinnt für die nächsten 24h.
Mit der Fernbedienung hatte ich noch keine Wasserprobleme, die ist bei uns immer in der Halterung, wenn wir drinsitzen, allerdings nehme ich die morgens aus der Ladeschale, wenn es warm wird. Da steht die Sonne drauf und der alte Pool ist schon mal ausgestiegen, weil dem Bedienteil zu warm war. Nachts ist die in der Ladeschale auch bei Regen. Weder an meinem Alten noch an dem neuen Pool hatte wir Feuchtigkeitsprobleme.
Wir hatten 2 Jahre einen kleinen 750l ohne WLAN und ich hab jetzt den gleichen mit 1m³ und WLAN bestellt.
Das Projekt mit dem ESP hatte ich zu spät gefunden. Komisch ist, dass man dort dreimal den ESP bespielen muss.
Die Teile hab ich da, wenn ich Zeit habe, werde ich das mal ausprobieren.Wenn es funktioniert, kann ich z.B. für die Kinder 2 Knöpfe machen - Jet für 10 Min ein und Blubberblasen für 10 Min ein
Zigbee-Taster -> iobroker? oder tasmota.Taster -> MQTT -> iobroker -> Script?
Ich hab den jetzt Pool über MQTT in der Homebridge darüber dann in Alexa und Handy.Mit Conbee/dconz ist aber auch ein Zigbee Taster von Xiaomi Aqara möglich, so was hab ich für die Zirkulation. In der Küche und im Bad Zigbee Taster drücken, Alexa sagt, es wurde gestartet und in 2min ist das Wasser warm. Bei 2x Drücken wird auch zur "Unzeit" der Speicher aufgeheizt.
@plchome-0
Hallo,
wie hast du das mit der homebridge Anbindung gemacht?
"Ich hab den jetzt Pool über MQTT in der Homebridge darüber dann in Alexa und Handy."
Ich finde kein plugin für intex...Danke,
Peter -
@plchome-0
Hallo,
wie hast du das mit der homebridge Anbindung gemacht?
"Ich hab den jetzt Pool über MQTT in der Homebridge darüber dann in Alexa und Handy."
Ich finde kein plugin für intex...Danke,
Peter -
@drheck Ja, ich hab alles über MQTT an die Homebridge angeklemmt. Allerdings ist die Alexa-Anbindung nun auch kostenpflichtig, aber mit 2$ im Monat fair :-)
ioBroker Alexa kostet aber auch nur 1,75 im Monat....@plchome-0 Okay. Danke für die Info. Aber wie mache ich das über MQTT? Gibt es dazu eine Anleitung?
-
Hallo plchome,
ist das Skript komplett und kann man dein Skript kopieren. Ich habe die selbe Konstellation mit dem Intex Pool und PV Anlage.
Grüße
-
Hallo plchome,
ist das Skript komplett und kann man dein Skript kopieren. Ich habe die selbe Konstellation mit dem Intex Pool und PV Anlage.
Grüße
@diamand2k22 Es schauf auf den Akku füllstand...
let autoheat = false //const pvSOC='growatt.0.359213.devices.NNCJA2400C.statusData.SOC'/*Soc*/; //const pvOK='growatt.0.info.connection'; const pvSOC='0_userdata.0.grott.values.SOC'/*Soc*/; const pvOK='0_userdata.0.grott.buffered'; const poolPower = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Power" const poolHeat = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Heat" const poolSanitzer = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Sanitzer" const poolTemperatur = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Temperature" const poolTargetTemperature = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.TargetTemperature" start() async function start() { let state = await getStateAsync(pvSOC); doHeat(state); } let run=false schedule('0,15,30,45 * * * *', doSchedule) let errcount = 0 async function doSchedule(){ if (run) { log ('double run') return } try { run = true log ('check') let [ok, temp, state, heat] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(pvSOC), getStateAsync(poolHeat)]) //if (ok.val == false) if (ok.val != "no") {errcount++} else {errcount = 0}; //if (autoheat && ok.val == false && errcount >= 3) { if (autoheat && ok.val != "no" && errcount >= 3) { if (heat.val) setState(poolHeat,false,false); log ('emergency off') autoheat = false; sendTo("email.0", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com, xxyyzz@gmail.com", // comma separated multiple recipients. subject: "Der Inverter ist seit 45min gestört", text: "Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } else { doHeat(state); } } finally { run=false } } on({id: pvSOC, change: "ne"},(obj)=>{doHeat(obj.state)}); async function doHeat(state) { let h = (new Date()).getHours() let [ok, temp, target, heat, sanitzer] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(poolTargetTemperature), getStateAsync(poolHeat), getStateAsync(poolSanitzer)]) //if (!autoheat && (ok.val == true) && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { if (!autoheat && (ok.val == "no") && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { autoheat = true; //setState(poolPower,true,false); if (sanitzer.val) setState(poolSanitzer,false,false); if (!heat.val) setState(poolHeat,true,false); log ('on') sendTo("email.0", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com, xxyyzz@gmail.com", // comma separated multiple recipients. subject: "Es ist viel Sonne am Himmel", text: "Der Pool wird bei "+temp.val+"°C auf "+target.val+"°C geheitzt..." }); } else if (autoheat && (((state.val < 80) && (h > 12) ) || ((state.val < 95) && (h > 17)) || ((state.val < 55) && (h >= 9) && (h <= 12))|| ((state.val < 29) && (h >= 4) && (h <= 8)))) { autoheat = false; if (heat.val) setState(poolHeat,false,false); log ('off') sendTo("email.0", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com, xxyyzz@gmail.com", // comma separated multiple recipients. subject: "Die Sonne geht weg", text: "Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } }; -
@diamand2k22 Es schauf auf den Akku füllstand...
let autoheat = false //const pvSOC='growatt.0.359213.devices.NNCJA2400C.statusData.SOC'/*Soc*/; //const pvOK='growatt.0.info.connection'; const pvSOC='0_userdata.0.grott.values.SOC'/*Soc*/; const pvOK='0_userdata.0.grott.buffered'; const poolPower = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Power" const poolHeat = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Heat" const poolSanitzer = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Sanitzer" const poolTemperatur = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.Temperature" const poolTargetTemperature = "intex.0.e8fa6219-64f7-4aa2-bac4-b92f37ebf9af.control.TargetTemperature" start() async function start() { let state = await getStateAsync(pvSOC); doHeat(state); } let run=false schedule('0,15,30,45 * * * *', doSchedule) let errcount = 0 async function doSchedule(){ if (run) { log ('double run') return } try { run = true log ('check') let [ok, temp, state, heat] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(pvSOC), getStateAsync(poolHeat)]) //if (ok.val == false) if (ok.val != "no") {errcount++} else {errcount = 0}; //if (autoheat && ok.val == false && errcount >= 3) { if (autoheat && ok.val != "no" && errcount >= 3) { if (heat.val) setState(poolHeat,false,false); log ('emergency off') autoheat = false; sendTo("email.0", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com, xxyyzz@gmail.com", // comma separated multiple recipients. subject: "Der Inverter ist seit 45min gestört", text: "Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } else { doHeat(state); } } finally { run=false } } on({id: pvSOC, change: "ne"},(obj)=>{doHeat(obj.state)}); async function doHeat(state) { let h = (new Date()).getHours() let [ok, temp, target, heat, sanitzer] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(poolTargetTemperature), getStateAsync(poolHeat), getStateAsync(poolSanitzer)]) //if (!autoheat && (ok.val == true) && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { if (!autoheat && (ok.val == "no") && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { autoheat = true; //setState(poolPower,true,false); if (sanitzer.val) setState(poolSanitzer,false,false); if (!heat.val) setState(poolHeat,true,false); log ('on') sendTo("email.0", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com, xxyyzz@gmail.com", // comma separated multiple recipients. subject: "Es ist viel Sonne am Himmel", text: "Der Pool wird bei "+temp.val+"°C auf "+target.val+"°C geheitzt..." }); } else if (autoheat && (((state.val < 80) && (h > 12) ) || ((state.val < 95) && (h > 17)) || ((state.val < 55) && (h >= 9) && (h <= 12))|| ((state.val < 29) && (h >= 4) && (h <= 8)))) { autoheat = false; if (heat.val) setState(poolHeat,false,false); log ('off') sendTo("email.0", { //from: "iobroker@mydomain.com", //to: "aabbcc@gmail.com, xxyyzz@gmail.com", // comma separated multiple recipients. subject: "Die Sonne geht weg", text: "Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } }; -
-
-
@diamand2k22
doSchedule prüft ob der Inverter erreichbar ist und schaltet dann ab
doHeat prüft den Füllstand des Akku und die Uhrzeitok danke, kannst du da eine Vorlage posten? ich weiß du hast dir da viel Mühe gemacht, aber stehe noch am Anfang was JavaSscript betrifft und tu mich da etwas schwer, mit blockly gehts da so einigermaßen :-D
Grüße
-
ok danke, kannst du da eine Vorlage posten? ich weiß du hast dir da viel Mühe gemacht, aber stehe noch am Anfang was JavaSscript betrifft und tu mich da etwas schwer, mit blockly gehts da so einigermaßen :-D
Grüße
-
@diamand2k22 Mehr als das Script habe ich nicht.
ok trotzdem danke! dann schau ich mal, dass ich mir was zusammen bastel :-D
-
ok trotzdem danke! dann schau ich mal, dass ich mir was zusammen bastel :-D
-
@diamand2k22 h ist die Sunde am Tag, state.val ist der Akkustand
ich hab das Skript auf WhatsApp umgestellt.
kann dir mal kurz zeigen, wie es aussieht.let autoheat = false const pvSOC='fronius.0.powerflow.P_PV'/*pv power*/; //const pvOK='growatt.0.info.connection'; const pvOK=''; const poolPower = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Power" const poolHeat = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Heat" const poolSanitzer = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Sanitzer" const poolTemperatur = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Temperature" const poolTargetTemperature = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.TargetTemperature" start() async function start() { let state = await getStateAsync(pvSOC); doHeat(state); } let run=false schedule('0,15,30,45 * * * *', doSchedule) let errcount = 0 async function doSchedule(){ if (run) { log ('double run') return } try { run = true log ('check') let [ok, temp, state, heat] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(pvSOC), getStateAsync(poolHeat)]) //if (ok.val == false) if (ok.val != "no") {errcount++} else {errcount = 0}; //if (autoheat && ok.val == false && errcount >= 3) { if (autoheat && ok.val != "no" && errcount >= 3) { if (heat.val) setState(poolHeat,false,false); log ('emergency off') autoheat = false; sendTo("whatsapp-cmb.0", "send", { text: "*Der Inverter ist seit 45min gestört!*<br>Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } else { doHeat(state); } } finally { run=false } } on({id: pvSOC, change: "ne"},(obj)=>{doHeat(obj.state)}); async function doHeat(state) { let h = (new Date()).getHours() let [ok, temp, target, heat, sanitzer] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(poolTargetTemperature), getStateAsync(poolHeat), getStateAsync(poolSanitzer)]) //if (!autoheat && (ok.val == true) && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { if (!autoheat && (ok.val == "no") && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { autoheat = true; //setState(poolPower,true,false); if (sanitzer.val) setState(poolSanitzer,false,false); if (!heat.val) setState(poolHeat,true,false); log ('on') sendTo("whatsapp-cmb.0", "send", { text: "*Es ist viel Sonne am Himmel!*<br>Der Pool wird bei "+temp.val+"°C auf "+target.val+"°C geheitzt..." }); } else if (autoheat && (((state.val < 80) && (h > 12) ) || ((state.val < 95) && (h > 17)) || ((state.val < 55) && (h >= 9) && (h <= 12))|| ((state.val < 29) && (h >= 4) && (h <= 8)))) { autoheat = false; if (heat.val) setState(poolHeat,false,false); log ('off') sendTo("whatsapp-cmb.0", "send", { subject: "Die Sonne geht weg", text: "*Die Sonne geht weg!*<br>Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } };er bring mir als Fehler:

Gruß
-
@diamand2k22 ja der Objektname für pvOK fehlt. Daher ist der State für ok null und hat keine Propety val.
Das Script geht auch auf Akkustand 0%-100% und nicht auf PV-Leistung.
Durch die schwankende Leistung wird das so nicht funktionieren. -
@diamand2k22 ja der Objektname für pvOK fehlt. Daher ist der State für ok null und hat keine Propety val.
Das Script geht auch auf Akkustand 0%-100% und nicht auf PV-Leistung.
Durch die schwankende Leistung wird das so nicht funktionieren.Ok, Leider habe ich meinen Akku noch nicht.
Dann schau ich mal ob ich das Skript auf pv überschuss Leistung in w umgestellt bekommen.
Const pvOK liefert True or false Signal oder?Danke und Grüße
-
Ok, Leider habe ich meinen Akku noch nicht.
Dann schau ich mal ob ich das Skript auf pv überschuss Leistung in w umgestellt bekommen.
Const pvOK liefert True or false Signal oder?Danke und Grüße
-
Danke :+1:
-
Danke :+1:
ich wollte es jetzt so lösen, aber irgendwo ist noch der Wurm drin.
Dein Skript wird ja per cron alle 15 Minuten aufgerufen, dann muss ich noch eine Lösung finden, wie ich den timeout verarbeite.Wenn PV Grid (Überschuss in Watt 5min) über 1500W ist, schaltet der Pool ein, wenn PV Grid <=100W über 2min, schaltet der Pool wieder ab.
let autoheat = false const pvSOC='fronius.0.powerflow.P_Grid'/*grid power*/; const pvOK='fronius.0.info.connection'/**/; var delayOn, delayOff; const poolPower = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Power" const poolHeat = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Heat" const poolSanitzer = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Sanitzer" const poolTemperatur = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.Temperature" const poolTargetTemperature = "intex.0.7e88c852-bc88-4470-a009-d8d4744363f6.control.TargetTemperature" start() async function start() { let state = await getStateAsync(pvSOC); doHeat(state); } let run=false schedule('0,15,30,45 * * * *', doSchedule) let errcount = 0 async function doSchedule(){ if (run) { log ('double run') return } try { run = true log ('check') let [ok, temp, state, heat] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(pvSOC), getStateAsync(poolHeat)]) if (ok.val == false) //if (ok.val != "no") {errcount++} else {errcount = 0}; if (autoheat && ok.val == false && errcount >= 3) { //if (autoheat && ok.val != "no" && errcount >= 3) { if (heat.val) setState(poolHeat,false,false); log ('emergency off') autoheat = false; sendTo("whatsapp-cmb.0", "send", { text:"*Der Inverter ist seit 45min gestört!*Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); } else { doHeat(state); } } finally { run=false } } on({id: pvSOC, change: "ne"},(obj)=>{doHeat(obj.state)}); async function doHeat(state) { let h = (new Date()).getHours() let [ok, temp, target, heat, sanitzer] = await Promise.all([getStateAsync(pvOK), getStateAsync(poolTemperatur), getStateAsync(poolTargetTemperature), getStateAsync(poolHeat), getStateAsync(poolSanitzer)]) if (!autoheat && (ok.val == true) && (((state.val >= -1500) && (h >= 9) && (h <= 18)) )) { //if (!autoheat && (ok.val == "no") && (((state.val >= 30) && (h >= 4) && (h <= 8)) ||((state.val >= 60) && (h >= 9) && (h <= 10)) || ((state.val >= 85) && (h >= 11) && (h <= 15)))) { (function () {if (delayOn) {clearTimeout(delayOn); delayOn = null;}})(); } else if ((state.oldState ? state.oldState.val : "") >= -1500) { delayOn = setTimeout(async function () { autoheat = true; //setState(poolPower,true,false); if (sanitzer.val) setState(poolSanitzer,false,false); if (!heat.val) setState(poolHeat,true,false); log ('on') sendTo("whatsapp-cmb.0", "send", { text:"*Es ist viel Sonne am Himmel!*Der Pool wird bei "+temp.val+"°C auf "+target.val+"°C geheitzt..." }); }, 300000); } else if (autoheat && (ok.val == true) && (((state.val <=-100) && (h >= 9) && (h <= 18)) )) { (function () {if (delayOff) {clearTimeout(delayOff); delayOff = null;}})(); } else if ((state.oldState ? state.oldState.val : "") <= -100) { delayOff = setTimeout(async function () { autoheat = false; if (heat.val) setState(poolHeat,false,false); log ('off') sendTo("whatsapp-cmb.0", "send", { text:"*Die Sonne geht weg!*Die Poolheizung wird bei "+temp.val+"°C abgestellt..." }); }, 120000); } };Grüße