Hauptmenü

Brenner an/aus

Begonnen von Charles, 28 November 2013, 16:31:17

Vorheriges Thema - Nächstes Thema

Charles

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
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

John

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

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Charles

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
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

Charles

#3
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
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

Puschel74

Hallo,

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

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

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Charles

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
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

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.

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


klausdor

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.

Grüße
Klaus
-------------------------------
Raspi2 mit V6.1; HMLAN; CUL868; FHT80TF-2; HM-CC-RT-DN und andere HM-Komponenten; 5x DECT200; xTrend9200_enigma2; diverse WLAN-Plugs

Charles

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
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP