Seite 1 von 2

Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 20. Aug 2019 19:50
von bama5015
Hallo zusammen,

ich bin noch ein ziemlicher Neuling, was das Programmieren mit OpenHab angeht.
Ich bin aktuell dabei eine Rule zu schreiben.

Hintergrund: Ich möchte den Regen der letzten vollen Stunde in ein Item Schreiben und dieses Item dann in meiner Sitemap anzeigen lassen. Den Regen der letzten Stunde errechne ich wie folgt: Regenzähler_gesamt minus Regenstand_vor_einer_Stunde.

Laut Logmeldungen werden die Items auch korrekt gesetzt. Aber im Sitemap wird der Wert (aktuell blank) nicht verändert.

Bestimmt ist das ein reiner Anfängerfehler. Ich bin um Jede Hilfe/Hinweis Dankbar.

ITEMS
Number Stand_letztH "Gesamter Regenstand vor einer Stunde"
Number Niederschlag_letzteH "Niederschlag"
Number Regen_gesamt "Rain counter as Number" {channel="homematic:HM-WDS100-C6-O-2:ccu:OEQ2113542:1#RAIN_COUNTER"}

RULE:

rule "Regen pro Stunde"
when
Time cron "0 0 * * * ?"
then
if( Stand_letztH.state == NULL ) {
Stand_letztH.sendCommand("0")
logWarn("IF", "Stand letzt Stunde wurde initiiert")
}
Niederschlag_letzteH.sendCommand((Regen_gesamt.state as DecimalType) - (Stand_letztH.state as DecimalType) )
Stand_letztH.sendCommand(Regen_gesamt.state as DecimalType)
end



Protokoll:
2019-08-20 19:46:30.068 [ome.event.ItemCommandEvent] - Item 'Niederschlag_letzteH' received command 0.00

2019-08-20 19:46:30.080 [ome.event.ItemCommandEvent] - Item 'Stand_letztH' received command 13.57

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 21. Aug 2019 10:06
von peter-pan
Wie sieht dein Sitemap-Eintrag aus ? Wie sieht der Log für dein Item Regen_gesamt aus ? Triggert die Rule ?

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 21. Aug 2019 11:19
von peter-pan
Also ich hab das Ganze mal getestet.
Eigentlich müsstest du auch eine Fehlermeldung bei der Ausführung bekommen haben (Cron Trigger funktioniert).

Code: Alles auswählen

2019-08-21 10:32:33.383 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Regen pro Stunde': Could not cast NULL to org.eclipse.smarthome.core.library.types.DecimalType; line 11, column 37, length 33
.

So sieht sie bei mir aus:

Code: Alles auswählen

rule "Regen pro Stunde"
when
  Item Dummy4 changed to ON or
  Time cron "0 0 * * * ?"
then
  logInfo("Regen proStunde", "gestartet")
  if( Stand_letztH.state == NULL ) {
      Stand_letztH.sendCommand(0)
      logWarn("IF", "Stand letzt Stunde wurde initiiert")
  }
  Niederschlag_letzteH.sendCommand((Regen_gesamt.state as Number) - (Stand_letztH.state as Number) )
  Stand_letztH.sendCommand(Regen_gesamt.state as Number)
end
Die Items sind auch etwas modifiziert (Suffixe im Label:)

Code: Alles auswählen

Group  RegenTest  "Gruppe Regen" 
Number Stand_letztH "Gesamter Regenstand vor einer Stunde [%.1f mm]"  (RegenTest)
Number Niederschlag_letzteH "Niederschlag [%.1f mm]"    (RegenTest)
Number Regen_gesamt "Rain counter as Number [%.1f mm]"    (RegenTest)   // homematic
und natürlich auch ein Eintrag in der Sitemap (minimal)

Code: Alles auswählen

    Group item=RegenTest                   labelcolor=["blue"]
Das Ergebnis sieht dann so aus:
regen.png
Ein kleiner Tipp noch; wenn du Items, Rules, etc. ist die Lesbarkeit wesentlich besser, wenn du Code-Fences benutzt

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 21. Aug 2019 14:55
von bama5015
Hallo Peter Pan,

herzlichen Dank für den Code. Bei mir funktioniert es. Ich habe in der IF-Anweisung NULL in Anführungszeichen gesetzt. Warum mein alter Code nicht funktioniert, weiß ich leider nicht. Das muss ich mir bei Gelegenheit mal im Detail anschauen.

Danke noch einmal und viele Grüße
BAMA

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 21. Aug 2019 15:32
von peter-pan
Hallo BAMA,
das mit NULL brauchst du m.E. nicht in Hochkomma setzen. Dieser Teil wird nur einmal, nach dem Anlegen des Items durchlaufen, da dann noch keine Werte enthalten sind, oder nach einem Neustart des Systems, wenn das Item nicht persistiert wird.

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 21. Aug 2019 15:53
von udo1toni
Weil ich ja immer meinen Senf dazu geben muss...

Das eine ist die Sache mit den log Befehlen. Da verweise ich jetzt mal flugs auf mein eigenes Posting in einem anderen Thread: viewtopic.php?f=15&t=2381#p10853

Das andere ist die Sache mit dem sendCommand() vs. postUpdate(). Du möchtest eine Anzeige in der UI beeinflussen, also möchtest Du den Status des Items ändern. Das geht über postUpdate(). sendCommand() ändert hier nur deshalb den Status, weil openHAB normalerweise ein autoupdate macht.

DecimalType sollte man nur dann verwenden, wenn es unbedingt sein muss, lieber Number nutzen!

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 21. Aug 2019 17:14
von peter-pan
...und das ist auch gut so.
Deine Tipps sind halt die besten und du wirst nicht müde uns immer wieder auf die Sprünge zu helfen. Meinen besonderen Dank auch noch für die Unterstützung zum Upgrade meines RPi3 von Jessie auf Stretch. Läuft alles wunderbar.
Gruss,
Peter

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 22. Aug 2019 12:23
von bama5015
Danke Udo und auch danke Peter. :)

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 22. Aug 2019 17:26
von udo1toni
Ach so, und noch was gefunden... :P

Code: Alles auswählen

if( Stand_letztH.state == NULL ) {
naja... ja, das fängt zumindest mal einen Fall ab. Es gibt aber auch noch UNDEF (ziemlich unbekannt...)
Du möchtest wissen, ob sich eine gültige Zahl im Status befindet. das geht so:

Code: Alles auswählen

if(!(Stand_letztH.state instanceof Number)) {
Der Code wird ausgeführt, falls der Status nicht vom Typ Number ist. Die Klammern sind notwendig, um das NOT (das Ausrufezeichen) korrekt zuzuordnen.

Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an

Verfasst: 23. Aug 2019 10:36
von bama5015
Das habe ich jetzt auch eingebaut. Es läuft, Danke :)

Ich habe auch eine Vermutung, warum mein alter Code nicht in der BasicUI angezeigt wurde. Kann es sein, dass ich jedem Item, das nicht vom Typ String ist, sagen muss wie die Aufbereitung aussieht? Z.B. "Niederschlag [%.1f mm]"