valueicon und Zwischenwerte

Begonnen von Kai-Alfonso, 21 April 2017, 14:55:59

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Hi,

ich habe eine Readingsgroup, wo ich per valueicon die Werte der Geräte in der Group darstellen möchte. Und zwar handelt es sich um HMCCUDEV Geräte (Rollladen), die ein Reading control haben, welcher von 0 bis 100 gehen kann.

Ich habe das für die 10er Stufen bisher so gelöst.

{'control.100' => 'fts_window_2w',
'control.90' => 'fts_shutter_10',
'control.80' => 'fts_shutter_20',
'control.70"' => 'fts_shutter_30',
'control.60' => 'fts_shutter_40',
'control.50' => 'fts_shutter_50',
'control.40' => 'fts_shutter_60',
'control.30' => 'fts_shutter_70',
'control.20' => 'fts_shutter_80',
'control.10' => 'fts_shutter_90',
'control.0' => 'fts_shutter_100'}


Funktioniert auch soweit - nur wie bekomme ich ein Icons für die Zwischenwerte, also zum Beispiel das Icon fts_shutter_30 nicht nur für control = 70, sondern control = 70-79?

Jeden vorkommenden Wert zu erfassen erscheint mir nicht sinnvoll

Vielen Dank schon einmal im vorraus
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

KernSani

spontane Idee, irgendwie sowas
{'fts_shutter_'.sprintf("%i0".$VALUE/10)}
(völlig ungetestet)

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Kai-Alfonso

#2
Zitat von: KernSani am 21 April 2017, 15:24:11
spontane Idee, irgendwie sowas
{'fts_shutter_'.sprintf("%i0".$VALUE/10)}
(völlig ungetestet)

Ah, man lernt hier echt nie aus und oft denke ich mir, das ich überhaupt nicht durchblicke - deswegen fragt ich hier so viel ;-)

Ist auf jedenfall eine coole Lösung - leider noch nicht ganz korrekt.

Als Ergebnis kommt raus:


fts_shutter_0010  statt fts_shutter_0

oder

fts_shutter_007.1 statt fts_shutter_30
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

KernSani

Oh, habe übersehen, dass wir das Ganze noch umdrehen müssen...

{'fts_shutter_'.sprintf("%i0".(100-$VALUE)/10)}

wieso 'ne Kommazahl kommt und diese führenden Nullen, kann ich mir im Augenblick nicht ganz erklären... Habe allerdings gerade kein perl im Zugriff, daher schwer auszuprobieren...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Kai-Alfonso

Kein Problem,

du hast mich trotzdem in die richtige Richtung geschubst und ich hoffe, das ich das auch jetzt (mit Hilfe der sprintf Doku und ein wenig googlen) selber hin bekomme.

Mit deinem zweiten Hinweis kommt jetzt übrigens

fts_shutter_000 und fts_shutter_002.9
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Kai-Alfonso

Ich hab es jetzt erstmal so gelöst

{'control.'.sprintf("%d",($VALUE)) => 'fts_shutter_'.sprintf("%d",(100-$VALUE))}

allerdings weiß ich jetzt immer noch nicht, wie ich auf die nächst höhere oder niedrigere Zehnerstelle umwandel. Vielleicht mit Division und Ergebnis runden und dann wieder multiplikation mit 10?

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

KernSani

Zitat von: Kai-Alfonso am 21 April 2017, 16:04:16
allerdings weiß ich jetzt immer noch nicht, wie ich auf die nächst höhere oder niedrigere Zehnerstelle umwandel. Vielleicht mit Division und Ergebnis runden und dann wieder multiplikation mit 10?
Das war genau das was ich oben versucht habe (durch 10 teilen und eine 0 hinzufügen)...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Kai-Alfonso

Hi,

ich habe es übrigens, dank deines Schubs in die richtige Richtung, hinbekommen

Die Lösung lautet

{'control.'.sprintf("%d",($VALUE)) => 'fts_shutter_'.sprintf("%.0f",((100-$VALUE)/10))*10}

kann man das auch irgendwie als devstateicon im Device nutzen?
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Mr. Flash

Hallo,

ich hatte bei den Icons für einen Dimmer ein ähnliches Problem mit Werten von 0 bis 100, allerdings wollte ich keine 10er-Stufen, und zusätzlich wollte ich auch noch "on", "off", "set_on", "set_off" sowie verschiedene Farben abbilden.

Deshalb habe ich das für "devStateIcon" so gelöst:


attr og.k2.licht devStateIcon (off|0):light_light_dim_00@grey \
(on|100):light_light_dim_100@FFFF00 \
(89|9[0-9]).*:light_light_dim_90@FFFF1A \
(78|79|8[0-8]).*:light_light_dim_80@FFFF33 \
(6[7-9]|7[0-7]).*:light_light_dim_70@FFFF4D \
(5[6-9]|6[0-6]).*:light_light_dim_60@FFFF66 \
(4[5-9]|5[0-5]).*:light_light_dim_50@FFFF80 \
(3[4-9]|4[0-4]).*:light_light_dim_40@FFFF99 \
(2[3-9]|3[0-3]).*:light_light_dim_30@FFFFB3 \
(1[2-9]|2[0-2]).*:light_light_dim_20@FFFFCC \
([0-9]|10|11).*:light_light_dim_10@FFFFE6 \
set_off:light_exclamation@red \
set_on:light_exclamation@red


Vielleicht hilft's weiter.  :)

Grüße,
Nik
RPi 3B+; Buster; FHEM 5.9; S.USV basic; BME280; TSL25911.
HM: CFG-LAN (0.965),CFG-USB-2,CC-RT-DN,Dis-(EP-)WM55,ES-PMSw1-Pl,ES-TX-WM,LC-Dim1T-FM,LC-Sw1-FM,LC-Sw2-FM,MOD-RPI-PCB,OU-CFM-Pl,RC-Dis-H-x-EU,SCI-3-FM,Sec-MDIR-2,-RHS,-SD,-SC-2,-SCo,-Sir-WM,-TiS,-WDS-2,TC-IT-WM-W-EU,WDS10-TH-O,WDS30-OT2-SM

Kai-Alfonso

Zitat von: Mr. Flash am 22 April 2017, 17:50:53

Vielleicht hilft's weiter.  :)

Grüße,
Nik

Hi,

vielen Dank - das hat mir weiter geholfen :-) Hab das für meine Bedürfnisse angepasst und geht auch :-)
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

wk

Ich grabe diesen alten Thread noch einmal aus, da mir die Lösung von Kai-Alfonso gut gefallen hat und so auch funktioniert.
Nachdem ich es so schon einige Zeit benutze, habe ich jetzt bemerkt, dass mir diese Zeile:
{'pct.'.sprintf("%d",($VALUE)) => 'fts_shutter_'.sprintf("%.0f",((100-$VALUE)/10))*10}
die Logdatei mit tausenden von Warnungen vollschreibt.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230562) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230563) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230565) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "shading in" isn't numeric in sprintf at (eval 230566) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 09:28:25" isn't numeric in sprintf at (eval 230567) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "gone" isn't numeric in sprintf at (eval 230570) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230571) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230572) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230574) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "manual" isn't numeric in sprintf at (eval 230575) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 09:09:08" isn't numeric in sprintf at (eval 230576) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "home" isn't numeric in sprintf at (eval 230579) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230580) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230581) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230583) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "shading in" isn't numeric in sprintf at (eval 230584) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 12:47:38" isn't numeric in sprintf at (eval 230585) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230588) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230589) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230591) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "shading in" isn't numeric in sprintf at (eval 230592) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 12:47:37" isn't numeric in sprintf at (eval 230593) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230596) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230597) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230599) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "manual" isn't numeric in sprintf at (eval 230600) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-12 19:43:13" isn't numeric in sprintf at (eval 230601) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "home" isn't numeric in sprintf at (eval 230604) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230605) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230606) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230608) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "manual" isn't numeric in sprintf at (eval 230609) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 13:00:28" isn't numeric in sprintf at (eval 230610) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "home" isn't numeric in sprintf at (eval 230613) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230614) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230615) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230617) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "shading in" isn't numeric in sprintf at (eval 230618) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 13:57:27" isn't numeric in sprintf at (eval 230619) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230622) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230623) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230625) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "manual" isn't numeric in sprintf at (eval 230626) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 06:15:34" isn't numeric in sprintf at (eval 230627) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "home" isn't numeric in sprintf at (eval 230630) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230631) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230632) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230634) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "manual" isn't numeric in sprintf at (eval 230635) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 14:19:47" isn't numeric in sprintf at (eval 230636) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230639) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230640) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230642) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "shading in" isn't numeric in sprintf at (eval 230643) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 13:57:31" isn't numeric in sprintf at (eval 230644) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230647) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230648) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230650) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "shading in" isn't numeric in sprintf at (eval 230651) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 13:57:31" isn't numeric in sprintf at (eval 230652) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230655) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230656) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230658) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "day open" isn't numeric in sprintf at (eval 230659) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 06:59:15" isn't numeric in sprintf at (eval 230660) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230663) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "true" isn't numeric in sprintf at (eval 230664) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "on" isn't numeric in sprintf at (eval 230666) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "day open" isn't numeric in sprintf at (eval 230667) line 1.
2020.08.15 14:32:00 1: PERL WARNING: Argument "2020-08-15 06:59:16" isn't numeric in sprintf at (eval 230668) line 1.


Der Schließgrad meiner Rollos wird von meinem Modul im 'pct' ausgegeben.

Kann man den Befehl anders schreiben, dass er keine Warnungen auswirft oder das Schreiben ind das fhem.log verhindern?