Seite 2 von 3

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 24. Nov 2019 23:23
von mcdandrew
Ich habe in der Paper UI unter Addons --> Persistence die RRD4J installiert.

Anschließend dann im Verzeichnis Persistence einen ConfigFile angelegt.

Code: Alles auswählen

Strategies 
{
    everyMinute : "0 * * * * ?"
    everyHour : "0 0 * * * ?"
    everyDay : "0 0 0 * * ?"
}

Items 
{
	officejet_monthcount			 : strategy = everyChange, restoreOnStartup
}
Default Persistence Service...
Habe ich gerade konfiguriert bringt allerdings auch keine Veränderung.
Da die Persistenz erst seit dem 20.11 läuft habe ich mal testweise vom 18. auf den 23. geändert...auch keine Veränderung.

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 00:22
von udo1toni
Nimm bitte everyMinute mit in die Strategy rein. rrd4j braucht eine fixe Menge an Platz, das sollte also kein Problem sein. Ansonsten müssen wir weitersuchen. Du kannst bei historicState auch noch explizit die Datenquelle mit angeben:

Code: Alles auswählen

val Number nHcount = officejet_totalcount.historicState(nDay,"rrd4j").state as Number

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 00:30
von mcdandrew
habe ich getan...Fehlermeldung bleibt allerdings die selbe :(

Code: Alles auswählen

2019-11-25 00:26:14.020 [INFO ] [e.smarthome.model.script.print.count] - nMonth=0 nDays=25 nDay=2019-11-23T00:00:00.000+01:00

2019-11-25 00:26:14.028 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Druckseite_add': cannot invoke method public abstract org.eclipse.smarthome.core.types.State org.eclipse.smarthome.core.persistence.HistoricItem.getState() on null

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 10:01
von udo1toni
Hm. Sieht ja erst mal so aus, als ob die Persistence nicht funktioniert. Du hast openHAB ja sicher schon mal neu gestartet.
Zum Testen kannst Du einen Chart auf der Sitemap anlegen und nachschauen, ob der Daten liefert.

Code: Alles auswählen

Chart item=officejet_totalcount period=W refresh=60000
Es müsste dann eine aufsteigende Linie zu sehen sein. Falls das nicht der Fall ist, müsstest Du die Datei officejet_totalcount.rrd im Verzeichnis /var/lib/openhab2/persistence/rrd4j/ (vorausgesetzt, es handelt sich um eine Standardinstallation) löschen und neu anlegen lassen (vorher openHAB beenden).

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 20:51
von mcdandrew

Code: Alles auswählen

Hm. Sieht ja erst mal so aus, als ob die Persistence nicht funktioniert. 
Andere durch die Persistence gespeicherte Werte (bspw. Aussentemperatur) werden korrekt dargestellt.

Code: Alles auswählen

Du hast openHAB ja sicher schon mal neu gestartet.
natürlich

Habe nun das Verzeichnis gelöscht und die Dateien neu anlegen lassen. Ich werde berichten was das Chart sagt.

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 22:51
von mcdandrew
Die Persistence scheint einwandfrei zu funktionieren...habe mal 2 Seiten gedruckt.
Im zweiten Chart wird das Item "officejet_monthcount".
Wie zu erkennen ist wird kein Wert zugewiesen.

Bild

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 23:07
von udo1toni
Wie sieht denn der Channel zum Item officejet_totalcount aus?

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 23:14
von mcdandrew
Thing-File

Code: Alles auswählen

Thing hpprinter:printer:djprinter "HP Officejet 6960" @ "Büro" [ ipAddress="192.168.10.7", usageInterval="30", statusInterval="4" ]
ITem-File

Code: Alles auswählen

String officejet_status 			"Status"   						{channel="hpprinter:printer:djprinter:status#status"}

Number officejet_blacklevel			"Füllstand schwarz [%s%%]"		{channel="hpprinter:printer:djprinter:ink#blackLevel"}
Number officejet_yellowlevel			"Füllstand Yellow [%s%%]"			{channel="hpprinter:printer:djprinter:ink#yellowLevel"}
Number officejet_cyanlevel			"Füllstand Cyan [%s%%]"			{channel="hpprinter:printer:djprinter:ink#cyanLevel"}
Number officejet_magentalevel		"Füllstand Magenta [%s%%]"		{channel="hpprinter:printer:djprinter:ink#magentaLevel"}

Number officejet_totalcount			"Anzahl gedruckter Seiten"		{channel="hpprinter:printer:djprinter:usage#totalCount"}
Number officejet_totalColorCount		"davon in Farbe"				{channel="hpprinter:printer:djprinter:usage#totalColorCount"}
Number officejet_totalMonochromeCount	"davon in schwarz"				{channel="hpprinter:printer:djprinter:usage#totalMonochromeCount"}
Number officejet_monthcount 			"Seiten aktueller Zeitraum"

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 25. Nov 2019 23:56
von udo1toni
Das ist hässliches Stochern im Nebel. Vielleicht ergibt sich aus dieser Logzeile etwas:

Code: Alles auswählen

val Hcount = officejet_totalcount.historicState(nDay,"rrd4j").state 
logInfo("print.count","nTcount={} Hcount={}",nTcount,Hcount)
Also erst mal keine Zuweisung zu Number, sondern mal schauen, was denn da tatsächlich zurück kommt.

Re: HP Printer Binding - monatliche Seiten berechnen

Verfasst: 26. Nov 2019 00:30
von mcdandrew
Das ist hässliches Stochern im Nebel.
Ich hätte schon längst aufgegeben...ich bewundere immerwieder deinen Ehrgeiz ;)

Habe den Code jetzt wie folgt geändert..

Code: Alles auswählen

rule "Druckseite_add"
when 
    //System started or                  // Systemstart, Anzeige mit aktuellem Wert initialisieren
    Item officejet_totalcount changed
then
    val Integer nMonth = if(now.getDayOfMonth < 23) 1 else 0
    val Integer nDays =now.minusMonths(nMonth).getDayOfMonth

    val nDay = now.withTimeAtStartOfDay.minusMonths(nMonth).minusDays(nDays-23)
    
    val Number nTcount = officejet_totalcount.state as Number
    val nHcount = officejet_totalcount.historicState(nDay,"rrd4j").state 
	
	logInfo("print.count","nTcount={} nHcount={}",nTcount,nHcount)
	
    officejet_monthcount.postUpdate(nTcount - nHcount)
end
Wobei ich sagen muss, dass ich die Varaible Hcount (wie von Dir beschrieben) nach nHcount geändert habe...
Die Log Ausgabe erscheint allerdings nicht...eventuell bricht es die Rule vorher schon ab?