FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Charles am 28 November 2013, 16:31:17

Titel: Brenner an/aus
Beitrag von: Charles am 28 November 2013, 16:31:17
Hallo,

ich lese mit einem Max Fensterkontakt die Aktivität meines Heizungsbrenners aus.
Ich will benachrichtigt werden, wenn er an -und abschaltet, und die Dauer der Heizphase in Min. wissen. Dafür hab ich dieses Skript geschrieben.
define brenner_an notify SHUTTER.BRENNER:closed {\     
  my $time1 = time();;\
fhem {FB_mail('xxx+1-nobody@@api.prowlapp.com','Brenner ein!','@ %')}\
}

define brenner_aus notify SHUTTER.BRENNER:opened {\     
my $time2 = time();;my $dauer = ($time2 - $time1)/60;; \
fhem {FB_mail('xxx+1-nobody@@api.prowlapp.com','Brenner nach $dauer Min. aus','@ %')}\
}


Es funktioniert leider nicht. Wahrscheinlich sind Fehler drin. Im Log steht Folgendes:

Triggering brenner_an
2013.11.28 16:14:23 3: Mail sent to xxx+1-nobody@api.prowlapp.com
2013.11.28 16:14:23 3: HASH(0xfd9aa0) : Unknown command HASH(0xfd9aa0), try help.

Danke für Hilfe
Charles
Titel: Antw:Brenner an/aus
Beitrag von: John am 28 November 2013, 21:22:26
Hallo Charles,
ich befasse mich auch mit dem Thema und habe hierzu das Modul HourCounter geschrieben.
Vielleicht ist es ja von Interesse.

Es wertet Puls- und Pausezeiten aus und kumuliert diese über den Tag.

http://forum.fhem.de/index.php/topic,12216.0.html (http://forum.fhem.de/index.php/topic,12216.0.html)

John
Titel: Antw:Brenner an/aus
Beitrag von: Charles am 28 November 2013, 23:30:54
Hallo John,

danke für den Hinweis. Ich hab die ältere Version auf der FB laufen.
Mit dieser Übung hier wollte ich einfach mal was ausprobieren und mich langsam an PERL rantasten.

Charles
Titel: Antw:Brenner an/aus
Beitrag von: Charles am 12 Dezember 2013, 22:12:27
Hallo,
bin leider immer noch nicht weiter, da PERL echt kompliziert ist.
Auch die Suche in perldoc brachte mich bis jetzt nicht weiter. Die Syntax ist schwierig und ich bin kein Profi.
Im Moment sieht das nicht funktionierende Skript so aus:define brenner_an notify SHUTTER.BRENNER:closed {my $brenner1 = time}
define brenner_aus notify SHUTTER.BRENNER:opened {\
  {my $brenner1};;\
  {my $brenner2 = time};;\
  {my $brenner3 = int($brenner2 - $brenner1)};;\
  {FB_mail('xxx+1-nobody@@api.prowlapp.com','Brenner an für {$brenner3}s.','@ %')};;\
  {time}\
}

Ihr seht schon - das ist Fischen im Trüben!

Die Fehlerausgabe im Log:
2013.12.12 21:30:58 3: brenner_aus return value: Global symbol "$brenner2" requires explicit package name at (eval 3127) line 1.
Global symbol "$brenner1" requires explicit package name at (eval 3127) line 1.

Wäre dankbar, wenn mir jemand schreiben könnte, wie's richtig geht!

Danke
Charles
Titel: Antw:Brenner an/aus
Beitrag von: Puschel74 am 12 Dezember 2013, 23:57:50
Hallo,

ZitatIhr seht schon - das ist Fischen im Trüben!

Dann wäre das beste Weihnachtsgeschenk ein - Perl für Anfänger   ;)

Grüße
Titel: Antw:Brenner an/aus
Beitrag von: Charles am 13 Dezember 2013, 00:47:44
Hallo Puschel74,

wenn Du mir nicht weiterhelfen willst, dann sag mir doch bitte, wo ich z.B. in der perldoc eine Lösung finde. Ich weiss echt nicht, wo ich schauen soll. Bin halt kein Proficoder!

Danke
Charles
Titel: Antw:Brenner an/aus
Beitrag von: Puschel74 am 13 Dezember 2013, 08:29:24
Hallo,

Zitatwenn Du mir nicht weiterhelfen willst

Von wollen kann garnicht die Rede sein - es geht eher um mein Können (und das ist mehr als Bescheiden).

Zitatdann sag mir doch bitte, wo ich ... eine Lösung finde

Der Link von John hat dir warum? nicht gefallen?

ZitatIch weiss echt nicht, wo ich schauen soll.

Evtl. auch in den Anfängerfragen unter - was soll alles in meine Frage bzw. wie soll ich meine Frage stellen wenn ich Hilfe möchte.

Grüße
Titel: Antw:Brenner an/aus
Beitrag von: ChrisD am 13 Dezember 2013, 23:35:00
Hallo,

Dein Code funktioniert aus mehreren Gründen nicht. Beim ersten notifydefine brenner_an notify SHUTTER.BRENNER:closed {my $brenner1 = time}
wird eine lokale, nur innerhalb von {} gültige Perl-Variable ($brenner1) angelegt, ihr den Wert von time zugewiesen und nach dem abschliessenden } von Perl sofort wieder entsorgt. Mehr Informationen zum Scope von Variablen findest du u.a. unter http://perlmaven.com/scope-of-variables-in-perl (http://perlmaven.com/scope-of-variables-in-perl).

Um den Zeitstempel zwischenzuspeichern kannst du einen dummy anlegen, z.B.:
define tZeitShutterBrennerClosed dummy
define brenner_an notify SHUTTER.BRENNER:closed {fhem "set tZeitShutterBrennerClosed ".time}


Im 2. notify deklarierst du erneut Variablen die nur kurz gültig sind. Die Fehlermeldungen im Logfile kommen von der Zeile {my $brenner3 = int($brenner2 - $brenner1)};;\, weder $brenner1 noch $brenner2 sind hier bekannt da Perl sie bereits wieder vergessen hat. So könnte es funktionieren:define brenner_aus notify SHUTTER.BRENNER:opened {FB_mailX('xxx+1-nobody@@api.prowlapp.com','Brenner an für '.(time-Value('tZeitShutterBrennerClosed')).'s','@ %')}


Grüße,

ChrisD

Titel: Antw:Brenner an/aus
Beitrag von: klausdor am 14 Dezember 2013, 00:40:30
Hallo Charles,

welche Heizung ist es denn?

Ich suche gerade eine neue von den üblichen Verdächtigen (Viessmann, Vaillant udglm.) mit einer guten SS um an FHEM zu kommen. (Wer da schon Erfahrungen hat und hier mitliest, kann das bitte mal kundtun ;-) )

Da ich von den nötigen Werkzeugen zur Programmierung keine Ahnung habe, werde ich in den nächsten Tagen mal meine alte Heizung an eine FritzDect 200 hängen und mir die Kurven ansehen.
Evtl. ist dieser Weg auch was für Dich.

Titel: Antw:Brenner an/aus
Beitrag von: Charles am 16 Dezember 2013, 00:20:57
Hallo ChrisD,

mit Deiner Hilfe hab ich endlich das Skript zum Laufen gebracht. Ich lese damit die Länge der Heizphasen meiner Heizung in Minuten aus. So siehts jetzt aus:define tZeitShutterBrennerClosed dummy
define brenner_an notify SHUTTER.BRENNER:closed {fhem "set tZeitShutterBrennerClosed ".time}
define brenner_aus notify SHUTTER.BRENNER:opened {my $tBrennerAn= sprintf("%%.1f", ((time-Value('tZeitShutterBrennerClosed'))/60));;\
  if ($tBrennerAn < 1000){\
  FB_mail('c6c78db21955aad35b1a393ba690f32cdbe31efb+1-nobody@@api.prowlapp.com','Brenner an fuer '.$tBrennerAn.' min.','@ %');;\
  fhem("setstate tZeitShutterBrennerClosed defined")}}

Die if-Abfrage brauchte ich, um unsinnige Ergebnisse auszufiltern. Der Fensterkontakt schickt jede Stunde selbständig eine :opened-Meldung, die dann zu einem unsinnigen Ergebnis führt.

Danke
Charles