1-Wire OWX Update 6.1.2013

Begonnen von Prof. Dr. Peter Henning, 06 Januar 2013, 21:13:59

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Hallo Liste,

neue Version (Revision 2444, Interne Versionsnummer 3.05) von OWX und den zugehörigen Device-Modulen eingespielt. Keine wesentlichen Änderungen, nur Verbesserungen in Details.

Hinweis für die Nutzer von OWCOUNT: Die Ratenberechnung funktioniert korrekt, habe ich getestet. Definition eines passenden Logfiles z.B. mit

define <Logname> FileLog <dateiname> <devicename>.*/.*  

Der Schrägstrich ist neu, trennt in der Ausgabe von {state} den Zählwert von der Zählrate, diese war bisher in ()-Klammern gesetzt. Für Plotfiles: Zählwert steht in der 4. und 10., Zählrate in der 7. und 13. Spalte. Es ist grundsätzlich möglich, die Ausgabe des {state} komplett selbst zu formatieren, sie dazu die entsprechenden Anleitungen.

LG

pah

Prof. Dr. Peter Henning

Hatte im Timing etwas verschlimmbessert, für 00_OWX.pm bitte Revision 2445 nehmen.

LG

pah

UweH

Hallo Peter,

ich bin offenbar wieder der Soonderfall...keine Ratenberechnung...


(siehe Anhang / see attachement)

Alexander Bauer

Hallo Uwe,

welche Geräte sind zum Messen des Gas und Wasserverbrauchs an den 1-Wire Bus angeschlossen?
--

Fhem auf Cubietruck mit Debian Wheezy und Homematic und 1-Wire

Prof. Dr. Peter Henning

Kommentiere doch mal in Zeilen 435 - 440 wie folgt aus

   #-- rate
   #    if( ($delt > 0.0) && $present ){
          $vrate  = int( ($vval-$oldval)/$delt*1000)/1000;
   #     } else {
   #       $vrate = 0.0;
   #     }

LG

pah

UweH

Hab ich gemacht und reload...ändert nichts...bzw. sollte ich was sehen können?

UweH

Hallo Amatic,

den Wasserzähler taste ich mit einem "Lasermodul" ab, im Prinzip eine Reflexionslichtschranke mit Laserstrahl. Ein normaler Lichtstrahl würde durch das Glas gestreut werden. Der Gaszähler hat einen Reedkontakt, das war einfach ;-) Trotzdem habe ich vor den Counter einen Impulsgeber geschaltet, der speziell den Reedkontakt entprellt und die Stromversorgung des Lasermoduls übernimmt.
Den Stromzähler hatte ich auch mal so abgetastet, jetzt habe ich aber einen Zähler mit S0-Schnittstelle, die kann man direkt an den Counter anschließen.
Auf diesem Bild hier ist noch die fliegende Testverdrahtung der beiden Platinen zu sehen... :)

(siehe Anhang / see attachement)

Hier das Lasermodul und der damit ausgerüstete Wasserzähler.

(siehe Anhang / see attachement)

(siehe Anhang / see attachement)

Prof. Dr. Peter Henning

Eigentlich schon - denn jetzt werden immer die Differenzen der Zählwerte genommen, und die sollten von Null verschieden sein.

Bitte mal vor Zeile 435 einbauen

Log 1,"vval=$vval oldval=$oldval delt=$delt";

LG

pah

UweH

Sieht dann so aus:

[code]]2013.01.07 22:22:19 1: vval=32673.07 oldval=32673.07 delt=30
2013.01.07 22:22:19 1: vval=6011.503 oldval=6011.503 delt=30
2013.01.07 22:22:20 1: vval=12.142 oldval=12.142 delt=30
2013.01.07 22:22:20 1: vval=2010.243 oldval=2010.236 delt=30
2013.01.07 22:22:49 1: vval=32673.07 oldval=32673.07 delt=30
2013.01.07 22:22:49 1: vval=6011.503 oldval=6011.503 delt=30
2013.01.07 22:22:50 1: vval=12.142 oldval=12.142 delt=30
2013.01.07 22:22:50 1: vval=2010.251 oldval=2010.243 delt=30
2013.01.07 22:23:19 1: vval=32673.07 oldval=32673.07 delt=30
2013.01.07 22:23:19 1: vval=6011.503 oldval=6011.503 delt=30
2013.01.07 22:23:20 1: vval=12.142 oldval=12.142 delt=30
2013.01.07 22:23:20 1: vval=2010.258 oldval=2010.251 delt=30
[/code

Prof. Dr. Peter Henning

Zitat von: UweH schrieb am Mo, 07 Januar 2013 22:272013.01.07 22:22:20 1: vval=2010.243 oldval=2010.236 delt=30

2013.01.07 22:22:50 1: vval=2010.251 oldval=2010.243 delt=30

2013.01.07 22:23:20 1: vval=2010.258 oldval=2010.251 delt=30
[/code

Hier tut sich doch etwas: Die Werte weichen um 0.007 voneinander ab - und bei Division durch 30 ergibt sich eine Rate von 0.0002. Die dann in Zeile 337 auf 3 Nachkommastellen (und damit Null) gerundet wird...

Damit ist gezeigt, dass generell die Raten schon berechnet werden - nur sehr geringe Werte dabei herauskommen. $delt sollte die Messperiode in Sekunden sein, also hier: 30 Sekunden. Jetzt nehme ich an, dass Du Deine Faktoren so gewählt hast, dass die 2010 Kilowattstunden sind. Dann wären also 0.007 Kilowattstunden in 30 Sekunden eine Leistung von 840 W oder 0,84 kW.

Das wird in Zeilen 441-446 auch perfekt korrigiert. Leider, leider aber ist die gerundete Null multipliziert mit 3600 immer noch Null :-((

Mit anderen Worten: Du hast hier einen echten Fehler gefunden, die Rundung gehört nach die Korrektur ! Mir war das bisher nicht aufgefallen, weil ich im Test das Ding immer mit dem Zählintervall Sekunde laufen lasse.

Der langen Rede kurzer Sinn: ersetze die bisherigen Zeilen 335 - 446 durch folgenden Code:

        #-- rate
        if( ($delt > 0.0) && $present ){
          $vrate  = ($vval-$oldval)/$delt;
        } else {
          $vrate = 0.0;
        }
        #-- correct rate for period setting
        if(  $period eq "hour" ){
          $vrate*=3600;
        }elsif( $period eq "minute" ){
          $vrate*=60;
        }    
        $vrate = int($vrate * 1000)/1000;  

Wird heute noch eingecheckt.

LG

pah

UweH

Zitat von: Prof. Dr. Peter Henning schrieb am Di, 08 Januar 2013 13:57Du hast hier einen echten Fehler gefunden
Naja...eher so: Ein blindes Huhn ist gestolpert...

Tja, das war's, funktioniert :-)

Danke und Gruß
Uwe