FHT-Werte auslesen und in if verwenden?

Begonnen von Guest, 05 August 2011, 21:54:22

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo zusammen,
gibt es eine Möglichkeit, Werte der FHT Heizungssteuerung in
Bedingungen zu verwenden? Ich habe am Schloss meiner Haustür ein FHTTK
Kontakt, den ich zum Ansteuern verschiedener Aktionen einsetzen
möchte. Nach einigem Kämpfen mit der Syntax bin ich mal so weit:

define haus_verlassen notify Haustuer.*Closed \
{ \
  if ($oldvalue{Haustuer}{VAL} =~ /Open/) \
  { \
    {Log 1, 'Haustür abgeschlossen...'} \
    {fhem("set Alles off")} \
  } \
}

define haus_betreten notify Haustuer.*Open \
{ \
  if ($oldvalue{Haustuer}{VAL} =~ /Closed/) \
  { \
    {Log 1, 'Haustür aufgeschlossen...'} \
    {fhem("set ZirkulationspumpeS on")} \
  } \
}

Jetzt würde ich gerne beim Verlassen noch meinen Heizungsregler
ansteuern und zwar nur wenn er nicht im Sommer auf dem manuellen Modus
steht (mode=manual). Idealerweise möche ich vorher die abgesenkte
Temperatur auslesen (night-temp) und dann die desired-temp darauf
setzen. Lassen sich dazu irgendwie die genannten Werte auslesen und im
if-Statement bzw. beim set verwenden?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Ich verwende folgende Befehle:
define tw03     at *17:00       {if ($value{Anwesend} eq "on")
{fhem("set wz desired-temp 20")} else {fhem("set wz desired-temp
18")}}
define tw04     at *23:00       {if ($value{Anwesend} eq "on")
{fhem("set wz desired-temp 18")} else {fhem("set wz desired-temp
18")}}
define tw01a    notify Anwesend:(on)    {if (($oldvalue{Anwesend}{VAL}
ne $value{Anwesend})&& ($hour > 16) && ($hour < 24)) {fhem("set wz
desired-temp 20")}}
define tw01b    notify Anwesend:(off)   set wz desired-temp 18
Das ist natürlich total starr.
Die manuelle Temperatur hört auf manu-temp
Wenn Du eine schöne Lösung hast, stell die doch ins wiki?

Viel Erfolg

Markus


On 5 Aug., 21:54, cge wrote:
> Hallo zusammen,
> gibt es eine Möglichkeit, Werte der FHT Heizungssteuerung in
> Bedingungen zu verwenden? Ich habe am Schloss meiner Haustür ein FHTTK
> Kontakt, den ich zum Ansteuern verschiedener Aktionen einsetzen
> möchte. Nach einigem Kämpfen mit der Syntax bin ich mal so weit:
>
> define haus_verlassen notify Haustuer.*Closed \
> { \
>   if ($oldvalue{Haustuer}{VAL} =~ /Open/) \
>   { \
>     {Log 1, 'Haustür abgeschlossen...'} \
>     {fhem("set Alles off")} \
>   } \
>
> }
>
> define haus_betreten notify Haustuer.*Open \
> { \
>   if ($oldvalue{Haustuer}{VAL} =~ /Closed/) \
>   { \
>     {Log 1, 'Haustür aufgeschlossen...'} \
>     {fhem("set ZirkulationspumpeS on")} \
>   } \
>
> }
>
> Jetzt würde ich gerne beim Verlassen noch meinen Heizungsregler
> ansteuern und zwar nur wenn er nicht im Sommer auf dem manuellen Modus
> steht (mode=manual). Idealerweise möche ich vorher die abgesenkte
> Temperatur auslesen (night-temp) und dann die desired-temp darauf
> setzen. Lassen sich dazu irgendwie die genannten Werte auslesen und im
> if-Statement bzw. beim set verwenden?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Habe gerade in der Beispieldatei example.03_fht was Vielversprechendes
gefunden:
my $d = $defs{@}{READINGS}{"desired-temp"}{VAL};

denke dass ich damit mal experimentieren kann sobald ich mal dazu
komme...

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Leider sind meine Experimente nicht so erfolgreich, dummerweise bin
ich auch Perl-Laie :-(

Kann es sein dass man aus einer Notify-Routine nicht auf die Readings
anderer Devices zugreifen kann?

Ich habe ein Test-Notify auf einen freien Schalter "Leer" gelegt:

define Testroutine notify Leer.* \
{ \
  {Log 1, 'Start der Testroutine...'} \
  {Log 1, 'a: '.$defs{@}{READINGS}{"state"}{VAL}} \
  {Log 1, 'b: '.$defs{Leer}{READINGS}{"state"}{VAL}} \
  {Log 1, 'c: '.$defs{Stehlampe}{READINGS}{"state"}{VAL}} \
  {Log 1, 'd: '.$defs{HeizungBad}{READINGS}{"night-temp"}{VAL}} \
  {Log 1, 'Ende der Testroutine...'} \
}

Wenn ich nun den Schalte betätige bekomme ich folgende Einträge im
Log:
2011.08.09 22:01:03 2: FS20 Leer off
2011.08.09 22:01:03 1: Start der Testroutine...
2011.08.09 22:01:03 1: a: off
2011.08.09 22:01:03 1: b: off
Use of uninitialized value in concatenation (.) or string at (eval
6877) line 1.
2011.08.09 22:01:03 1: c:
Use of uninitialized value in concatenation (.) or string at (eval
6877) line 1.
2011.08.09 22:01:03 1: d:
2011.08.09 22:01:03 1: Ende der Testroutine...

D.h. der Zugriff über $defs funktioniert für @ bzw. "Leer". Für den
gleichen Schaltertyp "Stehlampe" und die FHT "HeizungBad" jedoch
nicht.

Gibt es eine andere Möglichkeit, auf die Readings zuzugreifen?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Kann es sein dass man aus einer Notify-Routine nicht auf die Readings
> anderer Devices zugreifen kann?

Nein. Die Zeilen schauen auch ok aus, d.h. das Problem muss anderswo sein. Wie
schaut denn "list Stehlampe" aus? Ich haette noch zwei Bemerkungen: Ich habe
noch nie sowas wie {code}{code}{code} in perl geschrieben, ich bevorzuge
  code; code; code;
(wobei ; in fhem.cfg durch ;; ersetzt werden muss)

Und ab fhem5.1 wuerde ich ReadingsVal("dev", "reading", "default") empfehlen
statt $defs{dev}{READINGS}{reading}{VAL}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Vielen Dank, das hat geholfen. Das list Stehlampe brachte es an den
Tag...

Danke auch der Hinweis auf ReadingsVal (mit wertvollem Parameter
"default"...).

Problem war dass die Readings (sowohl bei Stehlampe als auch bei
HeizungBad) in diesem Moment nicht gesetzt waren:
list Stehlampe lieferte:
Internals:
   BTN        00
   DEF        1be5 00
   IODev      CUL
   NAME       Stehlampe
   NR         17
   STATE      ???
   TYPE       FS20
   XMIT       1be5
   Code:
     1          1be5 00
Attributes:
   fm_fav     8
   fm_order   1
   model      fs20st
   room       Wohnzimmer

Zunächst unerklärlich, da der FHEM schon einige Zeit läuft und ich
auch ein regelmäßiges set HeizungBad report1 0 report2 255 absetze.

Sobald ich den Stehlampen-Schalter einmal betätigt hatte und set
HeizungBad report1 0 report2 255 abgesetzt habe funktioniert es.

Aber warum waren die Readings nicht gesetzt?

Nach etwas Probieren fand ich heraus, dass jedesmal wenn ich aus
define Testroutine notify Leer.* \
{\
  {Log 1, 'Start der Testroutine...'} \
...
folgendes gemacht habe:

define Testroutine notify Leer.* \
{\
  Log 1, 'Start der Testroutine...';; \

Beim Aufruf im Log folgende Meldung erscheint.

2011.08.10 18:27:35 2: FS20 Leer off
2011.08.10 18:27:35 3: Unknown command {, try help
2011.08.10 18:27:35 3: NTFY return:  Unknown command {, try help

und dann die Readings wieder gelöscht sind. Das verstehe ich zwar
nicht, aber mit meinem Problem bin ich einen Schritt weiter.

Letzte Anmerkung zu den {code}{code}: Ich hatte es anders nicht
hinbekommen und inzwischen herausgefunden, dass es an meinen
einleitenden Zeilen liegt:
Nach
define Testroutine notify Leer.* \
{\
geht nur {code}{code}

Nach
define Testroutine notify Leer.* {\
geht code; code;

Somit habe ich nun folgeden Code (wenn Tür abgeschlossen wird, was ein
Schalter an FHTTK erkennt, dann Alles (Schalter für Licht, ...)
ausschalten und die Temperatur im Bad auf die Nachttemperatur
absenken. Allerdings nur wenn nicht auf manuellen Modus, z.B. im
Sommer gesetzt. Vielleicht hat ja jemand Verwendung dafür:

define haus_verlassen notify Haustuer.*Closed { \
  if ($oldvalue{Haustuer}{VAL} =~ /Open/) { \
    Log 1, 'Haustür abgeschlossen...';; \
    fhem("set Alles off");; \
\
    my $m = ReadingsVal("HeizungBad", "mode", "manual");;\
    my $t = ReadingsVal("HeizungBad", "night-temp", "18.0");;\
\
    if ($m eq "auto") {\
      fhem("set HeizungBad desired-temp $t");; \
    } \
  } \
}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com