PROPLANTA Icons

Begonnen von stephanr, 29 Dezember 2014, 12:56:19

Vorheriges Thema - Nächstes Thema

stephanr

Moin,

ich nutze das Modul PROPLANTA, um Wetterdaten zu laden. Über eine readingsGroup bereite ich die Werte dann grafisch auf. Bisher scheint im Forum aber noch keine Lösung vorhanden zu sein, wie man auch die Icons in die readingsGroup bekommt. Ich habe das jetzt folgendermaßen gelöst. Da ich kein Perl Programmierer bin und mich auch erst seit einer Woche mit FHEM beschäftige, ist dieser Vorschlag definitiv noch optimierungsbedürftig. Voraussetzung ist das Vorhanden sein des Unix Tools wget.

1. Device anlegen
define Wettervorhersage_Proplanta PROPLANTA Hamburg de

2. Aktuelle Werte holen
set Wettervorhersage_Proplanta update

3. readingsGroup anlegen
define Wetter readingsGroup Wettervorhersage_Proplanta

4. readingsGroup DEV definieren

Meine sieht so aus:


<Tag>,<Morgens>,<Tag>,<Abend>,<Nacht>,<Temp (max)>,<Temp (min)>,<Regen (% Tag)>,<Frost>
Wettervorhersage_Proplanta:<Heute>,fc0_weatherMorning,fc0_weatherDay,fc0_weatherEvening,fc0_weatherNight,fc0_tempMax,fc0_tempMin,fc0_chOfRainDay,fc0_frost
Wettervorhersage_Proplanta:<>,fc0_weatherMorningIcon,fc0_weatherDayIcon,fc0_weatherEveningIcon,fc0_weatherNightIcon
Wettervorhersage_Proplanta:<Morgen>,fc1_weatherMorning,fc1_weatherDay,fc1_weatherEvening,fc1_weatherNight,fc1_tempMax,fc1_tempMin,fc1_chOfRainDay,fc1_frost
Wettervorhersage_Proplanta:<>,fc1_weatherMorningIcon,fc1_weatherDayIcon,fc1_weatherEveningIcon,fc1_weatherNightIcon
Wettervorhersage_Proplanta:<Übermorgen>,fc2_weatherMorning,fc2_weatherDay,fc2_weatherEvening,fc2_weatherNight,fc2_tempMax,fc2_tempMin,fc2_chOfRainDay,fc2_frost
Wettervorhersage_Proplanta:<>,fc2_weatherMorningIcon,fc2_weatherDayIcon,fc2_weatherEveningIcon,fc2_weatherNightIcon


5. Sub in 99_Utils.pm anlegen für den Download der Icons


#####Icon Download#####
sub
icondl
{
my $dllink = shift;
my $reticon = "";
my $subicon = "";
$reticon .= qx(wget -T 5 -N --directory-prefix=/opt/fhem/www/images/weather/ --user-agent=Mozilla/5.0 Firefox/4.0.1 '$dllink');
$subicon = substr $dllink,51,-4;
return $subicon;
}


6. In der readingsGroup den Wert valueIcon setzen

Achtung: Der Code ist nicht korrekt siehe #3 von hexenmeister. Ich lasse ihn trotzdem stehen, damit der Kontext des Beitrags nicht komplett zerrissen wird.

{ if ($READING eq 'fc0_weatherDayIcon' || 'fc1_weatherDayIcon' || 'fc2_weatherDayIcon' || 'fc0_weatherMorningIcon' || 'fc1_weatherMorningIcon' || 'fc2_weatherMorningIcon' || 'fc0_weatherEveningIcon' ||'fc1_weatherEveningIcon' || 'fc2_weatherEveningIcon' || 'fc0_weatherNightIcon' || 'fc1_weatherNightIcon' || 'fc2_weatherNightIcon') {icondl($VALUE)} elsif ($READING eq 'fc0_frost' && $VALUE > 0) { 'ampel_rot' } elsif ($READING eq 'fc1_frost' && $VALUE > 0) { 'ampel_rot' } elsif ($READING eq 'fc2_frost' && $VALUE > 0) { 'ampel_rot' } }


Was passiert hier? Die URL zum Icon wird  an die Sub geliefert. Diese lädt das Icon herunter (wenn die Datei neuer ist oder eine andere Größe hat) und legt es im Ordner /opt/fhem/www/images/weather/ ab. Damit FHEM auch in diesem Ordner die Icons lädt, muss der iconPath um weather vorher erweitert worden sein. Nach dem Download der Icons ist u. U. noch ein set WEB rereadicons erforderlich, damit die neuen Icons gefunden werden.

Erweiterung iconPath:
attr WEB iconPath fhemSVG:openautomation:default:icons_small:weather

In der readingsGroup ist dann noch das Attribut nonames=1 gesetzt worden.

