Problem mit at die at auslösen soll.

Begonnen von Kharim, 08 Dezember 2015, 06:38:15

Vorheriges Thema - Nächstes Thema

Kharim

Hallo Zusammen,

ich habe hier folgendes Konstrukt:

TScanner

+*00:30:00 {
my $tw = ReadingsVal("ThermostatWohnzimmer", "desiredTemperature", 0);
my $tw2 = $tw-0.5;
my $tku = ReadingsVal("ThermostatKueche", "desiredTemperature", 0);
my $tku2 = $tku-0.5;
my $tki = ReadingsVal("ThermostatKinderzimmer", "desiredTemperature", 0);
my $tki2 = $tki-0.5;
my $tb = ReadingsVal("ThermostatBad", "desiredTemperature", 0);
my $tb2 = $tb-0.5;
fhem("set ThermostatWohnzimmer desiredTemperature $tw2;
set ThermostatKueche desiredTemperature $tku2;
set ThermostatKinderzimmer desiredTemperature $tki2;
set ThermostatBad desiredTemperature $tb2;
set TScanner2 active");
}


TScanner2
+*00:15:00 {
my $tw = ReadingsVal("ThermostatWohnzimmer", "desiredTemperature", 0);
my $tw2 = $tw+0.5;
my $tku = ReadingsVal("ThermostatKueche", "desiredTemperature", 0);
my $tku2 = $tku+0.5;
my $tki = ReadingsVal("ThermostatKinderzimmer", "desiredTemperature", 0);
my $tki2 = $tki+0.5;
my $tb = ReadingsVal("ThermostatBad", "desiredTemperature", 0);
my $tb2 = $tb+0.5;
fhem("set ThermostatWohnzimmer desiredTemperature $tw2;
set ThermostatKueche desiredTemperature $tku2;
set ThermostatKinderzimmer desiredTemperature $tki2;
set ThermostatBad desiredTemperature $tb2;
set TScanner2 inactive");
}


TScanner soll sozusagen TScanner2 starten. Dieses sollte 15 Minuten später ausgeführt werden und sich deaktivieren.
0Min-TScanner -15Min-TScanner2 -30Min-TScanner -45Min-TScanner2 usw usw

Im Log passiert nun aber folgendes:

21:03Uhr TScanner
21:06Uhr TScanner2
21:21Uhr TScanner2 (ca 15Min nach TScanner +3 Min)
21:33Uhr TScanner
21:36Uhr TScanner2
21:51Uhr TScanner2 (ca 15Min nach TScanner +3 Min)
22:03Uhr TScanner
22:06Uhr TScanner2
22:21Uhr TScanner2 (ca 15Min nach TScanner +3Min)

Wie in aller Welt geht denn sowas?

Danke,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

viegener

Ich bin nicht ganz sicher, aber es kann sein, dass Du einen at nicht innerhalb des eigenen Ausführungsteils "inaktivieren" kannst, da am Ende der Ausführung noch die nächste Ausführung berechnet wird.
Wenn das so ist, kannst Du aber einen Dummyschalter anlegen und diesen in Deinem Ausführungsteil testen und nur dann ausführen.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Bennemannc

#2
Hallo,

mich würde interessieren warum Du die desired Temp alle 15 Minuten um 0.5 Grad anhebst und wieder senkst.
Ein anderer Ansatz für mich wäre:
Beide at's auf +*00:30:00 zu setzen und die regelmäßig Nachts um 23:50:00 auf inaktiv zu setzen und dann den eine um 00:15:00 aktiv setzen und den anderen erst um 00:30:00 zu starten. Dann laufen die den ganzen Tag im 30 min Rhytmus aber um 15 Min versetzt.

Gruß Christoph

Edit: habe noch etwas gefunden was es noch einfacher macht.alignTime
Nur für relative Definitionen: Stellt den Zeitpunkt der Ausführung des Befehls so, dass er auch zur alignTime ausgeführt wird. Dieses Argument ist ein timespec. Siehe oben fü die Definition
Beispiel:
# Stelle sicher das es gongt wenn eine neue Stunde beginnt.
define at2 at +*01:00 set Chime on-for-timer 1
attr at2 alignTime 00:00
also für den einen alignTime 00:15 und für den anderen 00:30 und dann beide mit +*00:30:00 und go..... nicht aktiv oder inaktiv setzen. Die sollten dann den ganzen Tag versetzt tackten
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Kharim

#3
Zitat von: Bennemannc am 08 Dezember 2015, 21:10:52
Hallo,

mich würde interessieren warum Du die desired Temp alle 15 Minuten um 0.5 Grad anhebst und wieder senkst.
Ein anderer Ansatz für mich wäre:
Beide at's auf +*00:30:00 zu setzen und die regelmäßig Nachts um 23:50:00 auf inaktiv zu setzen und dann den eine um 00:15:00 aktiv setzen und den anderen erst um 00:30:00 zu starten. Dann laufen die den ganzen Tag im 30 min Rhytmus aber um 15 Min versetzt.

Gruß Christoph

Edit: habe noch etwas gefunden was es noch einfacher macht.alignTime
Nur für relative Definitionen: Stellt den Zeitpunkt der Ausführung des Befehls so, dass er auch zur alignTime ausgeführt wird. Dieses Argument ist ein timespec. Siehe oben fü die Definition
Beispiel:
# Stelle sicher das es gongt wenn eine neue Stunde beginnt.
define at2 at +*01:00 set Chime on-for-timer 1
attr at2 alignTime 00:00
also für den einen alignTime 00:15 und für den anderen 00:30 und dann beide mit +*00:30:00 und go..... nicht aktiv oder inaktiv setzen. Die sollten dann den ganzen Tag versetzt tackten

Ich betreibe MAX Thermostate, die ihre IST-Temperatur nur melden, wenn eine Änderung am Thermostat erfolgt.
Dazu gibt es normaler weiser ein Modul names MaxTemperaturScanner (oder so ähnlich).
Dieses Modul wiederum setzt vollautomatisch alle ca 15 Minuten 0.5°C (oder Modus) und nach 3 Minuten wieder zurück....um so die IST Temperaturen zu "scannen".

Nun habe ich aber (warum auch immer) massive Credits-Probleme....
Ich versuche also selbst nur alle 15 Minuten EIN Wert zu setzen (und nicht wie der Scanner 2), um Credtis zu sparen.
(Credits ist quasi die Sendedauer die man nutzen darf).

Ich denke ich werde deinen Ansatz mal umsetzen.

Danke,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

Bennemannc

Hallo,

dann würde ich das System mal untersuchen ob nicht irgendetwas zu oft getriggert wird. Z.B. ein notify was auf einen Wert läuft, bei dem nicht event-on-change gesetzt ist oder was immer wieder "ein" sendet, obwohl der Actor schon "ein" ist. Das frisst Dir die Credis auch sehr schnell auf.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF