FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: simonela80 am 27 Dezember 2015, 08:45:44

Titel: nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 08:45:44
Hallo an alle,

brauche mal wieder eure Hilfe, komme da einfach nicht weiter.

Ich habe ein Terrarium mit Heizung, dazu dann noch ein Temperaturfühler.
Die Heizung soll einschalten wenn eine gewisse Temperatur unterschritten ist, das funktioniert schon mal recht gut.
In der Nacht soll die Heizung aber immer aus bleiben, das funktioniert leider noch nicht.

Hier mal mein Code:

define Heizung_Ameisen at +*00:00:20 \
{if( $hour>5 && $hour<20) &&\
{if (ReadingsVal("Temp_Ameisen","temperature",99)<26) \
{fhem("set Ameise_Heizung on")} else {fhem("set Ameise_Heizung off")}}}


Hoffe mal ihr könnt mir helfen

lg
Peter
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: dev0 am 27 Dezember 2015, 09:14:12
Wenn Du den Code etwas strukturierter schreibst, dann kannst Du besser erkennen was passiert. Ich habe nur das überflüssige && entfernt:
+*00:00:20 {
if ($hour > 5 && $hour <20)
{
if (ReadingsVal("Temp_Ameisen","temperature",99) < 26)
{
fhem("set Ameise_Heizung on")
}
else
{
fhem("set Ameise_Heizung off")
}
}
}


Was Du noch berücksichtigen musst: Was passiert, wenn um 19:59:59 die Heizung an ist? Dann würde mit diesem Code die ganze Nacht geheizt bis die Ameisen am Morgen gar sind.
Zum posten von Code bitte die "Code Tags" verwenden (# Button). Danke.

Edit: Code für Copy&Paste DEF Edit angepasst.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 09:41:03
Noch eine Möglichkeit:
+*00:00:20 {
  if ($hour > 5 && $hour < 20) {
    if (ReadingsVal("Temp_Ameisen","temperature",99) < 26) {
      fhem("set Ameise_Heizung on") if(Value("Ameise_Heizung") ne "on");
}
else {
  fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off");
}
  }
  else {
    fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off");
  }
}

- if-Prüfung ob on / off bereits geschalten wurde eingefügt
- ausschalten ab 20 Uhr eingefügt

Da ich nicht weiß wie schnell die Temperatur steigt oder sinkt - ein Plot wäre nicht uninteressant -
und auch nicht weiß ob Ameise_Heizung ein on-for-timer kennt wären noch ein paar Angaben nötig um diese Gefahr
Zitatbis die Ameisen am Morgen gar sind
noch weiter minimieren zu können.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Ellert am 27 Dezember 2015, 10:31:16
Mit einem einsteigerfreundlichen, wie auch expertentauglichen ;) DOIF könnte man es so
DOIF ([?05:00:00-20:00:00] and [Temp_Ameisen:temperature] < 26) (set Ameise_Heizung on)
DOELSEIF ([?05:00-20:00] and [Temp_Ameisen:temperature] > 30) (set Ameise_Heizung off)
DOELSEIF ([20:00:01-04:59:59]) (set Ameise_Heizung off)

lösen.
Zwischen 5 und 20 Uhr schaltet die Heizung ein, wenn die Temperaur < 26 °C liegt.
Zwischen 5 und 20 Uhr schaltet die Heizung aus, wenn die Temperaur > 30 °C liegt.
Zwischen 20 und 5 Uhr schaltet die Heizung aus.

Voraussetzung, der Temperatursensor übermittelt regelmässig seine Temperatur.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 10:43:41
Danke mal an alle,

leider schaltet jetzt die Heizung nicht mehr ein, der Code von Puschel74 würde mir am besten gefallen, nur leider gibt mir fhem hier viele Fehler zurück und ich weiß nicht warum???

langsam bin ich am verzweifeln
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: dev0 am 27 Dezember 2015, 10:46:45
Wissen wir ohne Details auch nicht.
Vermutung: Du editierst die fhem.cfg direkt ohne zu wissen wie...
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: satprofi am 27 Dezember 2015, 10:47:25
Wütde auch doif verwenden

Sent from my OPO

Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 10:48:18
ja ich bin im fhem.cfg
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 10:52:32
Zitat von: simonela80 am 27 Dezember 2015, 10:48:18
ja ich bin im fhem.cfg
Meine Code Beispiele sind nur für das DEF gedacht.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: dev0 am 27 Dezember 2015, 10:53:41
Zitat von: simonela80 am 27 Dezember 2015, 10:48:18
ja ich bin im fhem.cfg
Nimm den DEF Editor

Zitat von: satprofi am 27 Dezember 2015, 10:47:25
Wütde auch doif verwenden
Hat mit dem Problem nix zu tun.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 11:35:57
jetzt schaltet die Heizung nicht mehr aus
leider kann ich auch nicht den Code einfügen mit dem Button #, warum weiß ich nicht?????

define Heizung_Ameisen at +*00:00:20 \
{if ($hour > 5 && $hour < 20) \
{if (ReadingsVal("Temp_Ameisen","temperature",99) < 25) \
{fhem("set Ameise_Heizung on") if(Value("Ameise_Heizung") ne "on")} else {fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off")} else {fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off")}}

hoffe ihr habt noch eine Idee
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 11:58:43
Zitathoffe ihr habt noch eine Idee
Ja - die Lösung steht im Logfile.

a) lies dir bitte meinen angepinnten Beitrag hier im Anfängerbereich durch.
Ein "geht nicht" ist eindeitug zuwenig
b) wenn du meine Codebeispiele einfach nach Gutdünken abänderst darfst du dich auch gerne selbst darum kümmern das dein Code funktioniert.
Denn dein gesposteter Code ist NICHT gleich wie der von mir gepostete - und das hat jetzt nichts mit der Formatierung zu tun.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 12:09:46
ja, aber wenn ich deinen Code verwende kommt immer eine Fehlermeldung

Unknown command if, try help. Unknown command if, try help. Unknown command fhem("set, try help. Unknown command }, try help. Unknown command else, try help. Unknown command fhem("set, try help. Unknown command }, try help. Unknown command }, try help. Unknown command else, try help. Unknown command fhem("set, try help. Unknown command }, try help. Unknown command }, try help.


und nun
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 12:19:06
Die Fehlermeldung ist schonmal schön - in Tags wäre sie leserlicher.
Zeig mal den Code so wie er jetzt bei dir im DEF steht und diese Meldung verursacht.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 12:38:05
so steht der Code im fhem.cfg

define Heizung_Ameisen at +*00:00:20 {
  if ($hour > 5 && $hour < 20) {
    if (ReadingsVal("Temp_Ameisen","temperature",99) < 26) {
      fhem("set Ameise_Heizung on") if(Value("Ameise_Heizung") ne "on");
}
else {
  fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off");
}
  }
  else {
    fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off");
  }
}
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 12:40:17
Hatte ich nicht oben geschrieben das meine Beispiele NICHT für die fhem.cfg sind  ???
Zitat von: Puschel74 am 27 Dezember 2015, 10:52:32
Meine Code Beispiele sind nur für das DEF gedacht.
Ach ne, sorry - ich hab nur geschrieben das meine Beispiele für das DEF gedacht sind.
War wohl mein Fehler.

Also nochmal:
Meine Beispiele in die fhem.cfg geprügelt werden Fehlermeldungen verursachen da ich die fhem.cfg NICHT direkt bearbeite.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 12:58:28
und was nun, wie soll ich weiter vorgehen
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: CoolTux am 27 Dezember 2015, 13:04:05
Wie groß ist Dein Wissensstand im Umgang mit FHEMweb? Kannst Du über die Eingabezeile ein Device anlegen?
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 13:04:27
Entweder die erweiterte Suche bemühen und nach
fhem.cfg bearbeiten suchen mit Benutzer puschel74 und meine Beiträge durchlesen oder
einfach in der Detailansicht des at auf DEF klicken und meinen Code einfügen - danach auf modify klicken und zum Schluss auf save config
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Ellert am 27 Dezember 2015, 13:07:55
Funktioniert "out off the box" bei Benutzung des DEF-Editors.

define Heizung_Ameisen DOIF ([?05:00:00-20:00:00] and [Temp_Ameisen:temperature] < 26) (set Ameise_Heizung on)
DOELSEIF ([?05:00-20:00] and [Temp_Ameisen:temperature] > 30) (set Ameise_Heizung off)
DOELSEIF ([20:00:01-04:59:59]) (set Ameise_Heizung off)


Hier noch einige Hinweise zur Nutzung des DEF-Editors mit der codemirror-Erweiterung: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&Ersetzen (http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668)
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 13:15:52
also wenn ich das eingebe in DEF kommt bei mir dann folgender Fehler

wrong syntax: define <name> CUL_HM 6-digit-hex-code [Raw-Message]



??????
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 13:18:27
Zitat von: Ellert am 27 Dezember 2015, 13:07:55
Funktioniert "out off the box" bei Benutzung des DEF-Editors.
Eben nicht da im DEF kein define <Name> DOIF mehr benötigt wird.

Edith: @simonela80
Gib in die FHEM-Befehlszeile ein
delete Heizung_Ameisen
ein.
Danach ein
define Heizung_Ameisen at +*00:00:20 {
Dort klickst du dann auf das DEF und dann kopierts du noch
  if ($hour > 5 && $hour < 20) {
    if (ReadingsVal("Temp_Ameisen","temperature",99) < 26) {
      fhem("set Ameise_Heizung on") if(Value("Ameise_Heizung") ne "on");
}
else {
  fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off");
}
  }
  else {
    fhem("set Ameise_Heizung off") if(Value("Ameise_Heizung") ne "off");
  }
}

das es so aussieht wie in der zweiten Antwort - meinem ersten Beitrag.
Klick auf modify und der Code wird übernommen.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 13:34:58
super vielen Dank, es scheint zu funktionieren

wieder was gelernt


und was würde jetzt passieren wenn die Heizung eine Sekunde vor 20:00 Uhr einschaltet???
würde sie dann die ganze Nacht Heizen???
Das wäre sehr schlecht für die Ameisen
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 13:37:04
Der Aktor wird ausgeschaltet da der letzte else-Fall greift.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 27 Dezember 2015, 13:38:15
super

möchte mich bedanken für deine Hlf und deine Geduld mit mir
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: dev0 am 27 Dezember 2015, 13:43:50
Zitat von: simonela80 am 27 Dezember 2015, 13:34:58
super vielen Dank, es scheint zu funktionieren

Ich hatte Dir bewusst keine fertige Lösung geliefert, sondern nur einen Hinweis gegeben, damit Du versuchst den Code zu verstehen, da DU für Deine Tiere verantwortlich bist. Der Code ist soweit ok, auch wenn 1s vorher... Aber bedenke, dass Dein FHEM auch mal die Grätsche machen kann... Das sollte nicht die Endgültige Lösung sein, auch wenn es nur um Kleinsttierleben geht. Zusätzlich mit einem on-for-timer auf Hardwareseite zum Beispiel. Hatte Puschel74 ja schon geschieben. Auf (d)eine FHEM Installation alleine würde ich mich nicht verlassen.
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Ellert am 27 Dezember 2015, 13:45:42
ZitatEben nicht da im DEF kein
define <Name> DOIF
mehr benötigt wird.
Deshalb der Verweis auf: http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668  ;)
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Puschel74 am 27 Dezember 2015, 18:31:05
Zitat von: dev0 am 27 Dezember 2015, 13:43:50
Ich hatte Dir bewusst keine fertige Lösung geliefert, sondern nur einen Hinweis gegeben, damit Du versuchst den Code zu verstehen, da DU für Deine Tiere verantwortlich bist.
Jep, hab ich mir auch einen Moment überlegt aber ich wollte die Tiere nicht unnötig rösten und tieffrieren lassen  ;D

Zitat von: dev0 am 27 Dezember 2015, 13:43:50
Aber bedenke, dass Dein FHEM auch mal die Grätsche machen kann... Das sollte nicht die Endgültige Lösung sein, auch wenn es nur um Kleinsttierleben geht. Zusätzlich mit einem on-for-timer auf Hardwareseite zum Beispiel. Hatte Puschel74 ja schon geschieben. Auf (d)eine FHEM Installation alleine würde ich mich nicht verlassen.
Daher auch mein Hinweis in meinem ersten Beitrag:
ZitatDa ich nicht weiß wie schnell die Temperatur steigt oder sinkt - ein Plot wäre nicht uninteressant -
und auch nicht weiß ob Ameise_Heizung ein on-for-timer kennt wären noch ein paar Angaben nötig um diese Gefahr noch weiter minimieren zu können.

Auch bin ich am zweifeln ob ein at alle 20 Sekunden wirklich Sinn macht und ob nicht ein notify (oder auch gerne eine DOIF  ;) ) auf die Temperatur sinnvoller wäre.
Im Temperatur-Device noch ein event-on-change-reading auf die Temperatur gesetzt und die Einschränkungen bzgl. Uhrzeit lassen sich ja auch in einem notify (oder DOIF) berücksichtigen.
Aber wie schon geschrieben fehlen einfach Angaben des TE um auf dieser Seite weiter helfen zu können.

@Ellert
Der TE hat ja noch nichtmal meinen angepinnten Beitrag gelesen  :P
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 31 Dezember 2015, 10:58:53
erstmal danke für die Hilfe,

nun wollte ich mir eine Push Nachricht senden lassen wenn die Heizung länger als 8 Minuten eingeschaltet ist, aber leider funktioniert das nicht.
Hoffe ihr könnt mir auch bei diesem Problem helfen

Hier mal der Code den ich geschrieben habe:

define Ameisen GPIO4 28-00044eeeecff
attr Ameisen group Temperatur Ameisen
attr Ameisen icon icoKLIMA
attr Ameisen model DS18B20
attr Ameisen room Ameisen

#Watchdog definieren
define watchdogHeizungsMelder watchdog Ameise_Heizung:on 00:08:00 SAME set Ameise_Heizung off;;set Temperatur_Alarm on-for-timer 10;; setstate watchdogHeizungsMelder defined
attr watchdogHeizungsMelder group Temperatur Ameisen
attr watchdogHeizungsMelder icon dog_silhouette
attr watchdogHeizungsMelder room Ameisen

define Temperatur_Alarm dummy
attr Temperatur_Alarm group Temperatur Ameisen
attr Temperatur_Alarm icon Wecker.Immer
attr Temperatur_Alarm room Ameisen
attr Temperatur_Alarm webCmd on:off

# Temperatur Alarm Nachricht
define TemperaturAlarmPushover notify Temperatur_Alarm:on-for-timer 10 { system ("curl -s -F 'token=XXXXXXXXXXXXXXX' -F 'user=XXXXXXXXXXXXX' -F 'message=Ameisen\nHeizung ist nicht  ausgeschaltet' https://api.pushover.net/1/messages.json")}


bin mal gespannt was hier falsch ist??

Der Dummy funktioniert mit on-for-timer, dafür habe ich Netz diesen Code gefunden

#########################
# on-for-timer 4 dummys #
#########################
define OnForTimer_n notify .*:on-for-timer.* {\
my $NAME_off = "x";;\
my @args= split(" ", "$EVENT");; \
if($defs{$NAME_off}) { \
my $mod_cmd= sprintf ( \
"modify $NAME_off +%02d:%02d:%02d", \
$args[1] / 3600, ($args[1] / 60) % 60, $args[1] %60);; \
fhem $mod_cmd;; \
} else { my $room = AttrVal("$NAME", "room", "Unsorted");; \
my $def_cmd= sprintf ( \
"define $NAME_off at +%02d:%02d:%02d set $NAME off", \
$args[1] / 3600, ($args[1] / 60) % 60, $args[1] %60);; \
fhem $def_cmd;; \
fhem "attr $NAME_off room $room" \
} \
}

##########################
# off-for-timer 4 dummys #
##########################
define OffForTimer_n notify .*:off-for-timer.* { \
my $NAME_on = "x";;\
my @args= split(" ", "%EVENT");; \
if($defs{$NAME_on}) { \
my $mod_cmd= sprintf ( \
"modify $NAME_on +%02d:%02d:%02d", \
$args[1] / 3600, ($args[1] / 60) % 60, $args[1] %60);; \
fhem $mod_cmd;; \
} else { my $room = AttrVal("$NAME", "room", "Unsorted");; \
my $def_cmd= sprintf ( \
"define $NAME_on at +%02d:%02d:%02d set $NAME on", \
$args[1] / 3600, ($args[1] / 60) % 60, $args[1] %60);; \
fhem $def_cmd;; \
fhem "attr $NAME_on room $room" \
} \
}


Gruß
Peter

Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: simonela80 am 01 Januar 2016, 09:56:32
hat keiner eine Idee
Titel: Antw:nur in einem bestimmten Zeitraum schalten lassen
Beitrag von: Ellert am 01 Januar 2016, 15:07:28
define Heizung_Ameisen DOIF ([?05:00:00-20:00:00] and [Temp_Ameisen:temperature] < 26) (set Ameise_Heizung on) (<Dein Push-Befehl>)
DOELSEIF ([?05:00-20:00] and [Temp_Ameisen:temperature] > 30) (set Ameise_Heizung off)
DOELSEIF ([20:00:01-04:59:59]) (set Ameise_Heizung off)
attr Heizung_Ameisen wait 0, 480