FHEM > RSS

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

<< < (6/7) > >>

betateilchen:
Bei mir sieht das Ergebnis unserer Arbeit aktuell übrigens so aus:

(http://up.picr.de/17991915rf.jpg)

Wenn ich mir die Sache so recht überlege, sind wir schon sehr weit in unserem Workshop, es fehlen nur noch zwei oder drei wichtige Themen. Und wenn wir diese durchgearbeitet haben, werde ich eine Auflistung machen, was ich Euch NICHT gesagt habe  8)

betateilchen:
Schritt 12 - bedingtes Einbinden von Informationen

Bitte legt Euch einen Dummy namens "regenDummy" an und gebt ihm den Wert "rain"


--- Code: ---define regenDummy dummy
set regenDummy rain

--- Ende Code ---

Wir wollen im RSS die Meldung "Es regnet!" ausgeben, aber nur wenn der regenDummy auch den Wert "rain" hat.

Dafür gibt es grundsätzlich zwei Wege.

Lösungsweg 1:

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


--- Code: ---# Deno für bedingtes Einbinden von Informationen
# Variante 1
rgb "2E64FE"
text 210 280  { "Es regnet!" if(ReadingsVal('regenDummy','state','') eq 'rain') }


--- Ende Code ---

und schaut Euch das Ergebnis an:

(http://up.picr.de/17992345kv.png)

Zum Vergleich macht Ihr dann bitte ein "set regenDummy norain" und ladet Euer Lesezeichen für das RSS-Bild (nicht das Layout!) neu.
Die Meldung sollte dann nicht mehr erscheinen.

Die zweite Variante, so etwas zu machen, erkläre ich Euch - nach der nächsten Maus.

betateilchen:
Fortsetzung: bedingtes Einbinden von Informationen

Bitte die eben eingefügten zwei Zeilen wieder auskommentieren, wir kommen jetzt zu Variante 2:


--- Code: ---# Deno für bedingtes Einbinden von Informationen
# Variante 1
#rgb "2E64FE"
#text 210 280  { "Es regnet!" if(ReadingsVal('regenDummy','state','') eq 'rain') }

# Variante 2
condition {(ReadingsVal('regenDummy','state','') eq 'rain')}
rgb "2E64FE"
text 210 280 "Es regnet!"
condition 1

--- Ende Code ---

Das Verhalten sollte identisch zu Variante 1 sein.

Wo ist der Unterschied? Was sind die Vorteile?


* In der ersten Variante haben wir die Bedingung direkt in das text-Statement eingebaut. Davor wurde aber auf jeden Fall noch die Farbe umschaltet
In der zweiten Variante haben wir einen anderen Ablauf:


* Alle Befehle, die in der Layout-Definition nach der ersten condition-Zeile stehen, werden nur dann ausgeführt, wenn die in der condition angegebene Bedingung erfüllt ist.
Es wird also auch die bis dahin mit rgb gesetzte Farbe nicht verändert, wenn die Bedingung nicht erfüllt ist.

Ist die Bedingung nicht erfüllt, werden alle folgenden Zeilen übersprungen, bis entweder wieder eine condition Zeile kommt, die erfüllt wird, oder bis das Ende der Layoutdefinition erreicht ist.

Deshalb ist es wichtig, an einen Block, der nur bedingt ausgeführt werden soll, wieder eine Bedingung anzuschließen, mit der die Bedingung wieder aufgehoben wird. Im Beispiel macht das die Zeile "condition 1"

Ein konkretes Anwendungsbeispiel aus meiner Produktivumgebung kommt noch, dazu muss ich erst nochwas basteln, wir kommen nochmal auf das Thema hier zurück, keine Sorge :)



betateilchen:
Schritt 14 - noch eine Methode zur Positionsangabe im RSS
oder: "Wer kennt noch Turtle Graphics"?  8)

Bitte ergänzt Euer Layout am Dateiende *):


--- Code: ---# Kapitel 14 - Readingliste anzeigen
# zuerst nochmal eine Linie zeichnen
rgb "7F7F7F"
line 400 240 400 440

# Wertebezeichnungen linksbündig ausgeben
rgb "FFFFFF"
pt 12
thalign "left"
text 410 270 "Temperatur"
text 410 300 "Luftfeuchte"
text 410 330 "Luftdruck"

# Messwerte rechtsbündig ausgeben
thalign "right"
text 550 270 {ReadingsVal('owo','c_temperature','?')}
text 550 300 {ReadingsVal('owo','c_humidity','?')}
text 550 330 {ReadingsVal('owo','c_pressure','?')}

# Einheiten linksbündig an die Messwerte anhängen
thalign "left"
text 552 270 "°C"
text 552 300 "%"
text 552 330 " hPa"

--- Ende Code ---

Was da passiert, sollte inzwischen jeder problemlos verstehen können, der den Workshop konzentriert mitgearbeitet hat.
Das Ergebnis sollte so aussehen:

(http://up.picr.de/17993729yt.png)

Das mit den Positionsangaben kann man aber auch noch anders machen. Wie? Das erkläre ich Euch nach der nächsten Maus.

*) für stgeran: das bedeutet nach der letzten aktuell vorhandenen Zeile in der Layoutdatei

betateilchen:
Schritt 14 - Teil 2, die Alternative

Stellt Euch vor, Euer RSS wäre so groß, dass Ihr eine Schildkröte darauf laufen lassen könnt *)

Ihr setzt die Schildkröte auf die Position "x=100 y=100" und sagt Ihr "gehe 100 Schritte in Richtung x" Wo befindet sie sich dann?
Richtig: an der Position x=200 y=100
Jetzt schickt Ihr die Schildkröte weiter: "gehe 50 Schritte in Richtung y". Dann befindet sie sich an der Position x=200 y=150.
Und nun schickt Ihr die Schildkröte nochmal los: "gehe 50 Schritte in Richtung x vorwärts und 30 Schritte in Richtung y rückwärts".
Dann steht die Schildkröte bei x=250 y=120.

Soweit verstanden? Gut.

Und genau das kann der RSS auch.

Wir hatten bisher absolute Positionsangaben, z.B. x=200 y=300
Dann haben wir relative Positionen kennengelernt, z.B. x=0.25 y=0.5

Jetzt kommt die dritte Variante - die Schildkröte.
Dazu gibt es für das RSS Layout die Befehle "moveto <x> <y>" und "moveby <deltaX> <deltaY>"

Nehmen wir unsere Schildkröte von oben und übersetzen ihre Bewegungen in Befehle für unser RSS Layout

setzt die Schildkröte auf die Position "x=100 y=100"

--- Code: ---moveto 100 100
--- Ende Code ---

gehe 100 Schritte in Richtung x

--- Code: ---moveby 100 0
--- Ende Code ---

gehe 50 Schritte in Richtung y

--- Code: ---moveby 0 50
--- Ende Code ---

gehe 50 Schritte in Richtung x vorwärts und 30 Schritte in Richtung y rückwärts

--- Code: ---moveby 50 -30
--- Ende Code ---

Grundregel:
Bei jeder Positionänderung innerhalb eines RSS Layouts wird die x und y Positon in zwei internen Variablen gespeichert.
Auf diese Variablen "x" und "y" kann innerhalb des Layouts zugegriffen werden, um Positionsangaben zu erzeugen.

Beispiel:

--- Code: ---text x y "blubber"
--- Ende Code ---

Im nächsten Beitrag geht es um eine Anwendung in unserem Layout. Ich habe jetzt erstmal Hunger, Abendessenzeit.

*) weiterführende Informationen zur Schildkröte
http://de.wikipedia.org/wiki/Turtle-Grafik
http://de.wikipedia.org/wiki/KTurtle

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln