Hauptmenü

BetriebSTUNDEN als Dummy

Begonnen von Christian72D, 31 Januar 2017, 12:53:19

Vorheriges Thema - Nächstes Thema

Christian72D

Das Modul HourCounter liefert ja den GesamtWert in Sekunden, ich würde da gerne ein Dummy haben in dem wirklich die Stunden stehen.

Wie bekomme ich das hin?

DeeSPe

Geht auch ohne dummy!
Einfach ein userReading erstellen mit der entsprechenden Berechnung.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

KernSani

Ich schreibe die nicht in einen Dummy sondern nutze stateFormat mit:

attr EG_WoZi_TVCounter stateFormat {myUtils_SecondsToTime(ReadingsVal($name,'pulseTimePerDay',0))}

SecondsToTime habe ich mir mal irgendwoher geklaut...

##########################################################
# SecondsToTime
# converts seconds to time
##########################################################

sub myUtils_SecondsToTime($) {
my ($sec) = @_;
my $s = $sec % 60;
$sec = ($sec - $s) / 60;
my $m = $sec % 60;
$sec = ($sec - $m) / 60;
my $h = $sec % 24;
$sec = ($sec - $h) / 24;
my $d = $sec;
my $ret = sprintf("%02d Stunden, %02d Minuten",$h,$m);
return $ret;
}

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Christian72D

#3
Die letzte Lösung gefällt mir besser, habe ich auch so übernommen und hat funktioniert.
Dann habe ich allerdings die Zeit durch "pulseTimeOverall", lief auch noch alles.
Aber: mir fehlen dann ja die Tage.
Was macht eigentlich das "%" in "my $s = $sec % 60;"

Ich setze mir das dann evtl. SO um daß es mir NUR Stunden ausrechnet, also auch über 24h hinaus..

automatisierer

Also wenns nur bis 24h gehen muss, dann tuts auch so:
userReadings stunden { strftime "%H:%M:%S", gmtime(ReadingsVal("test","sekunden","0"));;;; }

Zeigt dann zwar die Zeit am 01.01.1970 an, aber was solls. Da ich keine Stundenzähler habe, die über 24h gehen ist das für mich so einfach und funktional.



Christian72D

Ich noch mal. :)

In fhem selbst klappt es super, jetzt würde ich die Gesamtstunden noch gerne auf meinen Bilderahmen bringen (per RSS).
Aber das klappt nicht. :(

Ich habe aus einem anderen Beitrag versucht ein UserReading zu erstellen, will aber nicht. Der von hier will auch nicht.

attr BH.Heizung userReadings Gesamtstunden {sprintf "%.3f m3", ReadingsNum ( "BH.Heizung","pulseTimeOverall",0) /3600 ;; }

attr BH.Heizung userReadings stunden { strftime "%H:%M:%S", gmtime(ReadingsVal("BH.Heizung","pulseTimeOverall","0"));;;; }


Wo würde ich beim zweiten denn meine "/3600" einfügen müssen?

automatisierer

Zitat von: Christian72D am 18 Februar 2017, 17:58:09
Wo würde ich beim zweiten denn meine "/3600" einfügen müssen?
gar nicht. Das macht aus Sekunden, HH:MM:SS

automatisierer

wenn du pulseTimeOverall nimmst, wird das so nicht funktionieren, da du da mehr als 86400 Sekunden (mehr als 1 Tag) im Reading hast und somit wird zu HH:MM:SS noch der Tag mit angezeigt.

Zrrronggg!

Wieder so ein Fall, wo die Frage eigentlich ein bisschen zu ungenau gestellt ist. Wenn tatsächlich nur dies gemeint ist: ich würde da gerne ein Dummy haben in dem wirklich die Stunden stehen ... ginge ggf auch Folgendes:


define Betriebsstunden_1 at +*01:00:00 {fhem("setreading Betriebsstundenzaehler DeviceA ". (ReadingsVal("Betriebsstundenzaehler", "DeviceA",0)+1))}

Die Readings DeviceA von Betriebsstundenzaehler enthalten dann die Betriebstunden als Zahl. Fertich.
Bei FHEM Neustart oder beliebiegen anderen Events setzt man die dann auf 0 zurück:

setreading Betriebsstundenzaehler DeviceA 0
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

automatisierer

Zitat von: Zrrronggg! am 18 Februar 2017, 18:55:19
Wieder so ein Fall, wo die Frage eigentlich ein bisschen zu ungenau gestellt ist. Wenn tatsächlich nur dies gemeint ist: ich würde da gerne ein Dummy haben in dem wirklich die Stunden stehen ... ginge ggf auch Folgendes:


define Betriebsstunden_1 at +*01:00:00 {fhem("setreading Betriebsstundenzaehler DeviceA ". (ReadingsVal("Betriebsstundenzaehler", "DeviceA",0)+1))}

Die Readings DeviceA von Betriebsstundenzaehler enthalten dann die Betriebstunden als Zahl. Fertich.
Bei FHEM Neustart oder beliebiegen anderen Events setzt man die dann auf 0 zurück:

setreading Betriebsstundenzaehler DeviceA 0

Das Ding zählt doch einfach nur jede Stunde eins hoch, was hat das mit HourCounter zu tun??

Zrrronggg!

ZitatDas Ding zählt doch einfach nur jede Stunde eins hoch, was hat das mit HourCounter zu tun??
Hourcounter = Stundenzähler

Ich weiss ja nicht, was der Fragesteller wirklich will. Natürlich müsste er da jeweils noch eine Bedingung ...
... ach ... vergiss es. Das würde wieder ein Roman und eigentlich hab ich keine Lust mehr.
Er hat in meinen Augen eigentlich gar nicht echt gesagt was er erreichen will und daher wäre der Roman Zeitverschwendung.

Betrachtet den Beitrag als nicht geschrieben.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Christian72D

Zitat von: Zrrronggg! am 18 Februar 2017, 23:43:46
Hourcounter = Stundenzähler

Ich weiss ja nicht, was der Fragesteller wirklich will. Natürlich müsste er da jeweils noch eine Bedingung ...
... ach ... vergiss es. Das würde wieder ein Roman und eigentlich hab ich keine Lust mehr.
Er hat in meinen Augen eigentlich gar nicht echt gesagt was er erreichen will und daher wäre der Roman Zeitverschwendung.

Betrachtet den Beitrag als nicht geschrieben.
Lies doch einfach ab Anfang, dann solltest du wissen worum es geht.

automatisierer

Zitatattr BH.Heizung userReadings stunden { strftime "%H:%M:%S", gmtime(ReadingsVal("BH.Heizung","pulseTimeOverall","0"));;;; }

Damit kannst und solltest du es nicht machen, das ist dann einfach unsauber gelöst. Die Funktion rechnet dir Unix Zeit in für normal Sterbliche lesbare Zeit um. Wenn du pulseTimeOverall in D:HH:MM:SS umrechnen willst, dann solltest du dir die sub von KernSani entsprechend anpassen...
##########################################################
# SecondsToTime
# converts seconds to time
##########################################################

sub myUtils_SecondsToTime($) {
my ($sec) = @_;
my $s = $sec % 60;
$sec = ($sec - $s) / 60;
my $m = $sec % 60;
$sec = ($sec - $m) / 60;
my $h = $sec % 24;
$sec = ($sec - $h) / 24;
my $d = $sec;
my $ret = sprintf("%02d Stunden, %02d Minuten",$h,$m);
return $ret;
}



Falls du da bei hilfe benötigst, musst du dich noch mal melden. Ich hab da zwar auch keinen wirklichen Plan von, bin mir aber sicher, dass irgend wie hin zu bekommen...

Christian72D

Das habe ich schon gemacht, läuft auch alles.

sub myUtils_SecondsToHours($) {
my ($sec) = @_;
my $h = $sec / 3600;
my $ret = sprintf("%d Stunden",$h);
return $ret;
}


Aber das bekomme ich nicht in den Bilderahmen.