NEWS
Steuerung Gecko in Touch 2 per iob möglich? (Wellis)
-
@rrov1 said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
pip install geckolib --upgrade
thx, das update hat geklappt. Habe jetzt auch die 0.4.8 Version. WaterCareMode werde ich wahrscheinlich erst später mal mit einer PV Anlage nutzen.
Kannst du mir bitte dennoch einen exemplarischen Aufruf zum Wassermode posten? Das kann ich nicht so richtig greifen?
--> "waterCareModeIdx" Wäre das z.B. Energy Saving. Müssen die in "" stehen?
--> ist das der korrekte/angedachte Devicepath? javascript.0.Datenpunkte.SwimSpa.0.WasserpflegeSwitchsudo pip3 install geckolib --upgrade Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting geckolib Downloading https://files.pythonhosted.org/packages/95/b5/6b1293493ddbcef8c576a68adf05cdcc40b9387619507179d3b4607beabd/geckolib-0.4.8-py3-none-any.whl (1.2MB) 100% |████████████████████████████████| 1.2MB 341kB/s Requirement already satisfied, skipping upgrade: python-version>="3.7" in /usr/local/lib/python3.7/dist-packages (from geckolib) (0.0.2) Installing collected packages: geckolib Found existing installation: geckolib 0.4.7 Uninstalling geckolib-0.4.7: Successfully uninstalled geckolib-0.4.7 Successfully installed geckolib-0.4.8
-
Der Teufel steckt im Detail.
Wenn ich die Zeiltemp per DP ändere, wird der immer mit dem Ergebnis aus dem API Call überschrieben. (A,B,D)
Wenn die Zieltemp per Kommandozeile geändert wird, bleibt der Wert. (C)Dann muss ich noch die Herausforderung meistern, dass Alexa den Temeperaturwert (per iot Adapter als Thermostat) nicht korrekt übernimmt. Wert sollte z.B. 38 Grad sein, dann wird der auf 24,5 gesetzt. Das hat aber ja nix mit deinem Code zu tun.
-
@tklein said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
Kannst du mir bitte dennoch einen exemplarischen Aufruf zum Wassermode posten? Das kann ich nicht so richtig greifen?
waterCareModeIdx: Schau mal in den Datenpunkt "WasserpflegeModi". Dort sollten 5 Werte drinnen stehen, das sind die wählbaren Wasserpflegemodi. Der Index ist praktisch 0 basiert, also der erste Wert "Away from Home" == 0, die weiteren dann 1-4.
devicePath: Schau mal im Objektbaum die Spalte Type an, das Device ist der Pfad: javascript.0.Datenpunkte.SwimSpa.0
ioBroker kennt da einige Typen, bei mir kommen 4 vor:
folder - einfach nur eine Ebene im Baum
device - der Pfad zum Spa Controller Gerät
channel - ein Pfad unter dem einige states gleichen Typs gruppiert werden, z.B. Pumpen, Erinnerungen, Lichter, ...
state - der Datenpunkt der einen tatsächlichen Wert enthält.Manchmal, wenn ich in meinen Scripten mehrere States auf einmal setzen möchte (in dem Fall die DP Wasserpflege und WasserpflegeSwitch), dann übergebe ich dem Script den übergeordneten Pfad und ergänze dann nur noch die Namen der Datenpunkte. Wenn ich nur einen Datenpunkt aktualisieren will (Zieltemperatur), dann übergebe ich dem Skript den Namen des Datenpunktes.
-
@tklein said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
Wenn ich die Zeiltemp per DP ändere, wird der immer mit dem Ergebnis aus dem API Call überschrieben. (A,B,D)
Wenn die Zieltemp per Kommandozeile geändert wird, bleibt der Wert. (C)Ich bin mir gerade nicht sicher ob ich dich richtig verstehe. Meine Vermutung ist, das du beim setzen des Datenpunktes zusätzlich ack=true mitgibst (zumindest die Fälle A&D). Da passiert aber nichts. Ich halte mich an die ioBroker Logik, nach der ein "GUI"-Element den Datenpunkt setzt mit ack=false (das ist der Default, wenn man nichts mitgibt). Nur in dem Fall wird über die on()-Subscription ein Script ausgelöst, was tatsächlich eine Aktion auf dem Zielgerät (Spa Controller) auslöst und, wenn erfolgreich, den Datenpunkt noch mal mit dem neuen Wert und ack=true setzt.
Prüfe bitte auch im Protokoll, ob mein Script nach setzen der neuen Zieltemperatur wirklich aufgerufen wird.
Alexa igrnoriere ich seit über einen Jahr, die ist so umständlich und versteht mich nicht zuverlässig genug.
-
@rrov1 ja es war ack = true das Problem. Wie immer sehr gut und verständlich erklärt.
-
@rrov1 said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
@tklein said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
Kannst du mir bitte dennoch einen exemplarischen Aufruf zum Wassermode posten? Das kann ich nicht so richtig greifen?
waterCareModeIdx: Schau mal in den Datenpunkt "WasserpflegeModi". Dort sollten 5 Werte drinnen stehen, das sind die wählbaren Wasserpflegemodi. Der Index ist praktisch 0 basiert, also der erste Wert "Away from Home" == 0, die weiteren dann 1-4.
devicePath: Schau mal im Objektbaum die Spalte Type an, das Device ist der Pfad: javascript.0.Datenpunkte.SwimSpa.0
ioBroker kennt da einige Typen, bei mir kommen 4 vor:
folder - einfach nur eine Ebene im Baum
device - der Pfad zum Spa Controller Gerät
channel - ein Pfad unter dem einige states gleichen Typs gruppiert werden, z.B. Pumpen, Erinnerungen, Lichter, ...
state - der Datenpunkt der einen tatsächlichen Wert enthält.Manchmal, wenn ich in meinen Scripten mehrere States auf einmal setzen möchte (in dem Fall die DP Wasserpflege und WasserpflegeSwitch), dann übergebe ich dem Script den übergeordneten Pfad und ergänze dann nur noch die Namen der Datenpunkte. Wenn ich nur einen Datenpunkt aktualisieren will (Zieltemperatur), dann übergebe ich dem Skript den Namen des Datenpunktes.
ach so, quasi ein batchänderung wobei der passenste "root"-ordner übergeben wird.
Fühl dich eingeladen, wenn du mal im Raum MS/OS unterwegs bist. Lege gerne etwas auf den Grill oder es gibt einen Cappuchino etc. Danke für die unzähligen erstklassigen Hilfestellungen!
-
@tklein Danke für die Einladung. Ich helfe doch gerne und das Forum ist ja auch dazu da etwas Wissen zu teilen. Wenn ich mal ne Frage habe, hoffe ich ja auch, das man mir hilft. Außerdem habe ich so einen Grund an der Steuerung zu feilen, nur für mich hätte wahrscheinlich das auslesen der Parameter gereicht und es hätte so noch die nächsten x Jahre rumgelegen.
Ich versuche jetzt erst mal die gleichzeitigen Abfragen auszuschließen, so das keine Fehler mehr bei den Aufrufen auftreten. Ich denke ich habe da einen Ansatz. -
@tklein Hallo, es hat zwar ein bisschen gedauert, aber ich habe jetzt ein größeres Update der Skripte fertig, das ein die aus meiner Sicht wichtigsten Defizite erst mal bereinigt:
- keine Konstanten in den Python Skripten mehr (alles wird per Parameter übergeben)
- kein cron Schedule mehr, sondern alles in ioBroker-Schedules
- Die Skripte passen auf, das nicht mehrere gleichzeitig laufen (da der Spa Controller mit mehreren gleichzeitigen Anfragen nicht zurecht kommt)
Das Update liegt auf github. Beim Einspielen vorgehen wie dort beschrieben:
- SpaGlobal.js bereitstellen
- SpaVariablen.js aktualisieren und ausführen, da sich die Datenpunkte geändert haben
- Die Skripte für die Konfiguration (SpaUpdateConfig.js + spa_config.py, sowie SpaUpdateValues.js + spa_updateBulk.px) austauschen und testen
- Weitere Skripte für das Schalten verschiedener Funktionen austauschen (jeweils Javascript und Python, wie in der Doku) und testen
Was noch nicht geht sind die Erinnerungen. Ich habe leider auch kein Feedback auf meine Frage bekommen, die geckolib kann die Werte nicht auslesen .
Schönes WE,
rrov1
-
Es gibt wieder mal ein Update auf github, welches u.a. dafür sorgt, dass die Werte für Erinnerungen aktualisiert werden. Beim Einspielen vorgehen wie dort als Installation/Update beschrieben, die Datenpunkte müssen aktualisiert werden und alle Skripte ausgetauscht (JavaScript und Python).
-
Hallo rrov1,
ich habe lt. Deiner Anleitung mein Gecko in.Touch2 unter ioBroker zum laufen gebracht.
Dafür schicke ich Dir ein ganz großes Dankeschön für die reingesteckte Arbeit.
Tolle Leistung!! Vielen Dank.
Noch einen schönen RestSonntagBernd
-
@bernie Schön, dann hat sich der Aufwand ins aufhübschen der Anleitung ja schon gelohnt . Bis letztes Jahr dachte ich noch, ich wäre der Einzige hier der so eine Steuerung hat/nutzt, denn auch bei den Adapter Requests auf github (https://github.com/ioBroker/AdapterRequests/issues/720) haben bisher nur 3 den Daumen hochgehoben.
-
@rrov1 Hallo, sehr gerne. Es sollten jetzt mehr Daumen sein
Ich habe gerade gesehen, dass ich relativ viele (jede Minute) einen Fehlereintrag im LOG sehe:
State value to set for "javascript.0.Datenpunkte.SwimSpa.0.WasserpflegeSwitch" has to be type "string" but received type "number"
Kannst Du damit was anfangen?
Und noch eine Frage: kann ich den Wasserpflegeindex per Script ändern z.B. von 3 auf 1 oder so?
Das hat bei mir bisher nicht geklappt. Muss ich da noch irgendein Script zusätzlich irgendwo reinpacken?Herzliche Grüße
Bernd -
@bernie Hallo,
ja, mit der Meldung kann ich was anfangen und ich muss gerade feststellen, das du einen Bug gefunden hast :-(.Ist aber ganz leicht zu beheben für dich:
- suche den Datenpunkt in den Objekten raus und klicke rechts auf den Stift zum bearbeiten
- wechsle bitte den Datentyp auf "number" so wie hier:
- danach speichern
Ab diesem Zeitpunkt sollte der Fehler nicht mehr auftauchen.
Ich werde eine neue Version des Skriptes SpaVariablen.js zum anlegen/updaten der Datenpunkte in github hochladen die das behebt. Ist mir glatt peinlich, das ich das übersehen habe.
Zu deiner zweiten Frage:
Nein, der Datenpunkt Wasserpflegeindex ist kein Datenpunkt um eine Steuerungsfunktion auszulösen, es ist ein read-only Datenpunkt. Den Wasserpflegemodus kannst du nur über den Datenpunkt "WasserpflegeSwitch" (was ein denglich von mir) ändern, weil nur auf diesen Datenpunkt ein Skript achtet und dem SpaController Bescheid gibt. Wenn du diesen Datenpunkt per Skript änderst sollte das ganz normal mit setState() gehen, achte bitte darauf, dass ack=false mitgegeben wird (nur dann reagiert mein Skript).
Beispiel:setState("javascript.0.Datenpunkte.SwimSpa.0.WasserpflegeSwitch", {val: 3, ack: false});
Ich hoffe das hilft Dir weiter.
rrov1
-
@rrov1 Hallo,
ja, das Thema mit den Fehlermeldungen im LOG ist weg - Danke dafür
Das mit dem WasserpflegeSwitch hab ich noch nicht verstanden.
Ich versuche mal ein Bild hochzuladen, sodass wir vom gleichen sprechen:wenn ich hier z.B. auf 1 per Auswahlfeld ändere, dann dauert es ein wenig (das Feld ist rot) und dann wird es grün und die Anzeige springt auf - in meinem Fall 2 - zurück.
Muss ich noch irgend etwas einstellen? Die Temperaturverstellung und Pumpen und Licht funktionieren einwandfrei.
LG
Bernd -
@bernie Hallo,
hm, also das von dir geschilderte Verhalten kann, geschuldet der Art und Weise wie ich das implementiert habe, tatsächlich auftreten. Ich hole mal kurz aus, damit du das nachvollziehen kannst, danach musst du mal ins Protokoll schauen und einen Auszug bereitstellen.
- Die Implementierung nutzt ja die geckolib im Hintergrund. Mit jedem Aufruf eines Skriptes muss eine Verbindung zum SpaController aufgebaut werden. Das dauert bei mir so ca. 14 Sekunden, die eigentliche Aktion (Status auslesen oder etwas Schalten) ca. 1 Sekunde.
- Exakt jede Minute läuft das Skript: SpaUpdateValues.js, zur Aktualisierung der Datenpunkte, d.h. die ersten 15 Sekunden einer jeden Minute sind grundsätzlich von dem Skript blockiert.
- Wenn du jetzt den Datenpunkt "WasserpflegeSwitch" veränderst, dann wird richtiger Weise zuerst mal der neue Wert in der Farbe rot dargestellt (rot, weil ack=false, also von dir manuell oder per VIS wurde der Datenpunkt geändert). Jetzt kommt es darauf an, wann du den Datenpunkt geändert hast:
A) Zwischen Sekunde 0 und 15: Dann muss das Skript zum ändern des Wasserpflegemodus erst mal warten bis das minütliche Update durch ist, welches blöder Weise auch noch den aktuellen Wert des SpaControllers einstellt (und in grün, weil dieses Skript darf ack=true setzen). Erst danach kann das Skript zum ändern des Wasserpflegemodus loslaufen und diesen verändern und sollte, wenn es sauber läuft auch den von dir gewünschten Wasserpflegemodus im SpaController aktivieren und im Datenpunkt setzen.
B) Zwischen Sekunde 16 und 59: Dann läuft das Skript zum ändern des Wasserpflegemodus halt sofort los, braucht ca. 15 Sekunden um dies am SpaController zu setzen und im Datenpunkt einzustellen.
Das wie es "normal" tickt. Das ist nicht so prickelnd, weil man wirklich 15 Sekunden warten muss, aber es geht erst mal nicht besser, weil ich sonst irgendwie dauerhaft eine Verbindung mit der geckolib zum SpaController aufrecht erhalten müsste. Das muss ich aber erst mal erforschen, ganz ehrlich, Python ist nicht die Programmiersprache.
Aber egal, um herauszubekommen was passiert brauche ich vom ioBroker-Protokoll mal einen Auszug. Stelle mal folgenden Filter ein:
und poste mal den Auszug aus dem Protokoll hier, also + - 2 Minuten herum um das ändern vom Wasserpflegemodus.rrov1
-
hey, ist ja schön, dass die software ja doch noch von weiteren usern benutzt wird und sind diene bemühungen lohnen @rrov1
-
@rrov1 said in Steuerung Gecko in Touch 2 per iob möglich? (Wellis):
@bernie Hallo,
hm, also das von dir geschilderte Verhalten kann, geschuldet der Art und Weise wie ich das implementiert habe, tatsächlich auftreten. Ich hole mal kurz aus, damit du das nachvollziehen kannst, danach musst du mal ins Protokoll schauen und einen Auszug bereitstellen.
- Die Implementierung nutzt ja die geckolib im Hintergrund. Mit jedem Aufruf eines Skriptes muss eine Verbindung zum SpaController aufgebaut werden. Das dauert bei mir so ca. 14 Sekunden, die eigentliche Aktion (Status auslesen oder etwas Schalten) ca. 1 Sekunde.
- Exakt jede Minute läuft das Skript: SpaUpdateValues.js, zur Aktualisierung der Datenpunkte, d.h. die ersten 15 Sekunden einer jeden Minute sind grundsätzlich von dem Skript blockiert.
- Wenn du jetzt den Datenpunkt "WasserpflegeSwitch" veränderst, dann wird richtiger Weise zuerst mal der neue Wert in der Farbe rot dargestellt (rot, weil ack=false, also von dir manuell oder per VIS wurde der Datenpunkt geändert). Jetzt kommt es darauf an, wann du den Datenpunkt geändert hast:
A) Zwischen Sekunde 0 und 15: Dann muss das Skript zum ändern des Wasserpflegemodus erst mal warten bis das minütliche Update durch ist, welches blöder Weise auch noch den aktuellen Wert des SpaControllers einstellt (und in grün, weil dieses Skript darf ack=true setzen). Erst danach kann das Skript zum ändern des Wasserpflegemodus loslaufen und diesen verändern und sollte, wenn es sauber läuft auch den von dir gewünschten Wasserpflegemodus im SpaController aktivieren und im Datenpunkt setzen.
B) Zwischen Sekunde 16 und 59: Dann läuft das Skript zum ändern des Wasserpflegemodus halt sofort los, braucht ca. 15 Sekunden um dies am SpaController zu setzen und im Datenpunkt einzustellen.
Das wie es "normal" tickt. Das ist nicht so prickelnd, weil man wirklich 15 Sekunden warten muss, aber es geht erst mal nicht besser, weil ich sonst irgendwie dauerhaft eine Verbindung mit der geckolib zum SpaController aufrecht erhalten müsste. Das muss ich aber erst mal erforschen, ganz ehrlich, Python ist nicht die Programmiersprache.
Aber egal, um herauszubekommen was passiert brauche ich vom ioBroker-Protokoll mal einen Auszug. Stelle mal folgenden Filter ein:
und poste mal den Auszug aus dem Protokoll hier, also + - 2 Minuten herum um das ändern vom Wasserpflegemodus.rrov1
Hallo rrov1,
ich hab jetzt eine ganze Zeit rumprobiert aber bisher keine Werte vom Spa gesehen. In deinem Skript sind die Zeilen //console.log("*** pyScriptFolder: " + pyScriptFolder); ja noch auskommentiert. Muss ich die aktivieren?
Mit einem kleinen Blockly Script hab ich es probiert. Der Wert ändert sich auf z.B. 3 - aber bleibt die ganze Zeit rot. WIrd also anscheinend nicht verarbeitet.
LG
Bernd -
@bernie Ok, bitte prüfe mal ob die wie in der Anleitung unter Schritt 4 beschrieben das Skript: WatercareMode.js in JavaScript Adapter importiert und auch aktiviert hast. Das Skript ist dafür zuständig, auf die Änderung des Datenpunktes zu reagieren (Zeile 2-4). Evtl. kannst du mal einen Screenshot aus dem JavaScript Adapter beilegen, es müsste so aussehen:
Die Kommentare kannst du gerne entfernen (also Zeilen 12, 15, 17 und auch 22), allerdings ist schon in Zeile 8 ein console.log()-Aufruf drinnen der, wenn der Trigger auf Zeile 2 funktioniert zu einer Protokollausgabe der Form: "script.js.Spa.WatercareMode: start" führen sollte.
-
@rrov1 Hallo, Asche auf mein Haupt..... Ich hatte das Skript natürlich nicht angelegt
Nachdem ich es lt. Anleitung angelegt habe, funktionierte es auf Anhieb.
Also ein großes Sorry wenn ich Dir Kopfzerbrechen bereitet habe.
Nochmals vielen Dank für die Skripte und die Zeit die Du dafür und jetzt auch noch für meine Fragen aufgewendet hast.
Viele herzliche Grüße
Bernd -
@bernie Kein Problem, sowas bereitet mir noch nicht ansatzweise Kopfschmerzen, da habe ich schlimmeres erlebt .
Momentan sieht's leider so aus, als das ich es bei der bestehenden Logik und damit etwas behäbigen "Schaltgeschwindigkeit" belasse. Ich habe am letzten WE mal MQTT geckoclient ausprobiert, welcher auch grundsätzlich funktioniert und schneller schaltet bei mir aber auch erheblich mehr CPU Last verursacht als meine Skripte. Warum kann ich mir ad hoc nicht erklären, aber das Jahr hat ja noch ein paar Wochenenden, vielleicht kann ich da mal noch Licht ins Dunkel bringen.