Temperatur-Scanner für MAX-Thermostate

Begonnen von John, 12 März 2013, 09:44:59

Vorheriges Thema - Nächstes Thema

Harald

Hallo John,

kann es sein, dass die Meldung auf der Konsole dadurch hervorgerufen wird, weilnext if $defs{$name}{type} !~ m/^HeatingThermostat.*/;   # uns interessieren nur heizthermostate undeffiniert ist, wenn alle Geräte geprüft sind, ähnlich wie ein paar Zeilen zuvor?
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo John,

ich versuche immernoch herauszufinden, warum diese Fehlermeldung in der Konsole bei jedem Durchlauf erscheint. Dafür sind doch die Zeilen 242 - 251 zuständig, oder?
242  foreach my $aaa ( sort keys %{$modules{MAX}{defptr}} )
243  {
244    my $hash=$modules{MAX}{defptr}{$aaa};
245    my $name=$hash->{NAME};
246
246    if (! defined ($name)) {next;}     # hint by harald
248    MaxScan_Log $hash,($MaxScanDEBUGFilter)?2:5,"check component $name, Adresse:$aaa";
249
250 next if $defs{$name}{type} !~ m/^HeatingThermostat.*/;   # uns interessieren nur heizthermostate
251    MaxScan_Log $hash,($MaxScanDEBUGFilter)?2:5,"is HeatingThermostat:($defs{$name}{type})";
Nachdem alle Geräte gefunden wurden gibt es noch einen Durchlauf, bei dem $name = undef ist und die Suche wird in Zeile 246 abgebrochen.

Damit ist aber $name undef wird aber bei der Suche nach next if $defs{$name}{type} !~ m/^HeatingThermostat.*/;   # uns interessieren nur heizthermostate mit einbezogen. Damit ist beim letzten Suchlauf  auch $defs{$name}{type} = undef und deshalb die Konsolen-Meldung. Oder sehe ich das falsch?
Du weißt, ich bin Perl/FHEM-Anfänger. Ich versuche halt das ganze einigermaßen zu verstehen.

Warum diese Meldung nicht vorhanden war, als es noch CUBE gab, kann ich mir aber nicht erklären.

Viele Grüße und schönen Sonntag noch

Harald

HArald

Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,
ich habe bei mir die neueste Version von 10_MAX am laufen, die von dir beschriebenen Fehler tauchen hier nicht auf.
Es muss also mit MAXLAN zu tun haben, da ich CUL einsetze.

Aktiviere doch bitte mal den Schalter $MaxScanDEBUGFilter, damit wir die Ausgabe von Zeile
  MaxScan_Log $hash,($MaxScanDEBUGFilter)?2:5,"check component $name, Adresse:$aaa";
sehen.
Hier wird der name ja ausgegeben und auch die Adresse des Max-Devices, vielleicht erkennst du dann schon was.


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Jetzt muss ich nochmal eine Frage zu den Logeinstellungen stellen.
Ich habe z.Z. bei allen Thermostaten verbose auf 5 und in 99_UtilsMaxScan.pm alles auf 1 gesetzt. Ich habe auch schon mit anderen Werten probiert. Im Logfile ändert sich nur etwas, wenn ich verbose ändere.

Irgend etwas mache ich noch falsch, aber was?

Für eine Tipp wäre ich dankbar. Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald

ganz oben im Skript steht
my $MaxScanDEBUGFilter = '';

bitte ändern auf
my $MaxScanDEBUGFilter = '1';


dann reload ausführen.
John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

ich erhalte keine andere Ausgabe, ob ich my $MaxScanDEBUGFilter = Leer, 1 oder was anders setze. Ich habe verbose = 5 gesetzt. Muss ich da was ändern? Die Logik verschließt sich mir noch.

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

#321
Sorry Harald,
war mein Fehler

bitte ändern auf
my $MaxScanDEBUGFilter = '5';

Damit wird der Debuglevel 5 erzwungen (maximale Ausgabe zum Thema "Filtern")

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#322
Hallo John,

ich sehen keinen Unterschied bei der Ausgabe egal was in "my $MaxScanDEBUGFilter = ' ';" schreibe. Lediglich mit verbose kann ich die Menge der Logs beeinflussen. Aber das ist erstmal sekundär.

Könntest Du mir auf die Sprünge helfen, damit ich verstehe, wie das hier funktioniert?

242  foreach my $aaa ( sort keys %{$modules{MAX}{defptr}} )                         # der hash wird nach keys sortiert und die Adresse nach $aaa geschrieben
243  {
244    my $hash=$modules{MAX}{defptr}{$aaa}; 
245    my $name=$hash->{NAME};                                                      # der Gerätename wird geholt und nach $name schreiben
246
246    if (! defined ($name)) {next;}     # hint by harald                          # wenn Kein Gerätename nächstes foreach
248    MaxScan_Log $hash,($MaxScanDEBUGFilter)?2:5,"check component $name, Adresse:$aaa";
249
250 next if $defs{$name}{type} !~ m/^HeatingThermostat.*/;                      #Type prüfen ob kein HeizThermostat nächstes foreach
251    MaxScan_Log $hash,($MaxScanDEBUGFilter)?2:5,"is HeatingThermostat:($defs{$name}{type})";
253    # wenn sie das scanTemp attribut haben
254    next if (AttrVal($name,"scanTemp","?") ne "1");                              # kein scanTemp definiert nächstes foreach
255    MaxScan_Log $hash, ($MaxScanDEBUGFilter)?2:4,"attribute scanTemp found";


beim Prüfen des type ist $name undef und somit auch type und es wird kein Text ^HeatingThermostat.* gefunden. Deshalb wird eine Fehlermeldung in der Konsole ausgegeben. Kann es sein, dass das Auslesen des Hash's schon beim Prüfen auf NAME einen Schitt zu weit geht und deshalb $name und somit auch type undef sind?

Habe ich die Programmierung richtig verstanden?  Kann man den Schleifenzähler (wenn es sowas gibt) um 1 decrementieren, wenn $name = undef ist, damit die Zeile 250 auf einen gültigen Namen und somit gültigen type zeigt? Wäre das eine Lösung?

Wenn ich die Zeile 246 deaktiviere, bekomme ich diese ellenlange Liste wie vor einiger Zeit schon2013.11.10 13:02:56 2: [Computer] MaxScanRun.248 check component Computer, Adresse:066c61
2013.11.10 13:02:56 2: [Computer] MaxScanRun.251 is HeatingThermostat:(HeatingThermostat)
2013.11.10 13:02:56 2: [Computer] MaxScanRun.255 attribute scanTemp found
2013.11.10 13:02:56 2: [ECO_Taster] MaxScanRun.248 check component ECO_Taster, Adresse:069e0b
2013.11.10 13:02:56 2: [MAXLAN] MaxScanRun.248 check component MAXLAN, Adresse:06a6ad
2013.11.10 13:02:56 2: [] MaxScanRun.248 check component , Adresse:HASH(0x28b7890)
2013.11.10 13:02:56 2: [] MaxScanRun.248 check component , Adresse:HASH(0x28c48a0)
2013.11.10 13:02:56 2: [] MaxScanRun.248 check component , Adresse:HASH(0x28c5578)
2013.11.10 13:02:56 2: [] MaxScanRun.248 check component , Adresse:HASH(0x292f7c8)
2013.11.10 13:02:56 2: [] MaxScanRun.248 check component , Adresse:HASH(0x292fd20)
2013.11.10 13:02:56 2: [] MaxScanRun.248 check component , Adresse:HASH(0x2930298)

Die Liste wird von Mal zu Mal länger. Wie man sieht, gibt es keinen gültigen Namen und somit auch keinen gültigen type. Wo die Adressen herkommen, weiß ich nicht. Können das die Speicheradressen sein, wo key und value abgelegt werden können?

Noch eine Frage: Wo wird eigentlich %modules erstellt bzw. definiert?

Viele Grüße

Harald
PS: Gibt es schon was neues vom neuen Modul?
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,
anbei noch ein Versuch das Thema in den Griff zu bekommen.


ZitatNoch eine Frage: Wo wird eigentlich %modules erstellt bzw. definiert?
definiert wird es in fhem.pl bei
use vars qw(%modules); # List of loaded modules (device/log/etc)

ZitatPS: Gibt es schon was neues vom neuen Modul?
Die Umschaltung des Sollwerts funktioniert wie geplant:
aber:
wenn der Anwender manuell am Thermostat den Sollwert verändert, stellt der Scanner diesen beim nächsten Scan rigoros zurück.
Das sollte er zumindest bis zum nächsten Schaltpunkt des Wochenprogrammes nicht tun.
Daher muss ich das Wochenprogramm berücksichtigen, daran arbeite ich noch.

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

besten Dank für die neue Version. Jetzt gibt es keine Fehlermeldungen mehr auf der Konsole und natürlich wie bisher auch keine im Logfile.

Ist das schon die Version, die ohne auto/manual-Umschaltung auskommt? Falls ja, wie kann man wählen, ob man diese Steuerung oder die über die Solltemperatur wünscht. Du schriebst ja, das man das selbst bestimmen kann.

Ich glaube, dass von Dir beschriebene Problem würde mich vorerst nicht wesentlich stören, da bei uns nur sehr selten der Handbetrieb (bisher eigenlich noch garnicht) verwendet wurde.

Viele Grüße und schönen Abend noch

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John


Aktivierung via
attr <Thermostat-Name>  userReadings onlyAutoMode { return "1";;}

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Danke John, dass werde ich gleich ausprobieren. Dann brauche ich morgen früh nicht mehr um 6 Uhr wach zu werden, um von Hand auf auto zu schalten, damit das Bad rechtzeitig warm ist  ;)

Schönen Abend noch

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,
nur damit du keine Probleme mit deiner "Regierung" bekommst.
Das Reading wird erst angelegt, wenn am Thermostat irgendwas passiert, z.B. Sollwert manuell setzten.

Bitte das Reading überprüfen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#328
Hallo John,

das klappt leider nicht. Ich habe jetzt mehrfach die Ventile von Hand betätigt und auch mittels de ECO-Tasters zwischen eco und auto und zurück geschaltet, aber die UserReadings erscheinen nicht in den Readings. Auch unter Attributes gibt es keinen Eintrag. Ich habe Dir mal ein List Bad beigefügt:Internals:
   DEF        HeatingThermostat 06695f
   IODev      MAXLAN
   LASTInputDev MAXLAN
   MAXLAN_MSGCNT 145
   MAXLAN_TIME 2013-11-11 10:07:24
   MSGCNT     145
   NAME       Bad
   NR         133
   STATE      19.0 °C
   TYPE       MAX
   addr       06695f
   backend    MAXLAN
   dstsetting 1
   mode       0
   rferror    0
   serial     JEQ0690945
   type       HeatingThermostat
   Readings:
     2013-11-11 10:07:24   battery         ok
     2013-11-11 10:07:23   boostDuration   5
     2013-11-11 10:07:23   boostValveposition 80
     2013-11-11 10:07:23   comfortTemperature 21.5
     2013-11-11 10:07:23   decalcification Sat 12:00
     2013-11-11 10:07:24   desiredTemperature 19.0
     2013-11-11 10:07:23   ecoTemperature  16.5
     2013-11-11 10:07:23   groupid         4
     2013-11-11 10:07:23   maxValveSetting 100
     2013-11-11 10:07:23   maximumTemperature on
     2013-11-11 10:07:23   measurementOffset 0.0
     2013-11-11 10:07:23   minimumTemperature off
     2013-11-11 10:07:24   mode            auto
     2013-11-11 10:07:24   msgcnt          144
     2013-11-11 10:07:24   state           19.0 °C
     2013-11-11 10:07:24   temperature     21.0
     2013-11-11 10:07:23   valveOffset     0
     2013-11-11 10:07:24   valveposition   13
     2013-11-11 10:07:23   weekprofile-0-Sat-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-0-Sat-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   weekprofile-1-Sun-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-1-Sun-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   weekprofile-2-Mon-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-2-Mon-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   weekprofile-3-Tue-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-3-Tue-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   weekprofile-4-Wed-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-4-Wed-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   weekprofile-5-Thu-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-5-Thu-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   weekprofile-6-Fri-temp 17.0 °C  /  22.0 °C  /  19.0 °C  /  17.0 °C
     2013-11-11 10:07:23   weekprofile-6-Fri-time 00:00-06:00  /  06:00-10:00  /  10:00-19:00  /  19:00-00:00
     2013-11-11 10:07:23   windowOpenDuration 15
     2013-11-11 10:07:23   windowOpenTemperature 12.0
   Helper:
     DesiTime   1384158499
     LastWasAutoReset
     NextScan   1384161378
     NextScanTimestamp 2013-11-11 10:16:18
     TempBeforeWindOpen 19.0
     TemperatureTime 1384158499
     WinWasOpen 0
   Internals:
     interfaces thermostat;battery;temperature
Attributes:
   alias      Bad
   icon       scene_shower
   room       MAX
   scanTemp   1
   userReadings msgcnt {InternalVal("Bad","MSGCNT",0)}
   verbose    5

und so sieht meine fhem.cfg aus# Bad
#
define Bad MAX HeatingThermostat 06695f
attr Bad alias Bad
attr Bad icon scene_shower
attr Bad userReadings onlyAutoMode { return "1";;}
attr Bad userReadings msgcnt {InternalVal("Bad","MSGCNT",0)}
attr Bad room MAX
attr Bad scanTemp 1
attr Bad verbose 5
define FileLog_Bad FileLog ./log/Bad-%m-%U.log Bad:(temperature|valveposition|desiredTemperature|mode).*
attr FileLog_Bad alias Bad
attr FileLog_Bad logtype text
attr FileLog_Bad room Diagramm.log
#

Es wird fleißig weiter zwischen Auto und manual umgeschaltet.

Was mache ich da falsch?

Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,
setz bitte über FHEM die desiredTemperature, das meinte ich mit "manuell" setzen.

Danach sollte das Readings erscheinen. (Ich geh davon aus dass du vorher einen reread oder shutdown restart) ausgeführt hast.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP