ReadingsVal Verständnisfrage (Heizungssteuerung)

Begonnen von omnior, 08 November 2019, 17:23:17

Vorheriges Thema - Nächstes Thema

omnior

Ich habe eine Verständnisfrage zum ReadingsVal zwar gibt es hier im Wiki (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

frober

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.

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

MadMax-FHEM

#2
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

omnior

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?

amenomade

Wie wird die Funktion gerufen? Stimmt $DEVICE?
Ich würde ein paar Logausgaben einbauen, um z.B. $DEVICE und $VALUE zu kontollieren.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

omnior

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.

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz