FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: Phill am 25 Dezember 2014, 14:02:18

Titel: Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: Phill am 25 Dezember 2014, 14:02:18
Hallo,
ich habe folgendes Problem festgestellt was ich nicht in den Griff bekomme.

Und zwar habe ich OWSWITCH-Eingänge die im unbetätigten Zustand dieses HTML Zeichen angefügt bekommen.

Jetzt will ich die valueIcon Eigenschaft darauf setzen.
valueIcon {'Tuer.auf☇'=>'fts_door_open', 'Tuer.zu'=>'fts_door'}
Jetzt kommen gleich zwei Probleme auf.
1. Beim neustart von FHEM wird nur bis zur Raute aus der fhem.cfg gelesen der Teil danach wird abgeschnitten.
2. readingsGroup kommt auch nicht wirklich damit zurecht.
    Rufe ich die Seite mit der Readingsgroup neu auf oder aktualisiere ich sie, bekomme ich das valueicon nicht angezeigt. Wird der Status aber über einen "LongPoll" geändert funktioniert das Icon.

Wie bekomme ich das gelöst?
Kann ich das irgendwie escapen?
RegExp hatte ich probiert gehen da aber anscheinend nicht oder?
OWSWITCH so einstellen das es das Zeichen nicht anhängen soll wäre wohl das sinnvollste, aber ich weiß nicht wie!

Gruß
Titel: Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: justme1968 am 25 Dezember 2014, 14:17:35
du kannst in def und attributen kein # verwenden weil es beim einlesen als kommentar gewertet wird und alles danach abgeschnitten wird.

das problem kannst du umgehen und dem du den code in 99_myUtils auslagerst und im attribut nur eine sub aufrufst.

wenn du nur um die
beiden zustände geht kannst du aber auch im ersten key nur Tuer ohne das mit punkt angehängte reading verwenden. das gilt dann immer wenn das genauer spezifizierte zu icon nicht greift.

ansonsten am besten eventMap im Original device verwenden um das Zeichen Weg zu bekommen. hier kannst du regex verwenden.

gruß
  andre
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: Phill am 26 Dezember 2014, 23:07:45
Hallo und Danke erst mal. Das eventMapping hat ein wenig geholfen.
eventMap auf.*:auf
Jetzt ist aber immer noch das sehr unschöne Problem, dass das richtige valueIcon nur bei einem Longpoll angezeigt wird. Rufe ich die Seite auf oder aktualisiere ich sie im Browser wird das ursprüngliche Reading angezeigt. (auf☇)

Zitat von: justme1968 am 25 Dezember 2014, 14:17:35
das problem kannst du umgehen und dem du den code in 99_myUtils auslagerst und im attribut nur eine sub aufrufst.
Versteh ich ehrlich gesagt nicht. Meinst du ich soll das Event in 99_myUtils abfangen und das icon per perl setzen?

Zitat von: justme1968 am 25 Dezember 2014, 14:17:35wenn du nur um die beiden zustände geht kannst du aber auch im ersten key nur Tuer ohne das mit punkt angehängte reading verwenden. das gilt dann immer wenn das genauer spezifizierte zu icon nicht greift.
Das hat funktioniert, dabei wird immer das korrekte Icon angezeigt. Werde ich mal schauen ob mir das irgendwann Probleme macht wenn es ein Standart Icon gibt. Kann ich jetzt noch nicht abschätzen.

Gruß

Gruß
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: justme1968 am 27 Dezember 2014, 12:03:09
eventMap wirkt auf STATE und nicht auf state. d.h. es hat nur im original device auswirkung nicht auf die readingsGroup. d.h. du musst für das original device devStateIcon so konfigurieren das hier alles stimmt und in der readingGroup dann {state => '%devStateIcon'} verwenden. d.h. die readingGroup verwendet das devStateIcon des original device.

das auslagern würde so aussehen:attr <rg> valueIcon {Tür => '{meinIcon($VALUE)}' } und in 99_myUtils dann:sub meinIcon($) {
  my($value) = @_;
  return fts_door_open if( $VALUE eq 'auf☇' );
  return fts_door if( $VALUE eq 'zu' );
  return undef;
}


in 99_myUtils wird das # nicht als kommentar interpretiert. du solltest aber erst mal ein Log 3, $value; einbauen und schauen was als wert tatsächlich ankommt und ob nicht noch irgendwo etwas um kodiert wird.

gruss
  andre
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: Deathevn am 13 Februar 2015, 09:19:42
Um den readingsGroup-Thread nicht aufzublähen führe ich mal meine Frage hier weiter, da es thematisch passt.

