Dein Readings "energy_sensors" wird in dem Code so geschrieben:
}elsif($r eq 'nrg'){
my @vtmp=@{$responsedata->{'nrg'}};
$tmpr='KW_charging_measured';
$tmpv=sprintf("%.2f",$vtmp[11]/100*$kW_measured_corr_value);
readingsBulkUpdate($hash,$tmpr,$tmpv);
in den Kommentaren steht unter Verweis auf nrg => energy_sensors was davon, dass da nur das 11. Array Element davon genutzt würde. Da scheint das Readings "KW_charging_measured" das zu sein, was du willst?
dass das Readings energy_sensors auch existiert, liegt an dem direkt danach folgenden code, wo nochmal ein readingsUpdate gemacht wird, was aber im gegensatz zu den Teilen davor nicht überprüft wird:
# test if $r is known at @reading_keys and create reading ...
my %rkeys = map { $_, 1 } @reading_keys;
if( $rkeys{ $r } ){
readingsBulkUpdate($hash,$newreadingname,$v);
}
Der Wert energy_sensors ist offenbar überhaupt nur wegen dem Passus drin. Das wird jedenfalls an der Stelle nicht berücksichtigt, dass es ein Array ist. Das ist so nicht sauber umgesetzt, jedenfalls soweit ich das mal überflogen habe. Wenn du nur das Readings weg haben willst, weil es unsauber ist, kannst du da ja einfach die Zeile mit dem readingsBulkUpdate selbst so ändern:
readingsBulkUpdate($hash,$newreadingname,$v) if ($newreadingname ne "energy_sensors");