Autor Thema: RSS um label und goto erweitern  (Gelesen 1662 mal)

Offline mrmist

  • New Member
  • *
  • Beiträge: 21
RSS um label und goto erweitern
« am: 10 April 2018, 22:47:38 »
Hallo,

ich baue mir mit RSS ein Bild für ein eInk-Infodisplay zusammen. Darauf werden insb. Wettervorhersage und Kalender angezeigt. Für beides wäre eine Schleifenfunktion sehr interessant.

Nach ein wenig tüfteln habe ich mir mit folgendem kleinen Patch zwei weitere Layout-Kommandos "label" und "goto" in 02_RSS eingebaut:
Index: 02_RSS.pm
===================================================================
--- 02_RSS.pm   (Revision 16580)
+++ 02_RSS.pm   (Arbeitskopie)
@@ -554,12 +554,15 @@
   $params{y}= 0;
   
   $defs{$name}{".embed"}= "";
+  $defs{$name}{labelcounter}= {};
   
 
-  my ($x,$y,$z,$x1,$y1,$x2,$y2,$scale,$bgcolor,$boxwidth,$text,$imgtype,$srctype,$arg,$format);
+  my ($x,$y,$z,$x1,$y1,$x2,$y2,$scale,$bgcolor,$boxwidth,$text,$imgtype,$srctype,$arg,$format,%labels);
 
   my $cont= "";
-  foreach my $line (@layout) {
+  my $i = 0;
+  while ($i <= $#layout) {
+          my $line = $layout[$i++];
           # kill trailing newline
           chomp $line;
           # kill comments and blank lines
@@ -705,6 +708,17 @@
              $defs{$name}{".embed"} .= $arg."\n";
              $defs{$name}{".embed"} .= "</div>\n";
              #main::Debug "SET EMBED=" . $defs{$name}{".embed"};
+            } elsif($cmd eq "label") {
+              $labels{$def} = $i-1;
+              if (defined $defs{$name}{labelcounter}{$def}) {
+                $defs{$name}{labelcounter}{$def}++;
+              } else {
+                $defs{$name}{labelcounter}{$def} = 0;
+              }
+            } elsif($cmd eq "goto") {
+              if (defined $label{$def} && $defs{$name}{labelcounter}{$def} <= 100) {
+                $i = $label{$def};
+              }
          } else {
              Log3 $name, 2, "$name: Illegal command $cmd in layout definition.";
          }

Damit kann ich jetzt ein Label setzen, zu dem ich dann zurückspringen kann:
...
label testlbl
moveby 0 15
text x y {"Zeile ".$defs{rss_Test}{labelcounter}{testlbl}}
condition {$defs{rss_Test}{labelcounter}{testlbl} < 5}
goto testlbl
condition {1}
...

Natürlich besteht damit die Gefahr, eine Endlosschleife in die Layoutdefinition einzubauen. Deshalb habe ich die maximale Anzahl an Rücksprüngen pro Label erst einmal auf 100 begrenzt. (Das lässt sich aber bestimmt intelligenter regeln.)

Ich habe nun mehrere Fragen:
  • Wäre eine solche Funktionalität auch für andere von Interesse?
  • Besteht die Chance, das als Patch ins Modul aufgenommen zu bekommen?
  • Gibt es einen schöneren Weg, den Zähler für die Verwendung im Layout zur Verfügung zu stellen, als über $defs{rss_Test}{labelcounter}{testlbl}?
  • Welchen besseren Weg gäbe es, Endlosschleifen zu verhindern?

Gruß,
- Mirko -

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4250
Antw:RSS um label und goto erweitern
« Antwort #1 am: 13 April 2018, 12:27:32 »
Hallo Mirko,

das hat gute Chancen, aufgenommen zu werden. Sobald ich mich wieder an FHEM mache, werde ich mich darum kümmern. Auch um eine Erleichterung für $defs{rss_Test}{labelcounter}{testlbl}.

Ich wäre Dir dankbar, wenn Du die commandref erweitern könntest und mir das insgesamt nochmal als Patch anhängst.

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

Offline mrmist

  • New Member
  • *
  • Beiträge: 21
Antw:RSS um label und goto erweitern
« Antwort #2 am: 15 April 2018, 15:32:22 »
Hallo Boris,

anbei mein Patch-Vorschlag.

Gruß,
- Mirko -

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4250
Antw:RSS um label und goto erweitern
« Antwort #3 am: 18 April 2018, 22:03:01 »
Hi Mirko,

habe jetzt eine Variante gefunden, die bei Verwendung von einem Label foo die Variable $foo auf den Durchlaufzähler setzt.

Dabei ist mir aufgefallen, dass es m.E. keinen Grund gibt, den Labelzähler in $defs{$name} zu speichern, da die Zählung lokal in RSS_evalLayout() erfolgt. Wir könnten auch my $labelcount{foo} benutzen.

Wie siehst Du das?

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

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4250
Antw:RSS um label und goto erweitern
« Antwort #4 am: 19 April 2018, 21:30:27 »
Hallo,

ich habe das jetzt nochmal gründlich überarbeitet. Wesentliche Neuerungen:
  • goto springt Labels an, die vor oder nach dem goto liegen
  • goto foo if condition
  • $foo beinhaltet den Zähler, wie oft die Zeile mit dem Label namens foo passiert wurde (nicht wie oft goto dort hingesprungen ist!)

Über Tests der anhängenden Version würde ich mich freuen.

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

Offline mrmist

  • New Member
  • *
  • Beiträge: 21
Antw:RSS um label und goto erweitern
« Antwort #5 am: 19 April 2018, 22:13:43 »
Hallo Boris,

das klingt super. Ich kann es aber erst morgen Abend testen, dann bin ich wieder zu Hause.  :)

