FHEM command 'displayreading'

Begonnen von iwan, 11 Dezember 2014, 21:46:22

Vorheriges Thema - Nächstes Thema

iwan

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.

iwan

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.

justme1968

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.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

iwan

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.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

iwan

Hallo Andre,

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

Danke, Iwan.

FHEMAN

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?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FHEMAN

Ist mir für den Anfang irgendwie doch zu hoch.. trotzdem danke!
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB