FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stumpelrielschen am 10 Januar 2016, 19:47:26

Titel: Readings kürzen
Beitrag von: stumpelrielschen am 10 Januar 2016, 19:47:26
Moin,
ich versuche mich nun fast seit einer Woche an meiner Anzeige für das Wetter, mit dem Modul Weather habe ich es bereits gut hinbekommen die Daten herunterzulanden und die benötigten Werte als einen Dummy zu hinterlegen, so dass ich im Floorplan meine Daten einzeln per Drag & Drop positionieren kann, allerdings bekomme ich das mit dem Wettericon bei Poplanta nicht hin, ich denke dass das eine recht einfache Aufgabe ist für jemanden, der sich etwas mit Programierung auskennt.
Mein Ziel ist es eine Anzeige über den Tag zu haben Früh, Mittag, Abend, Nacht und dazu die passenden Logos.

In meinem "fc0_weatherDayIcon" Reading steht aktuell:
"http://www.proplanta.de/wetterdaten/images/symbole/t7.gif"
damit kann ich allerdings im Floorplan kein Bild aufrufen. Wie kann ich also das Reading kürzen auf: "t7"
Ich denke ich sollte irgendwo so etwas eingeben: {$VALUE=~m/\S+\/(\S+)\.gif/;;$1}


So sieht meine fhem.cfg für diesen Teil zur Zeit aus.

#Wetter Heute Tags Proplanta
define ProplantaWetterTags_Text dummy
attr ProplantaWetterTags_Text room Wetter
define n_ProplantaWetterTags_Text notify ProplantaWetter:fc0_weatherDay.* { fhem "set ProplantaWetterTags_Text ".ReadingsVal("ProplantaWetter","fc0_weatherDay",0)}
define ProplantaWetterTags_Symbol dummy
attr ProplantaWetterTags_Symbol room Wetter
define n_ProplantaWetterTags_Symbol notify ProplantaWetter:fc0_weatherDayIcon.* { fhem "set ProplantaWetterTags_Symbol ".ReadingsVal("ProplantaWetter","fc0_weatherDayIcon",0) }
define ProplantaWetterTags_Temp dummy
attr ProplantaWetterTags_Temp room Wetter
define n_ProplantaWetterTags_Temp notify ProplantaWetter:fc0_temp12.* { fhem "set ProplantaWetterTags_Temp ".ReadingsVal("ProplantaWetter","fc0_temp12",0)."°C" }
define ProplantaWetterTags_Regen dummy
attr ProplantaWetterTags_Regen room Wetter
define n_ProplantaWetterTags_Regen notify ProplantaWetter:fc0_chOfRain12.* { fhem "set ProplantaWetterTags_Regen ".ReadingsVal("ProplantaWetter","fc0_chOfRain12",0)."%" }

 
Titel: Antw:Readings kürzen
Beitrag von: Puschel74 am 10 Januar 2016, 21:55:38
Code-Tags sind schön aber gleich alles in Code-Tags zu setzen  ::)

Bearbeite deinen Beitrag doch nochmal und setze das in Tags was in Tags gehört - dann wird das alles leserlicher und auch verständlicher was du willst.
Titel: Antw:Readings kürzen
Beitrag von: stumpelrielschen am 10 Januar 2016, 21:56:58
Schon passiert  ;)
Titel: Antw:Readings kürzen
Beitrag von: betateilchen am 10 Januar 2016, 22:03:07
($b,$c) = $a =~ m|^(.*[/\\])([^/\\]+?)$|;
Titel: Antw:Readings kürzen
Beitrag von: Puschel74 am 10 Januar 2016, 22:05:23
Und schon gibt es ne Lösung  ;)
Titel: Antw:Readings kürzen
Beitrag von: stumpelrielschen am 10 Januar 2016, 22:09:26
Sehr gut vielen Dank ihr zwei,

wenn mir jetzt Beta noch sagen könnte an welche Stelle ich das ($b,$c) = $a =~ m|^(.*[/\\])([^/\\]+?)$|; bastele dann wäre ich super glücklich.
define n_ProplantaWetterTags_Symbol notify ProplantaWetter:fc0_weatherDayIcon.* { fhem "set ProplantaWetterTags_Symbol ".ReadingsVal("ProplantaWetter","fc0_weatherDayIcon",0) }

Danke
Titel: Antw:Readings kürzen
Beitrag von: Puschel74 am 10 Januar 2016, 22:12:40
ZitatBeta
DAS liest er nicht so gerne  8)
Titel: Antw:Readings kürzen
Beitrag von: stumpelrielschen am 10 Januar 2016, 22:19:33
Na wenn es hilft betateilchen  ;).
Sorry für die dumme Frage aber wie man links sieht bin ich noch ein absoluter Newbie und versuche mir überall ein paar Codes zusammenzufügen.
Titel: Antw:Readings kürzen
Beitrag von: betateilchen am 11 Januar 2016, 13:22:47
Zitat von: stumpelrielschen am 10 Januar 2016, 22:19:33
und versuche mir überall ein paar Codes zusammenzufügen.

Das bringt Dich nicht weiter. Beschäftige Dich bitte mit perl-Grundlagen.

Um auf meinen Lösungsansatz zurückzukommen:

$a ist die gesamte URL
$b ist der Teil vor dem Dateinamen
$c ist der Dateiname
Titel: Antw:Readings kürzen
Beitrag von: CoolTux am 11 Januar 2016, 14:22:52
Super Beispiel. Das kann man immer mal gebrauchen. Daher möchte ich mich bedanken.



Grüße
Titel: Antw:Readings kürzen
Beitrag von: betateilchen am 11 Januar 2016, 14:32:42
@CoolTux: vergiss das Beispiel, mit perl-Bordmitteln (http://perldoc.perl.org/File/Basename.html) geht das viel eleganter.
Aber der Fragesteller hatte ja ausdrücklich nach regexp gefragt.
Titel: Antw:Readings kürzen
Beitrag von: CoolTux am 11 Januar 2016, 14:43:21
@betateilchen
Du wirst lachen, aber ich habe mein html parsing ausschließlich mit regexp gemacht. Ich weiß das es da noch sowas wie html::parser gibt. Aber ich hatte ja nur was kleines zu parsen



Grüße
Titel: Antw:Readings kürzen
Beitrag von: stumpelrielschen am 11 Januar 2016, 19:49:53
Vielen Dank erstmal betateilchen,
ich werde mich über Perl mal her machen mal schauen, ob ich das blicke oder ob es da einfach bei mir aufhört. Irgendwie muss ich ja das Reading kurz bekommen. Sonst gibt es weiterhin nur das Yahoowetter.
Titel: Antw:Readings kürzen
Beitrag von: betateilchen am 11 Januar 2016, 19:56:55
gib doch mal in die Kommandozeile Deines fhem folgendes ein:

{use File::Basename;; basename("http://www.proplanta.de/wetterdaten/images/symbole/t7.gif")}

und staune...
Titel: Antw:Readings kürzen
Beitrag von: stumpelrielschen am 12 Januar 2016, 17:10:30
 ;D das sieht doch wesentlich durchschaubarer aus.
Fhem antwortet mir dann "t7.gif".
Wenn ich also
{use File::Basename;; basename(ReadingsVal("ProplantaWetter","fc0_weatherEveningIcon",0))} oben bei FHEM eingebe sagt es mir das gleiche aber mit dem aktuellen Reading (perfekt).
Soweit so gut nur leider funktioniert das nicht mit dem Wert setzen. Wenn ich also eingebe:
set ProplantaWetterAbends_Symbol {use File::Basename;; basename(ReadingsVal("ProplantaWetter","fc0_weatherEveningIcon",0))}
dann führt FHEM das nicht aus.
Danke
Titel: Antw:Readings kürzen
Beitrag von: Puschel74 am 12 Januar 2016, 21:58:42
Das ganze sollte in die 99_myUtils.pm ausgelagert werden.
Der Teil
use File::Basename
ist zumindest dort gut aufgehoben.

Dann noch eine sub definieren die die Bearbeitung macht und passend aufgerufen wird.
Der Rückgabewert kann dann in FHEM weiterverarbeitet werden.
Infos zum anlegen der 99_myUtils.pm findest du im Wiki http://www.fhemwiki.de/wiki/99_myUtils_anlegen (http://www.fhemwiki.de/wiki/99_myUtils_anlegen)

Sorry aber ich kann dir keine fertige Lösung "aus dem Ärmel schütteln" ohne das in meiner Testumgebung nachzubauen.