Gruß,
- Mirko -

Offline mrmist

  • New Member
  • *
  • Beiträge: 21
Antw:RSS um label und goto erweitern
« Antwort #6 am: 22 April 2018, 14:21:59 »
Hallo!

Es funktioniert super!  :)
Besonders die Möglichkeit, eine Bedingung für ein goto direkt dahinter zu schreiben ist genial.  8)

Viele Grüße und riesigen Dank an Boris,
- Mirko -

Offline mrmist

  • New Member
  • *
  • Beiträge: 21
Antw:RSS um label und goto erweitern
« Antwort #7 am: 22 April 2018, 14:49:06 »
Hallo,

eines ist mir gerade doch noch aufgefallen: Beim ersten Durchlauf einer Schleife ist der Label-Zähler 1 und nicht wie in der Commandref beschrieben 0. Also muss entweder der Code oder die Commandref angepasst werden.  ;D

Gruß,
- Mirko -

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4250
Antw:RSS um label und goto erweitern
« Antwort #8 am: 22 April 2018, 16:40:51 »

Zitat
The counter starts with zero and is increased with every hit of the label.

Ist das verständlich?

Solange wir noch nicht am Label vorbeigekommen sind, steht der Zähler auf 0. Sobald wir das Label erreichen, geht er auf 1. Wenn das goto davor ist und nach vorne springt, ist also $label beim ersten Mal 0, wenn das goto danach ist und zurück springt, ist also $label beim ersten Mal 1.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline mrmist

  • New Member
  • *
  • Beiträge: 21
Antw:RSS um label und goto erweitern
« Antwort #9 am: 22 April 2018, 17:21:47 »
Hast recht, ich habe es falsch verstanden.  :-[

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4250
Antw:RSS um label und goto erweitern
« Antwort #10 am: 22 April 2018, 17:30:57 »
Hi Mirko,

eine Anleitung soll leicht verständlich sein. Habe daher eine Erläuterung dazugetan.

Eingecheckt, morgen um 8 per Update verfügbar.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15089
  • s/fhem\.cfg/configDB/g
Antw:RSS um label und goto erweitern
« Antwort #11 am: 31 Mai 2018, 12:33:47 »
Eingecheckt, morgen um 8 per Update verfügbar.

Hallo Boris,

ich glaube, Du musst nochmal ran und die Sache mit den Labels überarbeiten.

In Zeile 613 rufst Du EvalSpecials(undef,%count) auf. Der erste Parameter darf aber nicht undef sein.

Siehe auch: https://forum.fhem.de/index.php/topic,88271.msg806925.html#msg806925


-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.12.2018 - 18:30 Uhr

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4250
Antw:RSS um label und goto erweitern
« Antwort #12 am: 03 Juni 2018, 21:53:17 »
gefixt und eingecheckt
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!