[gelöst] Wie richtiges timespec-Format ?

Begonnen von TomLee, 22 April 2018, 17:26:11

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

kann mir wer sagen wie ich hier rangehen muss um dieses Zeitformat

15:44:00.000

in das timespec-Format zu ändern das in einem at benötigt wird.

Mein Gedanke war die .000 einfach durch nichts zu ersetzen:

sub weck() {
my $ret = ReadingsVal("EG_Echo_Kueche","alarm_01_originalTime","");
$ret =~ s/.000//g;
return $ret;


was mir dir Uhrzeit augenscheinlich im richtigen Format liefert, das at meckert aber beim modify:

*{ weck() } set Sonos_Wohnzimmer_PLAY3 PlayURITemp \\192.168.188.26\OwnMusic\Toene\DoorSqueak.mp3 20

Wrong timespec {: either HH:MM:SS or {perlcode}


Gruß

Thomas





CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TomLee

#2
sub weck() {
my $ret = (split('\.',ReadingsVal("EG_Echo_Kueche","alarm_01_originalTime","")))[0];
return $ret;


Ja, so gehts auch, augenscheinlich, das at meckert aber immer noch.

CoolTux

Lass Dir mal $ret ausgeben.

Log1($ret);
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TomLee

#4
Upps, es waren die Leerzeichen

{ weck() }

Danke Danke


Edit:

Meine Variante geht nun auch

TomLee

Wie aktualisiere ich denn

{weck()}

am einfachsten, sollte sich das Reading

ReadingsVal("EG_Echo_Kueche","alarm_01_originalTime","")

nach dem modify des at, mal ändern.

Ist sich wieder ganz einfach, aber komm nicht darauf.

Das at löschen und neu anlegen mit Hilfe eines notify ?

CoolTux

Wie meinst Du weck() aktualisieren? Das ist doch eine Funktion.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TomLee

Die Zeit  {weck()} wird beim at nur einmalig beim modify geholt, wenn ich aber einen neuen Wecker stelle  (das Reading, die Zeit {weck()},  sich also ändert) bekommt das so das at nicht mit.
Zu meinem Ziel allerdings denke ich nebensächlich, mir gehts hierbei nur ums Verständnis wie man das lösen könnte

Was ich eigentlich vorhabe ist ganz einfach zur gestellten Weckzeit eine Aktion auslösen.
Dazu käme noch die Prüfung ob das Reading alarm_count >=1
ist, dementsprechend soll eine Aktion zur Weckzeit ausgeführt  werden oder nicht  (alarmcount == 0).

Und wenn ich das hier so schreibe wird mir die Lösung auch immer klarer wie das über notify gelöst werden kann, nur aus dem Ärmel schütteln tu ich das noch nicht.




TomLee

ZitatDas at löschen und neu anlegen mit Hilfe eines notify ?

Ist eine Lösung.

Mit DOIF find ich das recht einfach umzusetzen:

defmod doif_Wecker DOIF ([EG_Echo_Kueche:alarm_count] eq "1") (define at_Wecker at *{weck()} set Sonos_Wohnzimmer_PLAY3 PlayURITemp \\192.168.188.26\OwnMusic\Toene\DoorSqueak.mp3 20) DOELSEIF ([EG_Echo_Kueche:alarm_count] eq "0") (delete at_Wecker)


Für die notify-Variante hab ich schon etwas länger gebraucht:

defmod not_Wecker notify EG_Echo_Kueche:alarm_count:.* {\
if ($EVTPART1 == 1 )\
{fhem('define at_Wecker at *{weck()} set EG_Echo_Kueche tts Hallo');;}\
else\
{if ($EVTPART1 == 0 ) {\
   fhem('delete at_Wecker');;}\
}}


Damian

#9
Das sieht mir irgendwie unnötig kompliziert aus, hierbei:

DOIF ([[EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."]] and [?EG_Echo_Kueche:alarm_count] eq "1")
  (set Sonos_Wohnzimmer_PLAY3 PlayURITemp \\192.168.188.26\OwnMusic\Toene\DoorSqueak.mp3 20)
attr do always


wird die richtige Alarmzeit immer automatisch aktualisiert, wenn sich alarm_01_originalTime ändert, dazu braucht man keine Funktionen aufzurufen und keine weiteren Timer zu setzen oder zu löschen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TomLee

Darum hab ich meine Lösungen vorgestellt, um möglicherweise Verbesserungsvorschläge zu erhalten.

Danke

TomLee

Hab mich jetzt erst ran gemacht, wo ist er denn der Syntax Fehler

Ein

{([[EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."]])}

aus der Befehlszeile ergibt

syntax error at (eval 933892) line 1, near "EG_Echo_Kueche:"


Also im Doif

([[EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."]] and [?EG_Echo_Kueche:alarm_count] eq "1")
  (set Sonos_Wohnzimmer_PLAY3 PlayURITemp \\192.168.188.26\OwnMusic\Toene\DoorSqueak.mp3 20)


dann auch

error: Wrong timespec : either HH:MM:SS or {perlcode}

Muss das

EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."

nicht nochmal in Anführungszeichen? Hab aber jetzt schon alle Varianten durch?

TomLee

#12
Sry, Kommando zurück.

Der Fehler kommt natürlich nur wenn keine Weckzeit beim modify in

EG_Echo_Kueche:alarm_01_originalTime

vorhanden ist.

Danach hatte ich extra geschaut, bevor ich schreibe, aber doch irgendwas falsch gemacht.

Damian

Zitat von: TomLee am 23 April 2018, 15:01:58
Hab mich jetzt erst ran gemacht, wo ist er denn der Syntax Fehler

Ein

{([[EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."]])}

aus der Befehlszeile ergibt

syntax error at (eval 933892) line 1, near "EG_Echo_Kueche:"


In der Kommandozeile kannst du so etwas nicht testen, es ist DOIF-Syntax, die woanders nicht funktioniert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TomLee

Und nochmal.

Wie subtrahiere ich den jetzt 20 Minuten. Umrechnen in Minuten oder Sekunden sollte doch wenn ich mir die commandref anschaue nicht nötig sein. Bin auch irritiert von den doppelten eckigen Klammern.

Hab jetzt schon mehrere Varianten durch, wie ist die richtige Syntax ?
Oder doch umrechnen ?


([[EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."]]-[00:20] and [?EG_Echo_Kueche:alarm_count] eq "1")
  (set Sonos_Wohnzimmer_PLAY3 PlayURITemp \\192.168.188.26\OwnMusic\Toene\DoorSqueak.mp3 20)