FHEM Forum

CUL - Entwicklung => Wunschliste => Thema gestartet von: iwan am 11 Dezember 2014, 21:46:22

Titel: FHEM command 'displayreading'
Beitrag von: iwan am 11 Dezember 2014, 21:46:22
Analog zum FHEM Kommando 'displayattr' habe ich mir ein analoges Kommando 'displayreading' zur einfachen und schnellen Übersicht der gemeldeten Batterie-Zustände gewünscht:

displayreading .* battery

ak_Heizung battery ok 2014-12-11 19:20:15
ak_Shutter battery ok 2014-12-11 21:19:13
ak_ThermoTaster battery ok 2014-12-07 18:23:52
az_Heizung battery ok 2014-12-11 21:21:49
az_Shutter_li battery ok 2014-04-07 09:43:13
az_Shutter_re battery ok 2014-04-07 09:43:11
...


Den Wunsch habe ich mir gleich selbst erfüllt :-)
In Ermangelung eines eigenen Zugangs zu den FHEM-Sourcen stelle ich die Code-Schnipsel hier zur Verfügung.
Vielleicht 'erbarmt' sich ein Entwickler und checked meine Änderungen bei Gelegenheit in die nächste FHEM-Version ein.

In der Datei 'fhem.pl' ist folgender Eintrag in %cmd (am besten hinter 'displayattr') erforderlich:

  "displayreading"=> { Fn=>"CommandDisplayReading",
    Hlp=>"<devspec> [readingname],display device reading" },


In der Datei 'fhem.pl' habe ich folgende subroutine hinter sub CommandDisplayAttr eingefügt:

#############
sub
CommandDisplayReading($$)
{
  my ($cl, $def) = @_;

  my @a = split(" ", $def, 2);
  return "Usage: displayreading <name> [<attrname>]\n$namedef" if(@a < 1);

  my @rets;
  my @devspec = devspec2array($a[0]);

  foreach my $sdev (@devspec) {

    if(!defined($defs{$sdev})) {
      push @rets, "Please define $sdev first";
      next;
    }
    my $d = (@devspec > 1 ? "$sdev\t" : "");

    $a[0] = $sdev;
    my $readingspec= ($a[1] ? '^' . $a[1] . '$' : '.');

    foreach my $reading (grep { /$readingspec/ }
                                keys %{$defs{$sdev}{READINGS}} ) {
      my $val= $defs{$sdev}{READINGS}{$reading}{VAL} || '-';
      my $ts = $defs{$sdev}{READINGS}{$reading}{TIME} || '-';

      push @rets, "$d$reading\t$val\t$ts";
    }

  }

  return join("\n", @rets);
}


Das war's schon.

Happy Hacking,
Iwan.
Titel: Antw:FHEM command 'displayreading'
Beitrag von: iwan am 11 Dezember 2014, 21:52:50
Mist :-(

Ich habe meinen Beitrag in die falsche 'Wunschliste' eingestellt.
Sorry, folks.

Desweiteren fehlt auch die Deklaration des FunktionsPrototypen hinter 'sub CommandDisplayAttr($$);'
sub CommandDisplayReading($$);

Beim nächsten will ich 'mal beim Posten wacher sein :-)

Gruß, Iwan.
Titel: Antw:FHEM command 'displayreading'
Beitrag von: justme1968 am 12 Dezember 2014, 09:41:59
hallo ivan,

hast du gesehen das das list kommando schon kann was du möchtest?

list. * battery

du kannst damit internals, readings und attribute auflisten

ich vermute dislayattr ist ein überbleibsel bevor das alles mit list ging.

gruß
  andre

ps: ich hoffe du ärgerst dich jetzt nicht zu sehr.

pps: um fhem um zusätzliche kommandos zu erweitern musst du nicht fhem.pl patchen. die zusätzlichen kommandos können jeweils komplett in einem eigenen .pl file stehen. so wie z.b. IF, DOIF oder copy und sogar telnet.

Titel: Antw:FHEM command 'displayreading'
Beitrag von: iwan am 12 Dezember 2014, 21:36:35
Hallo Andre,

Mist!
(oder auch nicht :-)

Danke für Deinen Hinweis, ich hätte wohl doch die Doku genauer lesen sollen, statt mich von der Help-Synopsis
list [ <devspec> ] in die Irre leiten zu lassen :-(

Dann gehe ich mal auf die Suche nach Doku, die besagt, wie sich eigene Erweiterung/Kommands in eigenen Dateien und dynamisch einbinden lassen. Das interessiert mich jetzt doch :-)

Gruß, Iwan.
Titel: Antw:FHEM command 'displayreading'
Beitrag von: justme1968 am 12 Dezember 2014, 22:06:28
der help text ist tastächlich unvollständig. aber die commandref stimmt wenigstens :)

am besten schaust du in den bestehenden files nach. 98_copy.pm ist von den oben genannten beispielen vermutlich das einfachste.

gruss
  andre
Titel: Antw:FHEM command 'displayreading'
Beitrag von: iwan am 13 Dezember 2014, 00:08:52
Hallo Andre,

guter Hinweis.
Damit ist schon fast alles klar :-)

Danke, Iwan.
Titel: Antw:FHEM command 'displayreading'
Beitrag von: FHEMAN am 13 Januar 2015, 21:21:34
Zitat von: justme1968 am 12 Dezember 2014, 09:41:59
pps: um fhem um zusätzliche kommandos zu erweitern musst du nicht fhem.pl patchen. die zusätzlichen kommandos können jeweils komplett in einem eigenen .pl file stehen. so wie z.b. IF, DOIF oder copy und sogar telnet.
Gibt es dazu irgendwo eine Anleitung?
Titel: Antw:FHEM command 'displayreading'
Beitrag von: justme1968 am 13 Januar 2015, 21:24:34
Zitat von: justme1968 am 12 Dezember 2014, 22:06:28
am besten schaust du in den bestehenden files nach. 98_copy.pm ist von den oben genannten beispielen vermutlich das einfachste.
Titel: Antw:FHEM command 'displayreading'
Beitrag von: FHEMAN am 13 Januar 2015, 23:25:39
Ist mir für den Anfang irgendwie doch zu hoch.. trotzdem danke!