Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Einsteigerfragen
  4. Steuerung Gecko in Touch 2 per iob möglich? (Wellis)

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    483

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

Steuerung Gecko in Touch 2 per iob möglich? (Wellis)

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
185 Beiträge 8 Kommentatoren 30.7k Aufrufe 6 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T tklein

    @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:

    1. Wofür wird dieser Wert aus dem DP "javascript.0.Datenpunkte.SwimSpa.ClientGUID" benötigt? In den Dateien habi ch meine drinstehen gelassen

    2. 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?

    3. @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

    4. Fehlen da die Werte? Im "Log" waren welche drin.

    d937e2bc-56e2-4044-bc8c-0198a96fb17b-grafik.png
    Muss am Ende des Aufrufs von spa_config.py normalerweise auch ein 200er stehen?

    1. Zirkuation ist gleich Wasserfall?

    2. 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 kann

    Bis denne
    Thomas

    rrov1R Offline
    rrov1R Offline
    rrov1
    schrieb am zuletzt editiert von
    #50

    @tklein Hallo, Output sieht gut aus :-)

    1. 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).
    2. 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.
    3. 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.
    4. 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).
    5. 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.
    6. Nein, "LO" funktioniert bei mir auch nicht, nur "OFF" und "HI".
    T 1 Antwort Letzte Antwort
    0
    • rrov1R rrov1

      @tklein Hallo, Output sieht gut aus :-)

      1. 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).
      2. 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.
      3. 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.
      4. 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).
      5. 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.
      6. Nein, "LO" funktioniert bei mir auch nicht, nur "OFF" und "HI".
      T Offline
      T Offline
      tklein
      schrieb am zuletzt editiert von
      #51

      @rrov1

      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 5

      NEU:
      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.

      rrov1R 1 Antwort Letzte Antwort
      0
      • T tklein

        @rrov1

        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 5

        NEU:
        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.

        rrov1R Offline
        rrov1R Offline
        rrov1
        schrieb am zuletzt editiert von
        #52

        @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.

        T 2 Antworten Letzte Antwort
        0
        • rrov1R rrov1

          @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.

          T Offline
          T Offline
          tklein
          schrieb am zuletzt editiert von
          #53

          @rrov1 ich rufe die auch alle 6 stu auf

          1 Antwort Letzte Antwort
          0
          • rrov1R rrov1

            @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.

            T Offline
            T Offline
            tklein
            schrieb am zuletzt editiert von
            #54

            @rrov1

            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.

            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tklein
              schrieb am zuletzt editiert von
              #55

              @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.

              rrov1R 1 Antwort Letzte Antwort
              0
              • T tklein

                @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.

                rrov1R Offline
                rrov1R Offline
                rrov1
                schrieb am zuletzt editiert von
                #56

                @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.

                T 2 Antworten Letzte Antwort
                0
                • rrov1R rrov1

                  @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.

                  T Offline
                  T Offline
                  tklein
                  schrieb am zuletzt editiert von tklein
                  #57

                  @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.

                  1 Antwort Letzte Antwort
                  0
                  • rrov1R rrov1

                    @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.

                    T Offline
                    T Offline
                    tklein
                    schrieb am zuletzt editiert von
                    #58

                    @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
                    
                    
                    rrov1R 1 Antwort Letzte Antwort
                    0
                    • T tklein

                      @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
                      
                      
                      rrov1R Offline
                      rrov1R Offline
                      rrov1
                      schrieb am zuletzt editiert von
                      #59

                      @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...

                      T 1 Antwort Letzte Antwort
                      0
                      • rrov1R rrov1

                        @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...

                        T Offline
                        T Offline
                        tklein
                        schrieb am zuletzt editiert von
                        #60

                        @rrov1 hey, dir erstmal einen schönen entspannenden urlaub mit tollem wetter.

                        rrov1R 1 Antwort Letzte Antwort
                        0
                        • T tklein

                          @rrov1 hey, dir erstmal einen schönen entspannenden urlaub mit tollem wetter.

                          rrov1R Offline
                          rrov1R Offline
                          rrov1
                          schrieb am zuletzt editiert von
                          #61

                          @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.

                          T 1 Antwort Letzte Antwort
                          0
                          • rrov1R rrov1

                            @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.

                            T Offline
                            T Offline
                            tklein
                            schrieb am zuletzt editiert von
                            #62

                            @rrov1 said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):

                            TargetTemp.js

                            Danke folgende Frage habe ich noch:

                            1. 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

                            rrov1R 1 Antwort Letzte Antwort
                            0
                            • T tklein

                              @rrov1 said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):

                              TargetTemp.js

                              Danke folgende Frage habe ich noch:

                              1. 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

                              rrov1R Offline
                              rrov1R Offline
                              rrov1
                              schrieb am zuletzt editiert von rrov1
                              #63

                              @tklein Hallo,
                              zu 1: Hm, ich und Python, ob wir jemals Freunde werden :face_with_rolling_eyes: . 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: 2023-02-14 20_47_39-Clipboard.png. Ggf. führe noch mal das aktuelle Script SpaVariablen.js aus.

                              T 2 Antworten Letzte Antwort
                              0
                              • rrov1R rrov1

                                @tklein Hallo,
                                zu 1: Hm, ich und Python, ob wir jemals Freunde werden :face_with_rolling_eyes: . 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: 2023-02-14 20_47_39-Clipboard.png. Ggf. führe noch mal das aktuelle Script SpaVariablen.js aus.

                                T Offline
                                T Offline
                                tklein
                                schrieb am zuletzt editiert von
                                #64

                                @rrov1

                                Mhmmm ok.

                                Zu1)
                                von der Kommandozeile geht es, bekomme aber weitere logs:

                                pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_toggleLight.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 LI javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
                                Total arguments passed: 5
                                Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                Switching light: LI
                                Got channel for update: javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
                                Looking for spas on your network ...
                                2023-02-15 10:01:07,024> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                *** connecting to spa
                                *** light count: 1
                                *** found light with key LI and name: Lights with state False
                                *** switching light on
                                2023-02-15 10:01:17,310> INFO Value for UdLightTime changed from 0 to 60
                                2023-02-15 10:01:17,313> INFO Value for UdLi changed from OFF to HI
                                2023-02-15 10:01:17,315> INFO Value for inTCipDelay changed from 1800 to 900
                                *** light mode is now: True
                                Traceback (most recent call last):
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                    scheme, auth, host, port, path, query, fragment = parse_url(url)
                                  File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                    return six.raise_from(LocationParseError(source_url), None)
                                  File "<string>", line 3, in raise_from
                                urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch.Switch?value=true&ack=true
                                
                                During handling of the above exception, another exception occurred:
                                
                                Traceback (most recent call last):
                                  File "/home/pi/wellis/v4/spa_toggleLight.py", line 99, in <module>
                                    asyncio.run(main())
                                  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                    return loop.run_until_complete(main)
                                  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                    return future.result()
                                  File "/home/pi/wellis/v4/spa_toggleLight.py", line 80, in main
                                    requests.get(f"{IOBROKER_BASE_URL}{IOBR_LIGHT_CHANNEL}.Switch?value={str(newLightMode).lower()}&ack=true")
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                    return request("get", url, params=params, **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 573, in request
                                    prep = self.prepare_request(req)
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                    p.prepare(
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                    self.prepare_url(url, params)
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                    raise InvalidURL(*e.args)
                                requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch.Switch?value=true&ack=true
                                

                                Ein erneuter Aufruf toggelt das Licht immer, egal was in dem DP steht.
                                Mal sehen, obich die rechte korrekt gesetzt habe:

                                pi@raspberrypi-iob:~/wellis/v4 $ ls -la
                                total 40
                                drwxrwxrwx 2 pi pi 4096 Feb 14 17:55 .
                                drwxrwxrwx 5 pi pi 4096 Feb 14 17:50 ..
                                -rwxr-xr-x 1 pi pi 4371 Feb 14 17:55 spa_config.py
                                -rwxr-xr-x 1 pi pi 4064 Feb 14 17:55 spa_setTargetTemp.py
                                -rwxr-xr-x 1 pi pi 4737 Feb 14 17:55 spa_switchPump.py
                                -rwxr-xr-x 1 pi pi 3606 Feb 14 17:55 spa_toggleLight.py
                                -rwxr-xr-x 1 pi pi 4704 Feb 14 17:55 spa_updateBulk.py
                                

                                Den Aufruf in der JS-Datei habe ich so angepasst:

                                exec('python3.10 /home/pi/wellis/v4 spa_toggleLight.py ' + clientId + " " + spaId + " " + lightKey + " " + obj.channelId, function (error, stdout, stderr) {
                                

                                Zu2)

                                Bei Update des DP wird nix getriggered. Keine Logausgabe.
                                Bei der Konsoleneingabe sieht es so aus:

                                Total arguments passed: 5
                                Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                New target temp: 34
                                Got datapoint to update: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur
                                Traceback (most recent call last):
                                  File "spa_setTargetTemp.py", line 107, in <module>
                                    asyncio.run(main())
                                  File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
                                    return loop.run_until_complete(main)
                                  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
                                    return future.result()
                                  File "spa_setTargetTemp.py", line 48, in main
                                    async with SampleSpaMan(CLIENT_ID, spa_identifier=SPA_ID) as spaman:
                                  File "/usr/local/lib/python3.7/dist-packages/geckolib/async_spa_manager.py", line 199, in __aenter__
                                    await AsyncTasks.__aenter__(self)
                                  File "/usr/local/lib/python3.7/dist-packages/geckolib/async_tasks.py", line 15, in __aenter__
                                    self.add_task(self._tidy(), "Tidy tasks", "ASYNC")
                                  File "/usr/local/lib/python3.7/dist-packages/geckolib/async_tasks.py", line 22, in add_task
                                    task = asyncio.create_task(coroutine, name=f"{key_}:{name_}")
                                TypeError: create_task() got an unexpected keyword argument 'name'
                                sys:1: RuntimeWarning: coroutine 'AsyncTasks._tidy' was never awaited`
                                ``
                                
                                Der Wert wird aber nicht im Spa geupdatet (zumindest nicht mit der Info aus der Gecko App
                                
                                Zu3)
                                Auch da wird nix getriggered wenn ich den DP mit "LO" oder "HI" steuer. Keine Logeinträge.
                                
                                Wie sieht da ein exemplarischer Aufruf auf der Kommandozeile aus? So korrekt?
                                
                                

                                pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 1 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
                                Total arguments passed: 6
                                Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                Switching pump id 1
                                Switching pump to state id 1
                                Got channel for update: javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
                                Looking for spas on your network ...
                                2023-02-15 10:24:50,547> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                *** connecting to spa
                                *** pump name: Pump 2
                                *** pump modes: ['OFF', 'LO', 'HI']
                                *** current pump mode: OFF
                                *** new pump state name: LO
                                *** found: 3 pumps
                                *** pump mode is now: OFF
                                Traceback (most recent call last):
                                File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                scheme, auth, host, port, path, query, fragment = parse_url(url)
                                File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                return six.raise_from(LocationParseError(source_url), None)
                                File "<string>", line 3, in raise_from
                                urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch.Switch?value=0&ack=true

                                During handling of the above exception, another exception occurred:

                                Traceback (most recent call last):
                                File "/home/pi/wellis/v4/spa_switchPump.py", line 114, in <module>
                                asyncio.run(main())
                                File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                return loop.run_until_complete(main)
                                File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                return future.result()
                                File "/home/pi/wellis/v4/spa_switchPump.py", line 88, in main
                                requests.get(f"{IOBROKER_BASE_URL}{IOBR_PUMP_CHANNEL}.Switch?value={SET_PUMP_STATE}&ack=true")
                                File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                return request("get", url, params=params, **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 573, in request
                                prep = self.prepare_request(req)
                                File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                p.prepare(
                                File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                self.prepare_url(url, params)
                                File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                raise InvalidURL(*e.args)
                                requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch.Switch?value=0&ack=true
                                pi@raspberrypi-iob:~/wellis/v4 $

                                T rrov1R 2 Antworten Letzte Antwort
                                0
                                • T tklein

                                  @rrov1

                                  Mhmmm ok.

                                  Zu1)
                                  von der Kommandozeile geht es, bekomme aber weitere logs:

                                  pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_toggleLight.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 LI javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
                                  Total arguments passed: 5
                                  Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                  Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                  Switching light: LI
                                  Got channel for update: javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
                                  Looking for spas on your network ...
                                  2023-02-15 10:01:07,024> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                  *** connecting to spa
                                  *** light count: 1
                                  *** found light with key LI and name: Lights with state False
                                  *** switching light on
                                  2023-02-15 10:01:17,310> INFO Value for UdLightTime changed from 0 to 60
                                  2023-02-15 10:01:17,313> INFO Value for UdLi changed from OFF to HI
                                  2023-02-15 10:01:17,315> INFO Value for inTCipDelay changed from 1800 to 900
                                  *** light mode is now: True
                                  Traceback (most recent call last):
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                      scheme, auth, host, port, path, query, fragment = parse_url(url)
                                    File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                      return six.raise_from(LocationParseError(source_url), None)
                                    File "<string>", line 3, in raise_from
                                  urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch.Switch?value=true&ack=true
                                  
                                  During handling of the above exception, another exception occurred:
                                  
                                  Traceback (most recent call last):
                                    File "/home/pi/wellis/v4/spa_toggleLight.py", line 99, in <module>
                                      asyncio.run(main())
                                    File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                      return loop.run_until_complete(main)
                                    File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                      return future.result()
                                    File "/home/pi/wellis/v4/spa_toggleLight.py", line 80, in main
                                      requests.get(f"{IOBROKER_BASE_URL}{IOBR_LIGHT_CHANNEL}.Switch?value={str(newLightMode).lower()}&ack=true")
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                      return request("get", url, params=params, **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 573, in request
                                      prep = self.prepare_request(req)
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                      p.prepare(
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                      self.prepare_url(url, params)
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                      raise InvalidURL(*e.args)
                                  requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch.Switch?value=true&ack=true
                                  

                                  Ein erneuter Aufruf toggelt das Licht immer, egal was in dem DP steht.
                                  Mal sehen, obich die rechte korrekt gesetzt habe:

                                  pi@raspberrypi-iob:~/wellis/v4 $ ls -la
                                  total 40
                                  drwxrwxrwx 2 pi pi 4096 Feb 14 17:55 .
                                  drwxrwxrwx 5 pi pi 4096 Feb 14 17:50 ..
                                  -rwxr-xr-x 1 pi pi 4371 Feb 14 17:55 spa_config.py
                                  -rwxr-xr-x 1 pi pi 4064 Feb 14 17:55 spa_setTargetTemp.py
                                  -rwxr-xr-x 1 pi pi 4737 Feb 14 17:55 spa_switchPump.py
                                  -rwxr-xr-x 1 pi pi 3606 Feb 14 17:55 spa_toggleLight.py
                                  -rwxr-xr-x 1 pi pi 4704 Feb 14 17:55 spa_updateBulk.py
                                  

                                  Den Aufruf in der JS-Datei habe ich so angepasst:

                                  exec('python3.10 /home/pi/wellis/v4 spa_toggleLight.py ' + clientId + " " + spaId + " " + lightKey + " " + obj.channelId, function (error, stdout, stderr) {
                                  

                                  Zu2)

                                  Bei Update des DP wird nix getriggered. Keine Logausgabe.
                                  Bei der Konsoleneingabe sieht es so aus:

                                  Total arguments passed: 5
                                  Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                  Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                  New target temp: 34
                                  Got datapoint to update: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur
                                  Traceback (most recent call last):
                                    File "spa_setTargetTemp.py", line 107, in <module>
                                      asyncio.run(main())
                                    File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
                                      return loop.run_until_complete(main)
                                    File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
                                      return future.result()
                                    File "spa_setTargetTemp.py", line 48, in main
                                      async with SampleSpaMan(CLIENT_ID, spa_identifier=SPA_ID) as spaman:
                                    File "/usr/local/lib/python3.7/dist-packages/geckolib/async_spa_manager.py", line 199, in __aenter__
                                      await AsyncTasks.__aenter__(self)
                                    File "/usr/local/lib/python3.7/dist-packages/geckolib/async_tasks.py", line 15, in __aenter__
                                      self.add_task(self._tidy(), "Tidy tasks", "ASYNC")
                                    File "/usr/local/lib/python3.7/dist-packages/geckolib/async_tasks.py", line 22, in add_task
                                      task = asyncio.create_task(coroutine, name=f"{key_}:{name_}")
                                  TypeError: create_task() got an unexpected keyword argument 'name'
                                  sys:1: RuntimeWarning: coroutine 'AsyncTasks._tidy' was never awaited`
                                  ``
                                  
                                  Der Wert wird aber nicht im Spa geupdatet (zumindest nicht mit der Info aus der Gecko App
                                  
                                  Zu3)
                                  Auch da wird nix getriggered wenn ich den DP mit "LO" oder "HI" steuer. Keine Logeinträge.
                                  
                                  Wie sieht da ein exemplarischer Aufruf auf der Kommandozeile aus? So korrekt?
                                  
                                  

                                  pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 1 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
                                  Total arguments passed: 6
                                  Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                  Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                  Switching pump id 1
                                  Switching pump to state id 1
                                  Got channel for update: javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
                                  Looking for spas on your network ...
                                  2023-02-15 10:24:50,547> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                  *** connecting to spa
                                  *** pump name: Pump 2
                                  *** pump modes: ['OFF', 'LO', 'HI']
                                  *** current pump mode: OFF
                                  *** new pump state name: LO
                                  *** found: 3 pumps
                                  *** pump mode is now: OFF
                                  Traceback (most recent call last):
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                  scheme, auth, host, port, path, query, fragment = parse_url(url)
                                  File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                  return six.raise_from(LocationParseError(source_url), None)
                                  File "<string>", line 3, in raise_from
                                  urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch.Switch?value=0&ack=true

                                  During handling of the above exception, another exception occurred:

                                  Traceback (most recent call last):
                                  File "/home/pi/wellis/v4/spa_switchPump.py", line 114, in <module>
                                  asyncio.run(main())
                                  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                  return loop.run_until_complete(main)
                                  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                  return future.result()
                                  File "/home/pi/wellis/v4/spa_switchPump.py", line 88, in main
                                  requests.get(f"{IOBROKER_BASE_URL}{IOBR_PUMP_CHANNEL}.Switch?value={SET_PUMP_STATE}&ack=true")
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                  return request("get", url, params=params, **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 573, in request
                                  prep = self.prepare_request(req)
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                  p.prepare(
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                  self.prepare_url(url, params)
                                  File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                  raise InvalidURL(*e.args)
                                  requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch.Switch?value=0&ack=true
                                  pi@raspberrypi-iob:~/wellis/v4 $

                                  T Offline
                                  T Offline
                                  tklein
                                  schrieb am zuletzt editiert von
                                  #65

                                  Ergänzung/Update zu 2)

                                  Aufruf mit Python3.10. Da wird die Temp im WP geändert. Jedoch das Update im DP schlägt fehl. Müssen die Temp-Werte mit "." oder "," angegeben werden? Z.B. 34.5 oder 37,5

                                  pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_setTargetTemp.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 34.0 javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur
                                  Total arguments passed: 5
                                  Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                  Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                  New target temp: 34.0
                                  Got datapoint to update: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur
                                  Looking for spas on your network ...
                                  2023-02-15 10:38:32,206> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                  *** connecting to spa
                                  *** water heater present
                                  *** current target temp: 34.0
                                  *** new target temp is identical to current, nothing to do
                                  Traceback (most recent call last):
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                      scheme, auth, host, port, path, query, fragment = parse_url(url)
                                    File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                      return six.raise_from(LocationParseError(source_url), None)
                                    File "<string>", line 3, in raise_from
                                  urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur?value=34.0&ack=true
                                  
                                  During handling of the above exception, another exception occurred:
                                  
                                  Traceback (most recent call last):
                                    File "/home/pi/wellis/v4/spa_setTargetTemp.py", line 107, in <module>
                                      asyncio.run(main())
                                    File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                      return loop.run_until_complete(main)
                                    File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                      return future.result()
                                    File "/home/pi/wellis/v4/spa_setTargetTemp.py", line 88, in main
                                      requests.get(f"{IOBROKER_BASE_URL}{IOBR_TARGET_TEMP_DP}?value={str(spaman.facade.water_heater.target_temperature)}&ack=true")
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                      return request("get", url, params=params, **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 573, in request
                                      prep = self.prepare_request(req)
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                      p.prepare(
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                      self.prepare_url(url, params)
                                    File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                      raise InvalidURL(*e.args)
                                  requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur?value=34.0&ack=true
                                  
                                  
                                  1 Antwort Letzte Antwort
                                  0
                                  • rrov1R rrov1

                                    @tklein Hallo,
                                    zu 1: Hm, ich und Python, ob wir jemals Freunde werden :face_with_rolling_eyes: . 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: 2023-02-14 20_47_39-Clipboard.png. Ggf. führe noch mal das aktuelle Script SpaVariablen.js aus.

                                    T Offline
                                    T Offline
                                    tklein
                                    schrieb am zuletzt editiert von
                                    #66

                                    @rrov1 mal was anderes. hasr du auch solche extrmen Schwankungen in dem Wert für die aktuelle Temp?
                                    Scheint sich aber jetzt stabilisiert zu haben.

                                    e8108b2b-c425-4a26-a029-2b866e43e3ad-grafik.png

                                    rrov1R 1 Antwort Letzte Antwort
                                    0
                                    • T tklein

                                      @rrov1 mal was anderes. hasr du auch solche extrmen Schwankungen in dem Wert für die aktuelle Temp?
                                      Scheint sich aber jetzt stabilisiert zu haben.

                                      e8108b2b-c425-4a26-a029-2b866e43e3ad-grafik.png

                                      rrov1R Offline
                                      rrov1R Offline
                                      rrov1
                                      schrieb am zuletzt editiert von
                                      #67

                                      @tklein Nein, solche Ausreißer habe ich überhaupt nicht. Das wäre ja dann mein spa_BulkUpdate.py Skript, welches aus welchem Grund auch immer solche Werte dem REST API übergibt. Das kann ich ein bisschen heilen und zwar sagt mir die geckolib die minimale und maximale Temperatur die man einstellen kann (je nach dem ob Celsius oder Farenheit). Ich bau im Pyhton Skript eine Prüfung der 3 Temperaturwerte ein, damit keine Temperaturen sagen wir mal unter 0 °C und 40 °C an ioBroker gemeldet werden. Ich denke mal in dem Fall keinen Wert zu senden ist besser als einen falschen. Ich würde die falschen Werte aus der DB löschen. Bei SQL könnte ich dir sagen wie, bei InfluxDB leider nicht.

                                      1 Antwort Letzte Antwort
                                      0
                                      • T tklein

                                        @rrov1

                                        Mhmmm ok.

                                        Zu1)
                                        von der Kommandozeile geht es, bekomme aber weitere logs:

                                        pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_toggleLight.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 LI javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
                                        Total arguments passed: 5
                                        Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                        Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                        Switching light: LI
                                        Got channel for update: javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch
                                        Looking for spas on your network ...
                                        2023-02-15 10:01:07,024> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                        *** connecting to spa
                                        *** light count: 1
                                        *** found light with key LI and name: Lights with state False
                                        *** switching light on
                                        2023-02-15 10:01:17,310> INFO Value for UdLightTime changed from 0 to 60
                                        2023-02-15 10:01:17,313> INFO Value for UdLi changed from OFF to HI
                                        2023-02-15 10:01:17,315> INFO Value for inTCipDelay changed from 1800 to 900
                                        *** light mode is now: True
                                        Traceback (most recent call last):
                                          File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                            scheme, auth, host, port, path, query, fragment = parse_url(url)
                                          File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                            return six.raise_from(LocationParseError(source_url), None)
                                          File "<string>", line 3, in raise_from
                                        urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch.Switch?value=true&ack=true
                                        
                                        During handling of the above exception, another exception occurred:
                                        
                                        Traceback (most recent call last):
                                          File "/home/pi/wellis/v4/spa_toggleLight.py", line 99, in <module>
                                            asyncio.run(main())
                                          File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                            return loop.run_until_complete(main)
                                          File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                            return future.result()
                                          File "/home/pi/wellis/v4/spa_toggleLight.py", line 80, in main
                                            requests.get(f"{IOBROKER_BASE_URL}{IOBR_LIGHT_CHANNEL}.Switch?value={str(newLightMode).lower()}&ack=true")
                                          File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                            return request("get", url, params=params, **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 573, in request
                                            prep = self.prepare_request(req)
                                          File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                            p.prepare(
                                          File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                            self.prepare_url(url, params)
                                          File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                            raise InvalidURL(*e.args)
                                        requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Lichter.LI.Switch.Switch?value=true&ack=true
                                        

                                        Ein erneuter Aufruf toggelt das Licht immer, egal was in dem DP steht.
                                        Mal sehen, obich die rechte korrekt gesetzt habe:

                                        pi@raspberrypi-iob:~/wellis/v4 $ ls -la
                                        total 40
                                        drwxrwxrwx 2 pi pi 4096 Feb 14 17:55 .
                                        drwxrwxrwx 5 pi pi 4096 Feb 14 17:50 ..
                                        -rwxr-xr-x 1 pi pi 4371 Feb 14 17:55 spa_config.py
                                        -rwxr-xr-x 1 pi pi 4064 Feb 14 17:55 spa_setTargetTemp.py
                                        -rwxr-xr-x 1 pi pi 4737 Feb 14 17:55 spa_switchPump.py
                                        -rwxr-xr-x 1 pi pi 3606 Feb 14 17:55 spa_toggleLight.py
                                        -rwxr-xr-x 1 pi pi 4704 Feb 14 17:55 spa_updateBulk.py
                                        

                                        Den Aufruf in der JS-Datei habe ich so angepasst:

                                        exec('python3.10 /home/pi/wellis/v4 spa_toggleLight.py ' + clientId + " " + spaId + " " + lightKey + " " + obj.channelId, function (error, stdout, stderr) {
                                        

                                        Zu2)

                                        Bei Update des DP wird nix getriggered. Keine Logausgabe.
                                        Bei der Konsoleneingabe sieht es so aus:

                                        Total arguments passed: 5
                                        Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                        Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                        New target temp: 34
                                        Got datapoint to update: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur
                                        Traceback (most recent call last):
                                          File "spa_setTargetTemp.py", line 107, in <module>
                                            asyncio.run(main())
                                          File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
                                            return loop.run_until_complete(main)
                                          File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
                                            return future.result()
                                          File "spa_setTargetTemp.py", line 48, in main
                                            async with SampleSpaMan(CLIENT_ID, spa_identifier=SPA_ID) as spaman:
                                          File "/usr/local/lib/python3.7/dist-packages/geckolib/async_spa_manager.py", line 199, in __aenter__
                                            await AsyncTasks.__aenter__(self)
                                          File "/usr/local/lib/python3.7/dist-packages/geckolib/async_tasks.py", line 15, in __aenter__
                                            self.add_task(self._tidy(), "Tidy tasks", "ASYNC")
                                          File "/usr/local/lib/python3.7/dist-packages/geckolib/async_tasks.py", line 22, in add_task
                                            task = asyncio.create_task(coroutine, name=f"{key_}:{name_}")
                                        TypeError: create_task() got an unexpected keyword argument 'name'
                                        sys:1: RuntimeWarning: coroutine 'AsyncTasks._tidy' was never awaited`
                                        ``
                                        
                                        Der Wert wird aber nicht im Spa geupdatet (zumindest nicht mit der Info aus der Gecko App
                                        
                                        Zu3)
                                        Auch da wird nix getriggered wenn ich den DP mit "LO" oder "HI" steuer. Keine Logeinträge.
                                        
                                        Wie sieht da ein exemplarischer Aufruf auf der Kommandozeile aus? So korrekt?
                                        
                                        

                                        pi@raspberrypi-iob:~/wellis/v4 $ python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 1 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
                                        Total arguments passed: 6
                                        Connecting using client id 916b0096-ab56-4344-8728-43a8259c63c2
                                        Connecting to spa id SPAe8:eb:1b:1c:5e:46
                                        Switching pump id 1
                                        Switching pump to state id 1
                                        Got channel for update: javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch
                                        Looking for spas on your network ...
                                        2023-02-15 10:24:50,547> INFO Found 1 spas ... [Wellness(SPAe8:eb:1b:1c:5e:46)]
                                        *** connecting to spa
                                        *** pump name: Pump 2
                                        *** pump modes: ['OFF', 'LO', 'HI']
                                        *** current pump mode: OFF
                                        *** new pump state name: LO
                                        *** found: 3 pumps
                                        *** pump mode is now: OFF
                                        Traceback (most recent call last):
                                        File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 434, in prepare_url
                                        scheme, auth, host, port, path, query, fragment = parse_url(url)
                                        File "/home/pi/.local/lib/python3.10/site-packages/urllib3/util/url.py", line 397, in parse_url
                                        return six.raise_from(LocationParseError(source_url), None)
                                        File "<string>", line 3, in raise_from
                                        urllib3.exceptions.LocationParseError: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch.Switch?value=0&ack=true

                                        During handling of the above exception, another exception occurred:

                                        Traceback (most recent call last):
                                        File "/home/pi/wellis/v4/spa_switchPump.py", line 114, in <module>
                                        asyncio.run(main())
                                        File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
                                        return loop.run_until_complete(main)
                                        File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
                                        return future.result()
                                        File "/home/pi/wellis/v4/spa_switchPump.py", line 88, in main
                                        requests.get(f"{IOBROKER_BASE_URL}{IOBR_PUMP_CHANNEL}.Switch?value={SET_PUMP_STATE}&ack=true")
                                        File "/home/pi/.local/lib/python3.10/site-packages/requests/api.py", line 73, in get
                                        return request("get", url, params=params, **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 573, in request
                                        prep = self.prepare_request(req)
                                        File "/home/pi/.local/lib/python3.10/site-packages/requests/sessions.py", line 484, in prepare_request
                                        p.prepare(
                                        File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 368, in prepare
                                        self.prepare_url(url, params)
                                        File "/home/pi/.local/lib/python3.10/site-packages/requests/models.py", line 436, in prepare_url
                                        raise InvalidURL(*e.args)
                                        requests.exceptions.InvalidURL: Failed to parse: http://192:168:0:20:8087/set/javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1.Switch.Switch?value=0&ack=true
                                        pi@raspberrypi-iob:~/wellis/v4 $

                                        rrov1R Offline
                                        rrov1R Offline
                                        rrov1
                                        schrieb am zuletzt editiert von
                                        #68

                                        @tklein Hallo,
                                        zu 1.: ich sehe den Fehler :-) Du hast bei der IP-Adresse vom ioBroker als Trennzeichen einen ":" verwendet. Deswegen schaltet er zwar das Licht um kann den Datenpunkt aber nicht ändern. Dies betrifft auch spa_switchPump.py, dort ist der gleiche Fehler enthalten.

                                        zu 2: öffne mal das Skript TargetTemp.js im Javascript Editor. Zeile 2 müsste so lauten:

                                        on({id: /^javascript\.\d+\.Datenpunkte\.SwimSpa\.\d+\.ZielTemperatur$/, change: "ne", ack: false}, function (obj) {
                                        

                                        und drücke auf das "Restart" Icon oben drüber es müsste sowas im Protokoll stehen:

                                        20:25:16.549	info	javascript.0 (1349656) Stop script script.js.Spa.TargetTemp
                                        20:25:16.562	info	javascript.0 (1349656) Start javascript script.js.Spa.TargetTemp
                                        20:25:16.581	info	javascript.0 (1349656) script.js.Spa.TargetTemp: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                        

                                        Wichtig ist "registred 1 subscription"

                                        Was mich noch ein bisschen wundert, du hast doch nur einen gecko Controller. Der müsste unter javascript.0.Datenpunkte.SwimSpa.0.ZielTemperatur
                                        angesteuert werden und nicht unter: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur. Wenn du unterhalb von javascript.0.Datenpunkte.SwimSpa zwei Zweige hat (also .0 und .1), dann lösche mal den .1er Zweig komplett im Objektbaum, den brauchst du nicht.

                                        zu 3: der Testaufruf ist fast korrekt:
                                        Argument 3: Pumpen ID 0 = Pumpe 1, 1 = Pumpe 2, 3 = Pumpe 3
                                        Argument 4: ist der Modus OFF = 0; LO = 1, HI = 2 -> da du geschrieben hast, deine Pumpen haben keinen LO-Mode, nimm dort bitte 0 oder 2
                                        Argument 5: ".Switch" weglassen
                                        Beispiel: Pumpe 2, HI

                                        python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 2 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1
                                        

                                        Beispiel: Pumpe 2, OFF

                                        python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 0 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1
                                        
                                        T 1 Antwort Letzte Antwort
                                        0
                                        • rrov1R rrov1

                                          @tklein Hallo,
                                          zu 1.: ich sehe den Fehler :-) Du hast bei der IP-Adresse vom ioBroker als Trennzeichen einen ":" verwendet. Deswegen schaltet er zwar das Licht um kann den Datenpunkt aber nicht ändern. Dies betrifft auch spa_switchPump.py, dort ist der gleiche Fehler enthalten.

                                          zu 2: öffne mal das Skript TargetTemp.js im Javascript Editor. Zeile 2 müsste so lauten:

                                          on({id: /^javascript\.\d+\.Datenpunkte\.SwimSpa\.\d+\.ZielTemperatur$/, change: "ne", ack: false}, function (obj) {
                                          

                                          und drücke auf das "Restart" Icon oben drüber es müsste sowas im Protokoll stehen:

                                          20:25:16.549	info	javascript.0 (1349656) Stop script script.js.Spa.TargetTemp
                                          20:25:16.562	info	javascript.0 (1349656) Start javascript script.js.Spa.TargetTemp
                                          20:25:16.581	info	javascript.0 (1349656) script.js.Spa.TargetTemp: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                          

                                          Wichtig ist "registred 1 subscription"

                                          Was mich noch ein bisschen wundert, du hast doch nur einen gecko Controller. Der müsste unter javascript.0.Datenpunkte.SwimSpa.0.ZielTemperatur
                                          angesteuert werden und nicht unter: javascript.0.Datenpunkte.SwimSpa.1.ZielTemperatur. Wenn du unterhalb von javascript.0.Datenpunkte.SwimSpa zwei Zweige hat (also .0 und .1), dann lösche mal den .1er Zweig komplett im Objektbaum, den brauchst du nicht.

                                          zu 3: der Testaufruf ist fast korrekt:
                                          Argument 3: Pumpen ID 0 = Pumpe 1, 1 = Pumpe 2, 3 = Pumpe 3
                                          Argument 4: ist der Modus OFF = 0; LO = 1, HI = 2 -> da du geschrieben hast, deine Pumpen haben keinen LO-Mode, nimm dort bitte 0 oder 2
                                          Argument 5: ".Switch" weglassen
                                          Beispiel: Pumpe 2, HI

                                          python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 2 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1
                                          

                                          Beispiel: Pumpe 2, OFF

                                          python3.10 spa_switchPump.py 916b0096-ab56-4344-8728-43a8259c63c2 SPAe8:eb:1b:1c:5e:46 1 0 javascript.0.Datenpunkte.SwimSpa.0.Pumpen.P1
                                          
                                          T Offline
                                          T Offline
                                          tklein
                                          schrieb am zuletzt editiert von
                                          #69

                                          @rrov1 es wir langsam.

                                          Zu1)
                                          Oh man, Das sag ich besser nix zu....

                                          Zu2) Sieht bei mir auch so im Code und im Log aus mit dem subscription. Passiert aber immer noch nix wenn ich den DP unter Swim.Spa.0.Zieltemperatur ändere

                                          zu3) Danke für die Erklärung. Per Kommandozeile klappt es jetzt. Auch hier klappt das noch nicht per DP.

                                          rrov1R 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          602

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe