Ankündigung

Einklappen
Keine Ankündigung bisher.

Wasserstandsmessung über Drucksonde und 1-wire

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Wasserstandsmessung über Drucksonde und 1-wire

    Hallo zusammen

    Da ich seit bald zwei Wochen Besitzer von einem Wiregate bin möchte ich hier auch meinen kleinen Beitrag leisten.

    Ich habe über längere Zeit nach einer präzisen und kostengünstigen Lösung für die Messung des Füllstands meiner Regenwasserzisterne gesucht. Fündig wurde ich bei Jens Dietrich, welcher eine Drucksonde baut mit einer 1-wire Anbindung. Leider wird der verwendete Chip nicht direkt vom Wiregate unterstützt. Das folgende Wiregate Plugin bindet diesen direkt ins KNX ein.

    Ich habe in diesem Forum nach einem Beispiel gesucht, wie man "Fremdchips" ins Wiregate einbindet, habe aber nichts gefunden. Daher habe ich die schwache Hoffnung der erste zu sein ;-) Analog kann man natürlich auch andere Chips einbinden, die nicht direkt unterstützt werden.

    Das Wiregate läuft übrigens wie geschmiert :-)

    Markus

    Code:
    # Dies ist ein Beispiel, wie man einen vom Wiregate nicht unter-
    # stützen 1-wire Chip in das KNX System einbinden kann.
    #
    # Plugin für eine stehende Regenwasserzisterne in Verbindung mit
    # einem DS2450 Chip. Beim Chip wird der Ausgang volt.A verwendet.
    # Gelegentlich liefert der Chip bei der Abfrage 0. In diesem Fall
    # wird mit einer nochmaligen Abfrage versucht der Fehler zu beheben.
    #
    # Der Name des Sensors kann mit dem Unix Kommando
    #   owdir -s 4304 
    # im Wiregate abgefragt werden oder direkt im Internet Browser mit
    #   http://wiregateXXX:3001
    # wobei XXX mit der korrekten Nummer ergänzt werden muss.
    
    
    # Eigenen Aufruf-Zyklus auf 300 Sekunden (Default globales RRD-Intervall) setzen
    #$plugin_info{$plugname.'_cycle'} = $wg_config{''}{'rrd_interval'};
    $plugin_info{$plugname.'_cycle'} = 180;
    
    
    my $GA_PercentFull             = "6/1/5";
    my $GA_Wasserstand             = "6/1/6";
    my $GA_Wasservolumen             = "6/1/7";
    my $GA_SpannungsStoerung         = "6/1/8";
    my $GA_DrucksondenLeitungStoerung     = "6/1/9";
    
    my $TankVolumenInLiter = 12566; # in Liter
    my $TankWasserstandMax = 2560;  # in Millimeter
    
    my $count = 5;
    my $volt_A_Variable = 0;
    while ($volt_A_Variable == 0 && $count > 0) {
        $volt_A_Variable = `owread -s 4304 /20.DB5C06000000/volt.A`;
        if ($volt_A_Variable == 0){
            # wenn ein ungültiger Wert geliefert wurde => noch einmal abfragen
            $count--;
            usleep(100000);
        }
    };
    if ($volt_A_Variable == 0){
        # falls immer noch ungültig Abbruch ohne Fehlermeldung
        return "0 gelesen";
    }
    
    #Störung auf der Versorgungsspannung: 
    my $volt_B_Variable = `owread -s 4304 /20.DB5C06000000/volt.B`;
    my $ErrorPower_Variable = 0;
    if ($volt_B_Variable == 0){
        # wenn 0 geliefert wurde => noch einmal abfragen zur Sicherheit
        $volt_B_Variable = `owread -s 4304 /20.DB5C06000000/volt.B`;    
        if ($volt_B_Variable == 0){
            # Störung gefunden
            $ErrorPower_Variable = 1;
        }
    }
    knx_write($GA_SpannungsStoerung, $ErrorPower_Variable, 1);
    
    #Störung auf der Drucksondenleitung überprüfen: 
    my $volt_C_Variable = `owread -s 4304 /20.DB5C06000000/volt.C`;
    my $ErrorCable_Variable = 0;
    if ($volt_C_Variable > 2){
        # Störung Drucksondenleitung gefunden
        $ErrorCable_Variable = 1;
    }
    knx_write($GA_DrucksondenLeitungStoerung, $ErrorCable_Variable, 1);
    
    my $PercentFull_Variable = $volt_A_Variable * 40;
    my $Wasserstand_Variable = $TankWasserstandMax * $volt_A_Variable / 2.5;
    my $Volumen_Variable = $TankVolumenInLiter * $volt_A_Variable / 2.5;
    
    knx_write($GA_PercentFull, $PercentFull_Variable, 5);
    knx_write($GA_Wasserstand, $Wasserstand_Variable, 7);
    knx_write($GA_Wasservolumen, $Volumen_Variable, 7);
    
    update_rrd("RegenWasserstandInProzent","",$PercentFull_Variable);
    update_rrd("RegenwasserHoehe","",$Wasserstand_Variable);
    update_rrd("RegenWasserVolumen","",$Volumen_Variable);
    
    return 0;

    #2
    Sehr schön! Glückwunsch.

    lg

    Stefan

    Kommentar


      #3
      Das Thema "Zisternenfüllstand" steht auch gerade bei mir an.

      Nach langem hin und her habe ich mich für eine Ultraschall Messmethode entschieden.
      folgende Hardware habe ich verbaut:

      - Ultraschall-Entfernungsmesser SRF06
      - 1-Wire Analog Eingang 0-5V/0-10V von eservice-online
      - Das Analog Eingangsmodul hängt an einem eigenen Busmaster am Wiregate

      in dem Analog Eingangsmodul ist auch ein DS2450 verbaut. Deshalb wird wohl auch kein Sensor vom Wiregate erkannt.

      Kann ich mit deinem Plugin auch dieses Modul ins Wiregate einpflegen?

      Wie kann ich ein eigenes Plugin schreiben?

      Kommentar


        #4
        Super interessant - bei mir steht das Thema gerade wegen einer Rigole an.

        Hallo Markus,

        kannst du evtl. eine Aussage zum Preis und der Bezugsmöglichkeit der Sonde machen? Auf der Seite icplan.de finde ich wohl das PDF mit der Beschreibung deiner Sonde, aber ich finde nirgendwo eine Bezugsquelle und einen Preis. Nur auf Anfrage per eMail?

        Ansonsten habe ich ebenfalls Ultraschallsensoren zum testen bestellt - wenn das klappt ist das natürlich eine Alternative. Ich habe nur ein (fast) senkrechtes 100mm Rohr bis zum Boden - evtl. gut, evtl. schlecht. Mal schaun.

        Grüße
        Robert

        Kommentar


          #5
          Zitat von Robert Beitrag anzeigen
          Aussage zum Preis und der Bezugsmöglichkeit der Sonde
          ... das würde mich für meine Zisterne auch interessieren...

          Dank
          Micha

          Kommentar


            #6
            Hallo zusammen

            Die Druckmessung läuft sehr gut und präzise mit +/- 1%. Ich habe lange über eine Ultraschallmessung nachgedacht, aber sie schlussendlich wegen der Anfälligkeit und Ungenauigkeit verworfen.

            Angefügt habe ich noch meine Messungen. Da ich die Sonde drei Mal justiert habe, hat es zwei Spikes auf 0 in der Kurve gegeben. Die Sonde kann man nur bei vollem Tank justieren. Daher musste ich zweimal den Tank nachfüllen bis er voll war. In der Kurve sieht man auch gelegentliche Aussetzer, bei welchen die Abfrage des 1-wire Sensors im Pugin nur 0 liefert. Warum das so ist muss ich noch genauer untersuchen.

            @Clipscouter: Das Plugin kannst du so verwenden. Du musst einfach die GA's, die Sensorenbezeichnungen und die Dimensionen deines Regenwassertanks anpassen. Vorbedingung ist natürlich, dass dein Module die Spannung 0 - 2.5 Volt linear umsetzt und den volt.A Ausgang benützt. Falls du einen liegenden Tank hast, musst du eine Umrechnung vornehmen.

            @Robert: Ich habe folgendes bezahlt:
            73 Euro – 1-Wire Steuermodul
            58 Euro – Drucksonde mit 5 m Anschlusskabel
            12 Euro - Versand per DHL (Schweiz)
            Der Verkäufer ist glaube ich bis Mitte August in den Ferien, aber sonst sehr gut per Email erreichbar.

            Gruss
            Markus
            Angehängte Dateien

            Kommentar


              #7
              Ich habe heute den Code auf neusten Stand gebracht. Dieser ist bei mir seit längerer Zeit im Einsatz und läuft stabil.

              Kommentar


                #8
                Hallo,
                Wie darf man sich das vorstellen?? Ich nehme eine 4-20 mA Druckaufnehmer befestige den am Boden der Zisterne, leer ist dann also kein Druck... Und dann müsste ich eine Refferenzfüllung machen das ich weis wieviel Druck auf den Sensor wirkt.... So richtig oder meint ihr das anders??? Wäre eine günstige Methode....


                Gesendet von meinem iPhone mit Tapatalk

                Kommentar


                  #9
                  Hallo SuperSonic
                  Es braucht natürlich mindestens noch eine Kontrolllogik, welche den Luftdruck misst und berücksichtigt.
                  Gruss, Markus

                  Kommentar


                    #10
                    Hmm... Kennt jemand einen wasserdichten Drucksensor


                    Gesendet von meinem iPhone mit Tapatalk

                    Kommentar


                      #11
                      Wie müsste die Logik dann rechnen??? Zusammen??


                      Gesendet von meinem iPhone mit Tapatalk

                      Kommentar


                        #12
                        Beim Anbieter findest du nähere Angaben zu der eingesetzen Hardware. Ich habe nur das Plugin geschrieben :-)
                        Ich schicke dir noch eine PM mit dem Link.

                        Gruss, Markus

                        Kommentar


                          #13
                          Hallo,

                          ich habe seit neustem auch den Füllstandssensor von Jens Dietrich im Einsatz und versuche mich gerade an Bubo´s Plugin.

                          Leider macht es mir etwas Probleme, da die auf dem KNX-Bus ausgegebenen Werte nicht stimmen. Die ETS gibt z.B. 38,08 statt 6599,68 Liter für den Füllstand aus.

                          Ich habe dann mal mit den auf den Bus geschriebenen Datenpunkttypen herumgespielt:

                          original:
                          Code:
                          knx_write($GA_PercentFull, $PercentFull_Variable, 5);
                          knx_write($GA_Wasserstand, $Wasserstand_Variable, 7);
                          knx_write($GA_Wasservolumen, $Volumen_Variable,7);
                          von mir abgeändert:
                          Code:
                          knx_write($GA_PercentFull, $PercentFull_Variable, 5);
                          knx_write($GA_Wasserstand, floor($Wasserstand_Variable), 9);
                          knx_write($GA_Wasservolumen, floor($Volumen_Variable),9);
                          Im Ergebnis spuckt der Busmonitor der ETS dann den richtigen Wert 6599,68 aus, die Nachkommastellen werde ich allerdings nicht los.

                          Gibt es eine andere Möglichkeit zu runden oder die Werte "formatiert" auf den Bus zu schreiben?

                          Eine Weitere Frage stellt sich mir in dem Zusammenhang ebenfalls als relativer Wiregate-Anfänger: Ich nutze die Cometvisu 0.6.2 und würde den Füllstand gerne grafisch darstellen können, ähnlich den Temperaturwerten. Ein Diagramm-Popup habe ich schon mal testweise angelegt, aber leider bleibt das Diagramm leer. Beim Anlegen des Diagramm-Popups habe ich bei rrd "Regenwasservolumen" eingetragen. Das es so einfach nicht geht, hatte ich allerdings schon gefürchtet ;-)

                          Es wäre schön, wenn der ein oder andere von euch mal einen kleinen Tipp für mich hätte.

                          Schon mal Dank im Voraus

                          Alex

                          Kommentar


                            #14
                            Hallo AES

                            Ich habe folgende Visu 0.8 Konfiguration:

                            HTML-Code:
                                <group name="Regenwasserstand" flavour="antimony">
                                  <layout colspan="9"/>
                                  <diagram_info tooltip="true" title="Regenwasserstand" format="%.0f %" refresh="600" series="month" period="2">
                                    <layout colspan="3"/>
                                    <label>Füllstand</label>
                                    <rrd label="RegenWasserstand" color="red" yaxis="%">RegenWasserstandInProzent</rrd>
                                    <address transform="DPT:5.001" mode="read">6/1/5</address>
                                  </diagram_info>
                                  <diagram_info tooltip="true" title="Regenwasserstand" format="%.0f mm" refresh="600" series="month" period="2">
                                    <layout colspan="3"/>
                                    <label>Höhe</label>
                                    <rrd label="RegenWasserstand" color="red">RegenwasserHoehe</rrd>
                                    <address transform="DPT:7.001" mode="read">6/1/6</address>
                                  </diagram_info>
                                  <diagram_info tooltip="true" title="Regenwasservolumen" format="%.0f Liter" refresh="600" series="month" period="2">
                                    <layout colspan="3"/>
                                    <label>Volumen</label>
                                    <rrd label="RegenWasserstand" color="red">RegenWasserVolumen</rrd>
                                    <address transform="DPT:7.001" mode="read">6/1/7</address>
                                  </diagram_info>
                                </group>
                            Das Plugin habe ich immer noch unverändert im Einsatz. Das Kommando format %.0f rundet auf 0 Stellen.

                            Gruss, Markus

                            Kommentar


                              #15
                              DPT 12 wäre auch eine Möglichkeit.
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X