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

Strampi5

Gelesen habe ich das wobei nicht richtig verstanden, da ich die beiden Begriffe vertauscht/vermischt habe.

Aber nochmals vielen Dank für deine Geduld!!!!


Nun habe ich die at Funktion noch in ein Notify gepackt und sobald ein neuer Timer gesetzt wird, erzeugt FHEM ein at mit dem Namen ENIGMA2NAS um das Nas zur bestimmten Zeit aufzuwecken. Nun muss ich mich nur noch mit der Namensgebung des at spielen.

Falls jemand am fertigen Def interessiert ist
defmod ENIGMA2NAS_WOL notify ENIGMA2:recordings_next.* {my $time=ReadingsVal("ENIGMA2","recordings_next","")-3*60;;fhem("define ENIGMA2NAS at $time set WOLOMV on")}

Otto123

Ich habe den Wiki Artikel nochmal anders strukturiert. Vielleicht ist es so besser?
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

#17
Danke sieht gut aus. Ich glaube so ist es leichter als wenn es nur in Stichworten steht.

Edit:

Ist es eigentlich möglich das at auch mit einem dynamischen Namen zu definieren

in etwa so?
ENIGMA2:recordings_next.* {(my $name=ReadingsVal("ENIGMA2","recordings_next_name",""));;(my $time=ReadingsVal("ENIGMA2","recordings_next","")-3*60);;fhem("define $name at $time set WOLOMV on")}

Ich bekomme keine Fehlermeldung, leider passiert auch nichts. ???

Otto123

Der Ansatz ist richtig, die Umsetzung erstmal problematisch: Beispiel aktuell:
{(my $name=ReadingsVal("VUPLUS1","recordings_next_name",""))}
ergibt
SOKO Wien

Damit kann define $name at nichts anfangen. Ich habe keine spontan Idee außer zu sagen: so geht es nicht. :)

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

Hmm. Das Problem liegt darin: wenn einmal ein at definiert ist und ich einen !früheren! Timer setzte wird das at nicht verändert. Somit müsste ich das at immer löschen wenn eine frühere Aufnahme gestartet werden soll damit es später neu angelegt werden kann.

Ev könnte man noch ein zusätzliches notify machen welches die Triggerzeit des at korrigiert. Aber das ist ja auch mit der Kirche ums kreuz

Strampi5

Oder könnte es funktionieren wenn man die Leerzeichen entfernt bzw nur Buchstaben zulässt? Das sollte ja in Pearl mittels eines Filter oä machbar sein. Der Sinn hinter dem ganzen ist ja lediglich, das mehrere Timer erstellt werden können welche sich im Namen unterscheiden

Otto123

Und wenn Du das at anstatt mit define mit defmod erzeugst? dann wird doch einfach überschrieben und bei Bedarf neu angelegt.
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

MadMax-FHEM

Zitat von: Otto123 am 13 September 2019, 09:13:07
Und wenn Du das at anstatt mit define mit defmod erzeugst? dann wird doch einfach überschrieben und bei Bedarf neu angelegt.

Lese ja fleißig mit ;)

Da habe ich auch schon dran gedacht.
Aber was, wenn er mehrere Aufnahmen plant.
Die muss/will er auseinanderhalten!?

Andere Frage: "wer" schaltet "wann" das NAS wieder aus?

Bei autom. aus (habe ich auch, ein Script prüft, ob NAS [noch] benötigt wird und wenn nicht: fährt es runtet) musst du aber auch prüfen, dass nicht demnäxt (paar minuten/sekunden) eine Aufnahme starten soll, sonst könnte es passieren:

NAS fährt runter
WOL für nächste Aufnahme (läuft aber "ins Leere", weil NAS ja noch läuft aber halt schon "plant" runterzufahren ;)  )
NAS bleibt aus...

Musst du die at "identifizieren" können (verm. wenn eins geändert werden soll) ansonsten: einfach an ein Prefix Datum/Uhrzeit im Unixformat dranklatschen...

Oder einfach Namen mit Nummern und dann in Arrays oder Hash: Zuordnung von at-Nummer zu Sender/Aufnahme bzw. ja andersrum ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Zitat von: MadMax-FHEM am 13 September 2019, 09:40:47
Aber was, wenn er mehrere Aufnahmen plant.
Die muss/will er auseinanderhalten!?
Dieser Part sollte eigentlich funktionieren, aber man müsste sich vielleicht mal ein Bild durch ein Log machen.
Das Reading enthält ja immer nur die nächste Aufnahme, d.h immer wenn es aktualisiert muss das das at gemacht/aktualisiert werden.
Mehrere Aufnahmen handelt ja die Timerliste des Receivers, da muss man sich hier nicht kümmern, nur die nächste ist relevant und die kann sich aber auch ändern.
Und wenn er mal WOL schickt und die NAS läuft schon ist ja nicht so schlimm :)
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

MadMax-FHEM

Zitat von: Otto123 am 13 September 2019, 10:22:11
Dieser Part sollte eigentlich funktionieren, aber man müsste sich vielleicht mal ein Bild durch ein Log machen.
Das Reading enthält ja immer nur die nächste Aufnahme, d.h immer wenn es aktualisiert muss das das at gemacht/aktualisiert werden.
Mehrere Aufnahmen handelt ja die Timerliste des Receivers, da muss man sich hier nicht kümmern, nur die nächste ist relevant und die kann sich aber auch ändern.

Außer: er löscht eine geplante Aufnahme...
Dann sollte er das at ja wiederfinden können und auch löschen!? ;)

Oder der Termin einer geplanten Aufnahme ändert sich kurzfristig -> Sondersendung wegen Katastrophe o.ä. vorher ;)
Dann muss das at ja vielleicht angepasst werden...
...gut der Fall ist nicht so schlimm, läuft das NAS halt etwas früher los ;)

AUSSER: die autom. Auschaltlogik des NAS (sofern vorhanden) erkennt, dass (noch) gar keine Aufnahme läuft/aktiv ist und fährt dann runter... ;)

Zitat von: Otto123 am 13 September 2019, 10:22:11
Und wenn er mal WOL schickt und die NAS läuft schon ist ja nicht so schlimm :)

Oh, Otto! ;)
Nicht genau genug gelesen (oder nicht genau genug geschrieben)...
...schon klar, dass wenn es schon läuft und ein WOL kommt das nichts macht... ;)

ABER (ja der Zeitstreifen ist sehr gering aber gegeben! Murphys Law wird aber mindestens 1x zuschlagen ;)  ): das NAS fährt grad runter und der WOL kommt für die nächste Aufnahme -> da fährt das NAS einfach weiter runter und nix mehr hoch (weil der WOL schon durch ist im "falschen" Moment)...

Ja, ich weiß: sehr konstruiert...
...ich mache autom. Backups auf's NAS und vom NAS selbst.
Ich fahre mein NAS bei nicht Nutzung (Script erkennt das) runter und da hatte ich das schon mal ;)

Daher ja die Frage: wie/wo/wer schaltet das NAS denn wieder aus.... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Strampi5

Das Defmod das at überschreibt wusste ich nicht. Das wäre dann als Lösung ja bereits ausreichend.

ZitatDa habe ich auch schon dran gedacht.
Aber was, wenn er mehrere Aufnahmen plant.
Die muss/will er auseinanderhalten!?

Andere Frage: "wer" schaltet "wann" das NAS wieder aus?

Bei autom. aus (habe ich auch, ein Script prüft, ob NAS [noch] benötigt wird und wenn nicht: fährt es runtet) musst du aber auch prüfen, dass nicht demnäxt (paar minuten/sekunden) eine Aufnahme starten soll, sonst könnte es passieren:

Mehrere Aufgaben planen geht eigentlich nicht (also in FHEM) da der Receiver nur die nächste Aufnahme als Reading ausgibt. Man könnte natürlich mit der am weitesten in der Zukunft liegenden Aufnahme anfangen, "at" erstellen, dann die Aufnahme davor, "at" erstellen usw. Die Benennung wäre eben nur deswegen nötig, da das "at" mit define nicht überschrieben wird.

Das NAS (OpenMediaVault) schaltet sich selbst bei Nichtbenützung aus. Eigentlich greife ja nur ich darauf zu und sonst niemand. Also ist das NAS ja definitiv ausgeschaltet wenn ich nicht zu Hause bin. Natürlich ein paar konstruierte Möglichkeiten fallen mir schon ein wo das WOL ins leere fährt.
Wenn dem NAS das gelingt, dann darf es auch schlafen gehen und muss nicht mehr weiter arbeiten ;-).

Ne Spaß bei Seite, es ist ja nur eine Fernsehaufnahme und sowas mache ich eigentlich ja auch nur relativ selten.


Und in dem Fall das eine Aufnahme gelöscht wird bleibt das "at" ja bestehen. Hier könnte man ev ein notify einrichten welches das "at" löscht, sobald "recordings_next" leer ist.

MadMax-FHEM

Dass das Modul nur immer die nächste Aufnahme "verwaltet"/"anzeigt" hat doch mit meinem beschriebenen "Mechanismus" nichts zu tun ;)

Aktuell legst du ein at an, wenn eine neue Aufnahme angelegt wird!?

Wenn du immer denselben Namen nimmst und defmod, dann änderst du ja immer dasselbe at -> ergo nur eine Aufnahme bzw. wird das NAS nur für die letzte angelegte Aufnahme gestartet...
...außer es ist zufällig die zeitlich erste und das NAS läuft einfach durch (kommt halt auf den "Ausschaltmechanismus" an)...

Wenn du das so machen würdest wie vorgeschlagen ("schlimmstenfalls" in einem Dummy ;)  ), also Infos zur Sendung (zum "Wiederfinden") und einen jeweils neu generierten Namen für ein at in Arrays oder hashes speicherst, dann kannst du auch geplante Aufnahmen (und zugehörige "Anschaltzeiten" des NAS) wiederfinden, löschen und ändern. :)

Also eine simple eigene "Verwaltung" :)


Habe ich also vom Prinzip her zur "Umsetzung" von Sendernamen auf Kanalnummern...
...also ein Array mit den Sendernamen (das wäre dann das Array mit den Sendungsinfos) und ein Array mit den Kanalnummern (das wären bei dir dann die zugehörigen at)...

Wenn ich dann einen Kanalnamen (von Alexa ;)  ) genannt bekome, suche ich im SendernamenArray nach dem Sendernamen und mit dem Index weiß ich dann aus dem KanalnummernArray welche Kanalnummer dazu gehört :)

Aber wenn immer eine geplante Aufnahme reicht und du mit dem defmod zum "Anpassen" des at schon zufrieden bist... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Strampi5

#27
Ich glaube ich habe das etwas unverständlich beschrieben. Das ENIGMA2 Modul gibt mir immer nur die zeitlich nächste Aufnahme aus. Somit wird das "at" angelegt sobald sich der Wert der zeitlich nächsten Aufnahme "recordings_next" ändert. Lege ich eine weitere Aufnahme z.B. für den nächsten Tag an, bleibt das "recordings_next" dasselbe und das "at" bleibt so lange bestehen, bis das Event ausgelöst wurde.

2019-03-30 19:43:45   recordings_error 0
     2019-09-11 21:12:47   recordings_finished 4
     2019-09-13 16:47:07   recordings_next 0
     2019-09-13 16:47:07   recordings_next_counter 0
     2019-09-13 16:47:07   recordings_next_counter_hr -
     2019-09-13 16:47:07   recordings_next_hr -
     2019-09-13 16:47:07   recordings_next_name -
     2019-09-13 16:47:07   recordings_next_servicename -


Das sind sämtliche Attribute über die Aufnahmen. Damit kann ich so wie so nur ein einzelnes "at" verwalten, außer ich programmiere die Aufnahme von chronologisch von der am weitesten in der Zukunft liegenden bis zur zeitlich nächsten.


ODER ich habe nicht verstanden was du gemeint hast :o

Das mit passenden Namen zur Aufnahme macht das ganze natürlich ansehnlicher, ist für mich jedoch irrelevant da es ja eh nicht so viele Aufnahmen gibt. Und ehrlich gesagt kann ich das auch nicht aus dem Stehgreif, da ich mit Perl eigentlich nichts am Hut habe. Somit kümmere ich mich erst um andere Sachen bevor es ans "aufhübschen" geht.

Ich habe nun ein zusätzliches DOIF erstellt welches ein ev. angelegtes "at" löscht, wenn mal eine Aufnahme korrigiert wird. Das kann man bestimmt auch mit einer if ... else ... Funktion im ersten Notify inkludieren.

MadMax-FHEM

#28
Vermutlich nicht verstenden was ich meinte ;)

Also du legst eine Aufnahme an: Reading recordings_next ändert sich!? -> Notify wo du ein at anlegst!? Bzw. (neu) mit defmod immer wieder dasselbe anlegst/änderst!?

So der aktuelle plan!?


Meine Idee:

das notify legt/modifiziert nicht nur das at sondern sucht, ob es schon ein at zu der Sendung gibt (Array Sender/Aufnahme-Info).
Wenn ja, wird das dazu gehörige at (gleicher "index" in dem Array für at) entsprechend modifiziert (oder gelöscht, wenn man im notify oder bei Enigma [kenne ich nur dem Namen nach ;)  ] feststellen kann, dass die Aufnahme gelöscht wurde).

Dieser Teil, also das mit vorher oder "generell" suchen etc. ist "optional" und nur falls du geplante Aufnahmen (und zugehörige Einschaltzeiten des NAS) verändern oder löschen willst... ;)

Wenn es noch kein at bzw. keine Info zu Sendung/Aufnahme gibt, wird eben in das Array mit Senderinfos ein neuer Eintrag erzeugt und ein neues at angelegt (dazu kann man auch gleich defmod nutzen) und der Name das at halt einfach atEnigmaAufnahmen PLUS aktuelle DatumUhrzeit im Unix-Format (ist ja nur eine Zahl) "hinten dran geknallt" (Prefix ist nat auch optional macht aber eine "Zurdnung" bei list TYPE=at einfacher/möglich ;)  )...

Damit sind in den Arrays die Aufnahmeinfos und zugehörigen at zu finden/"verwaltet"...
...wenn man das in einen Dummy schreibt kann man sich das sogar anzeigen lassen ;)

Wenn nun das at auslöst, wird nicht nur das NAS gestartet sondern eben auch die zugehörigen Einträge in den Arrays (und/oder Dummy) gelöscht...
...sonst läuft ja irgendwann die "Liste" voll ;)

Aber wie geschrieben: ist mir beim (Mit)Lesen hier nur so durch den Kopf gegangen ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Strampi5

Hier mal meine Konfiguration

defmod ENIGMA2NAS_WOL notify ENIGMA2:recordings_next_hr.* \
{(my $time=ReadingsVal("ENIGMA2","recordings_next","")-3*60);;;;fhem("defmod ENIGMA2NASTimer_WOL at $time set WOLOMV on")}


erzeugt das notwendige "at"

defmod ENIGMA2NASTimer_delete DOIF ([ENIGMA2:recordings_next] == 0)\
{fhem "delete ENIGMA2NASTimer_WOL"}\


löscht ein "at" wenn die Aufnahme am Receiver wieder gelöscht wird. "recordings_next" hat dann den Wert 0.

Zitatdas notify legt/modifiziert nicht nur das at sondern sucht, ob es schon ein at zu der Sendung gibt (Array Sender/Aufnahme-Info).
Wenn ja, wird das dazu gehörige at (gleicher "index" in dem Array für at) entsprechend modifiziert (oder gelöscht, wenn man im notify oder bei Enigma [kenne ich nur dem Namen nach ;)  ] feststellen kann, dass die Aufnahme gelöscht wurde).

