FHT: holiday_short via FB programmmieren

Begonnen von Guest, 01 Februar 2011, 05:51:00

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Moin,

ich hatte schon lange vor, im Schlafzimmer auf einer Fernbedienung 2
Tasten so zu belegen, dass  im Schlafzimmer und im Bad auf Tastendruck
das FHT für mindestens 1h auf erhöhter Temperatur in den Party-Modus
(mode=holiday_short) gesetzt wird, um kurz aufzuheizen.
Nachdem ich herausgefunden habe, auf welche Werte man holiday1 und
holiday2 setzten muss (ja, steht in http://fhem.de/commandref.html#FHT,
aber da nicht ganz richtig, denn holiday2 muss auf den Tag des Monats
gesetzt werden) mit meinen nicht vorhandenen Perl-Kenntnissen bin ich
bis hierher gelangt:

define S16.3.04.n1 notify S16.3.04:off {\
  my $hd1;;\
  my $hd2;;\
  if ($min lt 30) {\
    $hd1 = $hour + 1.0;;\
  } else {\
    $hd1 = $hour + 1.5;;\
  }\
  $hd1 *= 6;;\
  if ($hd1 ge 144) {\
    $hd1 -= 144;;\
    $hd2 = $mday + 1;;\
  } else {\
    $hd2 = $mday;;\
  }\
  fhem ("attr fht.eg.sz lazy 0;; set fht.eg.sz holiday1 $hd1 holiday2
$hd2 desired-temp 21.0 mode holiday_short;; attr fht.eg.sz lazy 1");;\
}

Leider funktioniert da was nicht ab Zeile "$hd1 *= 6;;\" . $hd2
scheint falsch gesetzt zu werden.
Fehler: "Invalid argument, must be between 1 and 255"

Ohne den $hd2-Teil klappt alles (mit "... holiday2 $mday ..."). Aber
wenn es über Mitternacht hinausgeht, muss ich holiday2 einen Tag
weiter stellen (die Monatsgrenze habe ich noch nicht beachtet).

Bitte um Hilfe, ich finden da keine Fehler, zumal ich nicht weiß, wie
man in Perl traced. Danke.

Grüße,
Jürgen

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

rudolfkoenig

                                                   

> Bitte um Hilfe, ich finden da keine Fehler, zumal ich nicht weiß, wie
> man in Perl traced.

1. Debugging: Fuege Zeilen wie
    Log 1, "HD1: $hd1, HD2: $hd2";;\
  ein, und triggere die Abarbeitung mit
    trigger S16.3.04 off
  Falls das angeschlossene FHZ/CUL das Attribut dummy oder ignore hat,
  oder beim Definition als device "none" angegeben wurde, dann schreibt es
  keine Werte raus.

2. $hd1 ge 144
   ge ist ein Stringvergleich, die Pruefung ist also auch fuer $hd1=2 wahr, und
   damit werden negative Werte produziert.  Besser waere $hd1 > 144


> ja, steht in http://fhem.de/commandref.html#FHT, aber da nicht ganz richtig,
> denn holiday2 muss auf den Tag des Monats gesetzt werden

Wie ist es denn ganz richtig? Kannst Du mir ein patch dazu schicken?

Gruss,
  Rudi

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

> 1. Debugging: Fuege Zeilen wie
>     Log 1, "HD1: $hd1, HD2: $hd2";;\

Was macht "Log 1"?

>   ein, und triggere die Abarbeitung mit
>     trigger S16.3.04 off

War bekannt, trotzdem danke.

>   Falls das angeschlossene FHZ/CUL das Attribut dummy oder ignore hat,
>   oder beim Definition als device "none" angegeben wurde, dann schreibt es
>   keine Werte raus.

Ähmm ... Bahnhof? Egal ... ;-)


> 2. $hd1 ge 144
>    ge ist ein Stringvergleich, die Pruefung ist also auch fuer $hd1=2 wahr, und
>    damit werden negative Werte produziert.  Besser waere $hd1 > 144

Perfekt, danke Rudi. So funktioniert's jetzt:

define S16.3.04.n1 notify S16.3.04:off {\
  my $hd1;;\
  my $hd2;;\
  if ($min < 30) {\
    $hd1 = $hour + 1.0;;\
  } else {\
    $hd1 = $hour + 1.5;;\
  }\
  $hd1 *= 6;;\
  if ($hd1 >= 144) {\
    $hd1 -= 144;;\
    $hd2 = $mday + 1;;\
  } else {\
    $hd2 = $mday;;\
  }\
  fhem ("attr fht.eg.sz lazy 0;; set fht.eg.sz holiday1 $hd1 holiday2
$hd2 desired-temp 21.0 mode holiday_short;; attr fht.eg.sz lazy 1");;\


> > ja, steht in http://fhem.de/commandref.html#FHT, aber da nicht ganz richtig,
> > denn holiday2 muss auf den Tag des Monats gesetzt werden
>
> Wie ist es denn ganz richtig? Kannst Du mir ein patch dazu schicken?

Wie ich oben schon schrieb, muss nur die Definition von holiday2
korrigiert werden. Aber besser wäre, man schreibt es insgesamt klarer:

For holiday_short (party mode)

    * holiday1 sets the absolute hour to switch back from this mode
(in 10-minute steps, max 144)
    * holiday2 sets the day of month to switch back from this mode (if
holiday1 exceeds 144, subtract 144 and increase holiday2 with 1).

    Example:
        * current date is 29 Jan, time is 18:05
        * you want to switch to party mode until tomorrow 1:00
        * set holiday1 to 6 (6 x 10min = 1hour) and holiday2 to 30

Grüße,
Jürgen

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

rudolfkoenig

                                                   

> Was macht "Log 1"?

Eine Zeile mit loglevel 1 nach fhem.log schreiben.


> Wie ich oben schon schrieb, muss nur die Definition von holiday2
> korrigiert werden. Aber besser wäre, man schreibt es insgesamt klarer:

habs eingecheckt.

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

Hi,

um den ganzen Schmodder nicht jedes Mal in eine notify-Definition
kopieren zu muessen, würde ich gerne eine Funktion draus machen. Ich
habe mir in Anlehnung an FHEM/99_Util.pm eine FHEM/99_MyUtil.pm gebaut
mit folgendem Inhalt:

package main;
use strict;
use warnings;
use POSIX;

sub
fht-party($$)
{
  my ($fht,$temp) = @_;
  my $hd1;
  my $hd2;
  if ($min < 30) {
    $hd1 = $hour + 1.0;
  } else {
    $hd1 = $hour + 1.5;
  }
  $hd1 *= 6;
  if ($hd1 >= 144) {
    $hd1 -= 144;
    $hd2 = $mday + 1;
  } else {
    $hd2 = $mday;
  }
  fhem ("attr $fht lazy 0; set $fht holiday1 $hd1 holiday2 $hd2
desired-temp $temp mode holiday_short; attr $fht lazy 1");
}

1;

In die notify-Definition käme dann folgendes:

define S16.3.04.n1 notify S16.3.04:off { fht-party ("fht.eg.sz",
21.0);; }



Beim Restart von Fhem gibt's aber jetzt Meckerei:

[...]
2011.02.04 13:58:01 0: Server shutdown
2011.02.04 13:58:04 1: Error:Modul 99_MyUtils deactivated:
2011.02.04 13:58:04 3: CUL opening CUL_KG device /dev/cul868-0
2011.02.04 13:58:04 3: CUL device opened
2011.02.04 13:58:04 3: CUL opening CUL_EG device /dev/cul868-1
2011.02.04 13:58:04 3: CUL device opened
2011.02.04 13:58:05 2: FHEMWEB port 8083 opened
2011.02.04 13:58:05 2: FHEMWEB port 8084 opened
[...]

Was mache ich jetzt wieder falsch?


Liebe Grüße an die geduldig helfende Fraktion (in Form von Rudi ;-) ),
Jürgen

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

rudolfkoenig

                                                   

> 2011.02.04 13:58:04 1: Error:Modul 99_MyUtils deactivated:
> 2011.02.04 13:58:04 3: CUL opening CUL_KG device /dev/cul868-0

Bei mir erscheint direct nach deactivated:
 Illegal declaration of subroutine main::fht at ./FHEM/99_Utils.pm line 29, <$fh> line 4.

Funktionsnamen sollten doch kein - erhalten, das ist immer noch fuer
Substraktion vorbehalten...

Weiteres Problem: $min & $hour ist in diesem kontext nicht definiert (es sind keine globale Variablen), eine kurze Abhilfe ist geschaffen mit (aus fhem.pl geklauten):

  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

Komisch?! Kaum mach' ich's richtig, da funktioniert's. ;-/

fhem> { fht_party("fht.eg.sz",18.0);; }
2011.02.04 16:42:57 2: FHT set fht.eg.sz holiday1 105 holiday2 4
desired-temp 18.0 mode holiday_short
fhem>

Mein Dank wird dich ewig verfolgen :-D
(Wo schickt man eigentlich die Donations hin?)

LG,
Jürgen


PS: Hier nochmal die komplette Datei 99_MyUtil.pm, der Vollständigkeit
halber, wenn jemand das Nachbauen möchte:


package main;
use strict;
use warnings;
use POSIX;

sub
fht_party($$)
{
  my ($fht,$temp) = @_;
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) =
localtime;
  my $hd1;
  my $hd2;
  if ($min < 30) {
    $hd1 = $hour + 1.0;
  } else {
    $hd1 = $hour + 1.5;
  }
  $hd1 *= 6;
  if ($hd1 >= 144) {
    $hd1 -= 144;
    $hd2 = $mday + 1;
  } else {
    $hd2 = $mday;
  }
  fhem ("attr $fht lazy 0; set $fht holiday1 $hd1 holiday2 $hd2
desired-temp $temp mode holiday_short; attr $fht lazy 1");
}

1;

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.