Ich habe eine Verständnisfrage zum ReadingsVal zwar gibt es hier im Wiki (https://wiki.fhem.de/wiki/ReadingsGroup (https://wiki.fhem.de/wiki/ReadingsGroup) folgenden Code aus der 99_myutils.pm als Beispiel zur ReadingsGroup:
#Heizung regeln in readingsGroup
sub
myUtils_HeizungUpDown($$)
{
my($DEVICE,$CMD) = @_;
my $icon = $CMD;
my $VALUE = ReadingsVal($DEVICE,"desired-new","20" );
$VALUE = ReadingsVal($DEVICE,"desired-temp","20" )
if( !$VALUE || $VALUE == 0 );
my $link;
Hierbei soll der Sollwert bei den einzelnen Devices in der ReadingGroup einfach erhöht oder gesenkt werden. Was ich nicht verstehe, wieso in dem Beispiel der Startwert der Temperatur immer auf 20 (Grad) gesetzt wird (bei mir passiert nämlich genau das). Macht ja eigentlich keinen Sinn. Sinnvoll wäre es ja den aktuellen Sollwert zu nehmen und von diesem aus die Erhöhung oder Absenkung zu starten. Verstehe ich da nur etwas falsch beim ReadingsVal? Was bedeutet denn der dritte Parameter, die "20" denn überhaupt?
Eventuell liegt das Problem auch daran, dass ich (bei meinen Eurotronics Spirit) das desired-new nicht automatisch vorhanden ist, sondern ich es nachträglich als user Attribut angelegt habe und der Code deswegen ganz anders aussehen muss? Beim Eurotronics Spirit ist der aktuelle Sollwert im setpointTemp zu finden.
Hier sind nochmal die aktuellen Readings eines meiner Thermostate:
READINGS:
2019-11-08 14:37:38 SEND_DATA failed:00
2019-09-29 10:04:15 UNPARSED SENSOR_BINARY 063005004207c7
2019-11-06 19:43:16 battery 30 %
2019-11-06 19:43:16 batteryPercent 30
2019-11-06 19:43:16 batteryState ok
2019-06-11 08:03:33 configBacklight BacklightEnabled
2019-06-11 08:03:33 configBatteryReport SendBatteryStatusUnsolicitedOnce1
2019-06-11 08:03:33 configLCDInvert LCDContentInverted
2019-06-11 08:03:33 configLCDTimeout 0
2019-06-11 08:03:34 configMeasuredTemperatureOffset 0
2019-06-11 08:03:34 configMeasuredTemperatureReport 1
2019-06-11 08:03:34 configValveOpeningPercentageReport 0
2019-06-11 08:03:34 configWindowOpenDetection SensitivityMedium
2019-11-08 17:03:02 desired-new 00
2019-06-11 07:59:02 model EUROtronic EUR_SPIRIT Wall Radiator Thermostat Valve Control
2019-06-11 07:59:02 modelConfig eurotronic/eur_spirit.xml
2019-06-11 07:59:02 modelId 0148-0003-0001
2019-09-25 17:33:21 neighborList ZWave_THERMOSTAT_42 ZWave_THERMOSTAT_44
2019-09-23 08:36:50 protection off
2019-11-08 06:41:04 reportedState dim 18
2019-11-08 17:21:31 setpointTemp 19.5 C heating
2019-11-08 17:03:02 state desired-temp 19.5
2019-11-08 17:11:13 temperature 19.29 C
2019-11-08 06:35:37 thermostatMode heating
2019-11-08 17:21:31 timeToAck 1.265
2019-11-08 17:21:31 transmit OK
VIelleicht kann mir da jemand auf die Sprünge helfen? :D
Die 20 ist so zu sagen der Notnagel.
Wenn readingsval keine Daten bekommt, wird in diesem Fall 20 zurückgegeben, damit es nicht kalt wird.
Du hast kein Reading welches desired-temp heißt...
Daher wird der Ersatzwert (20) bei ReadingsVal genommen...
Nicht verwirren lassen von:
state desired-temp 19.5
Da ist der ReadingName state und Value desired-temp 19.5
EDIT: bei vermutlich setpointTemp. Allerdings dann wohl per ReadingsNum statt ReadingsVal...
Gruß, Joachim
Vielen Dank schon mal für den Anstoß. Irgendwie steh ich aber noch auf dem Schlauch.
Ich hab jetzt mal entsprechend auf ReadingsNum($DEVICE,"setpointTemp","20" ) geändert, aber da kommt auch immer 20 raus, offensichtlich wird der wirkliche Temperaturwert nicht übernommen.
Ich vermute mal dass es daran liegt dass ja in setpointTemp 19.5 C heating steht und nicht nur ein Wert? Wie schaffe ich es denn nun dass im $VALUE nur dieser Temperaturwert übernommen wird?
Wie wird die Funktion gerufen? Stimmt $DEVICE?
Ich würde ein paar Logausgaben einbauen, um z.B. $DEVICE und $VALUE zu kontollieren.
Richtig.
Ich würde immer per Log ausgeben welche Parameter übergeben wurden...
Je nachdem wie oft die Sub aufgerufen wird entweder die Logausgaben lassen oder zumindest während "Anlaufphase"...
Gruß, Joachim
Ok, das mit der Logausgabe leuchtet mir ein. Könnt ihr mir sagen wie man das am einfachsten macht? Gibt es da irgendwo Beispiele? Ich kenne bisher nur die logs der Devices oder die fhem.log.
Log3(undef, 3, "Logtext");
Statt undef kannst du auch einen "Modulnamen" (oder "irgendwas") angeben...
3 ist dann verbose Level (glaube ich)...
Du kannst auch Variablen ausgeben lassen...
Log3(undef, 3, "Logtext, die Variable DEVICE: $DEVICE");
Gruß, Joachim
Zitat von: omnior am 09 November 2019, 22:44:22
Könnt ihr mir sagen wie man das am einfachsten macht? Gibt es da irgendwo Beispiele?
Keine Beispiele aber immerhin eine Doku :)
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Logging