Beispiel:
(http://www11.pic-upload.de/thumb/29.12.14/ns9v14p99wzz.png)

Viele Grüße
Stephan

hexenmeister

Moin!
Ein kleines Problem ist, dass nur die Icons geladen werden, die auch gebraucht sind. Nach dem erstmaligen Download sind sie noch nicht verfügbar, erst nach dem rereadicons.
Hier ist eine zusätzliche Methode, um alle Icons auf Einmal zu laden.
# alle Proplanta Icons laden
sub ppicondl {
my $b="http://www.proplanta.de/wetterdaten/images/symbole/";
foreach my $i (1..14) {
icondl($b."t".$i.".gif");
}
foreach my $i (1..14) {
icondl($b."n".$i.".gif");
}
foreach my $i (0..10) {
icondl($b."w".$i.".gif");
}
foreach my $i (27..34) {
icondl($b."w".$i.".gif");
}
fhem("set WEB rereadicons");
fhem("set WEBphone rereadicons");
fhem("set WEBtablet rereadicons");
}



jnewton957

#2
Hallo,

bin genau auf der Suche danach gewesen, wie ich die Werte in die entsprechenden icons "umwandeln" kann.

Könnte man das nicht auch so umschreiben...

1. Alle Symbole holt man sich selber manuell und kopiert sie in das Unterverzeichnis weather. Das sind ja nur 46 Stück. Dann muss nicht immer erst "nachgesehen" werden.
2. Das attr Vorhersage_Proplanta valueIcon { if ($READING eq 'fc0_weatherDayIcon' ||..... hat nun nicht mehr : {icondl($VALUE)} sondern liest eben t1-t14 etc. direkt aus /fhem/www/images/weather/

Wie würde dann das attr Vorhersage_Proplanta valueIcon  aussehen ???


Grüße

Jörg
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

hexenmeister

#3
Zitat von: jnewton957 am 31 Dezember 2014, 10:40:58
1. Alle Symbole holt man sich selber manuell und kopiert sie in das Unterverzeichnis weather. Das sind ja nur 46 Stück. Dann muss nicht immer erst "nachgesehen" werden.

Nun, dafür habe ich ja die kleine Routine auch gepostet  ;)

Zitat von: jnewton957 am 31 Dezember 2014, 10:40:58
2. Das attr Vorhersage_Proplanta valueIcon { if ($READING eq 'fc0_weatherDayIcon' ||..... hat nun nicht mehr : {icondl($VALUE)} sondern liest eben t1-t14 etc. direkt aus /fhem/www/images/weather/

Wie würde dann das attr Vorhersage_Proplanta valueIcon  aussehen ???


Nun, zuerst ist die if Bedingung nicht ganz korrekt. Man kann sich die weiteren "eq" nicht einsparen.
Dann kann man die Strings mit RegEx entsprechend zerschneiden. Etwa so:
{ if ($READING eq 'fc0_weatherDayIcon' || $READING eq 'fc1_weatherDayIcon' || $READING eq 'fc2_weatherDayIcon' || $READING eq 'fc0_weatherMorningIcon' || $READING eq 'fc1_weatherMorningIcon' || $READING eq 'fc2_weatherMorningIcon' || $READING eq 'fc0_weatherEveningIcon' || $READING eq 'fc1_weatherEveningIcon' || $READING eq 'fc2_weatherEveningIcon' || $READING eq 'fc0_weatherNightIcon' || $READING eq 'fc1_weatherNightIcon' || $READING eq 'fc2_weatherNightIcon') {$VALUE=~m/\S+\/(\S+)\.gif/;;$1} elsif ($READING eq 'fc0_frost' && $VALUE > 0) { 'frost' } elsif ($READING eq 'fc1_frost' && $VALUE > 0) { 'frost' } elsif ($READING eq 'fc2_frost' && $VALUE > 0) { 'frost' } }

Grüße,

Alexander

P.S. Ich habe Frost-Icon verändert (Bitte ggf Update machen, habe erst gestern eingecheckt). Und mann sollte noch die 0 Bei "nicht Frost" verstecken.

stephanr

Moin,

vielen Dank für die Verbesserungen! Wenn der VALUE für Frost 0 ist, kann er folgendermaßen versteckt werden:

valueStyle:
{($READING eq 'fc0_frost' && $VALUE eq "0" || $READING eq 'fc1_frost' && $VALUE eq "0" || $READING eq 'fc2_frost' && $VALUE eq "0")?'style="visibility:hidden"':''}

hexenmeister

Gerne doch ;)
Und danke für 'Frost-Hiding'. Ich wollte eigentlich für 'nicht Frost' auch eine Icon basteln, nur ist mir nichts gescheites eingefallen ;)

Risiko

Hallo  @all

vielen Dank für die sehr gute Vorarbeit. Ich konnte sehr viel übernehmen.
Einige Attr z.B. valueIcon könnte man noch etwas kürzen.

{if ($READING =~ /Icon/) {$VALUE=~m/\S+\/(\S+)\.gif/;$1} elsif ($READING =~ /frost/ && $VALUE > 0) { 'frost' }}


Risiko

hexenmeister

Zitat von: Risiko am 18 Januar 2015, 18:07:02
Einige Attr z.B. valueIcon könnte man noch etwas kürzen.
Oh-ja, viel besser, danke!
Btw. wieso ist dein Schnee grün?  ;D

Ludozine

Hi,
ich habe alles so gemacht wie es hier beschrieben wurde. Die Daten werden richtig übernommen. Bei den Icons habe ich aber nur das Frost Symbol
siehe Anhang. Wäre toll wenn ihr mir da helfen könnt.

Viele Grüße
Detlef

hexenmeister

Frost-Symbol habe ich ins SVN eingecheckt und es liegt in fhemSVG (also Standard) und wird somit gefunden.
Die Proplanta-Icons liegen woanders. Hast Du sie geladen und wenn ja, wohin? Hast DU auch in der WEB-Instans iconPath erweitert und den Cache neu eingelesen (oder eben FHEM neu gestartet)?

Ludozine

Hi,
danke für den Tip, jetzt funktioniert alles super.

Viele Grüße
Detlef

tomatic

Hallo,
danke zunächst für die Anleitung. Vorweg: ich bin "Nachbauer" und verstehe nicht immer jede Definition, die ich übernehme bis ins Detail... aber ich lerne nach und nach. ::)
Ich habe also alles angelegt, klappt auch wie erwartet. Was nicht funktioniert ist der Download der icons. Ich habe die beiden Sub's in 99_myUtils.pm abgelegt, den Pfad angelegt und auch in der conf erweitert. Inzwischen habe ich mehrfach neu gestartet, leider taucht kein neues Icon in der Ansicht in FHEM oder im Verzeichnis "weather" auf...
# Enter you functions below _this_ line.

#####Icon Download#####
sub
icondl
{
my $dllink = shift;
my $reticon = "";
my $subicon = "";
$reticon .= qx(wget -T 5 -N --directory-prefix=/opt/fhem/www/images/weather/ --user-agent=Mozilla/5.0 Firefox/4.0.1 '$dllink');
$subicon = substr $dllink,51,-4;
return $subicon;
}

# alle Proplanta Icons laden
sub ppicondl {
my $b="http://www.proplanta.de/wetterdaten/images/symbole/";
foreach my $i (1..14) {
icondl($b."t".$i.".gif");
}
foreach my $i (1..14) {
icondl($b."n".$i.".gif");
}
foreach my $i (0..10) {
icondl($b."w".$i.".gif");
}
foreach my $i (27..34) {
icondl($b."w".$i.".gif");
}
fhem("set WEB rereadicons");
fhem("set WEBphone rereadicons");
fhem("set WEBtablet rereadicons");
}

1;

Hab auch im Grunde alle hier erwähnten valueIcon Varianten durch, ohne Veränderung (naja, sind ja auch keine Icons da).
Was mache ich falsch (oder was muss ich noch machen)?
Danke schon mal für Tipps!
Thomas
Inzwischen nur noch Raspimatic/CuxD, Hue und Homebridge

hexenmeister

Schau nach, ob die Icons in dem Verzeichnis vorhanden sind (/opt/fhem/www/images/weather). Wenn nicht - im Log nach Problemen suchen. Rufe mal ppicondl manuell auf ({ppicondl}) Was sagt dann Log, was ist im Verzeichnis?
Wenn die Icons da sind - hast Du dieses Verzeichnis in Icon-Pfad (in WEB-Instanz) mit aufgenommen?


tomatic

Hallo,
nachdem ich es jetzt noch gefühlt 100 mal versucht habe (die Eingabe in der Kommandozeile hatte ich auch schon versucht) und im Log trotz verbose 5 nichts auftauchte habe ich einen - wie so oft - ganz trivialen Grund gefunden. Die Rechte für das Verzeichnis waren nicht ausreichend... Ein chmod und alles ist gut.   :-[
Danke für die blitzschnelle Antwort!
Thomas
Inzwischen nur noch Raspimatic/CuxD, Hue und Homebridge

oli82

Hi.

Leider bekomme ich die Icons nicht geladen.
Wie es ausschaut, braucht die Seite zu lange, um zu antworten.

Hier der Log:
PROPLANTA Wettervorhersage: HtmlAcquire.505 Error: Can't get http://www.proplanta.de/Wetter/Breuberg-Wetter.html -- 500 Can't connect to www.proplanta.de:80 (timeout)
Kann man den Wert für das Timeout irgendwo erhöhen?