DOIF mit kleinem Zeitintervall

Begonnen von boeho, 07 April 2022, 15:10:09

Vorheriges Thema - Nächstes Thema

boeho

Hallo,
ich möchte für eine bestimmte Zeitspanne Werte aus einem Thermostat mit DOIF auslesen, eigentlich mit einer Sekundenangabe (wie evtl [05:55:00-06:15:00,+:00:30].
Das funktioniert aber nicht. Wie wäre die richtige Syntax?
Beim Testen habe ich dann einfach 2 DOIF's mit Minuten-Angabe zeitversetzt laufen lassen und habe folgendes im Log bekommen:
Code
([14:24:00-14:29:00,+:01]) (
{
my $thermostat ="";
my $valpos = -2;
$thermostat = "Hzg_Gast";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos:'$valpos' fuer Thermostat:'$thermostat'"};
$thermostat = "Hzg_SZ_klF";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos:'$valpos' fuer Thermostat:'$thermostat'"};
$thermostat = "Hzg_AZ";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos:'$valpos' fuer Thermostat:'$thermostat'"};
$thermostat = "Hzg_Bad";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos:'$valpos' fuer Thermostat:'$thermostat'"};
};
)
([14:24:30-14:29:30,+:01]) (
{
                my $thermostat ="";
my $valpos = -2;
$thermostat = "Hzg_Gast";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos: 1 '$valpos' fuer Thermostat:'$thermostat'"};
$thermostat = "Hzg_SZ_klF";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos: 1 '$valpos' fuer Thermostat:'$thermostat'"};
$thermostat = "Hzg_AZ";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos: 1 '$valpos' fuer Thermostat:'$thermostat'"};
$thermostat = "Hzg_Bad";
$valpos = ReadingsVal("$thermostat","ValvePosition",-1);
{Log 3,"== == test_valvepos: 1 '$valpos' fuer Thermostat:'$thermostat'"};
};
)

LOG
2022.04.07 14:24:00 3: == == test_valvepos:'0' fuer Thermostat:'Hzg_Gast'
2022.04.07 14:24:00 3: == == test_valvepos:'0' fuer Thermostat:'Hzg_SZ_klF'
2022.04.07 14:24:00 3: == == test_valvepos:'0' fuer Thermostat:'Hzg_AZ'
2022.04.07 14:24:00 3: == == test_valvepos:'4' fuer Thermostat:'Hzg_Bad'

2022.04.07 14:24:30 3: == == test_valvepos: 1 '0' fuer Thermostat:'Hzg_Gast'
2022.04.07 14:24:30 3: == == test_valvepos: 1 '0' fuer Thermostat:'Hzg_SZ_klF'
2022.04.07 14:24:30 3: == == test_valvepos: 1 '0' fuer Thermostat:'Hzg_AZ'
2022.04.07 14:24:30 3: == == test_valvepos: 1 '4' fuer Thermostat:'Hzg_Bad'

2022.04.07 14:25:00 3: == == test_valvepos:'0' fuer Thermostat:'Hzg_Gast'
2022.04.07 14:25:00 3: == == test_valvepos:'0' fuer Thermostat:'Hzg_SZ_klF'
2022.04.07 14:25:00 3: == == test_valvepos:'0' fuer Thermostat:'Hzg_AZ'
2022.04.07 14:25:00 3: == == test_valvepos:'4' fuer Thermostat:'Hzg_Bad'
2022.04.07 14:25:00 3: == == test_valvepos: 1 '0' fuer Thermostat:'Hzg_Gast'
2022.04.07 14:25:00 3: == == test_valvepos: 1 '0' fuer Thermostat:'Hzg_SZ_klF'
2022.04.07 14:25:00 3: == == test_valvepos: 1 '0' fuer Thermostat:'Hzg_AZ'
2022.04.07 14:25:00 3: == == test_valvepos: 1 '4' fuer Thermostat:'Hzg_Bad'

Das 1. DOIF läuft also jede Minute wie definiert 14:24:00 und 14:24:30, das 2. DOIF startet beim 2.mal nicht 14:25:30, sondern schon 14:25:00 ebenso wie das erste.
Ich bin etwas ratlos. Wer kann helfen?


Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

boeho

Danke. Das hatte ich getestet und das waren 30 Minuten. Aber mache ich gerne heute Abend noch einmal.

Damian

Zitat von: boeho am 07 April 2022, 17:00:42
Danke. Das hatte ich getestet und das waren 30 Minuten. Aber mache ich gerne heute Abend noch einmal.

Das glaube ich nicht ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

boeho

Hallo Damian, erst einmal Dank für die schnelle Antwort.
habe getestet mit folgendem Ergebnis:

([10:46:30-10:49:30,+:01]) (
{
{Log 3,"== == test timestamp: 2 "};
};
)


LOG

Zeile 100331: 2022.04.08 10:46:30 3: == == test timestamp: 2
Zeile 100336: 2022.04.08 10:47:00 3: == == test timestamp: 2
Zeile 100347: 2022.04.08 10:48:00 3: == == test timestamp: 2
Zeile 100424: 2022.04.08 10:49:00 3: == == test timestamp: 2

Die +01 sind dann Minuten. wie geht das mit Sekunden?
Der Trigger startet am richtigen Zeitpunkt, aber dann nur noch bei vollen Minuten.
Ich finde aber auch nichts zur Angabe des Zeitintervalls in Sekunden, die getestet Form ist ja als Minuten Intervall beschrieben.
Gruß boeho

Damian

#5
ist doch klar: +:01 ist nicht +01 und auch nicht +1

Es sind unterschiedliche Formate (mit Doppelpunkt bzw. ohne) mit unterschiedlicher Bedeutung. Siehe Commanderf https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung

+30 , wie in meinem Beispiel, steht für 30 Sekunden

Aus der Commandref:

ZitatEbenfalls lassen sich relative Angaben in Sekunden angeben. [+01:00] entspricht [+3600];
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

boeho

Alles ok, getestet, läuft. Habe den Dopelpunkt einfach übersehen
Gruß boeho