[Gelöst] Fehler im Code - perl rechnung mit readingsval geht nicht mehr

Begonnen von simonTS, 11 Juni 2016, 00:46:55

Vorheriges Thema - Nächstes Thema

simonTS

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");; \
}
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

franky08

Ins Blaue, auf die Schnelle, mach aus dem ReadingsVal mal ReadingsNum.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

simonTS

... 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.
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

simonTS

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.
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

franky08

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 !!
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

simonTS

#5
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!
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

simonTS

FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

simonTS

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.
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|