Steckdose in Abhängigkeit zur Temperatur schalten.

Begonnen von costa2, 14 Februar 2016, 16:07:26

Vorheriges Thema - Nächstes Thema

costa2

Hallo.

Meine Temperaturdaten werden per Httpmod aus der Technoline Cloud ausgelesen.
Nun versuche ich in Abhängigkeit davon eine Funksteckdose zu schalten.
Die Devices sind SENSOR_AUSSEN für die Temperatur und IT_00000F000F für die Steckdose.

Ich teste schon seit 2 Tagen verschiedene Aufrufe, nichts funktioniert.
Das war mein letzter Versuch:

define HeizungTempSensor notify SENSOR_AUSSEN:t1.* { \
  my $temp = $EVTPART2;;\
  my $val = Value("IT_00000F000F");;\
  fhem("set IT_00000F000F on")  if($temp < 1.8 && $val eq "on");;\
  fhem("set IT_00000F000F off") if($temp > 5.00 && $val eq "off");;\
}


Wo liegt der Fehler?

Volker
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

Himi

Hallo,

das kann nicht funktionieren..

Versuche mal.
define HeizungTempSensor notify SENSOR_AUSSEN:t1.* { \
  my $temp = $EVTPART2;;\
  my $val = Value("IT_00000F000F");;\
  if ($temp < 1.8 && $val eq "off");;\
     fhem("set IT_00000F000F on");;\
     
  if ($temp > 5.00 && $val eq "on");;\
     fhem("set IT_00000F000F off");;\
}

crusader

Hast 'on' und 'off' vertauscht.

Einmal an -> immer an
Einmal aus -> immer aus

Himi

Warum habe ich on und off vertauscht?

costa2 will doch seine Steckdose bei einer Temp. < 1,8 Grad C einschalten
und bei einer Temp. > 5,0 Grad C wieder ausschalten.


crusader

Nee, das bezog sich auf den Original-Code des Fragestellers.

Deine Lösung ist natürlich richtig.

Ellert

Mit einem DOIF ginge es so:
define HeizungTempSensor DOIF ([SENSOR_AUSSEN:t1:d] < 1.8) (set IT_00000F000F:FILTER=STATE=off on)
DOELSEIF ([SENSOR_AUSSEN:t1:d] > 5) (set IT_00000F000F:FILTER=STATE=on off)


Bestechend einfach, um es nicht zu versuchen ;)

Siehe http://fhem.de/commandref_DE.html#DOIF , http://fhem.de/commandref_DE.html#devspec und http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen

costa2

#6
@ Himi

Habs mal getestet.
Es kommt die Fehlermeldung:
IF: no left bracket: ; fhem ("set IT_00000F000F off"); }

define HeizungTempSensor notify SENSOR_AUSSEN:t1.* {\
  my $temp = $EVTPART2;;\
  my $val = Value("IT_00000F000F");;\
  IF ($temp < 1.8 && $val eq "off");;\
  fhem ("set IT_00000F000F on");;\
     
  IF ($temp > 5.00 && $val eq "on");;\
  fhem ("set IT_00000F000F off");;\
}


Wo soll die Klammer fehlen?

Übrigens, if muss IF geschrieben werden.

@Ellert

Bei deinem Code reagiert die Steckdose auch nicht.

define HeizungTempSensor DOIF ([SENSOR_AUSSEN:t1:d] < 2.5) (set IT_00000F000F:FILTER=STATE=off on)
DOELSEIF ([SENSOR_AUSSEN:t1:d] > 5) (set IT_00000F000F:FILTER=STATE=on off)


Ich nehme an irgendwas muss falsch an dieser Abfrage sein: SENSOR_AUSSEN:t1.*

Im Event monitor steht nur das:

2016-02-15 16:59:06 HTTPMOD SENSOR_AUSSEN TEMP: 1.9
2016-02-15 16:59:06 HTTPMOD SENSOR_AUSSEN FEUCHTIGKEIT: 91.0
2016-02-15 16:59:06 HTTPMOD WASHINGTONIA_KRONE TEMP: 1.9
2016-02-15 16:59:06 HTTPMOD SENSOR_BODEN TEMP: 4.0
2016-02-15 17:06:06 HTTPMOD SENSOR_AUSSEN TEMP: 1.8
2016-02-15 17:06:06 HTTPMOD SENSOR_AUSSEN FEUCHTIGKEIT: 91.0
2016-02-15 17:06:06 HTTPMOD WASHINGTONIA_KRONE TEMP: 1.9
2016-02-15 17:06:07 HTTPMOD SENSOR_BODEN TEMP: 4.0
2016-02-15 17:13:07 HTTPMOD SENSOR_BODEN TEMP: 4.0
2016-02-15 17:13:07 HTTPMOD WASHINGTONIA_KRONE TEMP: 1.8
2016-02-15 17:13:07 HTTPMOD SENSOR_AUSSEN TEMP: 1.7
2016-02-15 17:13:07 HTTPMOD SENSOR_AUSSEN FEUCHTIGKEIT: 91.0


Ps. die Einschalttemperatur habe ich vorher auf 2.5 gesetzt, hätte somit bei 1.9 eigentlich schalten müssen.

Volker

RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

costa2

#7
Es funktioniert so.
Scheinbar waren es nur irgendwelche Zeilenumbrüche.

define HeizungTempSensor DOIF ([SENSOR_AUSSEN:t1:d] < 2.0) (set IT_000000000F:FILTER=STATE=off on) DOELSEIF ([SENSOR_AUSSEN:t1:d] > 5) (set IT_000000000F:FILTER=STATE=on off)

Nur ob die Ausschalttemperatur ebenso klappt, keine Ahnung, muss ich testen.

Edit.
Erst mal Kommando zurück.
Das war nur einmalig, nun wieder nicht.
Kann es an der Reaktionszeit der Steckdosen liegen?
Obwohl, im Log taucht nun auch kein Event mehr auf.

RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

Himi

Hallo costa2,

kann meinen vorgeschlagen Code mit der (if) -Abfrage leider nicht testen.

bei allen Abfragen wird if immer klein geschrieben. (nur der Ordnung halber)
So funktioniert es bei mir. (siehe auch im Wiki)

Bei der eleganteren Lösung mit DOIF braucht man ja da nicht aufzupassen.

Gruß Himi

Ellert

Zitat von: costa2 am 15 Februar 2016, 18:34:13
Es funktioniert so.
Scheinbar waren es nur irgendwelche Zeilenumbrüche.

define HeizungTempSensor DOIF ([SENSOR_AUSSEN:t1:d] < 2.0) (set IT_000000000F:FILTER=STATE=off on) DOELSEIF ([SENSOR_AUSSEN:t1:d] > 5) (set IT_000000000F:FILTER=STATE=on off)

Nur ob die Ausschalttemperatur ebenso klappt, keine Ahnung, muss ich testen.

Edit.
Erst mal Kommando zurück.
Das war nur einmalig, nun wieder nicht.
Kann es an der Reaktionszeit der Steckdosen liegen?
Obwohl, im Log taucht nun auch kein Event mehr auf.



Kannst Du das etwas klarer und ausführlicher erläutern?
ZitatEdit.
Erst mal Kommando zurück.
Das war nur einmalig, nun wieder nicht.
Kann es an der Reaktionszeit der Steckdosen liegen?
Obwohl, im Log taucht nun auch kein Event mehr auf.

costa2

#10
Hallo Ellert.

Erst einmal zur Erläuterung worum es mir geht.
Der Temperatursensor ist in einem Schutzbau für eine Palme im Garten, falls die Temperatur unter einen bestimmten Schwellwert geht, soll bei mir im Wohnzimmer eine Leuchte angehen.

Nun ist es so, dass die Temperaturwerte per Httpmod in Fhem eingelesen werden.
Nun bin ich mir nicht sicher, wie ich sie überhaupt abfrage, um die Schaltsteckdose zu aktivieren.
Nur soviel, die Steckdosen sind per Cul erkannt und auch aus Fhem heraus schaltbar.

Seltsamerweise hat die Steckdose nur einmal automatisch über die DOIF Anweisung geschaltet, dann nicht mehr.
Ich habe die Steckdose zum testen vorher über Fhem manuell wieder ausgeschaltet.

Muss man eventuell eine Notify Abfrage in den Code einbauen um die Temperatur abzufragen?

Volker

RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

Ellert

ZitatScheinbar waren es nur irgendwelche Zeilenumbrüche.
Du solltest DOIF im DEF-Editor bearbeiten, dann kannst Du es übersichtlicher strukturieren: http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668
Wenn Httpmod regelmässig Temperatur-Events liefert müsste das DOIF so funktionieren. Es schaltet einmal ein, wenn die 1. Bedingung wahr ist und erst aus, wenn die 2. Bedingung wahr ist.

ZitatIch habe die Steckdose zum testen vorher über Fhem manuell wieder ausgeschaltet.
Ja, aber die Bedingung hat sich nicht geändert. Wenn Du das willst, dann kannst Du das Attribut do always setzen. Oder zum Testen die Bedingung anders formulieren oder den Sensor künstlich erwärmen.

costa2

#12
Zitat
Ja, aber die Bedingung hat sich nicht geändert. Wenn Du das willst, dann kannst Du das Attribut do always setzen. Oder zum Testen die Bedingung anders formulieren oder den Sensor künstlich erwärmen.

Aha.
Damit ist mir nun auch klar, weshalb das Ding nur einmal geschaltet hat.
Vielen Dank für die neue Denksportaufgabe. :)

ZitatOder zum Testen die Bedingung anders formulieren

Das funktioniert schon mal, so bin ich nun viel weiter.

Vielen Dank
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

costa2

#13
Bin wieder da. :-[

Den Außensensor habe ich nach dem Einschalten bei unter 2,8°C ins Warme geholt, die Temperatur stieg auf 9,7°C.
Eigentlich hätte die Steckdose ja bei 4°C wieder ausschalten müssen, das tat sie aber nicht.

define HeizungTempSensor DOIF ([SENSOR_AUSSEN:t1:d] < 2.8) (set IT_000000000F:FILTER=STATE=off on) DOELSEIF ([SENSOR_AUSSEN:t1:d] > 4.0) (set IT_000000000F:FILTER=STATE=on off)

Ein angehängtes "attr HeizungTempSensor do always" bringt auch nichts.

Woran liegt es nun wieder?

Volker
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

Ellert

Mach mal ein Listing von SENSOR_AUSSEN und HeizungTempSensor im Fehlerfall.

Und beobachte den Eventmonitor mit dem Filter für SENSOR_AUSSEN und poste mal die Events oder Logge die Events

logger notify SENSOR_AUSSEN {Log 1, "$NAME: $EVENT"}

Die Frage ist ob HTTPMOD die Readings erneuert hat und ein Event generiert hat.