Wasserzähler

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Boxana
Beiträge: 125
Registriert: 19. Feb 2020 16:24
Answers: 0

Wasserzähler

Beitrag von Boxana »

Hallo,
ich habe eine EIB Zählerschnittstelle an einer Wasseruhr mit Pulsausgang (steigende Flanke pro Liter)
Auf meinem MT 701 lese ich diesen wert aus und das geht auch soweit ganz gut.
Der wert wird regelmäßig auf den Bus gesendet.

Jetzt würde ich diesen wert auch gerne in OpenHab darstellen aber leider klappt das nicht so wie ich es mache.

Things:

Code: Alles auswählen

Type number            : RasenWasser_TagesZaehler               "Wasser Rasen Tageszähler"          [ ga="10/2/10" ]
Items:

Code: Alles auswählen

Number		RasenWasser_TagesZaehler	{channel="knx:device:bridge:GARTEN_WASSER:RasenWasser_TagesZaehler", autoUpdate="false"}
der wert des Items ist immer 0,0
zähler.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Openhab auf einem Qnap NAS
Gruß
Christian

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Wasserzähler

Beitrag von udo1toni »

Ich gehe mal davon aus, dass knx grundsätzlich im Zusammenspiel mit openHAB funktioniert.

Mögliche Fehlerquellen:
  • Thing stimmt nicht (kann ich aus dem Post nicht erkennen...)
  • GA stimmt nicht
  • DPT passt nicht
Interessant wäre noch die Allgemein-Seite des Device.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Boxana
Beiträge: 125
Registriert: 19. Feb 2020 16:24
Answers: 0

Re: Wasserzähler

Beitrag von Boxana »

hallo,
die gruppenadresse stimmt.
Und es kommt ja auch der Wechsel von null nach 0.0
aber ich weiß nicht welcher DPT passen würde.
12.001 war mein versuch da es ja ein 4 byte wert ist.

Type number : RasenWasser_TagesZaehler "Wasser Rasen Tageszähler" [ ga="12.001:10/2/10" ]
Openhab auf einem Qnap NAS
Gruß
Christian

Benutzeravatar
Boxana
Beiträge: 125
Registriert: 19. Feb 2020 16:24
Answers: 0

Re: Wasserzähler

Beitrag von Boxana »

Ich habe es noch mal neu eingerichtete und andere Namen benutzt.
Frage mich warum aber jetzt geht es ?

Type number : TagesZaehler_Rasensprenger "Wasser Rasen Tageszähler" [ ga="12.001:10/2/10" ]

Allen frohe Ostern und danke udo1toni.
Openhab auf einem Qnap NAS
Gruß
Christian

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Wasserzähler

Beitrag von udo1toni »

Oben hast Du den DPT nicht mit angegeben :) Standard DPT für Number ist 9.001
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Boxana
Beiträge: 125
Registriert: 19. Feb 2020 16:24
Answers: 0

Re: Wasserzähler

Beitrag von Boxana »

kannst du da nochmal drüber schauen?

ich würde gerne eine regel erstellen die die Bewässerung einschaltet und dann 1000 L begegnet.
ich versuche jetzt eine Variable mit dem wert der Wasseruhr (14022.0) zu füllen und dann + 1000 um damit zu arbeiten.
leider scheitere ich wieder an den variablen :-(

Code: Alles auswählen

var Number var_wasserzaeler = Rasen_Zaehlerstand_Wasseruhr
rule "Bewaesserung Rasen"
when
    Item Bewaesserungsautomatik changed
then

    var_wasserzaeler = var_wasserzaeler + 1000
    logInfo("bewaesserung", var_wasserzaeler )


end 
==> share/MD0_DATA/.qpkg/OpenHab/userdata/logs/openhab.log <==
2020-04-13 19:07:00.686 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Bewaesserung Rasen': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.lib.NumberExtensions.operator_plus(java.lang.Number,java.lang.Number) on instance: null
Openhab auf einem Qnap NAS
Gruß
Christian

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Wasserzähler

Beitrag von Darkwin101 »

Probiere mal var var_wasserzaehler = Rasen_Zaehlerstand_Wasseruhr.state as Number
Das Rasen_Zaehlerstand_Wasseruhr ist ein Item du musst die Zahl quasi extrahieren aus dem Item um es Leienhaft zu sagen

Benutzeravatar
Boxana
Beiträge: 125
Registriert: 19. Feb 2020 16:24
Answers: 0

Re: Wasserzähler

Beitrag von Boxana »

gleiche meldung :-(
Openhab auf einem Qnap NAS
Gruß
Christian

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Wasserzähler

Beitrag von udo1toni »

Das Problem ist, dass Du versuchst, einer globalen Variablen bei der Definition einen dynamischen Wert zuzuweisen, das ist nicht erlaubt.
Es gibt tatsächlich eine Ausnahme der Regel, nämlich die Zuweisung einer Action, aber selbst da ist es besser, das innerhalb der Rule zu erledigen.

Die Rule als solche ist auch eher fragwürdig, zumindest passt das, was die Rule aktuell tut, nicht zu dem, was Du beschreibst.

Ich nehme mal an, die Beregnung wird von einer anderen Rule eingeschaltet. :) Aber so, wie die Rule geschrieben ist, wird ja nun gar nichts gesteuert. Oder ist das nur der erste Versuch?

So als erster Entwurf (wobei da verschiedene Fragen auftauchen):

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Number nWasseruhrAlt = null

rule "Beregnung Start"
when
    Item Bewaesserungsautomatik changed to ON                                              // Beregnung gestartet
then
    Beregner.sendCommand(ON)                                                               // oder erst später in der Rule, falls der Fehler den Start verhindern soll
    if(!(Rasen_Zaehlerstand_Wasseruhr.state instanceof Number)) {                          // Zählerstand ist keine gültige Zahl
        logWarn("sprinkling","Beregnungsstart - Zählerstand kann nicht abgerufen werden!") // Warnmeldung
        return;                                                                            // Und Abbruch der Rule
    }
    nWasseruhrAlt = (Rasen_Zaehlerstand_Wasseruhr.state as Number)                         // alten Zählerstand retten
    logInfo("sprinkling","Zählerstand bei Start: {} cm³",nWasseruhrAlt)                    // und Erfolg melden
end

rule "Beregnung Stop"
when
    Item Rasen_Zaehlerstand_Wasseruhr changed
then
    if(Beregner.state != ON || Bewaesserungsautomatik.state != ON) {                       // Kein Automatikbetrieb
        return;                                                                            // Deshalb Abbruch
    }
    if(!(Rasen_Zaehlerstand_Wasseruhr.state instanceof Number)) {                          // Zählerstand ist keine gültige Zahl
        logWarn("sprinkling","Beregnungsstop - Zählerstand kann nicht abgerufen werden!")  // Warnmeldung
        return;                                                                            // Und Abbruch der Rule
    }
    if(nWasseruhrAlt === null) {                                                           // Alter Zählerstand nicht gesetzt
        logWarn("sprinkling","Beregnungsstop - Kein Vergleichszählerstand!")               // Warnmeldung
        return;                                                                            // Und Abbruch der Rule
    }
    val nWasseruhrNeu = Rasen_Zaehlerstand_Wasseruhr.state as Number                       // aktueller Zählerstand
    if(nWasseruhrAlt + 1000 <= nWasseruhrNeu) {                                            // mindestens 1000 Liter gezapft
        Beregner.sendCommand(OFF)                                                          // Beregner ausschalten
        logInfo("sprinkling","Zählerstand bei Stop: {} cm³",nWasseruhrNeu)                 // Meldung ausgeben
        nWasseruhrAlt = null                                                               // alten Zählerstand löschen
        Bewaesserungsautomatik.sendCommand(OFF)                                            // Automatik beenden
    }
end
Die aufkommenden Fragen:
  • Ich würde eher erwarten, die Beregnung entweder durch Messwerte zu starten (Boden zu trocken/x Tage kein Regen/bestimmte Zeiten) und einen Schalter vorzusehen, der den automatischen Start unterdrückt (also bei Erreichen der Startbedingung(en) zunächst prüfen, ob die Automatik aktiv ist, statt die Rule dadurch zu triggern)
  • Wie soll sich die Rule verhalten, wenn der Fehlerfall eintritt, also z.B. die Wasseruhr nicht ausgelesen werden kann?
  • Was soll beim Abschalten im Fehlerfall passieren? Tendenziell würde ich mit Wasserstop reagieren, man könnte aber auch ein Fallback vorsehen, z.B. einen Timer starten. Läuft der ab und es liegen keine gültigen Messwerte vor, wird die Beregnung beendet
Verhalten im Fehlerfall ist ein oft vernachlässigter Bereich. Solange es um Licht an/aus oder Rollläden auf/zu geht, ist ein Fehler normalerweise nur ärgerlich, führt aber nicht zu größerem Schaden (vielleicht abgesehen von einer erhöhten Stromrechnung), bei Wasser könnte man sich aber verschiedene Szenarien ausmalen, wo es schnell sehr unangenehm und teuer werden kann. Da kommt es natürlich auhc sehr auf die eigene Situation an. Wo kommt das Wasser her (Trinkwasser, Brunnen, Zisterne)? Was passiert bei Überschwemmung (durch die Beregnung)?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Boxana
Beiträge: 125
Registriert: 19. Feb 2020 16:24
Answers: 0

Re: Wasserzähler

Beitrag von Boxana »

Ja das war erst einmal nur ein kleiner test ob ich es hinbekomme das ich auf den aktuellen wert 1000 draufbekommene.
B8EFB766-6C28-4677-BD79-0D1B64B44715.jpeg


Das andere , also manuell geht schon.
Ich habe einen Hunter Regensensor der das ganze in verbindung mit cron trigern soll.
Aber dein Hinweise auf eventuelle Fehler ist gut denn so weit habe ich im Moment nicht gedacht.

Ich werde deine Vorlage mal als Eingang benutzen.
Wieder einmal großer Dank
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Openhab auf einem Qnap NAS
Gruß
Christian

Antworten