Syntax OldReadings : gelöst

Begonnen von elbmarschsurfer, 09 Februar 2021, 10:46:22

Vorheriges Thema - Nächstes Thema

elbmarschsurfer

Moin erstmal,

Ich hoffe ihr könnt mir ganz unbürokratisch und ohne Häme helfen.
Wie bekomme ich meine Heizung auf den alten Wert aus "OLDREADING: desiredTemperature x.xx" wieder auf den aktuellen Wert gesetzt?

set MAX_137fc8 desiredTemperature [OldReadingsVal ("MAX_137fc8","desiredTemperature","0")]

...ist leider die falsche Syntax. Der Fehler:

PERL WARNING: Argument "[OldReadingsVal("MAX_137fc8","desiredTemperature","0")]" isn't numeric in multiplication (*) at ./FHEM/10_MAX.pm line 737.

wird mir im Log angezeigt. Ich habe leider keine Beispiele zum Aufruf der alten Readings als Variable gefunden.






TomLee

unbürokratisch und ohne Häme, meine Vermutung :

set MAX_137fc8 desiredTemperature {(OldReadingsNum("MAX_137fc8","desiredTemperature","0"))}

Gruß

Thomas

elbmarschsurfer

Danke Thomas,

genauso ist es. So akzeptiert Fhem die Syntax. Hast du noch kurz Zeit, mir den
Unterschied zwischen {()} und []  und den
Unterschied zwischen Num und Val in Fhem zu erklären?
Aber nur, wenn es Dich nicht nervt, weil es bestimmt Grundlagen der Programmierung sind...

TomLee

#3
ZitatUnterschied zwischen {()} und []

{()} besser es erklärt wer anders, da find ich nicht die richtigen Worte zu, auf jedenfall wird ohne die () der Text {OldReadingsNum ("du_Testy2","temperature","0")}
verwendet und nicht der Wert aus OldReadingsNum.

[] ist die Syntax von Set_magic oder DOIF (mein ich), einfach mal einlesen.



  • ReadingsVal(<devicename>,<reading>,<defaultvalue>)
    Gibt den Inhalt der "readings" zurück (den Inhalt der in dem "Readings"-Abschnitt von "list device" angezeigt wird)
  • ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
    Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet.

Es wär also bei dem Reading desiredTemperature egal ob du ReadingsNum oder ReadingsVal verwendest (soweit ich das gelesen habe, hab keine Max-Thermostate), korrekter ist auf jedenfall ReadingsNum.

elbmarschsurfer

Perfekt. Danke. Das hilft mir sehr, die Definitionen besser zu verstehen. MAX!-Thermostate liefern eine Kommastelle mit, wobei es bei der Temperatureinstellung in diesem Fall natürlich nicht auf diese ankommt. Somit reicht Num ohne <round> völlig aus.
Jedenfalls kann ich meine OldReadings jetzt in DOIF verwenden und bin wieder ein Stück weiter gekommen in Fhem.

Vielen Dank nochmal! :)

Wzut

Zitat von: elbmarschsurfer am 09 Februar 2021, 13:22:31
MAX!-Thermostate liefern eine Kommastelle mit, wobei es bei der Temperatureinstellung in diesem Fall natürlich nicht auf diese ankommt.
doch kommt es. Die MAX HTs & WTs akzeptieren Soll Temperaturen nur in 0,5 Grad Schritten !
Kannst also ruhig auf das nächste halbe auf oder abrunden. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher