Hauptmenü

Rechnen mit Readings

Begonnen von Gonzolo, 17 April 2017, 12:35:02

Vorheriges Thema - Nächstes Thema

Gonzolo

... bedingt hängen meine beiden Beiträge zusammen, da hast du recht. Beide haben was mit meiner Heizungssteuerung zu tun. Aber vergesse mal den anderen Beitrag. Ich habe mich entscheide den anderen zu schließen um Eure Nerven zu schonen.  ;)

Also nun zu dem Problem mit "Rechnen mit Readings"...

Bei dem hier beschriebenen Problem geht es darum, dass ich mit einem DOIF nur dann eine Heizung einschalten will, wenn die Termperatur vom einem "Wohnzimmerthermostat" < 2 Grad unterhalb einer vorgegebenen Tag Temperatur ist. Wie hoch diese Tag Temperatur ist, steht in einem Reading eines Dummy-Parameter namens [Steuerung:TempTag].

Am 17 April 2017, 17:39:22 hat mir Damian bereits eine Lösung präsentiert ... dachte ich ...

Zitat
Wenn Wohnzimmerthermostat im Status die Temperatur beinhaltet, dann kannst du es so definieren:


Code: [Auswählen]
define HeizON DOIF ([Wohnzimmerthermostat] < ([Heizungssteuerung:TagTemp] -2)) (Set Heizung ON)

Ich habe es dann wie folgt umgesetzt:



...
DOELSEIF
([TempWohnzimmer] < ([Steuerung:TempTag]-2.0))

(set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Steuerung:TempTag])


Leder funktionier das nicht und ich habe nach langen lesen  ;) nicht herausgefunden, wie hier die richtige Syntax ist.  :-[

DANKE!

Beste Grüße

Gonzolo

CoolTux

Ok ich versuche mal einen Testaufbau bei mir. Von Dir benötige ich bitte einmal ein list vom DIOF
Also oben in der Kommandozeile von FHEM Web eingeben

list DOIFNAME


Also statt DOIFNAME den Namen von Deinem DOIF
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Zitat von: Gonzolo am 12 Mai 2017, 11:26:23
Am 17 April 2017, 17:39:22 hat mir Damian bereits eine Lösung präsentiert ... dachte ich ...

Damian hatte doch heute nochmal einen kompletten code geliefert.

Warum schaust Du Dir das nicht nochmal genauer an?
Was Du mit den -2 Grad willst, ist doch eine Hysterese, richtig? Das ist genau der Zweck von THRESHOLD, Du solltest Dir also die Mühe machen, die Modulbeschriebung in der commandref mal anzuschauen.

Und btw.: Wenn Du eine Zeitschaltuhr suchst, mit der Du die Solltemperatur jeweils verändern kannst, schau Dir mal bei Gelegenheit weekdaytimer an (ich will aber die sowieso vorhandene Verwirrung hier nicht noch vergrößern, also vertage das erst mal).

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Gonzolo

Thorsten... das brauchst Du?

Internals:
   DEF        ###### ------------------------Tag mit Boost
([Steuerung] eq "TempTag" and
   [TempWohnzimmer] < ([Steuerung:TempTag]-2.0))
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag])
  (set Heizung_Wohnzimmer datapoint 1.BOOST_MODE true)


###### ------------------------Nacht
DOELSEIF
  ([Steuerung] eq "TempNacht")
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempNacht])


###### ------------------------Off
DOELSEIF
  ([Steuerung] eq "OFF")
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 2.0)

   NAME       Heizung_Wohnzimmer_SetTemp
   NR         100
   NTFY_ORDER 50-Heizung_Wohnzimmer_SetTemp
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-05-12 11:48:10   cmd             0
     2017-05-12 11:48:10   state           initialized
   Condition:
     0          InternalDoIf($hash,'Steuerung','STATE') eq "TempTag" and    InternalDoIf($hash,'TempWohnzimmer','STATE') < (ReadingValDoIf($hash,'Steuerung','TempTag')-2.0)
     1          InternalDoIf($hash,'Steuerung','STATE') eq "TempNacht"
     2          InternalDoIf($hash,'Steuerung','STATE') eq "OFF"
   Devices:
     0           Steuerung TempWohnzimmer
     1           Steuerung
     2           Steuerung
     all         Steuerung TempWohnzimmer
   Do:
     0:
       0          set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag]
       1          set Heizung_Wohnzimmer datapoint 1.BOOST_MODE true
     1:
       0          set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempNacht]
     2:
       0          set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 2.0
     3:
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           Steuerung:STATE TempWohnzimmer:STATE
     1           Steuerung:STATE
     2           Steuerung:STATE
     all         Steuerung:STATE TempWohnzimmer:STATE
   Itimer:
   Readings:
     0           Steuerung:TempTag
     all         Steuerung:TempTag
   Regexp:
     All:
   State:
Attributes:
   do         always
   group      Neu

Gonzolo

Beta-User...

Warum denken hier eigentlich alle, dass ich mir die Sachen nicht anschaue/durchlese/ausprobiere???? ::)

Ja man kann es anders bauen! Vielleicht tue ich das auch?! Trotzdem will ich verstehen wo HIER mein Fehler ist!

Oder habt Ihr es lieber, dass ich ein Thema öffne, und eine andere Methode finde, dass ich sofort das ding hier wieder zumache? Denke doch, dass es auch für andere interessant ist, wie man mit Readings rechen kann???

Aber auch Dir danke für Deinen Antwort und deine Mühe!

Viele Grüße

Gonzolo

CoolTux

Also


Internals:
   CFGFN
   DEF        ([dummyTempSensorWZ] and ([?dummyTempSensorWZ] < [?dummyHzSteuerung:tempTag] - 2) ) ( set dummyThermostat on) DOELSE ()
   NAME       doifSetThermostat
   NR         69
   NTFY_ORDER 50-doifSetThermostat
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-12 12:03:15   Device          dummyTempSensorWZ
     2017-05-12 12:03:15   cmd             1
     2017-05-12 12:03:15   cmd_event       dummyTempSensorWZ
     2017-05-12 12:03:15   cmd_nr          1
     2017-05-12 12:03:15   e_dummyTempSensorWZ_STATE 13
     2017-05-12 12:03:15   state           cmd_1


So geht es bei mir. Ich schaue mir Dein list jetzt mal in Ruhe an
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux


([?Steuerung] eq "TempTag" and
   ([TempWohnzimmer] < [?Steuerung:TempTag]-2.0) )
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag])
  (set Heizung_Wohnzimmer datapoint 1.BOOST_MODE true)


So sollte es dann auch klappen.
Und nimm mal das do always raus bitte
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gonzolo

Danke!!! Werde ich nachher ausprobieren! Muss leider noch ein wenig Arbeiten! :-)

ABER Vielen Dank!!!

Gonzolo

Gonzolo

das ? in [?Steuerung] bewirkt nun was??  :)


CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gonzolo

DANKE!!! ... Was ne Schwergeburt!!  ;)

ES SCHEINT ZU GEHEN!!!

Gruß

Gonzolo

CoolTux

Sehr schön.
Kleine Prüfungsfrage. Warum haben wir eigentlich die (?) verwendet, was wollen wir damit bezwecken?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gonzolo

Das gilt nicht... das habe ich schon gefragt... ABER

... ich vermute stark, dass ich damit FHEM zwinge, den Parameter auszulesen?

Ich habe es nämlich nun so gebaut:


###### ------------------------Tag mit Boost
([Steuerung] eq "TempTag" and
   [TempWohnzimmer] < ([?Steuerung:TempTag]-2.0))
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag])
  (set Heizung_Wohnzimmer datapoint 1.BOOST_MODE true)


###### ------------------------Tag ohne Boost
DOELSEIF
([Steuerung] eq "TempTag" and
   [TempWohnzimmer] >= ([?Steuerung:TempTag]-2.0))
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag])




FHEM soll nur dann die Abfrage starten, wenn STEUERUNG auf "TempTag" umgeschaltet wird.

Denke mal ich habe die Prüfung bestanden, und gleich in der Praxis umgesetzt! :-)

Gruß

Gonzolo

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

CoolTux

Oder nicht verstanden. Aber dann hätte er fragen sollen


Zitat von: Gonzolo am 12 Mai 2017, 12:54:57
Das gilt nicht... das habe ich schon gefragt... ABER

... ich vermute stark, dass ich damit FHEM zwinge, den Parameter auszulesen?

Ich habe es nämlich nun so gebaut:


###### ------------------------Tag mit Boost
([Steuerung] eq "TempTag" and
   [TempWohnzimmer] < ([?Steuerung:TempTag]-2.0))
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag])
  (set Heizung_Wohnzimmer datapoint 1.BOOST_MODE true)


###### ------------------------Tag ohne Boost
DOELSEIF
([Steuerung] eq "TempTag" and
   [TempWohnzimmer] >= ([?Steuerung:TempTag]-2.0))
  (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE [Heizung_Wohnzimmer:TempTag])




FHEM soll nur dann die Abfrage starten, wenn STEUERUNG auf "TempTag" umgeschaltet wird.

Denke mal ich habe die Prüfung bestanden, und gleich in der Praxis umgesetzt! :-)

Gruß

Gonzolo


Naja fast. FHEM arbeitet Event basiert. Du kannst Dir alle Events welche Deine Devices auslösen im Eventmonitor anschauen.
Auf ein Event kann man triggern, das tun Notify oder DOIF und lösen dann aus. Das Fragezeichen vor dem Device im DOIF sorgt dafür das auf das Event nicht getriggert wird. Es macht wenig Sinn das Dein DOIF auslöst wenn Du den Dummy Tag Nacht änderst, auch macht es wenig Sinn wenn Dein DOIF auf verändern der Soll Temperaturen für Tag Nacht reagiert. Auslöser soll einzig und allein die gemessene IST Temperatur sein und nur die löst auch nur das DOIF aus. Also zu mindest was diesen DOELSEIF Zweig an geht.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net