Batteriestand prozentual statt ok/bad.

Begonnen von moemoe, 26 September 2014, 12:28:14

Vorheriges Thema - Nächstes Thema

hexenmeister

Habe neue Version aus dem SVN geholt (# $Id: 33_readingsGroup.pm 7403 2015-01-02 10:55:09Z justme1968 $)
Leider habe ich immer noch das gleiche Problem.
Habe zum Testen ein Dummi angelegt und die notwendigen Readings gesetzt:
fhem> l test
Internals:
   NAME       test
   NR         1110
   STATE      ???
   TYPE       dummy
   Readings:
     2015-01-01 23:34:30   R-globalBtnLock on
     2015-01-01 23:32:48   ValvePosition   7
     2015-01-01 23:34:11   batteryLevel    3.0
     2015-01-01 23:34:49   controlMode     boost
     2015-01-01 23:35:34   desired-temp    30.0
     2015-01-01 23:41:29   humidity        0
     2015-01-01 23:35:23   measured-temp   18.0
Attributes:


Im ReadingsGroup habe ich entsprechend eine Zeile ergänzt:
test:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock,batteryLevel

Es wird leider Zahl 7 angezeigt. valueFormat wird wohl immer noch nicht korrekt ausgewertet :(
Leerzeichen sind im Reading nicht drin.

Grüße,

Alexander

Wuppi68

Habe auch einmal meine Heizung verwurstet ...

dargestellt wurden: Wandthermostat (Alt und Neu); alter Stellentrieb (letzte Zeile); neue Stellthermostate (Standalone als auch Autonom); Fensterkontakte

(http://forum.fhem.de/index.php?action=dlattach;topic=27399.0;attach=24204)

meine Definition sieht folgendermaßen aus:

DEF
<%sani_heating>,<Soll>,<Soll neu>,<Ist>,<Ventil / RH>,<Modus>,<G-Lock>,<B-Lock>,<Bat>,<Fenster>
hm.thermo.5.climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@hm.thermo.5,R-btnLock@hm.thermo.5,batteryLevel@hm.thermo.5,state@hm.sec.1
hm.thermo.6.clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.6,R-btnLock@hm.thermo.6,batteryLevel@hm.thermo.6,<>
hm.thermo.7.clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.7,R-btnLock@hm.thermo.7,batteryLevel@hm.thermo.7,<>
hm.thermo.4.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.4,R-btnLock@hm.thermo.4,batteryLevel@hm.thermo.4,state@hm.sec.3
hm.thermo.10.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.10,R-btnLock@hm.thermo.10,batteryLevel@hm.thermo.10,state@hm.sec.6
hm.thermo.9.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.9,R-btnLock@hm.thermo.9,batteryLevel@hm.thermo.9,state@hm.sec.5
hm.thermo.1.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.1,R-btnLock@hm.thermo.1,batteryLevel@hm.thermo.1,<>
hm.thermo.2.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.2,R-btnLock@hm.thermo.2,batteryLevel@hm.thermo.2,<>
hm.thermo.8.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.8,R-btnLock@hm.thermo.8,batteryLevel@hm.thermo.8,state@hm.sec.4
hm.thermo.3.climate:desired-temp,<sollsetz>,measured-temp@hm.thermo.3,humidity@hm.thermo.3,controlMode@hm.thermo.3,<>,R-btnLock@hm.thermo.3,<>,<>
hm.stellantrieb.2:ValveDesired,<>,<>,ValvePosition@hm.stellantrieb.2,<>,<>,<>,battery@hm.stellantrieb.2,<>


Attribute:

commands
{ 'HeizungInfo.sollsetz'=>'desired-temp:5.0,12.0,17.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0', "controlMode.manual"=>"set %DEVICE controlMode auto","controlMode.auto"=>"set %DEVICE controlMode manual", "R-globalBtnLock.on"=>"set %DEVICE regSet globalBtnLock off", "R-globalBtnLock.off"=>"set %DEVICE regSet globalBtnLock on", "R-btnLock.on"=>"set %DEVICE regSet btnLock off", "R-btnLock.off"=>"set %DEVICE regSet btnLock on"}
mapping
{'hm.thermo.1.clima'=>"Dusche",'hm.thermo.2.clima'=>"Badezimmer",'hm.thermo.3.climate'=>"Keller",'hm.thermo.4.clima'=>"Küche",'hm.thermo.5.climate'=>"Wohnzimmer",'hm.thermo.6.clima'=>" Regler Fenster",'hm.thermo.7.clima'=>" Regler Tür",'hm.thermo.8.clima'=>"Schlafzimmer",'hm.thermo.9.clima'=>"Arbeit Mitte",'hm.thermo.10.clima'=>"Arbeit Links",'hm.stellantrieb.2'=>"Regler Keller",'desired-temp'=> ""}
valueFormat
{if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10} elsif($READING eq "batteryLevel"){if($VALUE>=3){$VALUE=100} elsif($VALUE>=2.7){$VALUE=75}elsif($VALUE>=2.5){$VALUE=50}elsif($VALUE>=2.2){$VALUE=25} else{$VALUE=0}}}
valueIcon
{'controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', 'R-btnLock.on'=>'secur_locked@F7301D', 'R-btnLock.off'=>'secur_open@0CFB0C', 'R-globalBtnLock.on'=>'secur_locked@F7301D', 'R-globalBtnLock.off'=>'secur_open@0CFB0C','ValvePosition.0' => 'sani_heating_level_0@002AE0', 'ValvePosition.10' => 'sani_heating_level_10@F8D53D','ValvePosition.20' => 'sani_heating_level_20@FF9341', 'ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C', 'ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D', 'ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619', 'ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005', 'batteryLevel.100'=>'measure_battery_100@0CFB0C','batteryLevel.75'=>'measure_battery_75@42BC0A', 'batteryLevel.50'=>'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909', 'batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass', 'controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass', 'R-globalBtnLock.set_on' => 'hourglass','R-globalBtnLock.set_off' => 'hourglass', 'R-btnLock.set_on' => 'hourglass','R-btnLock.set_off' => 'hourglass','state.closed' => 'fts_window_1w','state.open'=>'fts_window_1w_open@F7301D'}
valueStyle
{if($READING eq "measured-temp") {my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);; if($t-$d>=1){'style="color:rgb(251,63,11);;"'}elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'} else{'style="color:rgb(12,251,12);;"'}}}
valueSuffix
{"desired-temp"=>" °C", "measured-temp"=>" °C", "ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)", "humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH", "batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}
FHEM unter Proxmox als VM

justme1968

sorry. habe es jetzt richtig gefixed...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Saar1974

@justme1968: Vielen Dank für deine Hinweise. Die von dir vorgeschlagene Vorgehensweise, zu prüfen ob in einem Raum neben dem HM-CC-RT-DN zusätzlich ein HM-TC-IT-WM-W-EU existiert, habe ich zwar nicht hinbekommen, stattdessen habe ich es vorerst über eine alias-Abfrage realisiert: In den Räumen in den sowohl HM-CC-RT-DN als auch HM-TC-IT-WM-W-EU installiert sind, gebe ich dem HM-CC-RT-DN alias den String 'Regler' mit an. Anhand diesem Kriterium erfolgt dann die Ausblendung des Pull-Down-Dialogs.

define heatingInfo readingsGroup <%sani_heating@green>,<Ist>,<Soll>,<Soll neu>,<Ventil/RH>,<Modus>,<Lock>,<Batterie>,<Kommando>,<> \
(CUL_HM_|)HM_(CC_RT_DN_......_Clima|TC_IT_WM_W_EU_......_Climate):measured-temp,desired-temp,<{if(($DEVICE=~/HM_CC_RT_DN/)&&(AttrVal($DEVICE,"alias","none")=~/Regler/)){"&nbsp"}else{"sollsetz"}}>,humidity,ValvePosition,controlMode,R-btnLock@{rg($DEVICE."§device")},batteryLevel@{rg($DEVICE."§device")},state@{rg($DEVICE."§device")},<%getConfig> \
<>,<>,<>,<>,<>,<>,<>,<>
attr heatingInfo cellStyle {"r:1"=>'style="font-weight:bold;;font-size:16px;;color:yellow"',"c:0"=>'style="font-weight:bold"',"c:1"=>'style="font-weight:bold"',"c:9"=>'style="font-weight:bold"'}
attr heatingInfo commands {'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE R-btnLock','heatingInfo.getConfig' => 'set $DEVICE getConfig','heatingInfo.sollsetz'=>'desired-temp:5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0'}
attr heatingInfo mapping {'desired-temp' => ''}
attr heatingInfo room 01_Übersicht
attr heatingInfo sortDevices 1
attr heatingInfo valueFormat {if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10}elsif($READING eq "batteryLevel"){if($VALUE>=3){$VALUE=100}elsif($VALUE>=2.7){$VALUE=75}elsif($VALUE>=2.5){$VALUE=50}elsif($VALUE>=2.2){$VALUE=25}else{$VALUE=0}}}
attr heatingInfo valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', 'R-btnLock.on'=>'secur_locked@F7301D', 'R-btnLock.off'=>'secur_open@0CFB0C', 'ValvePosition.0' => 'sani_heating_level_0@002AE0', 'ValvePosition.10' => 'sani_heating_level_10@F8D53D', 'ValvePosition.20' => 'sani_heating_level_20@FF9341','ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C','ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D','ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619','ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005','batteryLevel.100' => 'measure_battery_100@0CFB0C','batteryLevel.75' => 'measure_battery_75@42BC0A','batteryLevel.50' => 'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909','batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass','controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass','R-btnLock.set_on' => 'hourglass','R-btnLock.set_off' => 'hourglass'}
attr heatingInfo valueStyle {if($READING eq "measured-temp"){my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);;if($t-$d>=1){'style="color:rgb(251,63,11);;"'}elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'}else{'style="color:rgb(12,251,12);;"'}}elsif($VALUE ~~ /CMDs_pending/ || $VALUE ~~ /CMDs_processing/ || $VALUE ~~ /TIMEOUT/){'style="color:Yellow"'}}
attr heatingInfo valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C","ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)","humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH","batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}

define ntfy_rg notify ntfy_rg {rg($EVENT)}


99_myUtils.pm

(Hinweis: HM-CC-RT-DN Firmware 1.4, Änderung bei 'btnLock'  )

sub rg($){
  my @input    = split(/[§\s]+/,shift);
  my $device   = $input[0];
  my $function = $input[1];

if($function eq "device"){
  return InternalVal($device,"device","device error");
}
elsif($function eq "controlMode"){
  my $controlMode = ReadingsVal($device,"controlMode","controlMode error");

  if($controlMode =~ /manual/)
    {fhem("set $device controlMode auto")}
  elsif($controlMode =~ /auto/)
    {fhem("set $device controlMode manual")}
}
elsif($function eq "R-btnLock"){
  my $btnLock = ReadingsVal($device,"R-btnLock","btnLock error");
 
  if($btnLock =~ /off/){
    {fhem("set $device regSet btnLock on")};
    {fhem ("set $device getConfig")}
  }
  elsif($btnLock =~ /on/){
    {fhem("set $device regSet btnLock off")};
    {fhem ("set $device getConfig")}
  };
}
elsif($function eq "state"){
  my $state = Value($device);

  if($state =~ /off/){
    {fhem("set $device on")}
  }
  elsif($state =~ /on/){
    {fhem("set $device off")}
  }
}
}

hexenmeister


kvo1

Zitat von: hexenmeister am 02 Januar 2015, 22:40:42
Vielen Dank! Funktioniert :)

Hallo Alex,
ich glaube Deine Farbzuordnung klappt nicht so ganz (s.Bild)

gruss
klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

hexenmeister

Wieso, was passt denn nicht?
Die verschiedenen Farben bei Batterie und Regler sollten Verlauf darstellen von Grün zu Rot bzw. von Blau zu Rot. Die Einzelfarben kann man bestimmt noch optimieren, habe nur mal schnell ausgewählt.

Grüße,

Alexander

hexenmeister

Habe gerade festgestellt, dass folgende Definition FHEM komplett und sofort abstürzen lässt:

<%heizung>,<>,<Batterie>,<>,<Ventil>,<>,<Modus>,<>,<Auto On>,<>,<Manu On>,<>,<Ist-Temp.>,<>,<Soll-Temp.>
^(?!FileLog).*._Clima:,<>,batteryLevel@{InternalVal($DEVICE,'device',undef)},<>,ValvePosition,<>,controlMode,<>,<%sani_heating_automatic>,<>,<%sani_heating_manual>,<>,measured-temp,<>,<sollsetz>


Unmatched ( in regex; marked by <-- HERE in m/^batteryLevel@{InternalVal( <-- HERE $DEVICE$/ at ./FHEM/33_readingsGroup.pm line 1006.




justme1968

bitte bau mal in zeile 1005 ein log auf $regex ein. da geht beim parsen der zeile etwas schief.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hexenmeister

Komma ist wohl ein Problem... Die Expression wird anscheinend nicht als Ganzes erkannt.

habe Log eingbaut: Log3 $hash->{NAME}, 3, $hash->{NAME} .": ". "---------> REGEX --->".$regex."<---";
Hier ist die Ausgabe:
2015.01.04 15:24:33.834 3: RG_FAULT: ---------> REGEX ---><---
2015.01.04 15:24:33.835 3: RG_FAULT: ---------> REGEX --->batteryLevel@{InternalVal($DEVICE<---


Und auf Err wieder:
Unmatched ( in regex; marked by <-- HERE in m/^batteryLevel@{InternalVal( <-- HERE $DEVICE$/ at ./FHEM/33_readingsGroup.pm line 1006.



justme1968

ein komma darf eigentlich in der liste der readings ausser zum trennen der readings selber gar nicht vorkommen. für die <> ausdrücke kann ich das erkennen und halbwegs automatisch reparieren.

ich muss mal schauen on ich das für die @{...} version auch hin bekomme.

ansonsten statt InternalVal erst mal eine eigene sub aufrufen die nur das DEVICE übergeben bekommt und so ohne komma auskommt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

kvo1

Zitat von: hexenmeister am 04 Januar 2015, 12:54:12
Wieso, was passt denn nicht?
Die verschiedenen Farben bei Batterie und Regler sollten Verlauf darstellen von Grün zu Rot bzw. von Blau zu Rot. Die Einzelfarben kann man bestimmt noch optimieren, habe nur mal schnell ausgewählt.

Grüße,

Alexander

Hallo Alexander,
die Farben bei Batterie und Regler meinte ich auch nicht , sondern bei "Ist"
15,9 ist blau ... okay
19,5 ist rot  aber dafür ist dann 21,8 grün ?

Oder habe ich einen Denkfehler ?
Gruss
Klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

justme1968

war doch einfacher als gedacht. hab es eben eingecheckt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hexenmeister

Zitat von: kvo1 am 04 Januar 2015, 16:20:27
15,9 ist blau ... okay
19,5 ist rot  aber dafür ist dann 21,8 grün ?
Ich habe das so realisiert, dass die Farben die ABweichung von Soll darstellen, Grün: +/- 1 Grad, Blau: mehr als 1 Grad niedriger als Soll, Rot: 1 Grad mehr als Soll.

hexenmeister

Zitat von: justme1968 am 04 Januar 2015, 16:29:52
war doch einfacher als gedacht. hab es eben eingecheckt.

Funktioniert :)
Vielen Dank!