Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Item für Wert über/unterschreiten und Zeitkomponente
Ich bin etwas begriffstutzig. Ich verstehe die Aufgabenstellung 'ein Zeitfenster überwachen' immer noch nicht wirklich.
Ich habe verstanden, dass nach einem Startzeitpunkt geprüft werden soll, ob der Wert in einem gewissen Zeitraum (60 Sek) nicht wieder höher als ein Schwellwert wird. Der Startzeitpunkt wird (so vermute ich) bei unterschreiten des Schwellwertes gesetzt werden?
Was soll den bei Ablauf des Zeitintervalls oder bei Überschreiten des Schwellwertes passieren?
- Wenn das eingangswert_item den Schwellwert (27) unterschreitet, wird per on_update der timer gestartet und das pruef_item auf True gesetzt.
- Wenn das eingangswert_item den Schwellwert (27) überschreitet, wird per on_update das pruef_item auf False gesetzt.
- Wenn der Timer abläuft, tut das Item was es tun soll, aber nut, falls das pruef_item True ist.
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Ich bin etwas begriffstutzig. Ich verstehe die Aufgabenstellung 'ein Zeitfenster überwachen' immer noch nicht wirklich.
Ich habe verstanden, dass nach einem Startzeitpunkt geprüft werden soll, ob der Wert in einem gewissen Zeitraum (60 Sek) nicht wieder höher als ein Schwellwert wird. Der Startzeitpunkt wird (so vermute ich) bei unterschreiten des Schwellwertes gesetzt werden?
Vielleicht stelle ich mich auch nur doof an, um das genau zu formulieren. ;-)
Was soll den bei Ablauf des Zeitintervalls oder bei Überschreiten des Schwellwertes passieren?
Wenn man das im eval lösen könnte, dann sollte das so aussehen:
eval: True if value < 27 für 60 Sekunden else False
oder
eval: True if sh.irgend_ein_item() < 27 für 60 Sekunden else False
Ausgelöst würde das durch einen eval_trigger z.B.
Ich glaube das erklärt alles?
Damit hätte ich dann einen Schwellwertschalter und das ohne mehrere Items.
Klar ist aber, und das wäre dann die Herausforderung, dass eval so lange "warten" muss, bis die Zeit abgelaufen ist oder bis der Wert überschritten ist. Darüber hinaus wird ja der Wert immer wieder getriggert, wenn er sich ändern sollte. Wie man das technisch umsetzt? Keine Ahnung.
Aber wenn das gehen würde, wäre das eine erheblich Erleichterung.
Der vorherige Ansatz mit einer User-Funktion wäre auch machbar, denke ich, wenn man in der Funktion selbst irgendwo Variablen speichern könnte bzw. statisch machen könnte.
wenn man in der Funktion selbst irgendwo Variablen speichern könnte bzw. statisch machen könnte.
Klar kannst Du das. Eine Datei mit Userfunctions ist ja eine ganz normale Python Datei. Wenn Du in der Datei Variablen auf oberster Ebene deklarierst (nicht in den Funktionen) und sie in den Funktionen als 'global', dann kannst Du aus verschiedenen Funktionen innerhalb dieser Datei darauf zugreifen und die Variablenwerte bleiben bis zum neu laden der Userfunctions Datei erhalten.
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Klar kannst Du das. Eine Datei mit Userfunctions ist ja eine ganz normale Python Datei. Wenn Du in der Datei Variablen auf oberster Ebene deklarierst (nicht in den Funktionen) und sie in den Funktionen als 'global', dann kannst Du aus verschiedenen Funktionen innerhalb dieser Datei darauf zugreifen und die Variablenwerte bleiben bis zum neu laden der Userfunctions Datei erhalten.
Klingt nachvollziehbar und ein guter Ansatz. Ich teste das demnächst mal.
Ich habe jetzt mal ein paar Tests gemacht. Es scheint schon mal gut zu funktionieren und vor allem habe ich den ganzen Kram weg vom item und in der user-Funktion:
Hier mal ein Beispiel aus der User-Funktion:
Code:
# prüfen, ob Wert des Quellitems über einen bestimmten Wert steigt und innerhalb einer Zeit nicht mehr unterschreitet
def Ueberschreitung(item, Wert_Quellitem, Wert_Ueberschreitung, Dauer_Ueberschreitung):
if Wert_Quellitem > Wert_Ueberschreitung:
if not item() and item.property.last_update_age > Dauer_Ueberschreitung:
return True
if not item():
item.timer(Dauer_Ueberschreitung, True)
return None
else:
return False
Ein paar Dinge fehlen noch, aber der Ansatz scheint zu funktionieren. Was allerdings ein Problem ist und da hoffe ich auf Hilfe:
Ich kann den den 1. Parameter in itools.Ueberschreitung nicht als relativen Pfad angeben (auskommentiertes Beispiel). Der wird halt nicht aufgelöst. Kriege ich das ggf. in der User-Funktion aufgelöst?
Wenn das geht, werde ich das zu Ende machen und auch eine Unterschreitung mit einbinden.
Ich würde meinen Fall erstmal mit den ganzen Items oben erschlagen und etwas Hoffnung hegen, dass sich demnächst was einfacheres im Standardrepertoire befindet
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Im Release 1.10 von SmartHomeNG wird man ein Item so konfigurieren können, dass es einen Schwellwert mit Hysterese implementiert. Im develop Branch ist das bereits implementiert.
In dem Item soll auch ein Zeitglied implementiert werden, damit die Wertänderung erst geschieht, wenn ein Schwellwert für einen bestimmten Zeitraum über- bzw. unterschritten wird. Das Zeitglied ist bisher allerdings noch nicht implementiert.
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Im Release 1.10 von SmartHomeNG wird man ein Item so konfigurieren können, dass es einen Schwellwert mit Hysterese implementiert. Im develop Branch ist das bereits implementiert.
Das freut mich sehr. Dann ist da leidige Thema vom Tisch. ;-)
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar