Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
-
- Beiträge: 7
- Registriert: 20. Aug 2019 18:28
Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
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
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
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
Wie sieht dein Sitemap-Eintrag aus ? Wie sieht der Log für dein Item Regen_gesamt aus ? Triggert die Rule ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
Also ich hab das Ganze mal getestet.
Eigentlich müsstest du auch eine Fehlermeldung bei der Ausführung bekommen haben (Cron Trigger funktioniert)..
So sieht sie bei mir aus:
Die Items sind auch etwas modifiziert (Suffixe im Label:)
und natürlich auch ein Eintrag in der Sitemap (minimal)
Das Ergebnis sieht dann so aus:
Ein kleiner Tipp noch; wenn du Items, Rules, etc. ist die Lesbarkeit wesentlich besser, wenn du Code-Fences benutzt
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
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
Code: Alles auswählen
Group item=RegenTest labelcolor=["blue"]
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 7
- Registriert: 20. Aug 2019 18:28
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
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
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
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
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.
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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
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!
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!
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
...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
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
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 7
- Registriert: 20. Aug 2019 18:28
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
Danke Udo und auch danke Peter. 

- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
Ach so, und noch was gefunden... 
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:
Der Code wird ausgeführt, falls der Status nicht vom Typ Number ist. Die Klammern sind notwendig, um das NOT (das Ausrufezeichen) korrekt zuzuordnen.

Code: Alles auswählen
if( Stand_letztH.state == NULL ) {
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)) {
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 20. Aug 2019 18:28
Re: Rule Verändert ITEM, Veränderung kommt in Sitemap nicht an
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]"

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]"