Dieser Teil, also das mit vorher oder "generell" suchen etc. ist "optional" und nur falls du geplante Aufnahmen (und zugehörige Einschaltzeiten des NAS) verändern oder löschen willst...
Bei dem Zitat blicke ich noch immer nicht ganz durch wie das funktionieren soll. (Array und Zuordnung ist mir prinzipiell schon klar). Ich weiß nur nicht wie man die "Liste" befüllen soll. Es könnten nur mehrere "at" angelegt sein wenn man in verkehrt chronologischer Reihenfolge (heißt das wirklich so?) die Timer programmiert.

Angenommen es gibt einen Timer für 16:00 Uhr. Dann steht in recordings_next: 16:00 Uhr. Für Timer die nach 16 Uhr programmiert werden gibt es kein Reading. Natürlich würde eine Liste entstehen wenn der Timer der am weitesten in der Zukunft liegt als erstes programmiert wird, aber wer macht das schon? Und ich glaube dass es auch nur alle 30 Sekunden eine Aktualisierung der Readings gibt. Somit müsste man die Timer auch relativ "langsam" anlegen.

Somit würde die Liste in einem Großteil der Fälle nur aus einem Eintrag bestehen.

Bitte nicht steinigen falls ich deine Idee noch immer nicht durchschaut habe.

MadMax-FHEM

Ah, ok.

Mein "Denk-/Verständnis-Fehler":

ich dachte das next_reading wird immer gesetzt sobald eine neue Aufnahme angelegt wird...
...aber ist das nicht so?

Selbst wenn du die letzte Aufnahme anlegst ist die doch auch erst mal "next" oder?

Also Reading wird gesetzt!?

Dann ein Notify wie deines nur eben:

PSEUDOCODE (sorry):

my $act_time = aktuelle Unix Zeit;
my $atName = "ENIGMA2NASTimer_WOL_" . $act_time;
(gut act_time als Variable bräuchte man nicht ;)  )

Füge in das Array für Aufnahmeinfo Infos zum Film (ist doch irgendein Reading!?)
Füge in das Array für at den aktuellen at-Namen ein

defmod $atName at $time set WOLOMV on
(bzw. würde ich an der stelle im at eine Sub aufrufen: defmod $atName at $time {myDeleteEntries("$atName")}  )



in der Sub myDeleteEntries dann:

suche den Namen $atName (wurde ja übergeben) und lösche diesen aus dem Array der at
nimm den selben Index und lösche den zugehörigen Eintrag im Array der AufnaheInfos


Man könnte das auch (zusätzlich) in einem Dummy ablegen, dann hätte man auch eine Übersicht der Aufnahmen ;)

Aber wie geschrieben geht das nat. nur, wenn das Reading next_... immer "gleich" gesetzt wird sofern man eine Aufnahme eingibt...
...wenn das nicht so ist (und das scheint wohl der Fall: mein "Verständnisproblem") dann geht das nat. (leider) nicht...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Strampi5

Ja leider ändert sich das Reading nur wenn es zur zeitlich nächsten Aufnahme springt. Aber die Idee finde ich trotzdem gut. Vlt weiß ja jemand ob das ENIGMA Modul auch eine Liste für alle geplanten Aufnahmen abbilden kann. Irgendwo im Receiver muss es ja so etwas fast geben.

MadMax-FHEM

Tja, dann noch mal sorry wegen der (unnötigen) "Verwirrung" ;)

Viel Spaß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Strampi5

Nachdem ihr mein Problem gelöst habt hätte ich noch eine Frage zu einem ähnlichen Problme.

Habt ihr eine Idee wie man das NAS generell bei jedem Zugriff aufweckt? Also Samba-Zugriffsversuch und das NAS soll starten. Gibt es in fhem eine Möglichkeit zu erkennen ob es einen Zugriffsversuch auf eine bestimmte IP-Adresse gibt und dann ein WOL zu senden?

Als Router steht eine FritzBox 7490. Die FB kann ja einen WOL-Befehl senden wenn aus dem Internet auf eine IP-Adresse in meinem Netzwerk zugegriffen wird. Aber ich möchte das nicht von außen zugreifbar machen und dann über einen Umweg den Zugriff ins "Internet" senden damit er scheinbar von außen auf die FB zugreift.

Ich habe mich damit schon mehrmals beschäftigt, aber noch keine passende Lösung gefunden. Es gibt mehrere Threads zu ähnlichen Themen aber ohne richtige Lösung.

Otto123

Hi,

als einzig geradlinige Lösung sehe ich die Einbindung aller möglichen Geräte die die NAS verwenden sollen mit ihrem Status.
Dann machst Du "einfach" eine structure mit all diesen Geräten und wenn eines der Geräte an geht, schaltest Du die NAS ein.
Wenn sie alle aus sind schaltest Du sie wieder aus.

Besser ist wenn die Geräte selbst die NAS triggern könnten. Samba Zugriff bedeutet genau was? Für Windows Geräte hab ich eine Lösung.

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 mit dem Status funktioniert nicht, da z.b. das KODi Raspberry Pi immer eingeschaltet ist. Somit wäre das NAS auch ständig ein. Selbiges beim Handy.

Ich habe auch befürchtet, dass ich das für jedes Gerät extra machen muss.

Mit Samba meinte ich die Netzwerkfreigabe bzw. jeden Versuch auf Dateien am nas zuzugreifen.

Otto123

Naja aber wenn der Gebrauch so vielfältig und unbestimmt ist, dann bleibt Dir nur die NAS an sich. Die kann die Platten herunterfahren wenn sie nicht gebraucht werden und ansonsten soviel Energie sparen wie möglich. Ansonsten muss sie an sein und im Netzwerk schauen ob einer was will ...
Das kannst Du nur umständlich an einen dritten abgeben  ;)
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

MadMax-FHEM

Also ich nutze quasi zuhause nur linux.
Ich habe dafür ein "verbinde-Script"

Also: verbinde Freigabename (habe versch. Freigaben)

Das Script prüft dann, ob das Netzwerk überhaupt tut, ob das NAS schon läuft, wenn dann verbinden, wenn nicht dann WOL, warten und "prüfen" und dann verbinden...

Ist aber ohne fhem (war weit bevor ich fhem kannte ;)  )...

Auf dem NAS läuft (wie schon erwähnt) ebenfalls ein Script, welches prüft, ob es noch benötigt wird.
Wenn nicht fährt es runter...

Habe dort nur Dateien, Backups etc. muss daher nicht ständig laufen.
Ist ein HP Miniserver und braucht halt stolze 40Watt. Etwas viel zum Durchlaufen lassen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Strampi5

Vielen Dank für die Anregungen. Zum durchlaufen lassen benötige ich es definitiv zu selten, das kommt für mich nicht in Frage. Und ein
ZitatIch habe dafür ein "verbinde-Script"
ist leider über meinen Perl-Kenntnissen.

Ich hatte eher gehofft, dass folgendes auch im lokalen Netzwerk möglich ist.

Zitat aus dem FritzBox Menü
ZitatWake on LAN
Mit der Funktion "Wake on LAN" können Sie einen Computer, der sich im Standby-Modus befindet, über das Netzwerk starten.

Diesen Computer automatisch starten, sobald aus dem Internet darauf zugegriffen wird.

Ich denke ich werde mir einfach ein WOL-Script aufs Handy legen und dann bei Bedarf darüber ein WOL senden. Kommt ja nicht all zu häufig vor. Und Kodi, welches am häufigsten zugreift hat ja eh ein WOL Funktion die wunderbar funktioniert.

Grüße

MadMax-FHEM

Zitat von: Strampi5 am 14 September 2019, 19:08:59
Vielen Dank für die Anregungen. Zum durchlaufen lassen benötige ich es definitiv zu selten, das kommt für mich nicht in Frage. Und ein  ist leider über meinen Perl-Kenntnissen.

Gerne :)

Nix Perl es ist ein bash-Script ;)

Auf dem Handy hab ich auch eine WOL-App...
...nutze ich aber kaum.

Ansonsten kann ich auch sagen: "Computer fahre den Server hoch" ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)