Webfrontend PGM2 - Set-to Buttons und State zeigen eventMap Ersetzungen an

Begonnen von Guest, 14 August 2011, 23:24:47

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo Leute,

da ich mir immer überlegen muss, ob ich nun On oder Off klicken muss
um meinen Rolladen runter zu fahren, habe ich mir die entsprechnde
Stelle im 01_FHEMWEB.pm angeschaut, ob man dies einfach ändern kann.

Dort habe ich in der Zeile 856 folgende Einträge gefunden:

        if($allSets) {
          pH "cmd.$d=set $d on$rf",  "on", 1;
          pH "cmd.$d=set $d off$rf", "off", 1;
        }

Diese habe ich nun einfach gegen die folgenden Zeilen ausgetauscht:

        if($allSets) {
          pH "cmd.$d=set $d on$rf",  ReplaceEventMap($d, "on", 1), 1;
          pH "cmd.$d=set $d off$rf", ReplaceEventMap($d, "off", 1), 1;
         }

Und schon zeigt die WEB-Oberfläche nach einem "reload 01_FHEMWEB"
statt On und Off die Attribute die ich mit eventMap zugewiesen habe.
z.B.
          attr Rolladen eventMap on:auf off:zu

Da Rudi auch die Icon-Verwaltung genial programmiert hat, ist es
direkt möglich für beliebige Zustände (z.B. AUF und ZU) ein Icon zu
erstellen (benutzt dazu euer Lieblings-Zeichenprogramm) und diese dann
z.B. als FS20.zu.gif  bzw. FS20.auf.gif (auch PNG und JPG möglich) zu
speichern. Diese werden dann einfach in das FHEM-Verzeichnis kopiert.
Schon wird der Status mit den neuen Symbolen angezeigt.
Ob die dann auch so nett aussehen wie die neuen Icons für On, Off und
On/Off-for-Timer hängt von euren graphischen Fähigkeiten ab ;-)

Viele Grüße und eine erfolgreiche Woche wünscht,

Harry

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Diese habe ich nun einfach gegen die folgenden Zeilen ausgetauscht:

Danke, habs eingecheckt. Und fuer Touchpad/Scmallscreen den ganzen Knopf als
Link aktiviert.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

On 15 Aug., 18:23, Rudolf Koenig wrote:
> > Diese habe ich nun einfach gegen die folgenden Zeilen ausgetauscht:
>
> Danke, habs eingecheckt. Und fuer Touchpad/Scmallscreen den ganzen Knopf als
> Link aktiviert.

Hallo Rudi,

das war für mich noch recht einfach rauszufinden, eine andere Sache im
Zusammenhang mit eventMaps bekomme ich mit meinen mangelhaften Perl-
Kenntnissen noch nicht hin.
Mir ist aufgefallen, dass ein set-Befehl beide eventMap-Entsprechungen
erfüllt, es geht also "set Rollanden on" sowie "set Rollanden
auf" (eventMap on:auf off:zu).
Das ganze funktioniert allerdings nicht mehr bei notifys. Wenn man nun
mehrere notifys definiert hat, und dann mit eventMap States
umdefiniert, muss man alle notifys nachziehen.

Siehst du einen Weg dies mit geringem Aufwand in der 91_notify.pm über
ReplaceEventMap hinzubekommen?

Vielleicht denkst du aber, es ist nicht sinnvoll dies zu machen, dann
sag es mir bitte.

Viele Grüße,

Harry

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Siehst du einen Weg dies mit geringem Aufwand in der 91_notify.pm über
> ReplaceEventMap hinzubekommen?

Dafuer muessten in DoTrigger die Zeilen

  for(my $i = 0; $i < @{$c}; $i++) {
    $c->[$i] = ReplaceEventMap($dev, $c->[$i], 1);
  }

mit

  my @replArr;
  foreach my $orig (@{$c}) {
    my $replaced = ReplaceEventMap($dev, $orig, 1);
    push @replArr, $replaced if($replaced ne $orig);
  }
  push @{$c}, @replArr;

ersetzt werden. Wuerde bedeuten, dass fuer jede Ersetzung zwei Events durch die
notify-Kette laufen muessen, bin z.Zt etwas unentschlossen, ob es das Wert ist,
und nicht eher verwirrend ist.

Gruss,
  Rudi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

On 16 Aug., 19:21, Rudolf Koenig wrote:
> > Siehst du einen Weg dies mit geringem Aufwand in der 91_notify.pm ber
> > ReplaceEventMap hinzubekommen?
>
> Dafuer muessten in DoTrigger die Zeilen
>
>   for(my $i = 0; $i < @{$c}; $i++) {
>     $c->[$i] = ReplaceEventMap($dev, $c->[$i], 1);
>   }
>
> mit
>
>   my @replArr;
>   foreach my $orig (@{$c}) {
>     my $replaced = ReplaceEventMap($dev, $orig, 1);
>     push @replArr, $replaced if($replaced ne $orig);
>   }
>   push @{$c}, @replArr;
>
> ersetzt werden. Wuerde bedeuten, dass fuer jede Ersetzung zwei Events durch die
> notify-Kette laufen muessen, bin z.Zt etwas unentschlossen, ob es das Wert ist,
> und nicht eher verwirrend ist.
>
> Gruss,
>   Rudi

Hallo Rudi,

mit einem richtigen Perl-Debugger gehts doch :-D ;-)

Mein Vorschlag: In der 91_notify.pm in notify_Exec($$) Zeile 63
folgendes einfügen / ersetzen:

    my @Daten = ($n,$s);
    my @se = ReplaceEventMap($n, \@Daten, 0);
    if($n =~ m/^$re$/ || "$n:$s" =~ m/^$re$/ || "$n:@se[1]" =~ m/^$re
$/) {

Ist zwar noch nicht ganz ausgegoren, da ich noch die Warning "Use of
uninitialized value in join or string...) bekomme - wohl wegen dem
@se[1], aber prinzipiell sollte es doch so ähnlich gehen, oder??

Viele Grüße,

Harry

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

> Ist zwar noch nicht ganz ausgegoren, da ich noch die Warning "Use of
> uninitialized value in join or string...) bekomme - wohl wegen dem
> @se[1], aber prinzipiell sollte es doch so ähnlich gehen, oder??

So mit dieser Änderung funktioniert es jetzt auch ohne Warnung:

    my @se = ($n,$s);
    @se = ReplaceEventMap($n, \@se, 0);
    shift @se;
    if($n =~ m/^$re$/ || "$n:$s" =~ m/^$re$/ || "$n:@se" =~ m/^$re$/)
{

Ist vielleicht auch noch ohne 3. ODER-Bedingung zu lösen, aber
ReplaceEventMap gibt nicht das Gleiche zurück, wenn bei einem Device
keine EventMap gesetzt ist (zumindest ist @se dann []).

Viele Grüße,

Harry

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

On 16 Aug., 22:24, hmayr wrote:
> So mit dieser Änderung funktioniert es jetzt auch ohne Warnung:
>
>     my @se = ($n,$s);
>     @se = ReplaceEventMap($n, \@se, 0);
>     shift @se;
>     if($n =~ m/^$re$/ || "$n:$s" =~ m/^$re$/ || "$n:@se" =~ m/^$re$/)
> {
>

Hallo Rudi,

irgendwie sind wir mit dieser Diskussion nicht fertig geworden und ich
sehe, dass das letzte updatefhem auch hier wieder meine eigenen
Änderungen platt gemacht hat :-(

Viele Grüße,

Harry

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

Hallo Harry,

> irgendwie sind wir mit dieser Diskussion nicht fertig geworden und ich
> sehe, dass das letzte updatefhem auch hier wieder meine eigenen
> Änderungen platt gemacht hat :-(

Nicht fertig geworden: ich war halt nicht ueberzeugt, dass die Aenderung
reinkommen muss, bzw. ob das jetzt eine so hohe Prio hat. updatefhem ist nicht
fuer Entwickler da, die sollten CVS verwenden, damit gehen solche Aenderungen
nicht verloren.

Die Diffs konnte ich nicht uebernehmen: erstens kommt mit einem EventMap $n im
Regexp doppelt, weiterhin wurde % bzw. %EVENT mit dem "falschen" ersetzt. Ich
habe jetzt meine Variante eingecheckt, und hoffe nichts uebersehen zu haben.

Gruss,
  Rudi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com