Missing right curly or square bracket / reading Group / fhem.cfg ?

Begonnen von rasti, 18 Oktober 2015, 00:27:29

Vorheriges Thema - Nächstes Thema

rasti

Hallo,

ich habe viele derartige Einträge im log mit
2015.10.18 00:23:15 2: Missing right curly or square bracket at (eval 954) line 2, at end of line
syntax error at (eval 954) line 2, at EOF

Ich vermute das kommt von meiner ReadingGroup

define Funkthermostate readingsGroup <%hc_wht_regler>,<Soll>,<Ist>,<Ventil>,<Modus>,<Lock>,<Batterie> \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3 \ <>,<>,<>,<>,<>,<>,<>,<>  \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3 \ <>,<>,<>,<>,<>,<>,<>,<> \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3 \ <>,<>,<>,<>,<>,<>,<>,<> \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3

attr Funkthermostate commands {"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"}
attr Funkthermostate room Temperatur
attr Funkthermostate 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 Funkthermostate valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF','controlMode.auto' =>'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02','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'}

attr Funkthermostate 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);;"'}}}

attr Funkthermostate valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C", "ValvePosition"=>" ".ReadingsVal($DEVICE,$READING,0)." %",  "batteryLevel"=>" Volt"}


Leider finde ich den Fehler nicht, kann evtl. jemand helfen ?

Gruss

Ralf

justme1968

deinem valueFormat fehlen zwei schliessende klammern:attr Funkthermostate 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}}}

ich glaube diese variante wäre übersichtlicher:{ 'ValvePosition' => '{int($VALUE/10)*10}', 'batteryLevel' => '{return 100 if($VALUE>=3); return 75 if($VALUE>=2.7); return 50 if($VALUE>=2.5); return 25 if($VALUE>=2.2); return 0;}' }

gruss
  andre

ps: nicht ins config file eintragen sondern im web frontend bei den attributen eingeben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rasti


rasti

Also nochmals danke, Fehlermeldungen sind weg.
Noch eine Frage, nun wird die Batteriespannung nicht mehr angezeigt, nur noch das Symbol.
Was mache ich da noch falsch ?
(Ich versuche diese Readingsgroup anzupassen :
http://www.fhemwiki.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate )

Gruss

Ralf

justme1968

zeig mal ein list auf die readingsGroup und einen screenshot.

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

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

rasti

Hallo,

anbei der Code und ein Screenshot.

Nicht wundern, dass da nur ein Thermostat und das
gleich 4 mal auftaucht----das ist schon OK so - nur zum Testen....

Gruss

Ralf

##############################################
# Readings Group für Homematic-Thermostate   #
##############################################

define Funkthermostate readingsGroup <%hc_wht_regler>,<Soll>,<Ist>,<Ventil>,<Modus>,<Lock>,<Batterie> \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3 \ <>,<>,<>,<>,<>,<>,<>,<>  \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3 \ <>,<>,<>,<>,<>,<>,<>,<> \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3 \ <>,<>,<>,<>,<>,<>,<>,<> \ HM_3XXX3_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@HM_3XXX3,batteryLevel@HM_3XXX3
attr Funkthermostate alias Individuelle Einstellungen der Funkthermostate
attr Funkthermostate commands {"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"}
attr Funkthermostate room Heizung
attr Funkthermostate 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 Funkthermostate valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF','controlMode.auto' =>'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02','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'}
attr Funkthermostate 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);;"'}}}
attr Funkthermostate valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C", "ValvePosition"=>" ".ReadingsVal($DEVICE,$READING,0)." %",  "batteryLevel"=>" Volt"}

kadettilac89


Ich gehe davon aus, dass du das Problem schon gelöst hast. Bin auf der Suche nach was anderem über deinen Post gestolpert ... Lösung deines Problems ist ganz einfach. Übernimm einfach alles aus dem Beispiel ...

Ich poste hier die Lösung weil es viele Postings zu Readingsgroup gibt aber nur wenige die Lösung derer Probleme.

"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"

und nicht wie du nur Bruchteile ...

"batteryLevel"=>" Volt"

wenn du Volt statt V willst ...
"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." Volt)"

Komplettes Attribut aus der Vorlage:

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)"}