NEWS
Steuerung Gecko in Touch 2 per iob möglich? (Wellis)
-
@rrov1 mein Loggingscript kommt auch somit damit klar. (täglicher Reset)
Bei der Laufzeit von der Zirkulationspumpe habe ich mir eine andere gekauft, die bei identischer Leistung die Hälfte verbraucht.
Danke für das wöchentliche Updatescript. Werde ich mir mal anschauen und versuchen zu verstehen, was es macht. Ebenfalls Danke für die zukünftigen Erweiterungen. Eine Steuerung hast du nicht zufällig vor, oder?
Der DP "javascript.0.Datenpunkte.SwimSpa.actualPowerConsumption" wird bei dir separat von einem Script aktualisiert, oder?
Der DP "javascript.0.Datenpunkte.SwimSpa.preferredHeating" ist vorhanden, falls mehrere SPA in einem Netzwerk sind?Gruß
Thomas -
@tklein Hallo, ich habe hier einen SwimSpa stehen, der 2 unabhängige Steuerungen hat. Der DP:
- actualPowerConsumption wird von einem anderen Script gesetzt (ich fand es nur praktisch den Wert gleich hier mit anzusiedeln),
- automaticHeating, preferredHeating und preferredHeatingName brauche ich für ein separates Script mit dem ich je nach Verfügbarkeit von Solarstrom die Heizung aktiviere (automaticHeating), steuere welche der beiden Heizungen aktiviert wird (preferredHeating) und preferredHeatingName ist nur für die Visualiserung.
Mit dem letzten Punkt geht eine Steuerung schon einher, sprich ich habe aktuell Python Scripte, die den Wasserpflegemodus setzen (Standard oder Abwesend). Ich hatte sogar die Nachführung der Temperatur schon mit drinnen, hat sich aber als nicht so praktisch erwiesen (der leidige WAF).
Was möchtest du denn steuern? Pumpen, Licht? Sollte nicht das Problem darstellen, Template habe ich, muss es nur aufhübschen. Ist alles noch so auf dem Level, geschrieben, getestet, läuft.
-
@rrov1 alles klar.
für die Steuerung wären folgende Befehle top:
- Pumpe 1 an/aus
- Pumpe 2 an/aus
- Zirkulation an/aus
- Setzen der Zieltemperatur
- evtl global Heizung an/aus
- Licht an/aus
- Farbe/Helligkeit je Zone (bei Nutzung des Moduls "in mix 300")
LG
Thomas -
@rrov1 Moinsen,
so wie es aussieht, kann der kapazitive Sensor TTP223 an einem ESP z.B. mit Tasmota manuelles Schalten erkennen. Werde jeweils 2x3 unter dem Acryl festkleben. Dann per MQTT kommen die Daten an und ich könnte Pumpe 1 etc steuern ohne mich immer zum Display bewegen zu müssen oder alternativ den Alexabefehl geben zu müssen.
-
@tklein Könnte ein Lösung sein. Ich habe am WE ein bisschen gebastelt, ich bin aber noch nicht so glücklich mit dem Ergebnis, denn mir fehlt noch die nötige Stabilität, nicht jeder Aufruf des Python API führt tatsächlich zu einem erfolgreichen Schaltvorgang an der Pumpe .
Zum aktuellen Stand:- ich habe mal auf github ein kleines Repo angelegt: https://github.com/rrov1/SwimSpa - jedes mal hier das Script hochladen ist mir zu mühsam
- Doku hat das Repo noch keine, kommt noch
- im Ordner Javascript ist das Script zum anlegen bzw. aktualisieren der Datenpunkte - bitte führe es mal aus, damit du den aktuellen Stand der Datenpunkte bekommst, ich habe welche hinzugefügt bzw. auch Anpassungen an den bestehenden vorgenommen (nur bei der Datenpunktdefinition, die DP selbst bleiben alle bestehen)
- im Ordner Python findest du die Python Scripte, wenn du die Datenpunkte aktualisierst musst du unbedingt auch spa_updateBulk.py und spa_config.py austauschen (sonst meckert ioBroker im Log über fehlende ack-Attribute beim setzen)
- Wenn du die Scripte austauschst, denk denk bitte dran Konstanten im Script anzupassen (hier habe ich etwas optimiert, es ist jetzt alles an einer Stelle am Anfang)
- spa_config.py am besten einmal täglich ausführen, damit du die Erinnerungen tagesaktuell hast, einmal die Woche wäre glaube ich zu wenig
- das spa_switchPump.py funktioniert, benötigt ein paar Parameter. Die bekommt es von einen Javascript, das bei Veränderung des Datenpunktes über on() getriggert wird, das ist noch nicht fertig, gib mir mal noch etwas Zeit.
- in.mix 300 steuern scheint übrigens nicht mit der bestehenden Version der geckolib zu gehen, das Licht an/aus war im ersten Versuch unwillig, den Rest (Temperatur/Heizung) werde ich nach und nach noch ergänzen
-
@rrov1 klasse, vielen dank dafür.
anbei meine Infos/Bemerkungen/Fragen
Zur Info hier ein paar Ausgaben nach dem Aufruf der python skripte:
python3.10 spa_updateBulk.py
Connecting to Wellness ....... connected Water heater : Heater: Temperature 37.5°C, SetPoint 37.5°C, Real SetPoint 37.5°C, Operation Idle sending temp and heater ops sending water care sending pumps Pump 1 Pump 2 Waterfall sending lights Lights sending sensors Circulating Pump Ozone Smart Winter Mode:Active Filter Status:Clean Filter Status:Purge javascript.0.Datenpunkte.SwimSpa.0.Temperatureinheit=%C2%B0C&ack=true& javascript.0.Datenpunkte.SwimSpa.0.AktuelleTemperatur=37.5&ack=true& javascript.0.Datenpunkte.SwimSpa.0.ZielTemperatur=37.5&ack=true& javascript.0.Datenpunkte.SwimSpa.0.EchteZielTemperatur=37.5&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Heizer=Idle&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Modus=OFF&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P2.Modus=OFF&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Is_On=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.CIRCULATING_PUMP.State=off&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.OZONE.State=off&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.SMART_WINTER_MODE_ACTIVE.State=true&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.FILTER_STATUS_CLEAN.State=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.FILTER_STATUS_PURGE.State=false&ack=true 200
python3.10 spa_config.py
Connecting to Wellness ...... connected identifier Wellness identifier SPAe8:eb:1b:1c:5e:46 uid: SPAe8eb1b1c5e46 Temperatureinheit °C anzahl pumpen: 3 P1 Pump 1 ['OFF', 'LO', 'HI'] P2 Pump 2 ['OFF', 'LO', 'HI'] Waterfall Waterfall ['OFF', 'ON'] anzahl blowers: 0 anzahl lichter: 1 LI Lights ***anzahl Sensoren: 1 SMART WINTER MODE:RISK Smart Winter Mode:Risk NO ***anzahl bin. Sensoren: 5 CIRCULATING PUMP Circulating Pump OZONE Ozone SMART WINTER MODE:ACTIVE Smart Winter Mode:Active FILTER STATUS:CLEAN Filter Status:Clean FILTER STATUS:PURGE Filter Status:Purge anzahl user devices: 4 anzahl reminders: 5 reminder: ('Time', '24.01.2023, 08:15:23') reminder: ('RinseFilter', 28) reminder: ('CleanFilter', 26) reminder: ('ChangeWater', 56) reminder: ('CheckSpa', 728)
Hier noch ein paar Fragen:
-
Wofür wird dieser Wert aus dem DP "javascript.0.Datenpunkte.SwimSpa.ClientGUID" benötigt? In den Dateien habi ch meine drinstehen gelassen
-
In der spa_config.py werden die Reminderinfos geladen. Die willst du bei den minütlichen Anfragen in der spa_updateBulk.py nicht jedes mal anfragen, Daher hier die sep Datei/Aufruf?
-
@in mix 300: Da habe ich auf Github diesbezüglich eine Frage gestellt aber noch keine Info bekommen. Wenn ich das Licht per Display/App schalte, bekommt das der DP L1 mit
-
Fehlen da die Werte? Im "Log" waren welche drin.
Muss am Ende des Aufrufs von spa_config.py normalerweise auch ein 200er stehen?-
Zirkuation ist gleich Wasserfall?
-
Kannst du deinen Pumpen mit "LO" ansteuern? Das gilt bestimmt nur für mehrstufige Pumpen. Ich habe 0/1, soweit mir bekannt
Ich bin gespannt auf die Updates
Lass es mich wissen, wenn/wie ich dir helfen kannBis denne
Thomas -
-
@tklein Hallo, Output sieht gut aus
- Das ist ein Vorbereitung, ich will die GUID perspektivisch in allen Scripten als Parameter ausführen (du kannst "deine" GUID im DP gerne schon mal eintragen). Generell möchte ich den Python Scripten alles per Parameter liefern, wie ich das mit der IP und dem Port vom Rest API mache, muss ich noch erforschen, sollte aber gehen. Das spart mir u.a. den Aufwand, das ich die Scripte vor dem Commit zu Github noch mal säubern muss (dabei können durchaus auch Fehler passieren).
- Korrekt. Das ist ja die Zeit in Tagen, das reicht aus, wenn wir das nur 1x am Tag aktualisieren und nicht jede Minute. Der Rest API Aufruf setBulk ist zwar unheimlich effizient ggü. mehreren set Aufrufen, aber es ist ja sinnlos den Wert für die DP's 1439x am Tag abzufragen und dann auch noch im ioBroker zu setzen. Es spricht auc nichts dagegen spa_config 4x am Tag auszuführen.
- OK, die Lampensteuerung wollte nicht auf Anhieb, mit der setze ich mich noch mal auseinander, das soll ja lt. Beschreibung gehen. Deinen Github Eintrag habe ich gesehen.
- Ja, die drei DP sollten gesetzt sein, weil das Log von spa_config.py diese ja auch enthält. Nimm mal die neue Version von spa_config.py. Diese gibt, wenn der http-Request schief geht, den Error Code mit aus (z.B. 500 == datapoint not found).
- Nein. Ich habe auf meinem Display z.B. eine extra Taste für den Wasserfall (aber ich habe keinen). Deswegen habe ich den Datenpunkt nicht vorgesehen, kann ich aber ergänzen. Das Fehlen von Wasserfall-DP's führt übrigens in spa_config.py momentan zu 2x Error Code 500.
- Nein, "LO" funktioniert bei mir auch nicht, nur "OFF" und "HI".
-
zu1) klasse, da können dann ja auch IP etc rein
zu3) ich hoffe
zu 4) die neue verseion gibt als reminderanzahl 0 zurück, die alte version 5NEU: pi@raspberrypi-iob:~/wellis/v2 $ python3.10 spa_config.py Connecting to Wellness ........... connected identifier Wellness identifier SPAe8:eb:1b:1c:5e:46 uid: SPAe8eb1b1c5e46 Temperatureinheit °C anzahl pumpen: 3 Waterfall Waterfall ['OFF', 'ON'] P2 Pump 2 ['OFF', 'LO', 'HI'] P1 Pump 1 ['OFF', 'LO', 'HI'] anzahl blowers: 0 anzahl lichter: 1 LI Lights ***anzahl Sensoren: 1 SMART WINTER MODE:RISK Smart Winter Mode:Risk NO ***anzahl bin. Sensoren: 5 CIRCULATING PUMP Circulating Pump OZONE Ozone SMART WINTER MODE:ACTIVE Smart Winter Mode:Active FILTER STATUS:CLEAN Filter Status:Clean FILTER STATUS:PURGE Filter Status:Purge anzahl user devices: 4 anzahl reminders: 0 ALT: pi@raspberrypi-iob:~/wellis/v2 $ python3.10 spa_config_old.py Connecting to Wellness ...... connected identifier Wellness identifier SPAe8:eb:1b:1c:5e:46 uid: SPAe8eb1b1c5e46 Temperatureinheit °C anzahl pumpen: 3 Waterfall Waterfall ['OFF', 'ON'] P1 Pump 1 ['OFF', 'LO', 'HI'] P2 Pump 2 ['OFF', 'LO', 'HI'] anzahl blowers: 0 anzahl lichter: 1 LI Lights ***anzahl Sensoren: 1 SMART WINTER MODE:RISK Smart Winter Mode:Risk NO ***anzahl bin. Sensoren: 5 CIRCULATING PUMP Circulating Pump OZONE Ozone SMART WINTER MODE:ACTIVE Smart Winter Mode:Active FILTER STATUS:CLEAN Filter Status:Clean FILTER STATUS:PURGE Filter Status:Purge anzahl user devices: 4 anzahl reminders: 5 reminder: ('Time', '25.01.2023, 08:17:45') reminder: ('RinseFilter', 27) reminder: ('CleanFilter', 25) reminder: ('ChangeWater', 55) reminder: ('CheckSpa', 727)
zu5) Wasserfall separat habe ich eigentlich nicht verbaut. Entsprechend auch kein Icon.Solange bei mir die Zirkulation an ist, funktionieren die Fontänen nebst Wasserfall. DIe 500er Errors habe ich nicht. Evtl. steigt das Skript vorher aus.
-
@tklein Hallo, das Mit der Reminderzahl = 0 ist mir auch schon aufgefallen. Ich bekomme selbst mal 5 und mal 0 Reminder von der geckolib zurückgemeldet. Momentan kaschiere ich das mit 4 Aufrufen von spa_config.py pro Tag, sprich aller 6h.
-
@rrov1 ich rufe die auch alle 6 stu auf
-
hi, was hälst du davon einen dp mit dem jeweils aktuelle status code des calls (spa_updateBulk.py zb. 200 zu schreiben oder alternativ den zeitstempel des letzten erfolgreichen updates. so wie beim reminder.
-
@rrov1 beim manuellen parsen der responseausgabe habe ich folgendes bekommen:
pi@raspberrypi-iob:~/wellis/v2 $ python3.10 spa_updateBulk.py Connecting to Wellness ........ connected Water heater : Heater: Temperature 37.0°C, SetPoint 35.0°C, Real SetPoint 35.0°C, Operation Cooling sending temp and heater ops sending water care sending pumps Waterfall Pump 1 Pump 2 sending lights Lights sending sensors Circulating Pump Ozone Smart Winter Mode:Active Filter Status:Clean Filter Status:Purge javascript.0.Datenpunkte.SwimSpa.0.Temperatureinheit=%C2%B0C&ack=true& javascript.0.Datenpunkte.SwimSpa.0.AktuelleTemperatur=37.0&ack=true& javascript.0.Datenpunkte.SwimSpa.0.ZielTemperatur=35.0&ack=true& javascript.0.Datenpunkte.SwimSpa.0.EchteZielTemperatur=35.0&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Heizer=Cooling&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Modus=OFF&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P2.Modus=OFF&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Is_On=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.CIRCULATING_PUMP.State=off&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.OZONE.State=off&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.SMART_WINTER_MODE_ACTIVE.State=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.FILTER_STATUS_CLEAN.State=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.FILTER_STATUS_PURGE.State=false&ack=true Traceback (most recent call last): File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn conn = connection.create_connection( File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection raise err File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 398, in _make_request conn.request(method, url, **httplib_request_kw) File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connection.py", line 239, in request super(HTTPConnection, self).request(method, url, body=body, headers=headers) File "/usr/local/lib/python3.10/http/client.py", line 1282, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1328, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1277, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1037, in _send_output self.send(msg) File "/usr/local/lib/python3.10/http/client.py", line 975, in send self.connect() File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connection.py", line 205, in connect conn = self._new_conn() File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connection.py", line 186, in _new_conn raise NewConnectionError( urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0xb5260a78>: Failed to establish a new connection: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/.local/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/home/pi/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen retries = retries.increment( File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.0.20', port=8087): Max retries exceeded with url: /setBulk (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xb5260a78>: Failed to establish a new connection: [Errno 111] Connection refused')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/wellis/v2/spa_updateBulk.py", line 79, in <module> oResponse = requests.post(IOBROKER_BASE_URL, data = sJson2Send) File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 115, in post return request("post", url, data=data, json=json, **kwargs) File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, **kwargs) File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/home/pi/.local/lib/python3.10/site-packages/requests/adapters.py", line 565, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPConnectionPool(host='192.168.0.20', port=8087): Max retries exceeded with url: /setBulk (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xb5260a78>: Failed to establish a new connection: [Errno 111] Connection refused'))
Mal bekomme ich den 200 mal nicht. Wahrschienlich ähnlich deinem "Wackler", dass nicht immer das geschaltet wird, was eigentlich sollte.
-
@tklein Hallo, sorry das ich mich ein paar Tage nicht gemeldet habe, aber jetzt habe ich etwas vom gewünschten Funktionsumfang (Pumpen/Licht) implementiert und es funktioniert auch einigermaßen stabil bei mir. Einigermaßen, weil die geckolib immer mal wieder Verbindungsprobleme hat und dann der Schaltvorgang nicht durchgeführt wird. Ich habe mir erst mal damit beholfen dies im Javascript abzufangen, ich muss mich mal mit dem Fehlerhandling in Python beschäftigen - ist halt nicht so die Programmiersprache mit der ich täglich umgehe. Ggf. muss man halt 2x drücken, ist bei mir noch nicht die Top Prio, weil der Whirlpool momentan kalt ist (steht draußen ).
Zum neue Stand:
- Download von github
- als erstes unbedingt die Struktur der Datenpunkte aktualisieren mit dem Script: SpaVariablen.js, Achtung: Parameter von createDatapoints() anpassen!
- die anderen Javascripte nach Anleitung einspielen
- die Python Scripte aktualisieren (jetzt ebenfalls nach Anleitung im github)
Deinen Vorschlag werde ich aufgreifen, allerdings muss ich erst mal schauen wie ich in Python sauber Fehler abfange. Kommt in der nächsten Version denk ich mit. Das Log schaue ich mir auch noch an.
-
@rrov1 kein ding, gibt ja wichtigere dinge -)
UPDATE: es lag daran, dass der SPA nicht erreichbar war. LED am Intouch war wieder grün anstatt blau, so wie es sollte.
habe das soweit alles gemacht. jedoch bekomme ich bei aufruf von *config und *update folgende meldung:
pi@raspberrypi-iob:~/wellis/v3 $ python3.10 spa_updateBulk.py Traceback (most recent call last): File "/home/pi/.local/lib/python3.10/site-packages/geckolib/locator.py", line 133, in get_spa_from_identifier return next( StopIteration During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/wellis/v3/spa_updateBulk.py", line 21, in <module> facade = GeckoLocator.find_spa(CLIENT_ID, lSpas[nSpaNum]).get_facade(False) File "/home/pi/.local/lib/python3.10/site-packages/geckolib/locator.py", line 155, in find_spa return locator.get_spa_from_identifier(spa_identifier) File "/home/pi/.local/lib/python3.10/site-packages/geckolib/locator.py", line 140, in get_spa_from_identifier return self.spas[0] IndexError: list index out of range pi@raspberrypi-iob:~/wellis/v3 $ python3.10 spa_config.py Traceback (most recent call last): File "/home/pi/.local/lib/python3.10/site-packages/geckolib/locator.py", line 133, in get_spa_from_identifier return next( StopIteration During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/wellis/v3/spa_config.py", line 12, in <module> facade = GeckoLocator.find_spa(CLIENT_ID, lSpas[nSpaNum]).get_facade(False) File "/home/pi/.local/lib/python3.10/site-packages/geckolib/locator.py", line 155, in find_spa return locator.get_spa_from_identifier(spa_identifier) File "/home/pi/.local/lib/python3.10/site-packages/geckolib/locator.py", line 140, in get_spa_from_identifier return self.spas[0] IndexError: list index out of range
Bin mir relativ sicher, dass die uuid, spa id etc passen.
-
@rrov1 habe jetzt beim updatebulk einen 500er:
pi@raspberrypi-iob:~/wellis/v3 $ python3.10 spa_updateBulk.py Connecting to Wellness ..... connected Water heater : Heater: Temperature 35.0°C, SetPoint 35.0°C, Real SetPoint 35.0°C, Operation Idle sending temp and heater ops sending water care sending pumps Pump 2: OFF, ['OFF', 'LO', 'HI'] Pump 1: OFF, ['OFF', 'LO', 'HI'] Waterfall: ON, ['OFF', 'ON'] sending lights Lights sending sensors Circulating Pump Ozone Smart Winter Mode:Active Filter Status:Clean Filter Status:Purge javascript.0.Datenpunkte.SwimSpa.0.Temperatureinheit=%C2%B0C&ack=true& javascript.0.Datenpunkte.SwimSpa.0.AktuelleTemperatur=35.0&ack=true& javascript.0.Datenpunkte.SwimSpa.0.ZielTemperatur=35.0&ack=true& javascript.0.Datenpunkte.SwimSpa.0.EchteZielTemperatur=35.0&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Heizer=Idle&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Wasserpflege=Standard&ack=true& javascript.0.Datenpunkte.SwimSpa.0.WasserpflegeModi=['Abwesend', 'Standard', 'Energiesparen', 'Energiesparen Plus', 'Wochenende']&ack=true& javascript.0.Datenpunkte.SwimSpa.0.WasserpflegeIndex=1&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P2.Modus=OFF&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Modus=OFF&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Pumpen.Waterfall.Modus=ON&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Is_On=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.CIRCULATING_PUMP.State=on&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.OZONE.State=off&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.SMART_WINTER_MODE_ACTIVE.State=false&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.FILTER_STATUS_CLEAN.State=true&ack=true& javascript.0.Datenpunkte.SwimSpa.0.Sensoren.FILTER_STATUS_PURGE.State=false&ack=true 500
-
@tklein Hallo, ich bin gerade etwas offline, d.h. mein Reiserouter hat gestern seinen Geist aufgegeben und ich komme momentan nicht mehr per VPN in mein lokales Heimnetz rein (ich nutze blöder Weise zu Hause das gleiche Netz wie hier im Urlaub der Internetzugang hat und ich habe auch grad keine Idee, wie ich das umgehen kann). Somit kann ich auch nichts testen oder programmieren. Ich bin erst Ende nächster Woche wieder zu Hause, dann schau ich wieder.
Den ersten Fehler den du geschrieben hast der tritt in Python Codeteilen auf, die ich aus den Beispielscripten der geckolib kopiert habe. Hier muss ich denk ich auch noch etwas Fehlerbehandlung einbauen, damit das stabiler wird.
Der zweite Fehler tritt hoffentlich nicht bei jeder Ausführung auf, auch hier muss ich die Fehlerbehandlung verbessern, denn das Rest API gibt da noch etwas mehr zurück, was bei der Eingrenzung hilft. Zur not, nimm erst mal die alte Version des Scriptes, das sollte auch laufen.Sonnige Grüße von den Kanaren...
-
@rrov1 hey, dir erstmal einen schönen entspannenden urlaub mit tollem wetter.
-
@tklein Kleines Update:
Ab sofort kannst du auch die Zieltemperatur setzen. Dazu gibt es die Scripte TargetTemp.js und spa_setTargetTemp.py. Wie üblich bitte die Datenpunkte vor dem Einsatz aktualisieren (ich habe den Datenpunkt actualPowerConsumption entfernt, da ich den nicht mehr brauche).Die Umsetzung der Zieltemperatur ist noch etwas empfindlich ggü. mehrfachen, schnell aufeinanderfolgenden Änderungen, da das setzen im Spa ja nicht so schnell geht. Aus diesem Grund habe ich in der Visualisierung den Simple Slider horizontal von vis-invento genommen, der hat eine Option: "Update value on release", so das erst beim loslassen des Sliders der neue Zielwert genau einmal gesetzt wird. Ich muss mal überlegen wie man das "entprellen" kann in einer späteren Version.
Nächster Schritt ist jetzt den Wasserpflegemodus setzen.
-
@rrov1 said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
TargetTemp.js
Danke folgende Frage habe ich noch:
- Light Switch
1241 2023-02-14 18:03:45.547 info script.js.common.Draussen.Wellis_Whirlpool.LightToggle: *** setting state of:javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch to old value: true 1241 2023-02-14 18:03:45.547 info script.js.common.Draussen.Wellis_Whirlpool.LightToggle: *** stderr: Error: Command failed: python3.10 /home/pi/wellis/v4 spa_toggleLight.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 LI javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI /usr/local/bin/python3.10: can't find '__main__' module in '/home/pi/wellis/v4' 1241 2023-02-14 18:03:45.542 info script.js.common.Draussen.Wellis_Whirlpool.LightToggle: *** stdout: 1241 2023-02-14 18:03:45.329 info script.js.common.Draussen.Wellis_Whirlpool.LightToggle: *** light key: LI 1241 2023-02-14 18:03:45.329 info script.js.common.Draussen.Wellis_Whirlpool.LightToggle: *** spaId: SPAe8:eb:1b:1c:5e:46 1241 2023-02-14 18:03:45.328 info script.js.common.Draussen.Wellis_Whirlpool.LightToggle: *** clientId: 916b0096-ab56-4344-8728-43a8259c63c2
Tmp setzen
Der muss für die Temp gesetzt werden?javascript.0.Datenpunkte.SwimSpa.0.EchteZielTemperatur
Habe keine Logs dazu gefunden
Pumpe Switch
Den muss ich setzen um die Pumpe zu steuern?javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
Habe auch keine Logs dazu gefunden
LG
Thomas -
@tklein Hallo,
zu 1: Hm, ich und Python, ob wir jemals Freunde werden . Ich kann den Fehler bei mir nicht nachvollziehen. Ich habe noch mal geprüft ob ich den richtigen Code auf github commited habe, aber alles fein. Kannst du bitte die Datei: spa_toggleLight.py noch mal von github laden, bei dir ablegen und die IP vom ioBroker eintragen. Danach an der Kommandozeile mal manuell ausführen:phyton3 spa_toggleLight.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 LI javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
und mir noch mal die Ausgabe der Kommandozeile schicken. Das Script selbst ist total simpel, es ermittelt den aktuellen Status des Lichts und schaltet entweder an oder aus. Da kann fast nix schief gehen, vor allem kein "can't find 'main' module" .
zu 2.:
So wie ich's verstanden habe gibt es 3 Temperaturen:- javascript.0.Datenpunkte.SwimSpa.0.AktuelleTemperatur -> die aktuelle Wassertemperatur, der DP ist read only
- javascript.0.Datenpunkte.SwimSpa.0.EchteZielTemperatur -> die Temperatur die der SpaController versucht zu erreichen (durch heizen oder abkühlen), der DP ist read only
- javascript.0.Datenpunkte.SwimSpa.0.ZielTemperatur -> die eingestellte Zieltemperatur, nur dieser DP ist read&write, den musst du verstellen über deine Visualisierung
Dazu brauchst du im Javascript Adapter das Script: TargetTemp.js und das Python Skript: spa_setTargetTemp.py
Das verstellen der ZielTemperatur sollte sowas im Protokoll produzieren:
2023-02-14 20:39:01.870 - info: javascript.0 (1349656) script.js.Spa.TargetTemp: *** clientId: 4dfed1c1-457a-ed4a-9760-1b8e80c24b7a 2023-02-14 20:39:01.871 - info: javascript.0 (1349656) script.js.Spa.TargetTemp: *** spaId: SPA68:aa:bb:cc:dd:ee 2023-02-14 20:39:01.872 - info: javascript.0 (1349656) script.js.Spa.TargetTemp: python3 spa_setTargetTemp.py 4dfed1c1-457a-ed4a-9760-1b8e80c24b7a SPA68:aa:bb:cc:dd:ee 24 javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur 2023-02-14 20:39:19.415 - info: javascript.0 (1349656) script.js.Spa.TargetTemp: *** stdout: Total arguments passed: 5 Connecting using client id 4dfed1c1-457a-ed4a-9760-1b8e80c24b7a Connecting to spa id SPA68:aa:bb:cc:dd:ee New target temp: 24 Got datapoint to update: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur Looking for spas on your network ... *** connecting to spa *** water heater present *** current target temp: 23.0 *** target temp is now: 24.0 *** end
Was vielleicht noch wichtig ist, die EchteZielTemperatur ist abhängig vom aktuellen Wasserpflegemodus. Wenn der "Abwesend" ist, dann zieht der gecko Controller 10°C von deiner gewählten Zieltemperatur ab.
zu 3.:
genau, den DP musst du setzen, wenn du kein "LO" hast, dann bau die Visualisierung halt so, das nur OFF bzw. HIGH gesetzt wird.
Damit das funktioniert brauchst du im Javascript Adapter: PumpSwitches.js und das Python Skript: spa_switchPump.py
Das Log sollte dann etwas wie bei 2. enthalten.Mittlerweile habe ich bei allen Datenpunkten die nur Informationen enthalten die Möglichkeit zum manuellen setzen weggenommen. Du kannst das im Objektbaum auch am Icon des DP ganz gut erkennen an dem Schloss das da drinnen ist: . Ggf. führe noch mal das aktuelle Script SpaVariablen.js aus.