OpenHab Uptime in der Sitemap ?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

thomas_w

Re: OpenHab Uptime in der Sitemap ?

Beitrag von thomas_w »

PeterA hat geschrieben: 9. Aug 2020 14:17
Und im Item steht dann nun "82-03:45:37" und dann auch so in der Sitemap.

Aber wie bekomme ich das nun noch formatiert zu 82 Tage 03 Stunden 45 Minuten ?
Knapp zu spät... :lol:

Als Alternative zu Regex noch dieser Ansatz

Code: Alles auswählen

// https://community.openhab.org/t/solved-help-on-regex/103231/5
// https://community.openhab.org/t/solved-regex-transformation/68359/3
// OpenHAB Regex ist nicht Standard Regex und kann nicht mit freien Validatoren verglichen werden
rule "OpenHab Uptime"
  when
    Item currentDateTime changed
 then
    // use the transformation service to retrieve the value
    val BefehlOutputOpenHabUptime = "BefehlOutput changed from A systemd service configuration exists...Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB serviceopenHAB is running with PID: 2066 and has been running for 80-06:57:25 to A systemd service configuration exists...Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB service openHAB is running with PID: 2066 and has been running for 80-06:58:25"
    
    // Suche nach 'running for' ohne Regex
    var newValue = BefehlOutputOpenHabUptime.split('running for ').get(1).trim
    newValue = newValue.substring(0,11)

    // log das Ergebnis
    logInfo('OpenHab Uptime String:',newValue)

 end
Liefert

Code: Alles auswählen

80-06:57:25
Grüße
Thomas

thomas_w

Re: OpenHab Uptime in der Sitemap ?

Beitrag von thomas_w »

Dann noch Tage und Uhrzeit herausfiltern...

Code: Alles auswählen

// https://community.openhab.org/t/solved-help-on-regex/103231/5
// https://community.openhab.org/t/solved-regex-transformation/68359/3
// OpenHAB Regex ist nicht Standard Regex und kann nicht mit freien Validatoren verglichen werden
rule "OpenHab Uptime"
  when
    Item currentDateTime changed
 then
    // use the transformation service to retrieve the value
    val BefehlOutputOpenHabUptime = "BefehlOutput changed from A systemd service configuration exists...Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB serviceopenHAB is running with PID: 2066 and has been running for 80-06:57:25 to A systemd service configuration exists...Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB service openHAB is running with PID: 2066 and has been running for 80-06:58:25"
    
    //  Suche nach 'running for'
    var newValue = BefehlOutputOpenHabUptime.split('running for ').get(1).trim
    newValue = newValue.substring(0,11)

    // log das Ergebnis 80-06:57:25
    logInfo('OpenHab Uptime String:',newValue)

    val Tage = newValue.split('-').get(0).trim
    val Zeit = newValue.substring(3,11)

    // log das Ergebnis 80-06:57:25
    logInfo('OpenHab Uptime Tage:',Tage)
    logInfo('OpenHab Uptime Zeit:',Zeit)


 end

Code: Alles auswählen

80-06:57:25
80
06:57:25
Grüße
Thomas

thomas_w

Re: OpenHab Uptime in der Sitemap ?

Beitrag von thomas_w »

peter-pan hat geschrieben: 9. Aug 2020 12:09 ...also ich hab mal kurz 'ne Klammerung eingebaut (..auf Vredacht) und das hat gleich geklappt.

Code: Alles auswählen

// https://community.openhab.org/t/solved-help-on-regex/103231/5
    val newValue = transform("REGEX", ".*(\\b[\\w.!#$%&’*+\\/=?^`{|}~-]+-[\\w-:]+(?:\\.[\\w-]+)*\\b).*", BefehlOutputOpenHabUptime )

Code: Alles auswählen

2020-08-09 12:01:34.764 [INFO ] [arthome.model.script.OpenHab Uptime:] - 80-06:58:25
Klasse Peter, wäre ich nicht draufgekommen, dass da noch Klammern fehlen.. :roll:

Das Ganze hier wird eine richtige Gemeinschaftslösung!

Danke und Grüße
Thomas

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: OpenHab Uptime in der Sitemap ?

Beitrag von peter-pan »

thomas_w hat geschrieben: 9. Aug 2020 14:47 Klasse Peter, wäre ich nicht draufgekommen, dass da noch Klammern fehlen.. :roll:
Na ja, Zufallstreffer. Vorarbeit hast ja du geliefert.
PeterA hat geschrieben: 9. Aug 2020 14:17 Aber wie bekomme ich das nun noch formatiert zu 82 Tage 03 Stunden 45 Minuten ?
Wenn du das jetzt in der Rule schon soweit hast und nicht den Ansatz über das Bash-Script aufnehmen willst. Dann teste jetzt noch mal mit dem split-Befehl. Ich gehe jetzt mal in den Garten und dusch' mich erst mal kühl ab :lol:

Edit: Hab grad noch gesehen, dass Thomas ja schon mit dem split angefangen hat. Der erste split geht auf "-" und gibt den Wert (Array 0) in ein Variable "Tage" aus und den zweiten Wert des Splits in die Variable Rest. Diese kannst du nun wieder splitten mit ":" und dann Stunden, Mitnuten und Sekunden in entsprechende Variablen ausgeben. Dann baust du das ganze wieder zu einem String "80 Tage 1 Stunde und 50 Minuten zusammen" ;) .
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: OpenHab Uptime in der Sitemap ?

Beitrag von PeterA »

So bald hab ichs...

leider komme ich mit dem Split der Stunden nicht hin.

hier die rule:

Code: Alles auswählen

rule "OpenHab Uptime"
  when
    Item BefehlOutputOpenHabUptime changed
 then
   //  Suche nach 'running for'
    var newValue = BefehlOutputOpenHabUptime.state.toString.split('running for ').get(1).trim
    newValue = newValue.substring(0,11)

    // log das Ergebnis
    logInfo('OpenHab Uptime String:',newValue)

    val Tage     = newValue.split('-').get(0).trim
    val Stunden  = newValue.split(':').get(0).trim
    val Minuten  = newValue.split(':').get(1).trim

    // log das Ergebnis
    logInfo('OpenHab Uptime Tage:',Tage)
    logInfo('OpenHab Uptime Stunden:',Stunden)
    logInfo('OpenHab Uptime Minuten:',Minuten)

    // post the new value to the Item
    OpenHabUptime.postUpdate((( Tage + " DAYS, ") + (Stunden + " HOURS, ")) + ((Minuten + " MINUTES" )))

end
log:

Code: Alles auswählen

openHAB is running with PID: 2066 and has been running for 82-09:40:59

==> /var/log/openhab2/openhab.log <==

2020-08-09 20:10:16.076 [INFO ] [.model.script.OpenHab Uptime String:] - 82-09:40:59

2020-08-09 20:10:16.088 [INFO ] [me.model.script.OpenHab Uptime Tage:] - 82

2020-08-09 20:10:16.092 [INFO ] [model.script.OpenHab Uptime Stunden:] - 82-09

2020-08-09 20:10:16.096 [INFO ] [model.script.OpenHab Uptime Minuten:] - 40
Gruß Peter
- OpenHab 2.4
#PWRUP

thomas_w

Re: OpenHab Uptime in der Sitemap ?

Beitrag von thomas_w »

thomas_w hat geschrieben: 9. Aug 2020 14:39 Dann noch Tage und Uhrzeit herausfiltern...

Code: Alles auswählen

// https://community.openhab.org/t/solved-help-on-regex/103231/5
// https://community.openhab.org/t/solved-regex-transformation/68359/3
// OpenHAB Regex ist nicht Standard Regex und kann nicht mit freien Validatoren verglichen werden
rule "OpenHab Uptime"
  when
    Item currentDateTime changed
 then
    // use the transformation service to retrieve the value
    val BefehlOutputOpenHabUptime = "BefehlOutput changed from A systemd service configuration exists...Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB serviceopenHAB is running with PID: 2066 and has been running for 80-06:57:25 to A systemd service configuration exists...Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB service openHAB is running with PID: 2066 and has been running for 80-06:58:25"
    
    //  Suche nach 'running for'
    var newValue = BefehlOutputOpenHabUptime.split('running for ').get(1).trim
    newValue = newValue.substring(0,11)

    // log das Ergebnis 80-06:57:25
    logInfo('OpenHab Uptime String:',newValue)

    val Tage = newValue.split('-').get(0).trim
    val Zeit = newValue.substring(3,11)

    // log das Ergebnis 80-06:57:25
    logInfo('OpenHab Uptime Tage:',Tage)
    logInfo('OpenHab Uptime Zeit:',Zeit)


 end

Code: Alles auswählen

80-06:57:25
80
06:57:25
Grüße
Thomas
Schau Dir noch mal den Split hier an, ich habe zwei Variablen... Tage und Zeit...

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: OpenHab Uptime in der Sitemap ?

Beitrag von PeterA »

Ja ok aber wie bekomme ich hier die Stunden und Minuten extrahiert?
- OpenHab 2.4
#PWRUP

thomas_w

Re: OpenHab Uptime in der Sitemap ?

Beitrag von thomas_w »

Hallo Peter,
dein Ansatz war ja schon richtig, nur die falsche Variable...
PeterA hat geschrieben: 9. Aug 2020 20:12

Code: Alles auswählen

rule "OpenHab Uptime"
    val Stunden  = newValue.split(':').get(0).trim
    val Minuten  = newValue.split(':').get(1).trim
Anstatt newValue die Varianlöe Zeit verwenden.

Code: Alles auswählen

val Zeit = newValue.substring(3,11)

Code: Alles auswählen

    val Stunden  = Zeit.split(':').get(0).trim
    val Minuten  = Zeit.split(':').get(1).trim
So sollte es gehen, wenn ich mich nicht vertippt habe...

Grüße
Thomas

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: OpenHab Uptime in der Sitemap ?

Beitrag von PeterA »

Yeah!
So jetzt funktioniert es!
Besonderen Dank an thomas_w und peter-pan für eure Ideen und natürlich alle anderen die sich hier beteiligt haben!
Hier nun die "Doku" zum Projekt:

Ziel war es die Laufzeit von OpenHab in der UI anzeigen zu lassen.
Wenn man in der Konsole den Befehl "openhab-cli status" absetzt bekommt man diese Ausgabe zurück:

Code: Alles auswählen

A systemd service configuration exists...
Use 'sudo /bin/systemctl status openhab2.service' to find the status of an openHAB service
openHAB is running with PID: 2066 and has been running for 82-11:36:28
Am Ende steht die Laufzeit von OpenHab: 82 Tage 11 Stunden 36 Minuten 28 Sekunden.
Und das möchte ich in die Sitemap bringen.

Zunächst nutze ich das exec Binding um den Befehl "openhab-cli status" abzusetzen
Hier das thing für das exec Binding:

Code: Alles auswählen

Thing exec:command:openhabuptime2 [command="openhab-cli status", interval=3600, timeout=5] //OpenHab Uptime
Hierzu benötigen wir zwei Items.
Das erste Item bekommt als String was der Befehl "openhab-cli status" zurück gibt.
Das zweite Item bekommt dann über eine Rule den Konkatenierten String der Werte für die Sitemap.
Hier die Items:

Code: Alles auswählen

String      BefehlOutputOpenHabUptime    "Rückgabewert"   {channel="exec:command:openhabuptime2:output"}
String      OpenHabUptime                "OpenHab uptime [%s]"
Und hierzu die Rule:

Code: Alles auswählen

// https://openhabforum.de/viewtopic.php?f=15&t=3855
rule "OpenHab Uptime"
  when
    Item BefehlOutputOpenHabUptime changed
 then
   //  Suche nach 'running for'
    var newValue = BefehlOutputOpenHabUptime.state.toString.split('running for ').get(1).trim
    newValue = newValue.substring(0,11)

    // log das Ergebnis
    logInfo('OpenHab Uptime String:',newValue)

    val Tage     = newValue.split('-').get(0).trim
    val Zeit     = newValue.substring(3,11)
    val Stunden  = Zeit.split(':').get(0).trim
    val Minuten  = Zeit.split(':').get(1).trim

    // log das Ergebnis
    logInfo('OpenHab Uptime Tage:',Tage)
    logInfo('OpenHab Uptime Zeit:',Zeit)
    logInfo('OpenHab Uptime Stunden:',Stunden)
    logInfo('OpenHab Uptime Minuten:',Minuten)

    // post the new value to the Item
    OpenHabUptime.postUpdate((( Tage + " DAYS, ") + (Stunden + " HOURS, ")) + ((Minuten + " MINUTES" )))

end
Die Log ausgaben kann man später noch Auskommentieren.

Und so sieht das dann in der Sitemap aus:
Bild

Gruß Peter
- OpenHab 2.4
#PWRUP

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: OpenHab Uptime in der Sitemap ?

Beitrag von PeterA »

Hier nochmal eine andere Variante:

im Original von hier:
https://community.openhab.org/t/show-op ... /103480/14

items:

Code: Alles auswählen

// OH Up Time
//
DateTime    OH_Uptime                    "Up Time [%1$tm.%1$td.%1$tY %1$tH:%1$tM]"           <time>
String      OH_Uptime_HumanReadable      "Readable Up Time [%s]"                             <time>
rule:

Code: Alles auswählen

rule "Startup Area"

when
    System started
then
    OH_Uptime.postUpdate(new DateTimeType())		// Set Start Up Time
end


rule "OH Readable Up Time "
	when
    	Item OH_Uptime changed or
        System started or
		//Time cron "1 1 * * * ?"
        Time cron "0 0/30 * 1/1 * ? *"
	then

		if (OH_Uptime.state != NULL) {
	
			var DateTime dateTime_OH_Uptime = new DateTime((OH_Uptime.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)
			var diff						= now.millis - dateTime_OH_Uptime.millis
			var String tmp					= null
	
			// http://stackoverflow.com/questions/13018550/time-since-ago-library-for-android-java
			val Number SECOND_MILLIS = 1000;
			val Number MINUTE_MILLIS = 60 * SECOND_MILLIS;
			val Number HOUR_MILLIS   = 60 * MINUTE_MILLIS;
			val Number DAY_MILLIS    = 24 * HOUR_MILLIS;
	
			if (diff < MINUTE_MILLIS) {
				tmp = "just now";
			} else if (diff < 2 * MINUTE_MILLIS) {
				tmp = "a minute";
				} else if (diff < 50 * MINUTE_MILLIS) {
					tmp = String::format("%.2f", diff / MINUTE_MILLIS) + " Minutes";
					} else if (diff < 90 * MINUTE_MILLIS) {
						tmp = "an hour ago";
						} else if (diff < 24 * HOUR_MILLIS) {
							tmp = String::format("%.2f", diff / HOUR_MILLIS) + " Hours";
							} else if (diff < 48 * HOUR_MILLIS) {
								tmp = "since yesterday";
								} else {
									tmp = String::format("%.1f", diff / DAY_MILLIS) + " Days";
								}
	
			OH_Uptime_HumanReadable.postUpdate(tmp)
	
			tmp = null
	
			logInfo("OHUpTime", "-----------------------------------------------------------------------------")
			logInfo("OHUpTime", "Human Readable Time is " + OH_Uptime_HumanReadable.state)
			logInfo("OHUpTime", "-----------------------------------------------------------------------------")
		}
end
Bild
- OpenHab 2.4
#PWRUP

Antworten