[gelöst] Umsetzung Codebeispiel: Symbole nicht gefunden / seltsame Anzeige

Begonnen von McCavity, 09 Januar 2015, 22:21:43

Vorheriges Thema - Nächstes Thema

McCavity

Hi,

mein FHEM wächst und gedeiht und mit den Codebeispielen aus dem Wiki bekomme ich auch vieles hin - aber jetzt bin ich (mal wieder) an eine Stelle gestoßen, an der ich nicht weiterkomme.

Ich versuche, mein Dashboard einzurichten, so daß ich verschiedene Dinge schnell erreiche und steuern kann. Das funktioniert auch so weit, ich habe schon eine ganze Menge Anzeigen und Steuerungen hinbekommen. Aktuell versuche ich mich an einer Heizungssteuerung nach dem Beispiel aus dem Wiki "Heizungsteuerung für HM Wand- und Heizkörperthermostate".

Ich habe es auch schon einigermaßen hinbekommen (siehe Screenshot im Anhang), aber mit den zwei letzten Problemen komme ich allein nicht zurecht:

  • Vor dem Drop Down Menü von "sollsetz" erscheint noch einmal der Raumname (oder der in den Mappings definierte Alias) - mir ist völlig schleierhaft, wie ich den da hinbekommen habe, im Beispiel taucht das so nicht auf
  • Die Symbole "sani_heating_level_*" und "humidity" werden nicht gefunden - können sie auch nicht, im Filesystem meiner FHEM Installation (Raspberry Pi mit FHEM 5.6, nach Standard installiert in /opt/fhem, letzter Update kurz vor Weihnachten) sind sie nicht vorhanden. Wo bekomme ich die ggf. her?

Ich habe schon im Forum (und im allgemeinen Netz) gesucht, aber nichts gefunden, das mir hier hätte weiteerhelfen können. Als Glaskugel-Ersatz hier noch einige Ausschnitte aus meiner fhem.cfg:

Definition eines Wandthermostaten und dazugehörigen Stellantriebes:

### Heizungssteuerung Studio
define Studio.Stellantrieb CUL_HM 2C927F
attr Studio.Stellantrieb IODev HMLAN1
attr Studio.Stellantrieb actCycle 000:10
attr Studio.Stellantrieb actStatus alive
attr Studio.Stellantrieb autoReadReg 4_reqStatus
attr Studio.Stellantrieb expert 2_full
attr Studio.Stellantrieb firmware 1.3
attr Studio.Stellantrieb model HM-CC-RT-DN
attr Studio.Stellantrieb room Studio
attr Studio.Stellantrieb serialNr LEQ0784892
attr Studio.Stellantrieb subType thermostat
attr Studio.Stellantrieb webCmd getConfig:clear msgEvents:burstXmit
define FileLog_Studio.Stellantrieb FileLog ./log/Studio.Stellantrieb-%Y.log Studio.Stellantrieb
attr FileLog_Studio.Stellantrieb logtype text
attr FileLog_Studio.Stellantrieb room Studio
define Studio.Stellantrieb_Weather CUL_HM 2C927F01
attr Studio.Stellantrieb_Weather model HM-CC-RT-DN
attr Studio.Stellantrieb_Weather peerIDs 00000000,
attr Studio.Stellantrieb_Weather room Studio
define Studio.Stellantrieb_Climate CUL_HM 2C927F02
attr Studio.Stellantrieb_Climate model HM-CC-RT-DN
attr Studio.Stellantrieb_Climate peerIDs 00000000,303D5B02,
attr Studio.Stellantrieb_Climate room Studio
define Studio.Stellantrieb_WindowRec CUL_HM 2C927F03
attr Studio.Stellantrieb_WindowRec model HM-CC-RT-DN
attr Studio.Stellantrieb_WindowRec peerIDs 00000000,
attr Studio.Stellantrieb_WindowRec room Studio
attr Studio.Stellantrieb_WindowRec stateFormat last:trigLast
define Studio.Stellantrieb_Clima CUL_HM 2C927F04
attr Studio.Stellantrieb_Clima model HM-CC-RT-DN
attr Studio.Stellantrieb_Clima peerIDs 00000000,
attr Studio.Stellantrieb_Clima room Studio
define Studio.Stellantrieb_ClimaTeam CUL_HM 2C927F05
attr Studio.Stellantrieb_ClimaTeam model HM-CC-RT-DN
attr Studio.Stellantrieb_ClimaTeam peerIDs 00000000,
attr Studio.Stellantrieb_ClimaTeam room Studio
define Studio.Stellantrieb_remote CUL_HM 2C927F06
attr Studio.Stellantrieb_remote model HM-CC-RT-DN
attr Studio.Stellantrieb_remote peerIDs 00000000,
attr Studio.Stellantrieb_remote room Studio
define Studio.Thermostat CUL_HM 303D5B
attr Studio.Thermostat IODev HMLAN1
attr Studio.Thermostat actCycle 000:10
attr Studio.Thermostat actStatus alive
attr Studio.Thermostat autoReadReg 4_reqStatus
attr Studio.Thermostat expert 2_full
attr Studio.Thermostat firmware 1.1
attr Studio.Thermostat model HM-TC-IT-WM-W-EU
attr Studio.Thermostat msgRepeat 1
attr Studio.Thermostat room Studio
attr Studio.Thermostat serialNr LEQ1214811
attr Studio.Thermostat subType thermostat
attr Studio.Thermostat webCmd getConfig:clear msgEvents
define FileLog_Studio.Thermostat FileLog ./log/Studio.Thermostat-%Y.log Studio.Thermostat
attr FileLog_Studio.Thermostat logtype text
attr FileLog_Studio.Thermostat room Studio
define Studio.Thermostat_Weather CUL_HM 303D5B01
attr Studio.Thermostat_Weather model HM-TC-IT-WM-W-EU
attr Studio.Thermostat_Weather peerIDs 00000000,
attr Studio.Thermostat_Weather room Studio
define Studio.Thermostat_Climate CUL_HM 303D5B02
attr Studio.Thermostat_Climate model HM-TC-IT-WM-W-EU
attr Studio.Thermostat_Climate peerIDs 00000000,2C927F02,
attr Studio.Thermostat_Climate room Studio
define Studio.Thermostat_WindowRec CUL_HM 303D5B03
attr Studio.Thermostat_WindowRec model HM-TC-IT-WM-W-EU
attr Studio.Thermostat_WindowRec peerIDs 00000000,
attr Studio.Thermostat_WindowRec room Studio
attr Studio.Thermostat_WindowRec stateFormat last:trigLast
define Studio.Thermostat_remote CUL_HM 303D5B06
attr Studio.Thermostat_remote model HM-TC-IT-WM-W-EU
attr Studio.Thermostat_remote peerIDs 00000000,
attr Studio.Thermostat_remote room Studio
define Studio.Thermostat_SwitchTr CUL_HM 303D5B07
attr Studio.Thermostat_SwitchTr model HM-TC-IT-WM-W-EU
attr Studio.Thermostat_SwitchTr peerIDs 00000000,
attr Studio.Thermostat_SwitchTr room Studio


Die Definition der Readingsgroup:

define rg_heatingInfo readingsGroup <%sani_heating>,<Soll>,<Soll neu>,<Ist>,<Ventil / RH>,<Modus>,<Lock>,<Bat> Marc.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Marc.Thermostat,batteryLevel@Marc.Thermostat Marc.Stellantrieb_Clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Marc.Stellantrieb,batteryLevel@Marc.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> Marcel.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Marcel.Thermostat,batteryLevel@Marcel.Thermostat Marcel.Stellantrieb_Clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Marcel.Stellantrieb,batteryLevel@Marcel.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> Studio.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Studio.Thermostat,batteryLevel@Studio.Thermostat Studio.Stellantrieb_Clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Studio.Stellantrieb,batteryLevel@Studio.Stellantrieb
attr rg_heatingInfo alias Heizung
attr rg_heatingInfo group Heizung
attr rg_heatingInfo cellStyle { "r:1"=>'style="font-weight:bold;;font-size:16px"', "r:2,c:0"=>'style="font-weight:bold"',"r:6,c:0" =>'style="font-weight:bold"', "r:9,c:0"=>'style="font-weight:bold"',"r:12,c:0"=>'style="font-weight:bold"'}
attr rg_heatingInfo commands { 'rg_heatingInfo.sollsetz'=>'desired-temp:5.0,12.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"}
attr rg_heatingInfo mapping {'Marc.Thermostat_Climate'=>"Marc",'Marc.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Marcel.Thermostat_Climate'=>"Marcel",'Marcel.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Studio.Thermostat_Climate'=>"Studio",'Studio.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'desired-temp' => }
attr rg_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 rg_heatingInfo valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', '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 rg_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);;"'}}}
attr rg_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)"}


Und der Vollständigheit noch die Definition meines Dashboards:

### Dashboard
define anyViews Dashboard
attr anyViews dashboard_tab1groups Schalter,Wetter,Telefon,Batterien,Fenster,Temperaturen
attr anyViews dashboard_tab1name Übersicht
attr anyViews dashboard_tab1sorting t0c0,Batterien,true,251,582:t0c0,Schalter,true,342,91:t0c0,Fenster,true,182,133:t0c0,Wetter,true,288,118:t0c0,Telefon,true,676,259:t0c0,Temperaturen,true,140,113:
attr anyViews dashboard_tab2groups Heizung
attr anyViews dashboard_tab2name Heizung
attr anyViews dashboard_tab2sorting t1c0,Heizung,true,0,0:
attr anyViews dashboard_tabcount 2
attr anyViews dashboard_width 80%
define anyViews_weblink weblink htmlCode {DashboardAsHtml("anyViews")}
attr anyViews_weblink room DashboardRoom


Vielen Dank schonmal für jeden Hinweis...

LG

McCavity

P.S.: noch ein Hinweis zum Wiki-Artikel: dort müßte ggf. mal das "&"-Zeichen von "&nbsp" in der Zeile "attr heatingInfo mapping..." escaped werden (mit "&amp;") - in der angezeigten Seite wird aus den drei "&nbsp;;" lediglich " ; ; ;" vor den "Regler"-mappings - ich habe auch eine Weile gebraucht um darauf zu kommen ;-)

McCavity

Ich antworte mir mal selber... nachdem ich noch etwas gestöbert habe, bin ich auf diesen Artikel gestoßen. Darin der Hinweis, daß die "desired-temp" auf '' gemappt werden solle - da fiel mir ein, daß mir schon bei dem aus dem Wiki kopierten Code aufgefallen war, daß dort mehrere Single Quotes gefehlt hatten. Nun habe ich in der "mapping" Zeile ganz am Ende noch den Leerstring mit Single Quotes eingefügt:

attr rg_heatingInfo mapping {'Marc.Thermostat_Climate'=>"Marc",'Marc.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Marcel.Thermostat_Climate'=>"Marcel",'Marcel.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Studio.Thermostat_Climate'=>"Studio",'Studio.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'desired-temp' => ''}


und siehe da: der Raum vor dem Drop Down ist weg (siehe neuer Screenshot).

Bleibt also nur noch die Frage: wo finde ich die fehlenden Icons oder wo kann ich sie herbekommen?

LG

McCavity

McCavity

#2
So, jetzt habe ich gerade nochmal ein Update gefahren (ich hatte zwischenzeitlich die mir fehlenden Symbole durch ähnlich aussehende ersetzt) und siehe da, was steht im Log des Updates:


...
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/humidity.svg
...
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/sani_heating_level_0.svg
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/sani_heating_level_10.svg
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/sani_heating_level_100.svg
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/sani_heating_level_20.svg
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/sani_heating_level_30.svg
2015-01-14 20:08:43 Global global UPD www/images/fhemSVG/sani_heating_level_40.svg
2015-01-14 20:08:44 Global global UPD www/images/fhemSVG/sani_heating_level_50.svg
2015-01-14 20:08:44 Global global UPD www/images/fhemSVG/sani_heating_level_60.svg
2015-01-14 20:08:44 Global global UPD www/images/fhemSVG/sani_heating_level_70.svg
2015-01-14 20:08:44 Global global UPD www/images/fhemSVG/sani_heating_level_80.svg
2015-01-14 20:08:44 Global global UPD www/images/fhemSVG/sani_heating_level_90.svg
...


Ick war verrückt... alles da, wo's hingehört! Sogar ein drittes, dessen Fehlen mir noch gar nicht richtig bewußt geworden war (hourglass.svg) :-)

Bleibt nur die Frage: warum waren die im vorherigen Update nicht dabei...? Aber egal - Hauptsache es funktioniert :D

LG

McCavity

Martin W

Danke für die Infos. Ich war die ganze Zeit auf der Suche nach einer Inspiration für mein Dashboard, deine  Vorlage hat sie mir geliefer. Merci  ;)
Gruß
Martin