Setpoint Wert als sendCommand übergeben
- Joe
- Beiträge: 200
- Registriert: 10. Okt 2018 12:22
- Wohnort: bei Mannheim
Re: Setpoint Wert als sendCommand übergeben
Hi Udo,
da wird doch der Hund in der Pfanne verrückt... habe gerade mal einen Blick auf meine 5 Charts geworfen und was sehe ich nur noch Striche von Links nach rechts.
Habe ich jetzt ein Problem da ich mapDB Persistence und rrd4j Persistence aktiv habe?
da wird doch der Hund in der Pfanne verrückt... habe gerade mal einen Blick auf meine 5 Charts geworfen und was sehe ich nur noch Striche von Links nach rechts.
Habe ich jetzt ein Problem da ich mapDB Persistence und rrd4j Persistence aktiv habe?
- udo1toni
- Beiträge: 13983
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Setpoint Wert als sendCommand übergeben
Ich weiß ja nicht, was Du alles geändert hast...
Hast Du die Persistence mit beim Chart Widget stehen? Oder hast Du rrd4j als default Persistence gesetzt?
Bist Du sicher, dass die Sensoren gültige Werte liefern?
Hast Du die Persistence mit beim Chart Widget stehen? Oder hast Du rrd4j als default Persistence gesetzt?
Bist Du sicher, dass die Sensoren gültige Werte liefern?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
- Joe
- Beiträge: 200
- Registriert: 10. Okt 2018 12:22
- Wohnort: bei Mannheim
Re: Setpoint Wert als sendCommand übergeben
Hi Udo,
wo genau stelle ich die rrd4j default Persistence ein?
Habe jetzt nicht nur eine Presistence am laufen:
Ich kann in paperUi doch immer nur eine als Standard einstellen oder?
Wenn ich hier auf rrd4j stelle gehen die Charts wieder aber die Speicherung der anderen Werte geht nicht mehr.
für die Chats benötige ich die rrd4j:
für die Speicherung der anderen Werte benötige ich die mapdb.persist:
wo genau stelle ich die rrd4j default Persistence ein?
Habe jetzt nicht nur eine Presistence am laufen:
Ich kann in paperUi doch immer nur eine als Standard einstellen oder?
Wenn ich hier auf rrd4j stelle gehen die Charts wieder aber die Speicherung der anderen Werte geht nicht mehr.
für die Chats benötige ich die rrd4j:
Code: Alles auswählen
Strategies {
// for rrd charts, we need a cron strategy Yohoo Binding
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
everyWeek : "0 0 0 0 * ?"
everyMonth : "0 0 0 0 0 ?"
default = everyChange
}
Items {
Temp_Chart0*, Temp_Chart1*, Temp_Chart2*, Temp_Chart3*, Temp_Chart4* : strategy = everyMinute, everyChange, restoreOnStartup //: strategy = everyChange, everyMinute
//Temperature : strategy = everyUpdate, everyMinute
//Temperature : strategy = everyMinute, everyUpdate, restoreOnStartup
//Temperature_yo: strategy = everyChange, everyMinute
//ein Item wird jede Minute persistiert:
//Test_Leistung : strategy = everyMinute //jede Minute wird der Wert gespeichert
//Alternative: die Gruppe wird bei jeder Veränderung gespeichert
//TChart_Temp* : strategy = restoreOnStartup, everyChange //bei jeder Änderung des Wertes wird dieser gespeichert
}
Code: Alles auswählen
Strategies {
default = everyUpdate
}
Items {
//*** Ab hier Rollosteuerung *******
Bewoelkung : strategy = everyChange, restoreOnStartup
Soll_Setpoint_1 : strategy = everyChange, restoreOnStartup
Rollo_auf_1 : strategy = everyChange, restoreOnStartup
Soll_Setpoint_2 : strategy = everyChange, restoreOnStartup
Rollo_auf_2 : strategy = everyChange, restoreOnStartup
Soll_Setpoint_3 : strategy = everyChange, restoreOnStartup
Rollo_auf_3 : strategy = everyChange, restoreOnStartup
Soll_Setpoint_4 : strategy = everyChange, restoreOnStartup
Rollo_auf_4 : strategy = everyChange, restoreOnStartup
Soll_Setpoint_5 : strategy = everyChange, restoreOnStartup
Rollo_auf_5 : strategy = everyChange, restoreOnStartup
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 13983
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Setpoint Wert als sendCommand übergeben
Nein, die default Persistence spielt nur beim Zugriff auf die persistierten Daten eine Rolle, also wenn Du in der Sitemap ein Chart Widget verwendest oder innerhalb einer Rule auf historische Daten zugreifen willst. Du kannst bei jedem dieser Befehle explizit angeben, welcher Persistence Service verwendet werden soll. Wenn es die default Persistence ist, kannst Du den Parameter weg lassen.
Für das Speichern der Daten spielt es keine Rolle, welche default Persistence definiert ist, hier zählt einzig die Information in den *.persist Dateien.
Aber nochmal der Hinweis: Deine Strategies sind fehlerhaft. Abgesehen davon, dass es keinen Tag 0 im Monat gibt und everyWeek, also einmal pro Woche, an einem bestimmten Wochentag persistieren müsste (z.B. immer Montags), sind all diese Strategies sinnfrei. rrd4j muss zwingend everyMinute als Strategy gesetzt haben, wahlweise kann man das noch mit everyChange und/oder restoreOnStartup ergänzen.
In mapdb ist alles außer everyChange und restoreOnStartup auch sinnfrei, allenfalls könnte man statt everyChange noch everyUpdate setzen, aber da mapdb nur den letzten bekannten Wert zurück liefert, ist auch der Speicherzeitpunkt eher nicht so wichtig.
Bei Datenbanken wie MySQL sieht die Sache eventuell etwas anders aus, aber selbst da müssten die Strategies anders definiert sein, um dem Namen entsprechend korrekt zu funktionieren.
Wichtig ist auch, wie oben zu sehen, die Strategies aufzuteilen, so dass unterschiedliche Strategien möglichst nicht zum selben Zeitpunkt feuern.
Für das Speichern der Daten spielt es keine Rolle, welche default Persistence definiert ist, hier zählt einzig die Information in den *.persist Dateien.
Aber nochmal der Hinweis: Deine Strategies sind fehlerhaft. Abgesehen davon, dass es keinen Tag 0 im Monat gibt und everyWeek, also einmal pro Woche, an einem bestimmten Wochentag persistieren müsste (z.B. immer Montags), sind all diese Strategies sinnfrei. rrd4j muss zwingend everyMinute als Strategy gesetzt haben, wahlweise kann man das noch mit everyChange und/oder restoreOnStartup ergänzen.
In mapdb ist alles außer everyChange und restoreOnStartup auch sinnfrei, allenfalls könnte man statt everyChange noch everyUpdate setzen, aber da mapdb nur den letzten bekannten Wert zurück liefert, ist auch der Speicherzeitpunkt eher nicht so wichtig.
Bei Datenbanken wie MySQL sieht die Sache eventuell etwas anders aus, aber selbst da müssten die Strategies anders definiert sein, um dem Namen entsprechend korrekt zu funktionieren.
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?" // zur vollen Minute
everyHour : "1 0 * * * ?" // eine Sekunde nach der vollen Stunde
everyDay : "2 0 0 * * ?" // zwei Sekunden nach Mitternacht
everyWeek : "3 0 0 ? * 1" // drei Sekunden nach Mitternacht am Montag
everyMonth : "4 0 0 1 * ?" // vier Sekunden nach Mitternacht am Monatsersten
everyYear : "5 0 0 1 1 ?" // fünf Sekunden nach Mitternacht an Neujahr
default = everyChange
}
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
- Joe
- Beiträge: 200
- Registriert: 10. Okt 2018 12:22
- Wohnort: bei Mannheim
Re: Setpoint Wert als sendCommand übergeben
Hi Udo,
Danke für Deine schnelle Antwort, könntest Du mir bitte ein Beispiel geben, an welcher Stelle ich das Befehl zur Zuordnung des Charts zur jeweiligen Persistence einsetze?
Wo genau in der Sitemap muss welcher Befehl hin?
Danke für Deine schnelle Antwort, könntest Du mir bitte ein Beispiel geben, an welcher Stelle ich das Befehl zur Zuordnung des Charts zur jeweiligen Persistence einsetze?
Wo genau in der Sitemap muss welcher Befehl hin?
- udo1toni
- Beiträge: 13983
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Setpoint Wert als sendCommand übergeben
Schau mal hier: https://www.openhab.org/docs/configurat ... type-chart
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
- Joe
- Beiträge: 200
- Registriert: 10. Okt 2018 12:22
- Wohnort: bei Mannheim
Re: Setpoint Wert als sendCommand übergeben
Hi Udo,
so bin mal wieder vor der Kiste. Hat funktioniert Dank.
Sag mal kann ich den Service nur bei einem Chart angeben oder auch bei ITEMS für die ich jetzt die mapdb.presist nutze?
so bin mal wieder vor der Kiste. Hat funktioniert Dank.
Sag mal kann ich den Service nur bei einem Chart angeben oder auch bei ITEMS für die ich jetzt die mapdb.presist nutze?
Code: Alles auswählen
Items {
//*** Ab hier Rollosteuerung *******
Bewoelkung : strategy = everyChange, restoreOnStartup
Soll_Setpoint_1 : strategy = everyChange, restoreOnStartup
- udo1toni
- Beiträge: 13983
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Setpoint Wert als sendCommand übergeben
Ich verstehe jetzt nicht so ganz, was Du meinst. Die Angabe des Service bezieht sich immer auf das Item. Wenn Du ein Chart Widget in der Sitemap angibst, übergibst Du den Service, damit das Chart Widget weiß, von welchem Persistence Service es die Daten des Items (oder auch einer Gruppe von Items) holen soll. In einer Sitemap ist das Chart Widget das einzige, welches auf historische Daten zugreift.
Wenn Du in Rules auf historische Daten zugreifst (z.B. mittels myItem.previousState().state oder mittels myItem.averageSince()), kannst Du den zu verwendenden Service genauso angeben, dabei wird der Service dann einfach als zweiter Parameter angegeben:
Da sich die *.persist Dateien immer auf exakt einen Persistence Service beziehen, gibt es dort keine Möglichkeit, den Service mit anzugeben.
Wenn Du in Rules auf historische Daten zugreifst (z.B. mittels myItem.previousState().state oder mittels myItem.averageSince()), kannst Du den zu verwendenden Service genauso angeben, dabei wird der Service dann einfach als zweiter Parameter angegeben:
Code: Alles auswählen
var Number nMax = myItem.maximumSince(now.minusMinutes(45),"rrd4j") as Number
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 45
- Registriert: 12. Feb 2018 17:53
Re: Setpoint Wert als sendCommand übergeben
Hallo,
ich würde gern den ursprünglichen Post nochmal aufgreifen.
ich möchte gern für jede Heizung zwei Setpoint Items erzeugen.
Mit einem Item möchte die Wohlfürtemperatur für den Raum einstellen,
das zweite Item die Absenktemperatur.
über eine Regel soll das Item Heizung was mit dem Thing Heizung verbunden ist, entweder den Wert von "Absenktemperatur" oder den Wert von "Wohlfühltemperatur" annehmen.
nach dem Beispiel vom Anfang dieses Threads habe ich eine regel so gemacht:
ich denke ich brauch das "instanceof" nicht. daher habe ich noch eine zweite regel geschrieben
beide Regeln tun aber nicht.
Im LogViewer steht dies
ich würde gern den ursprünglichen Post nochmal aufgreifen.
ich möchte gern für jede Heizung zwei Setpoint Items erzeugen.
Mit einem Item möchte die Wohlfürtemperatur für den Raum einstellen,
das zweite Item die Absenktemperatur.
über eine Regel soll das Item Heizung was mit dem Thing Heizung verbunden ist, entweder den Wert von "Absenktemperatur" oder den Wert von "Wohlfühltemperatur" annehmen.
nach dem Beispiel vom Anfang dieses Threads habe ich eine regel so gemacht:
Code: Alles auswählen
rule "EG_Wohnzimmer_1"
when
Item Heizungsmodus changed to 1
then
if(EG_Wohnzimmer_Heizung_Absenktemperatur instanceof Number)
Number EG_Wohnzimmer_Heizung_SOLLtemperatur.sendCommand(EG_Wohnzimmer_Heizung_Absenktemperatur as Number)
end
Code: Alles auswählen
rule "EG_Wohnzimmer_2"
when
Item Heizungsmodus changed to 2
then
Number EG_Wohnzimmer_Heizung_SOLLtemperatur.sendCommand(EG_Wohnzimmer_Heizung_Heiztemperatur as Number)
end
Im LogViewer steht dies
2019-12-26 17:04:57.262 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'EG_Wohnzimmer_1': Could not cast EG_Wohnzimmer_Heizung_Absenktemperatur (Type=NumberItem, State=12, Label=Absenktemperatur, Category=null) to java.lang.Number; line 10, column 65, length 48
kann mir jemand einen Hinweiß geben wo der Fehler stecken könnte2019-12-26 17:04:59.784 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'EG_Wohnzimmer_2': Could not cast EG_Wohnzimmer_Heizung_Heiztemperatur (Type=NumberItem, State=27, Label=Heiztemperatur, Category=null) to java.lang.Number; line 20, column 62, length 46
- udo1toni
- Beiträge: 13983
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Setpoint Wert als sendCommand übergeben
Warum definierst Du zwei Rules? Wie sind Deine Items definiert?
Wenn die Items allesamt vom Typ Number sind (nicht Number:Temperature), sähe eine passende Rule so aus:
Wichtig ist, dass Du auf den Status des Items zugreifen willst, Du musst also .state anhängen. Das Schlüsselwort Number gehört nicht vor das Item (nur im Items File)
Die Variable musst Du nicht unbedingt verwenden, wenn Du sie verwendest, musstDu sie nicht unbedingt mit einem Zahlenwert initialisieren, auch ein default Value muss nicht unbedingt gesetzt werden. Wenn Du sicher weißt, dass jedes der drei Items jederzeit eine gültige Zahl enthält, kannst Du auch die Prüfung auf instanceof Number weg lassen. Dann sähe die Rule so aus:
Aber bedenke, dass jedes Item zum Start des Systems immer den Status NULL hat, womit die Rule eine null pointer exception wirft, sobald sie triggert.
Ein gültiges default Verhalten ist auch immer wünschenswert...
Wenn die Items allesamt vom Typ Number sind (nicht Number:Temperature), sähe eine passende Rule so aus:
Code: Alles auswählen
rule "Heizung EG Wohnzimmer"
when
Item Heizungsmodus changed // Heizungsmodus geändert
then
if(!(Heizungsmodus.state instanceof Number)) // Modus ist eine gültige Zahl?
return; // falls nicht: Abbruch
var Number nTemp = 18 // initialisiere Variable mit 18
switch((Heizungsmodus.state as Number).intValue) { // Wähle nach gewählter Betriebsart
case 1: { // Modus 1
if(EG_Wohnzimmer_Heizung_Absenktemperatur.state instanceof Number) // Absenktemperatur gültige Zahl?
nTemp = EG_Wohnzimmer_Heizung_Absenktemperatur.state as Number // dann in die Variable übernehmen
}
case 2: { // Modus 2
if(EG_Wohnzimmer_Heizung_Heiztemperatur.state instanceof Number) // Heiztemperatur gültige Zahl?
nTemp = EG_Wohnzimmer_Heizung_Heiztemperatur.state as Number // dann in Variable übernehmen
}
default: { // alle anderen Modi
nTemp = 19 // setze auf 19
}
}
EG_Wohnzimmer_Heizung_SOLLtemperatur.sendCommand(nTemp) // sende gewählte Temperatur
end
Die Variable musst Du nicht unbedingt verwenden, wenn Du sie verwendest, musstDu sie nicht unbedingt mit einem Zahlenwert initialisieren, auch ein default Value muss nicht unbedingt gesetzt werden. Wenn Du sicher weißt, dass jedes der drei Items jederzeit eine gültige Zahl enthält, kannst Du auch die Prüfung auf instanceof Number weg lassen. Dann sähe die Rule so aus:
Code: Alles auswählen
rule "Heizung EG Wohnzimmer"
when
Item Heizungsmodus changed
then
switch((Heizungsmodus.state as Number).intValue) {
case 1: {
EG_Wohnzimmer_Heizung_SOLLtemperatur.sendCommand(EG_Wohnzimmer_Heizung_Absenktemperatur.state as Number)
}
case 2: {
EG_Wohnzimmer_Heizung_SOLLtemperatur.sendCommand(EG_Wohnzimmer_Heizung_Heiztemperatur.state as Number)
}
}
end
Ein gültiges default Verhalten ist auch immer wünschenswert...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet