FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ChrisW am 23 Januar 2013, 14:43:23

Titel: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 23 Januar 2013, 14:43:23
Hallo,
ich möchte gerne 2 Aqiarien überwachen. Am besten in 2 getrennten abfragen da unterschiedliche Temperaturen.
Geräte:
Temp_Aqua
Temp_Hannibal


Log bei beiden Gleich :
2013-01-23_14:30:50 Temp_Hannibal Temperatur: 22.5

Prüfungszeit 15 Uhr täglich. ( Da Temp. über nacht absinkt )

Temp_Aqua = unter 25c = Meldung : (Temp_Aqua zu kalt)
Temp_Aqua = über 28c = Meldung : (Temp_Aqua zu warm)

Temp_Hannibal = unter 23c = Meldung : (Temp_Hannibal zu kalt)
Temp_Hannibal = über 26c = Meldung : (Temp_Hannibal zu warm)

Gerätename udn Geräte Status mit @ und % kann ich auch selbst einbasteln es geht mir nur um das Grundgerüst.

Vielleicht kann mit ja jemand ein Code Schnipsel zur Verfügung stellen wo er ähnliches geprüft hat.
Danke

Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: Puschel74 am 23 Januar 2013, 17:43:26
Hallo,

das würde in etwa so aussehen:

define Ueberwach_1_Zeit at +*15:00:00 trigger Ueberwach_1

define Ueberwach_1 notify Ueberwach_1 {
  my $temp_aqua = (ReadingsVal("Temp_Aqua"),"Temperatur",20);
  my $temp_hannibal = (ReadingsVal("Temp_Hannibal"),"Temperatur",20);
  if (($temp_aqua < 25 ) || ($temp_hannibal < 25)) {
    Log (3,"Temperatur Aquarium ".$temp_aqua." und Hannibal ".$temp_hannibal." zu kalt");
  }
  if (($temp_aqua < 28 ) || ($temp_hannibal < 28)) {
    Log (3,"Temperatur Aquarium ".$temp_aqua." und Hannibal ".$temp_hannibal." zu warm");
  }
}


Wenn du beide getrennt melden willst brauchst du nur das || auflösen und beide Aquarien getrennt abfragen und auswerten.

Wie immer ungetestet und aus dem Kopf und geht sicher noch einfacher ;-)
Für Schreib- und/oder Klammerfehler kann ich nicht haftbar gemacht werden.

Grüße
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: Puschel74 am 23 Januar 2013, 17:45:22
Und schon ein Fehler.

define Ueberwach_1_Zeit at +*15:00:00 trigger Ueberwach_1

muss natürlich

define Ueberwach_1_Zeit at *15:00:00 trigger Ueberwach_1

damit es täglich um 15 Uhr geprüft wird.

Grüße
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 23 Januar 2013, 20:32:06
hmmm bekomme ein Fehler
2013.01.23 20:31:00 3: Ueberwach_Aquarium return value: Not enough arguments for main::ReadingsVal at (eval 183) line 1, near ""Temp_Aqua")"
Not enough arguments for main::ReadingsVal at (eval 183) line 1, near ""Temp_Hannibal")"


Inhalt meines DEF:

Ueberwach_Aquarium {
my $Temp_Aqua = (ReadingsVal("Temp_Aqua"),"Temperatur",20);
  my $Temp_Hannibal = (ReadingsVal("Temp_Hannibal"),"Temperatur",20);
  if (($Temp_Aqua < 25 ) || ($Temp_Hannibal < 25)) {
    Log (3,"Temperatur Aquarium ".$Temp_Aqua." und Hannibal ".$Temp_Hannibal." zu kalt");
  }
  if (($Temp_Aqua < 28 ) || ($Temp_Hannibal < 28)) {
    Log (3,"Temperatur Aquarium ".$Temp_Aqua." und Hannibal ".$Temp_Hannibal." zu warm");
  }
}
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: UliM am 23 Januar 2013, 20:58:56
Zitat von: Chris schrieb am Mi, 23 Januar 2013 20:32
  my $Temp_Hannibal = (ReadingsVal("Temp_Hannibal"),"Temperatur",20);

Eine runde geschlossene Klammer kommt da zu früh, so wie's da steht hätte ReadingsVal nur einen Parameter:
 my $Temp_Hannibal = ReadingsVal("Temp_Hannibal","Temperatur",20);
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 23 Januar 2013, 21:07:08
Danka daran lag es. Nun gibt er mir aber aus:
2013.01.23 21:05:00 3: Temperatur Aquarium 20 und Hannibal 20 zu kalt
2013.01.23 21:05:00 3: Temperatur Aquarium 20 und Hannibal 20 zu warm

Wieso steht den im Code auch 20 drin ? Ist das nur ein Platzhalter ? Muss ich das mit dem Aktuellen Wert füllen lassen ?
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: UliM am 23 Januar 2013, 21:36:42
20 ist der default-Wert, der verwendet wird, wenn das device oder der reading-name nicht gefunden werden.
Vmtl heisst das reading nicht Temperatur, sondern temperature oder Temperature.
=8-)
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 23 Januar 2013, 21:46:49
Hehe stimmt aber wo hatte ich dann das Log oben her KOMISCH
2013.01.23 21:41:00 3: Temperatur Aquarium 25.3 und Hannibal 23.8 zu kalt
2013.01.23 21:41:00 3: Temperatur Aquarium 25.3 und Hannibal 23.8 zu warm

Jetzt gehts. Okay das gefällt mir aber so noch nicht. Will ja die Geräte Einzeln bekommen.
Also Aquarium zu Warm
Aquarium zu kalt.

Und da stimmt noch was nicht:
2013.01.23 21:45:00 3: Temperatur Aquarium 25.3 und Hannibal 23.8 zu warm
Bei Code dürfte es nicht zu warm sein :D

Ueberwach_Aquarium {
my $Temp_Aqua = ReadingsVal("Temp_Aqua","temperature",20);
 my $Temp_Hannibal = ReadingsVal("Temp_Hannibal","temperature",20);
  if (($Temp_Aqua < 25 ) || ($Temp_Hannibal < 23)) {
    Log (3,"Temperatur Aquarium ".$Temp_Aqua." und Hannibal ".$Temp_Hannibal." zu kalt");
  }
  if (($Temp_Aqua < 28 ) || ($Temp_Hannibal < 26)) {
    Log (3,"Temperatur Aquarium ".$Temp_Aqua." und Hannibal ".$Temp_Hannibal." zu warm");
  }
}
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: UliM am 23 Januar 2013, 22:15:38
Vll ist's zu warm wenn die Temperatur GRÖSSER als die Schwellwerte ist. Mal Zeichen umdrehen?
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 24 Januar 2013, 09:15:18
oha Peinlich ;) Ja so kann es ja nicht funktionieren. Jetzt läufts :D
Ich baue gerade das ganze in Getrennte ausgaben um aber irgendwie klappt das nicht da alle 20 sind müsste ich 4 Meldungen bekommen .. bekomme aber nur 2 :(

Code:
Ueberwach_Aquarium {
my $Temp_Aqua = ReadingsVal("Temp_Aqua","temperature",20);
 my $Temp_Hannibal = ReadingsVal("Temp_Hannibal","temperature",20);
  if ($Temp_Aqua < 20 )  {
    Log (3,"Temperatur Aquarium ".$Temp_Aqua." zu kalt");
  }
    if ($Temp_Hannibal < 20 ) {
    Log (3,"Temperatur Hannibal ".$Temp_Hannibal." zu kalt");
  }
  if ($Temp_Aqua > 20 ) {
    Log (3,"Temperatur Aquarium ".$Temp_Aqua." zu warm");
  }
   if ($Temp_Hannibal > 20 )  {
    Log (3,"Temperatur Hannibal ".$Temp_Hannibal." zu warm");
  }
}


LOG:
2013.01.24 09:13:09 3: Temperatur Aquarium 24.5 zu warm
2013.01.24 09:13:09 3: Temperatur Hannibal 21.6 zu warm
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 24 Januar 2013, 09:22:07
Denkfehler ;) Klar das nicht alle meldungen kommen HAHA :D Klappt wie es ausschaut.
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: jhohn am 24 Januar 2013, 09:26:00
so wie Du es jetzt definiert hast bekommst Du bei genau 20° keine Meldung.
Titel: Aw: Temperatur Bereich überwachen zu bestimmter Zeit ?
Beitrag von: ChrisW am 24 Januar 2013, 09:45:16
jo habs schon selbst gesehen. Funktioniert alles bestens ;) Danke für die Hilfe.

 Damit kann ich mir jetzt paar weitere dinge basteln ;=)