FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: simonTS am 11 Juni 2016, 00:46:55

Titel: [Gelöst] Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: simonTS am 11 Juni 2016, 00:46:55
Hi,

kann mich mal jmd schuppsen... folgender code ging die ganze Zeit, von heute auf morgen aber nicht mehr. Ich finde auch nix im Log. Entweder geht das notify nicht, oder in der Rechnung ist ein Fehler. Da Beides bislang ging finde ich gerade keinen Ansatz.

Im Log steht hin und wieder mal was wie 544 mA isnt numeric, aber wie gesagt, lief ein gutes halbes Jahr ohne Probleme. Seit Anfang Juni gehts nimma :-(

Im Readingsval steht zB 544 mA.
define N_D_hof_zisterne_sensor_us_liter notify hof_zisterne_sensor_us { \
my $r1 = 124.7 - int((ReadingsVal("hof_zisterne_sensor_us","state","Fehler")) / 100 - 4) / 0.03137;; \
my $liter = 3.14159 * 40 * 40 * $r1 / 1000;; \
if ($r1 > 55.2) { $liter = $liter + 800 * 110 * ($r1-55.2) / 1000 };; \
fhem("set D_hof_zisterne_sensor_us_liter $liter");; \
}
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: franky08 am 11 Juni 2016, 01:05:37
Ins Blaue, auf die Schnelle, mach aus dem ReadingsVal mal ReadingsNum.
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: simonTS am 11 Juni 2016, 11:04:37
... leider nicht.

Die letzte aktualisierung war am 4.6., obwohl das notify min. alle H auslöst, respektive der Sensor min. 1x pro Stunde abgefragt wird.

Auch wenn ich "händisch" den Wert des Sensors setzte (set hof_zisterne_sensor_us value 540) ändert sich nix. Notify reagiert quasi nicht auf die änderung.
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: simonTS am 11 Juni 2016, 11:21:06
na super...

scheinbar hab ich irgendow die klammern nicht geschlossen. Zumindest beschwert sich das log entsprechend. Jmd einen Tip wie ich die position des fehlers am besten finde, suche mich seit na stunde zu tode...

2016.06.11 11:03:14 1: PERL WARNING: Argument "540 mA" isn't numeric in int at (eval 3395) line 1.
2016.06.11 11:03:14 3: eval: my $EVTPART0='540';my $TYPE='EIB';my $SELF='N0_hof_zisterne_sensor_us';my $EVTPART1='mA';my $EVENT='540 mA';my $NAME='hof_zisterne_sensor_us';{ if ( int(ReadingsVal("hof_zisterne_sensor_us","state","Fehler")) < 450 ) { fhem("set hof_zisterne_pumpe_anaus on-for-timer 600"); } }
2016.06.11 11:03:14 3: N_D_hof_zisterne_sensor_us_liter return value: Unknown command {, try help.
Unknown command my, try help.
Unknown command \, try help.
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: franky08 am 11 Juni 2016, 11:30:45
Ich baue solche notify, die mehr als zwei Zeilen haben in eine sub, ist übersichtlicher und nicht so fehleranfällig  ;)

define N_D_hof_zisterne_sensor_us_liter notify hof_zisterne_sensor_us {N_D_hof}


sub
N_D_hof

{

my $zival = int((ReadingsVal("hof_zisterne_sensor_us","state","undef") /100) -4) / 0.03137;
my $r1 = 124.7 - $zival;
my $liter = 3.14159 * 40 * 40 * $r1 / 1000;

if ($r1 > 55.2) {
$liter = $liter + 800 * 110 * ($r1-55.2) / 1000
}
fhem "set D_hof_zisterne_sensor_us_liter $liter";

}


NICHT getestet !!
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: simonTS am 11 Juni 2016, 12:01:38
coole Idee! Die kannte ich noch gar nicht. Einfach in die normalen cfg dateien, also zusammen mit den defines einbauen?

Danke Dir, werde ich umsetzen!
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: franky08 am 11 Juni 2016, 12:15:50
define N_D_hof_zisterne_sensor_us_liter notify hof_zisterne_sensor_us {N_D_hof}

Das gehört, in der Webansicht, von FHEM oben in die Kommandozeile, nicht die fhem.cfg editieren!

sub
N_D_hof

{

my $zival = int((ReadingsVal("hof_zisterne_sensor_us","state","undef") /100) -4) / 0.03137;
my $r1 = 124.7 - $zival;
my $liter = 3.14159 * 40 * 40 * $r1 / 1000;

if ($r1 > 55.2) {
$liter = $liter + 800 * 110 * ($r1-55.2) / 1000
}
fhem "set D_hof_zisterne_sensor_us_liter $liter";

}


Das gehört in die 99_myUtils
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: simonTS am 11 Juni 2016, 12:30:07
;-)

habs gerade gemerkt.
Titel: Antw:Fehler im Code - perl rechnung mit readingsval geht nicht mehr
Beitrag von: simonTS am 11 Juni 2016, 12:45:20
Also:

Fehler war wohl in der Zeile
my $liter = (3.14159 * 40 * 40 * $r1 / 1000);; \
Dort war hinter dem \ noch ein (unsichtbarer) [TAB]. Wie immer blöder Fehler.

Danke für die Tipps, Problem gelöst.