Autor Thema: Zeit eines cmd schreiben und auswerten  (Gelesen 567 mal)

Offline Muschelpuster

  • Sr. Member
  • ****
  • Beiträge: 795
  • Wanzen müssen draußen bleiben - Pech gehabt Alexa!
Zeit eines cmd schreiben und auswerten
« am: 10 Oktober 2021, 22:35:58 »
Moin zusammen,

Ich möchte, dass eine Bedingung nur gültig ist, wenn Ausführung eines anderen CMD schon eine festgelegte Zeit her ist. Es soll also z.B. erst 15 Minuten nach dem Abschalten wieder Eingeschaltet werden, wenn aber später die eigentlichen Bedingungen passen sollen die entsprechenden Kommandos sofort ausgeführt werden.
 Mein Gedanke ist es ein User-Reading zu schaffen, in welches ich durch ein zusätzliches Kommando einen Zeitstempel schreibe. Das Schreiben der Unix-Zeit ist mir gelungen, wobei es da schön einfach ist gleich X Sekunden zu addieren. Aber ich verzweifle daran, diese Informationen  in einer Bedingung auszuwerten. Zum Debugging wäre es natürlich besser mit lesbaren Zeitstempeln zu arbeiten. Aber die bekomme ich nicht einmal geschrieben…
Wer kann mich da mal bitte in die richtige Richtung treten?

Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Stretch
1-Wire via Sheepwalk RPI2 @ raspberry B 512 # MiLight # Homematic via HM-CFG-LAN # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17568
  • s/fhem\.cfg/configDB/g
Antw:Zeit eines cmd schreiben und auswerten
« Antwort #1 am: 10 Oktober 2021, 23:06:01 »
Kannst Du nicht einfach mit ReadingsAge() arbeiten, um festzustellen, wie lange die letzte Änderung des zugehörigen (Status-)Readings her ist?

EDIT: achso, DOIF... davon hab ich keine Ahnung.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8827
Antw:Zeit eines cmd schreiben und auswerten
« Antwort #2 am: 11 Oktober 2021, 10:33:57 »
Ich würde es im Perl-Modus realisieren:

Mit set_Exec einen Timer  auf 15 Minuten setzen. Beim zweiten Schalten mit get_Exec Restzeit übernehmen und neuen set_Exec zum Einschalten setzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Muschelpuster

  • Sr. Member
  • ****
  • Beiträge: 795
  • Wanzen müssen draußen bleiben - Pech gehabt Alexa!
Antw:Zeit eines cmd schreiben und auswerten
« Antwort #3 am: 13 Oktober 2021, 22:17:44 »
Vielen Dank an Euch!

Leider bin ich damit nicht wirklich weiter gekommen, die Ursache sitzt aber primär in Form meiner Person vor dem PC. ReadingsAge() finde ich elegant, jedoch könnte noch eine andere Bedingung dazwischen funken. Und den Perl-Modus finde ich spannend, gerade mit Sicht auf Performance, etc., doch leider fehlt es gerade an Zeit und Grundlagen mich da einzuarbeiten. Die 'normale' Übersetzung ist nicht das Thema, aber der Einbau der weiteren Anforderungen...

Aber durch mein Posting und Eure Antworten habe ich jetzt eine rustikale Lösung gebaut, die funktioniert. Ich 'ziehe einfach eine Eieruhr auf':
defmod di_einschaltsperre DOIF ([di_einschaltsperre:state] eq "cmd_2") ()\
DOELSEIF\
([di_einschaltsperre:state] eq "cmd_X") ()
attr di_einschaltsperre wait 20:0
Im eigentlichen DOIF kommt eine zusätzliche Bedingung rein, dass das Einschalten nur erfolgt, wenn der State meiner Eieruhr nicht auf cmd_2 steht und beim Ausschalten kommt ein Befehl rein, der die Eieruhr auf cmd_2 setzt.

rustikale Grüße
Niels
« Letzte Änderung: 13 Oktober 2021, 22:41:08 von Muschelpuster »
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Stretch
1-Wire via Sheepwalk RPI2 @ raspberry B 512 # MiLight # Homematic via HM-CFG-LAN # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8827
Antw:Zeit eines cmd schreiben und auswerten
« Antwort #4 am: 14 Oktober 2021, 10:55:53 »
Vielen Dank an Euch!

Leider bin ich damit nicht wirklich weiter gekommen, die Ursache sitzt aber primär in Form meiner Person vor dem PC. ReadingsAge() finde ich elegant, jedoch könnte noch eine andere Bedingung dazwischen funken. Und den Perl-Modus finde ich spannend, gerade mit Sicht auf Performance, etc., doch leider fehlt es gerade an Zeit und Grundlagen mich da einzuarbeiten. Die 'normale' Übersetzung ist nicht das Thema, aber der Einbau der weiteren Anforderungen...

Aber durch mein Posting und Eure Antworten habe ich jetzt eine rustikale Lösung gebaut, die funktioniert. Ich 'ziehe einfach eine Eieruhr auf':
defmod di_einschaltsperre DOIF ([di_einschaltsperre:state] eq "cmd_2") ()\
DOELSEIF\
([di_einschaltsperre:state] eq "cmd_X") ()
attr di_einschaltsperre wait 20:0
Im eigentlichen DOIF kommt eine zusätzliche Bedingung rein, dass das Einschalten nur erfolgt, wenn der State meiner Eieruhr nicht auf cmd_2 steht und beim Ausschalten kommt ein Befehl rein, der die Eieruhr auf cmd_2 setzt.

rustikale Grüße
Niels

Normalerweise reagiert DOIF im FHEM-Modus nicht auf eigene Trigger. Deswegen setzen von cmd_2 und gleichzeitiges Abfragen von cmd_2 - dürfte nicht funktionieren.

Hier hier ein Vorschlag für eine Sperre im Perl-Modus:


DOIF {if ([<Trigger zum Einschalten>] and get_Exec("timer") == 0) {fhem_set("lampe on");set_Exec("timer",900,'fhem_set("lampe off")')}}
Bedeutet: Wenn Einschalttrigger kommt und Sperrtimer nicht läuft, dann Lampe einschalten und Timer auf 900 Sekunden zum Ausschalten der Lampe setzen.
« Letzte Änderung: 14 Oktober 2021, 10:58:21 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Muschelpuster

  • Sr. Member
  • ****
  • Beiträge: 795
  • Wanzen müssen draußen bleiben - Pech gehabt Alexa!
Antw:Zeit eines cmd schreiben und auswerten
« Antwort #5 am: 14 Oktober 2021, 22:00:29 »
Danke Damian,

Normalerweise reagiert DOIF im FHEM-Modus nicht auf eigene Trigger. Deswegen setzen von cmd_2 und gleichzeitiges Abfragen von cmd_2 - dürfte nicht funktionieren.
Ok, also nutze ich einen Bug und kein Feature  ;)
Aktuell funktioniert es, aber Du wirst den Bug schon beheben  8)

Hier hier ein Vorschlag für eine Sperre im Perl-Modus...
Ich werde das am Wochenende mal austesten, das Ziel-DOIF ist doch recht umfangreich. Ich habe bei fast jedem CMD mehrere Befehle, die ich auch mit etwas Verzögerung zueinander ausführe. Wie mache ich dass denn im Perl-Modus?

Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Stretch
1-Wire via Sheepwalk RPI2 @ raspberry B 512 # MiLight # Homematic via HM-CFG-LAN # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8827
Antw:Zeit eines cmd schreiben und auswerten
« Antwort #6 am: 15 Oktober 2021, 12:38:09 »
Danke Damian,
Ok, also nutze ich einen Bug und kein Feature  ;)
Aktuell funktioniert es, aber Du wirst den Bug schon beheben  8)
Ich werde das am Wochenende mal austesten, das Ziel-DOIF ist doch recht umfangreich. Ich habe bei fast jedem CMD mehrere Befehle, die ich auch mit etwas Verzögerung zueinander ausführe. Wie mache ich dass denn im Perl-Modus?

Niels

Es ist wohl kein Bug, sondern eher die Tatsache, dass du Befehle verzögerst - dann geht das.

Im Perl-Modus muss man schon umdenken. Verzögerungen gehen nur über die set_Exec-Funktion. Wenn aber deine Lösung funktioniert, dann kannst du natürlich bei ihr bleiben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF
Gefällt mir Gefällt mir x 1 Liste anzeigen

 

decade-submarginal