Länge von Readings ermitteln

Begonnen von mähschaf, 10 Februar 2020, 23:05:19

Vorheriges Thema - Nächstes Thema

mähschaf

Hallo und guten Abend liebe FHEMler,

erst einmal lieben Dank an alle für die tolle Software!

Ich habe gerade die Diskussion https://forum.fhem.de/index.php?topic=106528.0 über die Begrenzung der Länge von Readings in FHEM 6.0 gelesen.

Da ich mich gefragt habe, ob mich das ggf. betreffen würde, wenn es realisiert werden sollte, habe ich mir ein kleines Script gebastelt (für Linux bash).

MAXIMUM=0
MAXREADINGNAME=""
MAXDEVICE=""
COUNT=0

while read device
do
        set $device
        DEVICENAME=$1
        shift
        for reading in $@
        do
                (( COUNT++ ))
                readingname=${reading%%=*}
                if [ ${#readingname} -gt $MAXIMUM ]
                then
                        MAXIMUM=${#readingname}
                        MAXREADINGNAME=$readingname
                        MAXDEVICE=$DEVICENAME
                fi
        done
done << EOF
$(perl /opt/fhem/fhem.pl 7072 'list .* READINGS')
EOF

echo "$COUNT Readings, längstes Reading mit $MAXIMUM Zeichen: $MAXREADINGNAME in Device $MAXDEVICE"


Das Ergebnis sieht bei mir so aus:

pi@fhem ~/scripte $ ./fhem_readings.x
2649 Readings, längstes Reading mit 37 Zeichen: e_MQTT2_tasmota001_AM2301_Temperature in Device df_dht22_tasmota001


Ist bestimmt nicht schöner Code (bin was müde), funktioniert aber. Wer's nicht mag, bitte ignorieren oder verbessern. Schönen Abend!
Martin

rudolfkoenig

Knobeln zum Einschlafen :)
Mit perl/FHEM geht das auch:fhem> { my ($r,$l,$c)=("",0,0);; map { my $d=$_;; map { $c++;; $l=length($_),$r="$_ in $d" if(length($_)>$l)} keys %{$defs{$d}{READINGS}}  } keys %defs;; "#readings $c, longest with $l is $r" }
#readings 769, longest with 38 is configRelay1ResponseToTemperatureAlarm in EingangsLampe

Icinger

#readings 11170, longest with 46 is R-CUL_HM_HM_RC_4_B_18E3CC_Btn_02-shOffTimeMode in HR_Hutschiene4fach_Sw_02
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho