FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Christian72D am 31 Januar 2017, 12:53:19

Titel: BetriebSTUNDEN als Dummy
Beitrag von: Christian72D am 31 Januar 2017, 12:53:19
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?
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: DeeSPe am 31 Januar 2017, 12:55:49
Geht auch ohne dummy!
Einfach ein userReading erstellen mit der entsprechenden Berechnung.

Gruß
Dan
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: KernSani am 31 Januar 2017, 13:00:34
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;
}

Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: Christian72D am 01 Februar 2017, 09:17:50
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..
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: automatisierer am 01 Februar 2017, 11:10:23
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.


Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: Christian72D am 18 Februar 2017, 17:58:09
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?
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: automatisierer am 18 Februar 2017, 18:25:57
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
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: automatisierer am 18 Februar 2017, 18:32:14
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.
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag 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
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: automatisierer am 18 Februar 2017, 19:43:55
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??
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: Zrrronggg! am 18 Februar 2017, 23:43:46
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.

Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: Christian72D am 19 Februar 2017, 06:02:21
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.
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: automatisierer am 19 Februar 2017, 12:54:26
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...
Titel: Antw:BetriebSTUNDEN als Dummy
Beitrag von: Christian72D am 20 Februar 2017, 18:20:01
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.