Ich setze im CellValue die Text-Farben mittels Hash-Wert. Jetzt habe ich mir also eine Funktion in meine myUtils geschrieben:
sub
lcarscolor($)
{
   my $color = @_;

   return #FF9900 if( $color eq 'orange' );
   return #CC99CC if( $color eq 'flieder' );
   return #9999CC if( $color eq 'blaugrau' );
   return #CC6666 if( $color eq 'rotbraun' );
   return #FFCC99 if( $color eq 'beige' );
   return #9999FF if( $color eq 'leuchtblau' );
   return #FF9966 if( $color eq 'apricot' );
   return #CC6699 if( $color eq 'pink' );
   return #F7C64A if( $color eq 'hellorange' );
   return undef;
}


Ich hatte die Hashwerte auch schon alle innerhalb "" geschrieben, das ging auch nicht.

Den Aufruf hatte ich bisher so:
{ "r:1"=>'style="font-size:28px;color:#FF9900;text-align:center"' }

Jetzt habe ich folgende Varianten ausprobiert:

Mein Verständnis ist, dass mir meine Funktion einen String zurück gibt (anfangs daher auch den return-Wert in "") und ich den String hinter style="" entsprechend verknüpfen muss (mit .). Wo liegt hier mein Denkfehler?

Viele Grüße
Martin
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: justme1968 am 13 Februar 2015, 09:49:30
wenn du sowieso chon farb namen hast warum verwendest du nicht diese direkt als color?{ "r:1"=>'style="font-size:28px;color: orange;text-align:center"' }

der umweg über die hex werte ist nur nötig wenn es keinen passenden farb namen gibt. die erlaubten namen findest du z.b. hier: http://www.w3schools.com/html/html_colornames.asp (http://www.w3schools.com/html/html_colornames.asp).

ansonsten: wenn die farben die du möchtest in der liste nicht dabei sind:

schau mal bitte ins log ob da etwas zu sehen ist. der ... teil wäre in deinem fall wichtig. bitte poste mal die komplette attribut definition. so etwa sollte es gehen:{ "r:1"=>'{"style=\"font-size:28px;color:".lcarscolor("orange").";text-align:center\""}' }die zusätzlichen {..} brauchst du im hash fall um zu kennzeichnen das es perl code ist der ausgeführt werden soll.

wegen der der anführungszeichen auf drei unterschiedlichen ebenen kommst du ums maskieren auf mindestens einer ebene nicht mehr rum. d.h. es ist eigentlich einfacher den kompletten string oder noch besser den kompletten hash aus der sub zurück zu geben.

gruss
  andre
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: Deathevn am 13 Februar 2015, 10:08:35
Okay das ist ja noch komplizierter als gedacht...
Wollte das eigentlich versuchen geschickt zu lösen, um die Farben der LCARS-Oberfläche jederzeit abrufbar zu machen.

Wenn ich das so umsetze, wie du geschrieben hast, dann erhalte ich folgenden Fehler im Log:

PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 7141) line 1.

Wenn ich stackoverflow richtig verstehe wird bei der Interpretation des cellStyle Values eval verwendet und damit der Kontext geändert. Also komme ich so hier gar nicht weiter, oder?
Ich schau dann mal, ob ich nahezu passende Farben mit Namen finde, z.B. DarkOrange.

Danke für deine Hilfe!
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: justme1968 am 13 Februar 2015, 10:31:11
die farben sind strings. du musst in deiner sub die werte also in anführungszeichen stecken. du hast sonst lautere leere returns weil alles hinter dem # auch da ein kommentar ist.

sub
lcarscolor($)
{
   my ($color) = @_;

   return '#FF9900' if( $color eq 'orange' );
   return '#CC99CC' if( $color eq 'flieder' );
   return '#9999CC' if( $color eq 'blaugrau' );
   return '#CC6666' if( $color eq 'rotbraun' );
   return '#FFCC99' if( $color eq 'beige' );
   return '#9999FF' if( $color eq 'leuchtblau' );
   return '#FF9966' if( $color eq 'apricot' );
   return '#CC6699' if( $color eq 'pink' );
   return '#F7C64A' if( $color eq 'hellorange' );
   return '#000000';
}


gruss
  andre
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: Deathevn am 13 Februar 2015, 10:35:13
Okay, ich hatte irgendwie vermutet, dass " und ' beide Strings ausdrücken - Python handhabt das so.
Hab das mal abgeändert, allerdings wenn ich über die Befehlszeile:

{lcarscolor('orange')} eingebe, erhalte ich lediglich #000000.

Wieso matched er das nicht?

Viele Grüße
Martin
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: justme1968 am 13 Februar 2015, 10:49:59
' und " schliessen beides strings ein. es gibt noch einen unterschied in der variablen interpolation.  aber in deiner version oben waren gar keine anführungszeichen.

das ganze hat noch nicht funktioniert weil noch die klammern bei der zuweisung der variablen aus dem des parameter array gefehlt haben.

gruss
  andre
Titel: Antw:Readingsgroup: valueIcon Reading mit Hash "#" (☇)
Beitrag von: Deathevn am 13 Februar 2015, 10:53:18
Das war es! :D

Die Klammer vergessen... Danke!
Jetzt funktioniert der Farbaufruf.