FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomLee am 22 April 2018, 17:26:11

Titel: [gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 22 April 2018, 17:26:11
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




Titel: Antw:Wie richtiges timespec-Format ?
Beitrag von: CoolTux am 22 April 2018, 17:32:12

(split('\.','15:44:00.000'))[0]
Titel: Antw:Wie richtiges timespec-Format ?
Beitrag von: TomLee am 22 April 2018, 17:46:10
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.
Titel: Antw:Wie richtiges timespec-Format ?
Beitrag von: CoolTux am 22 April 2018, 17:50:21
Lass Dir mal $ret ausgeben.

Log1($ret);
Titel: Antw:Wie richtiges timespec-Format ?
Beitrag von: TomLee am 22 April 2018, 17:51:28
Upps, es waren die Leerzeichen

{ weck() }

Danke Danke


Edit:

Meine Variante geht nun auch
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 22 April 2018, 19:47:50
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 ?
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: CoolTux am 22 April 2018, 20:42:12
Wie meinst Du weck() aktualisieren? Das ist doch eine Funktion.
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 22 April 2018, 21:37:25
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.



Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 23 April 2018, 02:31:31
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');;}\
}}

Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: Damian am 23 April 2018, 10:14:46
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.
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 23 April 2018, 10:19:01
Darum hab ich meine Lösungen vorgestellt, um möglicherweise Verbesserungsvorschläge zu erhalten.

Danke
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag 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:"


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?
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 23 April 2018, 15:20:07
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.
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: Damian am 23 April 2018, 16:50:03
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.
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 23 April 2018, 16:50:47
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)
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: Damian am 23 April 2018, 16:53:49
Zitat von: TomLee am 23 April 2018, 16:50:47
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)


Doppelte Klammern sind hier beschrieben: https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Zeitberechnung sind hier beschrieben: https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitberechnung


Jetzt musst du beides noch kombinieren, aber das wirst auch noch schaffen :)
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 23 April 2018, 16:55:27
In der Kommandozeile kannst du so etwas nicht testen, es ist DOIF-Syntax, die woanders nicht funktioniert.

Danke. Was ich schon alles probiert hab   ::) , damit's doch geht  ;D
Titel: Antw:[gelöst] Wie richtiges timespec-Format ?
Beitrag von: TomLee am 23 April 2018, 17:38:53
([([EG_Echo_Kueche:alarm_01_originalTime:"(.*)\."]-[00:20])])  :P