FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Peter aus Calw am 14 Juni 2016, 17:12:25

Titel: Dummy Wert in DOIF anwenden
Beitrag von: Peter aus Calw am 14 Juni 2016, 17:12:25
Hallo FHEM Gemeinde,
möchte mit einem DOIF folgenden Vorgang auslösen :

define di_Laderelais DOIF ([22:00] and [HK_Ladewertsteuerung]>2 or \
[22:17] and [HK_Ladewertsteuerung]<1.5 or\
[22:34] and [HK_Ladewertsteuerung]<1 )\
(set TH_Laderelais active, set TH_Laderelais desired {([Wetter:fc2_low_c]+[Wetter:fc2_high_c])/2 *(-0.3476157)+36}) DOELSEIF ([06:00])    (set AC_TH_Laderelais deactivated cmd1_gt)
attr di_Laderelais do always


der Dummy Wert (HK_Ladewertsteuerung) <2 sieht so aus :

dummy
HK_Ladewertsteuerung  0.380995899999998


Dieser Dummy Wert wird von DOIF nicht ausgewertet, füge ich stattdessen einen Wert vom Aussentemperatursensor ein, funktioniert der Code. Wie kann hier ein Dummy Wert funktionieren ?
Gruß von Peter 


Titel: Antw:Dummy Wert in DOIF anwenden
Beitrag von: Ellert am 14 Juni 2016, 19:33:02
Welches Schaltverhalten erwartest Du genau von dem DOIF?
Wo genau weicht das tatsächliche Schaltverhalten vom Erwarteten ab?
Poste mal ein Listing des DOIF.
Was genau meinst Du mit
Zitatfüge ich stattdessen einen Wert vom Aussentemperatursensor
Wie gross ist der Wert?
ZitatDieser Dummy Wert wird von DOIF nicht ausgewertet
Woher weisst Du das?


Titel: Antw:Dummy Wert in DOIF anwenden
Beitrag von: Peter aus Calw am 15 Juni 2016, 14:28:54
Hallo Ellert,
danke für Dein Interesse.
habe Dir meine List's in eine Word-Datei geschrieben da diese ziemlich groß sind.
Hier aber verkürzt mein Problem :

[code]define di_Laderelais_test DOIF([22:00] and (HK_Ladewertsteuerung:state)>14 or
[22:17] and (HK_Ladewertsteuerung:state)<13.5 or
[05:22] and (HK_Ladewertsteuerung:state)<1 or)\
(set HM_Relais_02 on) DOELSEIF ([06:00])    (set HM_Relais_02 off)
attr di_Laderelais_test do always
[/code]

der Wert HK_Ladewertsteuerung wird so ermittelt (Sollwert Kesseltemp minus Restwert Kessel) :

([Wetter]) (set HK_Ladewertsteuerung {([Wetter:fc2_high_c]+[Wetter:fc2_low_c])/2 *(-0.3476157)+35.5 -[TH_Heizkesselrestwaerme:temperature]})

Ergebnis :

Readings
STATE 0         2016-06-14 15:19:38
d        0         2016-06-14 18:07:53
state              0.854803749999999


nun sollte eigentlich das "set HM_Relais_02 on" einschalten, aber das Relais wird um :

2016-06-15_01:14:41 HM_Relais_02 set_on
2016-06-15_01:14:42 HM_Relais_02 deviceMsg: on (to VCCU)
2016-06-15_01:14:42 HM_Relais_02 level: 100
2016-06-15_01:14:42 HM_Relais_02 pct: 100
2016-06-15_01:14:42 HM_Relais_02 on
2016-06-15_01:14:42 HM_Relais_02 timedOn: off
2016-06-15_06:00:00 HM_Relais_02 set_off
2016-06-15_06:00:00 HM_Relais_02 deviceMsg: off (to VCCU)
2016-06-15_06:00:00 HM_Relais_02 level: 0
2016-06-15_06:00:00 HM_Relais_02 pct: 0
2016-06-15_06:00:00 HM_Relais_02 off
2016-06-15_06:00:00 HM_Relais_02 timedOn: off


eingeschaltet (sollte aber um 05:22 schalten) und richtig um 06:00 wieder ausgeschaltet

Habe ich das Problem nun besser beschrieben ?
Kann es sein, dass die Auswertung von HK_Ladewertsteuerung in Form von 0.854803749999999
der Fehler ist ?
Meine irgendwo gelesen zu haben, dass DOIF nur ganze Zahlen interpretiert ?
Gruß Peter


Titel: Antw:Dummy Wert in DOIF anwenden
Beitrag von: Ellert am 15 Juni 2016, 18:09:51
Es scheint mir, als würdest Du die fhem.cfg direkt bearbeiten. Das kann zu unerwartetem Verhalten führen. Daher wird die Bearbeitung mit dem DEF-Editor empfohlen, siehe auch https://forum.fhem.de/index.php/topic,45373.0.html

Der Zugriff auf Operanden erfolgt in eckigen Klammern, das hattest Du im ersten Post schon richtig gemacht, also nicht
(HK_Ladewertsteuerung:state) sondern [HK_Ladewertsteuerung:state]

Da die Schaltzeit 2016-06-15_01:14:41 zu keinem DOIF-Timer passt, vermute ich, dass es in Deiner Konfiguration noch eine Komponente gibt, die ein "set HM_Relais_02 on" ausführt.

ZitatKann es sein, dass die Auswertung von HK_Ladewertsteuerung in Form von 0.854803749999999
der Fehler ist ?
Die Form ist o.k.

ZitatHabe ich das Problem nun besser beschrieben ?

Was genau meinst Du mit " füge ich stattdessen einen Wert vom Aussentemperatursensor"
Wie gross ist der Wert?


Das habe ich immer noch nicht verstanden.

Ich würde zur Fehlereingrenzung das DOIF kürzen. Auf einen Zeitpunkt und den DOELSIF Teil und dann beobachten, ob es funktioniert.
Wenn es funktioniert, dann könntest Du das DOIF schrittweise erweitern. Ab dem Schritt, wo es nicht mehr funktioniert müsste man genauer schauen.
Titel: Antw:Dummy Wert in DOIF anwenden
Beitrag von: Peter aus Calw am 17 Juni 2016, 15:38:21
Hallo Ellert,

nachdem ich das nun so eingestellt habe:

[05:05] and [HK_Ladewertsteuerung:state]<1.5 or
[05:22] and {[HK_Ladewertsteuerung:state]<1 or
[05:39] and {[HK_Ladewertsteuerung:state]<0.5 )
(set HM_Relais_02 on) DOELSEIF ([06:00])    (set HM_Relais_02 off)


wird im Reading von di_Laderelais_test das angezeigt (Ausschnitt)

e_HK_Ladewertsteuerung_state
0.707188049999999
2016-06-17 15:27:59
error
perl error in condition: DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf($hash,'HK_Ladewertsteuerung','state','','',AttrVal($hash->{NAME},'notexist',undef))>14 or DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and ReadingValDoIf($hash,'HK_Ladewertsteuerung','state','','',AttrVal($hash->{NAME},'notexist',undef))<13.5 or DOIF_time_once($hash,$hash->{t
..,......

kann man daraus Schlüsse ziehen ?
Gruß Peter
Titel: Antw:Dummy Wert in DOIF anwenden
Beitrag von: Peter aus Calw am 17 Juni 2016, 16:16:50
Hallo Ellert,
glaube habe den Fehler, mit dem Code in der Kommandozeile:

{Value("HK_Ladewertsteuerung")}

wird der Wert von HK_Ladesteuerung

0.707188049999999

korrekt angezeigt. Habe das jetzt in di_Laderelais_test eingebaut und warte das Ergebnis heute Nacht mal ab.

Gruß Peter


Titel: Antw:Dummy Wert in DOIF anwenden
Beitrag von: Ellert am 17 Juni 2016, 17:38:38
Zitat von: Peter aus Calw am 17 Juni 2016, 15:38:21
Hallo Ellert,

nachdem ich das nun so eingestellt habe:

[05:05] and [HK_Ladewertsteuerung:state]<1.5 or
[05:22] and {[HK_Ladewertsteuerung:state]<1 or
[05:39] and {[HK_Ladewertsteuerung:state]<0.5 )
(set HM_Relais_02 on) DOELSEIF ([06:00])    (set HM_Relais_02 off)


wird im Reading von di_Laderelais_test das angezeigt (Ausschnitt)

e_HK_Ladewertsteuerung_state
0.707188049999999
2016-06-17 15:27:59
error
perl error in condition: DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf($hash,'HK_Ladewertsteuerung','state','','',AttrVal($hash->{NAME},'notexist',undef))>14 or DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and ReadingValDoIf($hash,'HK_Ladewertsteuerung','state','','',AttrVal($hash->{NAME},'notexist',undef))<13.5 or DOIF_time_once($hash,$hash->{t
..,......

kann man daraus Schlüsse ziehen ?
Gruß Peter
Könnte man, leider hast Du den Fehler nicht vollständig zitiert, der entscheidende Hinweis steht meist am Ende der Meldung.