21_OWCOUNT rechnet falsch?

Begonnen von Guest, 23 August 2012, 15:59:57

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo Peter,

ich glaub ich hab einen Bug in 21_OWCOUNT.pm gefunden. (Version 2.15)

Da ich immer komische Sprünge in meinen Counter Werten hatte, habe ich mir
im Modul angeschaut, wie die Werte ermittelt werden.

Im Code steht folgendes (in sub OWXCOUNT_GetPage()):

    my $value = ord($data[3])*4096 + ord($data[2])*256 +ord($data[1])*16 +
ord($data[0]);

Nachdem die Counter aber aus 8 Bit Werten zusammengebaut werden, sollte es
doch folgendermaßen heißen:

    my $value = (ord($data[3])<<32) + (ord($data[2])<<16)
+(ord($data[1])<<8) + ord($data[0]);      

Liege ich falsch oder richtig?

VG
Andreas

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Kleiner Nachtrag: Finde die OWX* Module super und möchte mich auf diesem
Wege für die Arbeit bedanken die komplette Palette der 1-wire Komponenten
zu unterstützen.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Ich habe ja hart überlegt, aber es kommt einfach nicht heraus, dass 2^8 =
16 ist...

Sieht also so aus, als ob das tatsächlich ein Bug ist. Der mir natürlich
nicht aufgefallen ist, weil ich das Ding immer mit einer Handtaste getestet
habe - und wer drückt schon mehr als 256 mal auf einen Knopf ???

Sorry, wird gefixt - und danke für den Hinweis.

LG

pah

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Peter,

habe nochmal darüber nachgedacht:

 my $value = (ord($data[3])<<32) + (ord($data[2])<<16) +(ord($data[1])<<8)
+ ord($data[0]);      

ist nicht schlecht, aber

 my $value = (ord($data[3])<<24) + (ord($data[2])<<16) +(ord($data[1])<<8)
+ ord($data[0]);      

ist richtig.

sorry für die Verwirrung

Andy

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

noch eine Kleinigkeit:

in 21_OWCOUNT.pm, version 2.18

in Zeile 363 ff steht:

        $midnight =~ /([\d\.]+)/;
        $midnight = 0.0 if(!(defined($midnight)));

sollte es nicht so (oder ähnlich heissen):

        $midnight =~ /([\d\.]+)/;
        $x = defined ($1) ? $1 : 0.0;

ich habe sonst folgende Meldungen:

Argument "107.500000?^A^BM-?M-^? M-^B}M-^?^BM-^DM-^?M-^?\0\0M-nM-^?..."
isn't numeric in subtraction (-) at
/var/InternerSpeicher/fhem//FHEM/21_OWCOUNT.pm line 371.
Argument "21648.149334 M-?M-^?\0^BM-oM-^?^B^DM-|M-^?^\(oM-~^H\0M-^?..."
isn't numeric in subtraction (-) at
/var/InternerSpeicher/fhem//FHEM/21_OWCOUNT.pm line 371.

Oder liegt das Problem tiefer, da mein midnight Wert nicht sauber ankommt?

Viele Grüße
Andy




--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Erster Punkt: Tja, 16+8 ist tatsächlich 24 ... ich Trottel habe einfach
Deine Codezeile übernommen, statt selbst zu denken ...

Zweiter Punkt: Nö, diese Zeile ist komplett richtig.

Offenbar kommt der $midnight-Wert nicht richtig an - mal sehen, woran das
liegen könnte.

LG

pah

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com