Neue Beta Test Runde für alle MAX Module

Begonnen von Wzut, 14 Oktober 2020, 17:41:04

Vorheriges Thema - Nächstes Thema

adn77

#195
Zitat von: asdfasdfasdfasdfasdf am 29 September 2025, 13:10:51I believe there may be a mistake in line 2003 of the 10_MAX.pm file. I think that instead...
elsif (AttrNum($name, 'keepAuto', 0)  && (ReadingsVal($hash, 'mode', 'auto') eq 'auto')) {

should be
elsif (AttrNum($name, 'keepAuto', 0)  && (ReadingsVal($name, 'mode', 'auto') eq 'auto')) {

I guess you're right about the correction, but fixing that leads to some unwanted behavior. I eventually came up with this:
--- FHEM/10_MAX.pm      2026-03-16 09:11:35.998161250 +0100
+++ FHEM/10_MAX.pm      2026-04-12 18:14:04.885823595 +0200
@@ -1986,25 +1986,27 @@

        $ctrlmode = 0; # auto
     } # auto
-
-    if ($args[0] eq 'boost') {
+    elsif ($args[0] eq 'boost') {
        return Log3Return($name, 'set_desiredTemp : too many parameters for boost') if (@args > 1);
        $temperature = 0;
        $ctrlmode = 3;
-       # TODO: auto mode with temperature is also possible
     }
-
-    if ($args[0] eq 'manual') {
+    elsif ($args[0] eq 'manual') {
        # User explicitly asked for manual mode
        $ctrlmode = 1; #manual, possibly overwriting keepAuto
        shift @args;
        return Log3Return($name, 'set_desiredTemp : not enough parameters after desiredTemperature manual') if (!@args);
     }
-    elsif (AttrNum($name, 'keepAuto', 0)  && (ReadingsVal($name, 'mode', 'auto') eq 'auto')) {
+    elsif (AttrNum($name, 'keepAuto', 0)) {
        # User did not ask for any mode explicitly, but has keepAuto
-       Log3($hash, 5, "$name, SetTemperature: keepAuto and mode auto = staying in auto mode");
+       Log3($name, 5, "$name, SetTemperature: keepAuto and mode auto = staying in auto mode");
        $ctrlmode = 0; # auto
     }
+    else {
+       if (ReadingsVal($name, 'mode', 'auto') eq 'auto') { $ctrlmode = 0; }
+       else { $ctrlmode = 1; }
+       Log3($name, 5, "$name, SetTemperature: no mode explcitly given = staying in current mode");
+    }

     $temperature = MAX_ReadingsVal($hash, 'ecoTemperature') if ($args[0] eq 'eco');



adn77

Zitat von: scooty am 02 März 2022, 10:43:19
Zitat von: Wzut am 01 März 2022, 11:05:53Das mit dem keepAuto klingt zwar komisch, ist aber richtig !
Hallo Wzut,

danke für die Info.
Habe es aber nicht so ganz verstanden.
Ist es "richtig", weil es aktuell im Code so hinterlegt ist und korrekt so ausgeführt wird?
Aber eigentlich ist durch das Code-Aufräumen nun dieses Verhalten so?

In diesem Fall, wirst Du es auf den Stand "boost funktioniert bei keepAuto=1" ändern?
Danke für eine kurze Rückmeldung.

Viele Grüße,
Andreas

Das "else" wird erst mit meinem Patch oben wieder repariert.

Soweit ich die alten Posts aus 2014 zu dem Thema richtig deute, wird die Boost Funktion außerdem mit einem Broadcast Flag gesendet, was nur funktioniert, wenn die GroupId <> 0 ist.
Sofern man also nie die originale MAX Lösung genutzt hat, muss man manuell unterschiedliche GroupIds für alle Geräte eines Raumes setzen (also innerhalb eines Raumes immer die gleiche ;D ).

Wzut

a. das die Group ID wichtig ist habe ich schon mehrfach  geschrieben.

b. das ReadingsVal($hash ein Tippfehler ist und es eigentlich ReadingsVal($name sein müsste da hat asdfasdfasdfasdfasdf schon recht.

c. OK, das Problem von 2022 ist das der crtlmode überschrieben wird wenn keepAuto = 1 ist, habe ich soweit verstanden, THX fürs finden & posten

Den Patch werde ich in dieser Form so nicht einsetzen, da ich diese verschachtelten elsif/else Konstrukte wenn möglich meide wie der Teufel das Weihwasser. Ich lasse mir etwas einfallen das den gleichen Zweck erfüllt.. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

don.redhorse

Hallo zusammen.

Erst einmal vielen Dank an Wzut, dass er sich dem Modul zugewendet hat.
Am Wochenende habe ich meine MAX! Installation ebenfalls auf die Beta hochgezogen.
verbaut sind ein MaxLAN, der zum CUNo geflasht wurde "V 1.26.08 a-culfw Build: 323 (2019-08-03_09-32-54) CUBe (F-Band: 868MHz)"
8 Thermostate sind verbaut und 4 Shutter Contacts.
Ein DOIF ist eingerichtet und die Temperaturen zu pollen, dass tut. Die Patches sind drin, abgesehen vom Bug mit Keep und dem Boost.
Die Heizperiode ist zwar durch, aber gerade in dieser Zeit ist es ja doch ein wenig doof gewesen die Thermostate andauernd verfahren zu müssen um mit dem Scanner die Werte auslesen zu können, bzw. das Senden zu erzwingen.
Die Wochenprogramme habe ich jetzt noch nicht getestet, letztes Jahr hatte ich die eh alle gekickt und die Wunschtemperaturen per Script und Cronjob gesteuert. Mit dem Scanner und den Wochenprogrammen gab es ab und an Ärger, deswegen diese Lösung. Denke mal das kann ich bis zum Herbst hin wieder umstellen, auf reguläre Wochenprogramme.
Ein Thermostat ist diesen Winter eines mechanischen Todes gestorben, da ist so jemand gegengeballert, dass das Gehäuse gerissen war. Deswegen habe ich auch zwei Homematic Thermostate verbaut. Da bin ich mir noch nicht so ganz sicher was mir besser gefällt, die MAX! waren eigentlich immer einfacher zu beherrschen...
Mal gucken was die Zukunft bringt.