NAS kurz vor TV-Aufnahme starten

Begonnen von Strampi5, 09 September 2019, 21:04:21

Vorheriges Thema - Nächstes Thema

Strampi5

Hallo liebe FHEM-Gemeinde!
Ich habe ein NAS, welches aufgrund seltener Verwendung großteils ausgeschaltet ist. Die Aufnahmen vom TV-Receiver laufen jedoch direkt auf das NAS und der Receiver schafft es leider nicht ein WOL-Kommando zu senden.

Wenn ich nun einen Timer generiere beginnt die Aufnahme, das NAS ist jedoch noch ausgeschaltet.
Nun möchte ich das über FHEM lösen.

Ich habe bereits die Timer-Events ausgelesen und es wird mir der nächste Timer in folgendem Format in einem Dummy angezeigt:

Mon Sep 9 21:26:40 2019
untenstehend der Code über den der Dummy versorgt wird.
ENIGMA2:recordings_next_counter.* {fhem("set ENIGMA2WECKER ".localtime(ReadingsVal("ENIGMA2", "recordings_next", "")))}

Nun versuche ich seit Tagen ein WOL-Kommando kurz vor dem jeweiligen Zeitpunkt abzusetzen. Ich habe auch das Forum bzw. Google dursucht, leider habe ich noch nichts passendes gefunden.

Meine Versuche bisher:
Über ein "DOIF" die aktuelle Zeit von der Aufnahmezeit subtrahieren und bei < 180 Sekunden einen Befehl auszuführen. Leider löst DOIF nicht aus, da sich das Reading nur einmalig ändert. Bei manueller Abfrage hat das wunderbar funktioniert.

Über "at" bzw "notify" habe ich auch keine brauchbaren Ansätze gefunden.

Ich bitte um die entscheidende Idee.

LG


Otto123

Hi,

im Wiki gibt es einen Artikel wie man mit Zeiten rechnet
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit

Und dann hatten wir hier schon mal sowas in der Art diskutiert
https://forum.fhem.de/index.php/topic,102365.msg959323.html#msg959323

Ich würde die Korrekturrechnung sofort in deinen Code einfügen, dann steht im Dummy die richtige Zeit.
Hier findest Du dann wie Du den Dummy als Zeit einbinden kannst.
https://commandref.fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

Gruß
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Strampi5

Vielen Dank für die Links. Was mir jedoch die größten Probleme bereitet ist die zusätzliche Notwendigkeit des Datums, da ein Timer ja durchaus einige Tage im Voraus programmiert wird und bis dahin der Receiver ev. nicht mehr eingeschaltet wird. Sämtliche Beispiele werden jedoch nur mit Zeit (bzw. definiertem Wochentag) angeführt. Gibt es dazu auch etwas zu lesen?

Otto123

#3
Ein at kann auch ein bestimmtes Datum verarbeiten:
https://commandref.fhem.de/#at
Zitat<datespec> is either ISO8601 (YYYY-MM-DDTHH:MM:SS) or number of seconds since 1970.
Das ist vielleicht am Einfachsten, alle Zwischenrechnungen basieren ja eh auf "number of seconds since 1970"

Dann brauchst Du am Ende nicht zurückrechnen. Du liest die Startzeit aus, wandelst in Sekunden, ziehst Deine Vorlaufzeit davon ab und definierst damit  ein at.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Strampi5

Danke, das hab ich gesucht. Ich bin anscheinend schon so auf dem Holzweg gewesen, dass die offensichtlichen Dinge gar nicht mehr aufgefallen sind. Wird am Nachmittag probiert.

Vielen Dank

Otto123

#5
sehe ich jetzt erst: recordings_next ist schon in sekunden! Also eigentlich brauchst Du gar nichts weiter :)

Da waren meine Links zwar vielleicht interessant, tragen aber zur Lösung der Aufgabe nicht viel bei :)

Ich würde den Trigger vom notify übrigens als ENIGMA2:recordings_next:.* wählen. Dann hast Du in $EVTPART1 gleich deine Zeit drin und sparst Dir das ReadingsVal.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Strampi5

Das bringt mich der Lösung schon ein ganzes Stück näher. Nun kämpfe ich jedoch noch mit der Zeitangabe. Wenn ich nun

define ENIGMA2NAS_WOL at ENIGMA2:recordings_next:.* set WOLOMV on

eintippe kommt immer folgende Fehlermeldung.

Wrong timespec ENIGMA2:recordings_next:.*: either HH:MM:SS or {perlcode}

selbe Fehlermeldung auch über Pearl mit ReadingsVal

define ENIGMA2NAS_WOL at {ReadingsVal("ENIGMA2", "recordings_next", "")} set WOLOMV on

Wenn ich nun den die Zahl von recordings_next hardcodiert eintippe funktioniert das einwandfrei. Ich verstehe leider nicht wo nun der Unterschied liegt zwischen der eingetippten Zeit (in Sekunden seit...) und der übernommenen Zeit.

LG

Otto123

Schau mal: https://wiki.fhem.de/wiki/At#Besonderheit

Hab ich heute mit deiner Anwendung im Hinterkopf getestet und dort rein geschrieben :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Also dieser Test in der Kommandozeile klappt bei mir erstmal wunderbar:
{my $time=ReadingsVal("VUPLUS1","recordings_next","");;fhem("define testAt at $time {}")}

Wenn Du 5 min früher willst:
{my $time=ReadingsVal("VUPLUS1","recordings_next","")-5*60;;fhem("define testAt at $time {}")}

Huch? Du hast Deinen Beitrag gelöscht?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Strampi5

Ja, da ich mich meiner Meinung nach auf die falsche Stelle des FHEMWiki bezogen habe und das nochmal testen wollte um nicht was falsches zu posten.

Das war der Versuch

define NASON at {ReadingsVal("ENIGMA2WECKER","state","")} set NAS on

ergibt folgenden Fehler.


the function "ReadingsVal("ENIGMA2WECKER","state","")" must return a timespec and not 1568231036.

Otto123

Du siehst schon in meinem Beispiel:
Das wäre Deine Stelle im Wiki:
{my $time=1568494800;;fhem("define MeineAktion at $time set lamp on")}

Aber wieso kann man das jetzt falsch verstehen im Wiki? ???
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Strampi5

#11
Weil mir diese Zeile

define MeineAktion at {ReadingsVal("Dummy","Zeit","")} set lamp on → das nächste Mal um (Perlfunktion liest Zeit aus dem Dummy) "lamp" einschalten

auch neu vorkam.



Edit:
Vielen Dank für die Hilfe.

folgende Zeile hat es gerichtet!!!!!
{my $time=ReadingsVal("VUPLUS1","recordings_next","")-5*60;;fhem("define testAt at $time {}")}

Nur mir ist leider noch immer nicht klar warum das vohin nicht funktioniert hat. Ich könnte schwören, dass ich den Befehl genau nach dem Muster mehrfach probiert habe. Aber irgendwo muss ich mich wohl vertippt haben. Nun funktioniert es auch, wenn ich den define Befehl aus den bereits vorhandenen Dummys/notifys zusammenfüge wie durch ein Wunder auch. Man, man, man...

Auf jeden fall  ------>  Tausend Dank!

Otto123

Zitat von: Strampi5 am 11 September 2019, 21:27:17
Weil mir diese Zeile

define MeineAktion at {ReadingsVal("Dummy","Zeit","")} set lamp on → das nächste Mal um (Perlfunktion liest Zeit aus dem Dummy) "lamp" einschalten

auch neu vorkam.
Ist sie auch. Ich habe heute alles was mir so an "möglichen Unklarheiten" einfiel dort rein gepackt  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Strampi5

Aber diese Funktion

define MeineAktion at {ReadingsVal("Dummy","Zeit","")} set lamp on

define MeineAktion at {ReadingsVal("ENIGMA2","recordings_next","")} set lamp on


wehrt sich immer noch mit einem Timespec error

Otto123

#14
Diese Variante entspricht dem
define MeineAktion at 02:02:00 set lamp on also nur die Zeit und KEIN Datum

Bitte lies was ich eingefügt und verlinkt habe :(

Besonderheit
timespec kann eine Perlfunktion sein.
datespec darf keine Perlfunktion sein.
Siehe Beitrag https://forum.fhem.de/index.php/topic,91625.msg168475.html#msg168475
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz