[Workshop] 02_RSS.pm für Anfänger - Schritt für Schritt erklärt

Begonnen von betateilchen, 15 April 2014, 19:55:27

Vorheriges Thema - Nächstes Thema

betateilchen

#30
Schritt 14 - Kapitel 3, jetzt schicken wir die Schildkröte los

Bitte baut am Ende der Layoutdatei folgende Zeilen ein:


# Kapitel 14 - Teil 3
# wir schicken die Schildkröte los
# http://de.wikipedia.org/wiki/KTurtle
#

rgb "00FF00"
pt 12

# Wertebezeichnungen linksbündig ausgeben
thalign "left"

moveto 410 360
text x y "Temperatur"

moveby 0 30
text x y "Luftfeuchte"

moveby 0 30
text x y "Luftdruck"

# Messwerte rechtsbündig ausgeben
thalign "right"

moveby 140 0
text x y {ReadingsVal('owo','c_pressure','?')}

moveby 0 -30
text x y  {ReadingsVal('owo','c_humidity','?')}

moveby 0 -30
text x y {ReadingsVal('owo','c_temperature','?')}

# Einheiten linksbündig an die Messwerte anhängen
thalign "left"

moveby 2 0
text 552 y "°C"

moveby 0 30
text   x 390 "%"

moveby 0 30
text   x y " hPa"


Das Ergebnis sieht optisch genauso aus wie die ersten drei Wertezeilen, nur in grün.

(http://up.picr.de/17994399nk.png)

Wozu dann das Ganze?

Nunja, stellt Euch mal vor, Ihr wollt bei den drei Readings die Luftfeuchtigkeit nur dann anzeigen, wenn es regnet.

Dann kann man das entweder so lösen (am Beispiel der weiss angezeigten Readings)


condition {(ReadingsVal('regenDummy','state','') eq 'rain')}
text 410 300 "Luftfeuchte"
condition 1


oder so - (am Beispiel des Schildkrötenprinzips)


condition {(ReadingsVal('regenDummy','state','') eq 'rain')}
moveby 0 30
text x y "Luftfeuchte"
condition 1


Der grundlegende Unterschied für den Fall, dass es NICHT regnet, ist klar erkennbar:

(http://up.picr.de/17994455ji.png)

Im weissen Beispiel wird zwar die Luftfeuchtigkeit nicht angezeigt, aber es entsteht eine Lücke.

Im grünen Beispiel wird die Luftfeuchtigkeit nicht anzeigt, die Schildkröte läuft aber auch nicht weiter und der Luftdruck rutscht einfach um eine Zeile nach oben.

Klar?




Ein Anwendungsfall aus meiner Produktivumgebung, ich überwache damit meine Fenster- und Türkontakte.
Geschlossene Fenster/Türen werden nicht angezeigt, gekippte Fenster/Türen werden gelb, geöffnete Fenster/Türen in rot dargestellt.

Dieses Codebeispiel NICHT in das Workshop-Layout übernehmen!


#--------------------
# Türen und Fenster
#

condition 1
thalign "left"
moveto 410 50

condition { ReadingsVal("Melder_TEingang","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "Eingang" }
text 470 y { ts2text(ReadingsTimestamp("Melder_TEingang","state","")) }

condition { ReadingsVal("Melder_TBalkon","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "Balkon" }
text 470 y { ts2text(ReadingsTimestamp("Melder_TBalkon","state","")) }

condition { ReadingsVal("Melder_TBalkon","state","") eq "tilted" }
rgb "FFFF00"
moveby 0 20
text 410 y { "Balkon" }
text 470 y { ts2text(ReadingsTimestamp("Melder_TBalkon","state","")) }

condition { ReadingsVal("Melder_FSl","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "SZ li" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FSl","state","")) }

condition { ReadingsVal("Melder_FSr","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "SZ re" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FSr","state","")) }

condition { ReadingsVal("Melder_FSr","state","") eq "tilted" }
rgb "FFFF00"
moveby 0 20
text 410 y { "SZ re" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FSr","state","")) }

condition { ReadingsVal("Melder_FKl","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "KU li" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FKl","state","")) }

condition { ReadingsVal("Melder_FKr","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "KU re" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FKr","state","")) }

condition { ReadingsVal("Melder_FKr","state","") eq "tilted" }
rgb "FFFF00"
moveby 0 20
text 410 y { "KU re" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FKr","state","")) }

condition { ReadingsVal("Melder_FAl","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "AZ li" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FAl","state","")) }

condition { ReadingsVal("Melder_FAr","state","") eq "open" }
rgb "FF0000"
moveby 0 20
text 410 y { "AZ re" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FAr","state","")) }

condition { ReadingsVal("Melder_FAr","state","") eq "tilted" }
rgb "FFFF00"
moveby 0 20
text 410 y { "AZ re" }
text 470 y { ts2text(ReadingsTimestamp("Melder_FAr","state","")) }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Teil 15 - Die Textbox für lange Texte

Ein grundlegendes Objekt fehlt bisher noch - die Textbox. Die wird zum Beispiel gebraucht, wenn man längere Texte, deren Länge man aber im Voraus nicht kennt, vernünftig darstellen will. Ich nutze sowas zum Beispiel für die Anzeige von Wetterwarnungen aus dem fhem Modul GDS. Man kann damit aber zum Beispiel auch Schlagzeilen aus RSS Feeds, z.B. der Tagesschau anzeigen.

Fügt bitte am Ende Eurer Layoutdatei folgende Zeilen ein:


# Teil 15 - die Textbox
rgb "FFFFFF"
pt 12

thalign "left"
textbox 50 330 300 "Verbraucher erfahren auch künftig nicht, ob Honig Pollen von genmanipulierten Pflanzen enthält."


was folgendes Ergebnis bringt:

(http://up.picr.de/17994759pp.png)

textbox 50 330 300 => aufgedröselt:

textbox = Befehl
50 = x-Position
330 = y-Position
300 = Breite der Textbox in pixeln

Die x- und y-Positon bezieht sich auf die linke obere Ecke der Textbox.


Für Optik-Fetischisten läßt sich die Anzeige innerhalb der Textbox auch noch im Blocksatz formatieren, also so:

(http://up.picr.de/17994760wl.png)

Dazu muss das thalign vor dem Beschreiben der Textbox auf

thalign "justified"

gesetzt werden. Achtung: Dieses thalign ist ausschließlich innerhalb der textbox wirksam!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Das wars.

Ich habe fertig!

Weitere Dinge werde ich hier im Workshop nicht beschreiben. Weiterführende Informationen, auch über die wenigen hier nicht besprochenen Dinge, finden sich in der commandref zum Modul 02_RSS.pm.

http://fhem.de/commandref.html#RSS

Viel Spaß beim Basteln Eurer RSS Feeds.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#33
Was fehlt noch?

Folgende Punkte wurden im Workshop nicht besprochen, aber das sollte jeder selbst hinbekommen.


  • neben date und time gibt es auch noch das spezielle Textobjekt "seconds" zur Anzeige von Sekunden
  • neben thalign und ihalign gibt es auch noch den "Sammelwert" halign, der sowohl für text als auch für img gleichzeitig gilt Von der Verwendung rate ich aber dringend ab, da text und img nicht grundsätzlich die gleichen Parameterwerte für die Ausrichtung verwenden und das sehr schnell zu sehr merkwürdigen Effekten führen kann. (gleiches gilt natürlich auch für die vertikalen Ausrichtungen)
  • mit linespace <px> läßt sich ein Abstand des Textes von der imaginären Textboxwand innerhalb der textbox einstellen

Folgende Dinge können innerhalb eines RSS über { perl-Special } berechnet bzw. ermittelt werden:


  • rgb
  • .halign und .valign
  • text
  • img (bei Verwendung des sourcetyp = data)

Sonstiges:


  • Plots können auch mit zoom und offset angegeben werden: img x y 1 png data { plotAsPng("SVG_owo","qday",-1) }
  • es gibt einen internen Zähler $defs{$name}{fhem}{counter} der bei jeder RSS Generierung um 1 erhöht wird. Damit kann man z.B. bei jedem Durchlauf die Hintergrundfarbe wechseln lassen oder bei jedem 7. Durchlauf eine Sondermeldung anzeigen. Verwenden kann man den Zähler z.B. in einer "condition" Anweisung
  • mit dem Attribut bgdir kann ein Verzeichnis mit Bildern definiert werden, die abwechselnd als Hintergrundbild (anstatt des farbigen Hintergrundes) verwendet werden
  • mit dem Attribut tmin kann festgelegt werden, wieviele Minuten ein Hintergrundbild mindestens angezeigt wird, bevor es gewechselt wird. Der Wechsel ist dann unabhängig von der Anzahl der RSS-Abrufe innerhalb dieser Zeitspanne
  • to be continued... (falls mir noch was einfällt)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Seit neuestem bindet die von RSS ausgelieferte Webseite auch die Javascripte ein.

Wer also beispielsweise die App WebViewControl (http://www.fhemwiki.de/wiki/WebViewControl) auf seinem Tablet benutzt, kann nun in der App zu

http://myFHEM:8083/fhem/rss/myRSS.html

navigieren und kommt in den Genuss der vollen Funktionalität von RSS und WebViewcontrol.

Das sieht dann so aus wie in der Anlage. Der Knopf links oben ist im RSS-Layout als Grafik eingebunden und mit einer Image-Map hinterlegt, die zur FHEM-Startseite führt.

Viele Grüße
Boris

Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!