FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: the ratman am 06 September 2021, 11:48:23

Titel: [erledigt] dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: the ratman am 06 September 2021, 11:48:23
hiho,

ich suche für eine readingsgroup als zusatz zu einem gegebene datum (das kommt als reading) den wochentag um ihn zusätzlich anzeigen zu können.

bspl.:
> im valueformat steht z.b. {'fc0_date' => '$VALUE<br>XXX', ... }
> $VALUE wäre in dem fall der inhalt eines readings - ein datum - im format 06.09.2021

wie kriege ich den, dem datum entsprechenden wochentag, also z.b. mo, di, mi, .., an die stelle XXX in das valueformat?

für hilfe sehr dankbar,
der immer wieder ahnungslose onkel ratti
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: Otto123 am 06 September 2021, 13:35:58
Hi,

ein Stück Perl sollte es bringen, ich weiß prinzipiell das es damit geht und habe auf die Schnelle diese ungeprüfte Stückchen:
my ($d,$m,$y) = split /\./, $VALUE;
   $m         = $m - 1;
   $y         = $y - 1900;
   my $sec       = timelocal(00,00,00, $d, $m, $y);
   my ($tmp, $tmp, $tmp, $tmp, $tmp, $tmp, $wday) = localtime($sec);


In $wday steht dann die Nummer für den Wochentag.
Das mit dem $tmp ist ev. kontra - Du kannst eigentlich die Ausgabe dann beliebig formatieren, siehe auch hier:
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit

Gruß Otto
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: TomLee am 06 September 2021, 14:27:55
Mal ganz kleinlaut nachgefragt

Weil ich mir auch darüber Gedanken gemacht habe und wirklich auf einen Lösungsansatz kam.

Wäre es soo falsch/umständlich gelöst, es so umzusetzen

Kommandozeile:

{my ($d,$m,$y) = split(/\./,$VALUE);;
$m=$m-1;;
return strftime("%A",localtime(timelocal('0','0','0',$d,$m,$y)))}


Warum ich beim Jahr nix abziehen muss hab ich selbst nicht verstanden.

edit:

Kommandozeile war so zu verstehen, $VALUE fest vergeben :
{my ($d,$m,$y) = split(/\./,"06.09.2021");;
$m=$m-1;;
return strftime("%A",localtime(timelocal('0','0','0',$d,$m,$y)))}

Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: the ratman am 06 September 2021, 15:05:39
kann man mir da bitte ein beispiel geben, wie ich das ins valueformat eintragen kann?
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: TomLee am 06 September 2021, 15:29:29
Keine Ahnung ob man  in der HASH-Version Perl verwenden kann, hab leichte Zweifel und es in der readingsGroup-Definition umzusetzen auch keinen Vorschlag, dazu hab ich bisher zu wenig mit gemacht.

Eine Möglichkeit wäre, wie ich es bisher verstanden habe, ein userReadings in den Devices zu definieren das den oben genannten Code ausführt / zurückgibt, oder ?


edit: nich richtig gelesen, statt xxx

{'<userreadingsname>' => '$VALUE<br>XXX', ... }
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: the ratman am 06 September 2021, 15:58:42
userreading hab ich auch schon gedacht - wären dann halt ein haufen userreadings in einem eh schon total unübersichtlichen haufen (proplanta), die ich mit einem direkten eintrag in der rg und der "umrechnung" von $value nur einmal machen müßte.

ich will mir keinesfalls irgendwelche perl-spielchen in der myutils oder so einbauen - als "nix-programmierer" ist das dann immer ein horror, wenn ich in 2 jahren dran denken muß, wo ich was wofür eingebastelt hab, ob ich das noch brauch, oder, oder, oder ...
ganz ehrlich gesagt, versteh ich sowieso nicht, warum es mit diesem angeblich so geilen perl nicht mal möglich ist, per "knopfdruck" bestimmte datums-formatierungen zu generieren - so als 08/15 user ohne ahnung kommt einem das extrem wie steinzeit vor.
sorry, mußt mal wieder dampf ablassen *g*
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: TomLee am 06 September 2021, 16:29:51
Versuch mal so, wobei ich jetzt beim schreiben merke das $VALUE evtl. gar nicht existiert in den zusätzlichen geschweiften Klammern ? Hab ich nämlich nicht ausprobiert, aber man kann Perl verwenden wie hier gezeigt:

{'fc0_date' => '{my ($d,$m,$y) = split(/\./,$VALUE);$m=$m-1;return $VALUE."</br>".strftime("%A",localtime(timelocal("0","0","0",$d,$m,$y)))}', ...}
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: Nobbynews am 06 September 2021, 16:38:13
Zitat von: the ratman am 06 September 2021, 11:48:23
wie kriege ich den, dem datum entsprechenden wochentag, also z.b. mo, di, mi, .., an die stelle XXX in das valueformat?
Ich werfe mal das hier in die Waagschale:
https://www.straub.as/java/basic/Uwochentag.html (https://www.straub.as/java/basic/Uwochentag.html)
Titel: Antw:dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: the ratman am 07 September 2021, 09:21:45
tomlee's code funzt auf anhieb.

vielen dank fürs hirnschmalz und die hilfe!
Titel: Antw:[erledigt] dumme frage: wochentag für ein gegebenes datum anzeigen
Beitrag von: TomLee am 07 September 2021, 18:11:09
Nix weltbewegendes und nicht wichtig, kam mir eben nur so in den Sinn:

$m=$m-1;

Könnte man noch ändern in

$m-=1;

macht das Ganze noch um zwei  ::) Zeichen kürzer.