***gelöst*** Zeiten addieren aber ohne Sekunden

Begonnen von Skusi, 07 Juni 2020, 10:47:13

Vorheriges Thema - Nächstes Thema

Skusi

Hallo,
ich möchte eine Startzeit für meinen Mähroboter um eine zweite Zeitangabe verschieben.

Dazu habe ich mir eine Funktion aus meiner MyUtils gegriffen:
# Offset in Minuten auf Zeitstamp addieren/subtrahieren
sub
time_offset
{
  # Eingangs-Zeitstempel in Variable holen
  my ($timestamp) = shift;

  # Offset (in Sekunden) in Variable speichern
  my ($offset) = shift;

  # Zeitstempel in das interne Format konvertieren: 17:30:09 ==> 17.5025
  # Stunden werden als ganze Zahlen gespeichert, minuten als 1/60 und sekunden als 1/3600
  my ($t) = hms2h($timestamp);

  $t += $offset/60;

  # Zurück in HH:MM:SS konvertieren.
  return h2hms_fmt($t);
};


Das Problem ist nur das der Rückgabewert immer mit Sekunden ausgegeben wird. Also z.B 13:45:00
So kann ich das aber nicht weiter verarbeiten. Wie bekomme ich die Funktion umgebaut das Sie ohne Sekunden rechnet ?
Gibt es den Befehl h2hms_fmt() auch ohne Skunden Berücksichtigung?

Oder wie kann ich das Ergebniss 13:45:00 auf 13:45 umformatieren ?

Über die Suche habe ich leider nix griffiges gefunden.

Gruß Skusi
HP ThinClient 630, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,Tasmota+IR Lesekopf an Stromz., MAX Fensterkontakte, IButton, Fingerprint, SonOff Tasmota, ESP LED Controler, WLed,zigbee2mqtt...

Otto123

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

Skusi

Hallo Otto,
danke für den Tipp, warum auch immer ich dieses Seite im Wiki nicht selber gefunden habe.

Hab das kurz überflogen und auf einen Zeitpunkt mit mehr Zeit und Ruhe verschoben. Sieht für meinen Wissensstand sehr anspruchsvoll aus, aber ich denke da lässt sich was draus konstruieren.

Gruß Skusi
HP ThinClient 630, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,Tasmota+IR Lesekopf an Stromz., MAX Fensterkontakte, IButton, Fingerprint, SonOff Tasmota, ESP LED Controler, WLed,zigbee2mqtt...

Otto123

:)
ich kenne die Funktion  h2hms_fmt() nicht. Die klingt aber so nach hour minute sec.
Bevor ich eine Funktion verwende die ich nicht versteh und nicht beeinflussen kann (vielleicht gibt es h2hm_fmt()) würd ich es zu Fuß machen. strftime()

Wenn Du sekunden hast (immer eine gute Idee dahin "zurück" zu gehen) ist es einfach :) und es geht alles.

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

Skusi

Mir raucht der Kopf,
ich Sitz hier nun schon fast 2 Std und versuche was zu konstruieren das mit ein Reading 12:00 um ein Reading 02:00 verschiebt und das Ergebnis in ein weiteres Reading schreibt.

Bin ich zu blöd zu. Ich hab schon alles Mögliche aus dem Wiki ausprobiert und kombiniert, aber nicht will richtig funzen.
Die Funktionen erwarten immer einen Zeitstempel den ich nicht habe. Die Readings die ich verrechnen will haben natürlich nicht den Zeitstempel Ihres Wertes.
Also wie kann ich denn einen String "12:00" in Sekunden wandeln damit ich ihn mit "02:00" addieren kann?

{((timelocal(ReadingsVal("Maeplan_Edward", "Startzeit_heute","0"))) + timelocal(ReadingsVal("Rasen_noch_feucht", "Maehverzoegerung","0")))})

Soweit bin ich nun, aber es hapert an den fehlenden Datums Angabe, die ich aber nicht habe/brauche.

Startzeit_heute = 12:00
Maehverzoegerung = 02:00

Help me....
HP ThinClient 630, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,Tasmota+IR Lesekopf an Stromz., MAX Fensterkontakte, IButton, Fingerprint, SonOff Tasmota, ESP LED Controler, WLed,zigbee2mqtt...

Otto123

Für den Anfang
{(split(":","12:00"))[0]}
{(split(":","12:00"))[1]}
Für zwischendurch
{(split(":","12:00"))[0]*3600}
Fürs Finale:
{strftime("%H:%M",localtime(3600))}

Kommst Du damit klar? Wenn ja würde ich davon noch was ins Wiki schreiben :)
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

#6
Also wenn deine Zeiten tatsächlich IMMER so kommen könnte das funktionieren:


{(split(/:/,"12:00"))[0] * 60 * 60 + (split(/:/,"00:02"))[0] * 60}


Bzw. wenn die Mähverzögerung so ist (sind das Stunden!?), dann:


{(split(/:/,"12:00"))[0] * 60 * 60 + (split(/:/,"00:02"))[0] * 60 * 60}


Wenn du alles willst und alles Stunden/Minuten sind:


{(split(/:/,"12:00"))[0] * 60 * 60 + (split(/:/,"00:02"))[1] * 60}


EDIT: äh die Beispiele "oben" sind nat. nur zur "Veranschaulichung" und nicht wirklich "korrekt", weil du verm. das "unten" haben wolltest!? ;)

Also dann mit Readingsval (sollte gehen!?):


{(split(/:/,ReadingsVal("Maeplan_Edward", "Startzeit_heute","0"))[0] * 60 * 60 + (split(/:/,ReadingsVal("Maeplan_Edward", "Startzeit_heute","0"))[1] * 60 + (split(/:/,ReadingsVal("Rasen_noch_feucht", "Maehverzoegerung","0"))[0] * 60 * 60 + (split(/:/,ReadingsVal("Rasen_noch_feucht", "Maehverzoegerung","0"))[1] * 60}


Damit hast du schon mal nur alles addiert in Sekunden... ;)

Geht bestimmt auch anders (ist immer so ;)  ) aber das erschien mir am Einfachsten ;)

"Rückwärst" geht dann mit Teilen und Modulo usw. ;)

EDIT: Mist!! Zu langsam getippelt ;)

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 11 Juni 2020, 11:38:27
EDIT: Mist!! Zu langsam getippelt ;)
Wir sollten unbedingt mal beim "Bier" rausfinden ob wir uns da auch so gut verstehen ;)
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

Damian

Zitat von: Skusi am 11 Juni 2020, 11:08:33
Mir raucht der Kopf,
ich Sitz hier nun schon fast 2 Std und versuche was zu konstruieren das mit ein Reading 12:00 um ein Reading 02:00 verschiebt und das Ergebnis in ein weiteres Reading schreibt.

Bin ich zu blöd zu. Ich hab schon alles Mögliche aus dem Wiki ausprobiert und kombiniert, aber nicht will richtig funzen.
Die Funktionen erwarten immer einen Zeitstempel den ich nicht habe. Die Readings die ich verrechnen will haben natürlich nicht den Zeitstempel Ihres Wertes.
Also wie kann ich denn einen String "12:00" in Sekunden wandeln damit ich ihn mit "02:00" addieren kann?

{((timelocal(ReadingsVal("Maeplan_Edward", "Startzeit_heute","0"))) + timelocal(ReadingsVal("Rasen_noch_feucht", "Maehverzoegerung","0")))})

Soweit bin ich nun, aber es hapert an den fehlenden Datums Angabe, die ich aber nicht habe/brauche.

Startzeit_heute = 12:00
Maehverzoegerung = 02:00

Help me....

Es hängt davon ab, welches Modul du für das Setzen der Timer benutzt.

Beim DOIF z. B. brauchst du dir da keine Gedanken machen

DOIF ([([Maeplan_Edward:Startzeit_heute]+[Rasen_noch_feucht:Maehverzoegerung])])...

Hier wird sogar die Zeit sofort neuberechnet, wenn du eines der Readings änderst - ein weiterer Eventhandler entfällt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MadMax-FHEM

Zitat von: Otto123 am 11 Juni 2020, 11:42:39
Wir sollten unbedingt mal beim "Bier" rausfinden ob wir uns da auch so gut verstehen ;)

Aktuell schwierig...

Es müsste verm. irgendwo zwischen Nbg und Leipzig sein!?

Wobei ich ja ab und an an Leipzig vorbei komme...
...gut vor Corona bin...

Wenn ich mal wieder nach Leipzig komme gebe ich Bescheid...
...könnte aber dauern...

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)

Christoph Morrison

Mach mal bitte ein list von Maeplan_Edward und Rasen_noch_feucht.

betateilchen

#11
Zitat von: Skusi am 07 Juni 2020, 10:47:13
Oder wie kann ich das Ergebniss 13:45:00 auf 13:45 umformatieren ?


  $t += $offset/60;

  # Zurück in HH:MM konvertieren.
  my ($h,$m,$s) = h2hms($t);
  return sprintf("%02d:%02d", $h, $m);
};

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: MadMax-FHEM am 11 Juni 2020, 11:46:52
Wenn ich mal wieder nach Leipzig komme gebe ich Bescheid...
...könnte aber dauern...

Nach jetziger Planung bin ich vom 12.-15.10. in Leipzig  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Skusi

Erstmal sehr vielen Dank für die reichhaltigen Lösungsansätze an Alle Beteiligten.
Da fällt die Wahl schon fast schwer. ;)

Ich doktor gerade mit der Split Lösung herum.

Stolpere aber gerade etwas:
Warum ergibt {(strftime("%H:%M",localtime(0)))}
01:00 ?
Das Ergebnis aus sekunden ist immer + 01:00
Warum ?
HP ThinClient 630, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,Tasmota+IR Lesekopf an Stromz., MAX Fensterkontakte, IButton, Fingerprint, SonOff Tasmota, ESP LED Controler, WLed,zigbee2mqtt...

Otto123

Weil localtime sich auf die "Geburt" der Computerzeitrechnung bezieht:
Thu Jan 1 01:00:00 1970

Hab ich nicht bedacht, sorry. Geht dann doch bloß für relative Zeitangaben für den aktuellen Zeitpunkt.
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