[gelöst] Anzeige Status in Smartvisu (Fenster threeStateSensor HM-Sec-RHS)

Begonnen von battery88, 28 September 2017, 11:46:42

Vorheriges Thema - Nächstes Thema

battery88

Hallo Miteinander

Ich habe erst kürzlich angefangen mir einige Komponenten zu Hause zu installieren.
Nun scheitere ich an einem wohl "einfachen" Thema, aber ich komme selbständig nicht mehr weiter.

Wie kann ich in der Smartvisu einen einfachen Status abfragen? Mit FHEM habe ich das Gerät schon verbunden.

Der State "tilted", "open" oder "closed" wird auch angezeigt.
Ich schaffe es aber nicht in Smartvisu diesen Status einfach abzufragen, geschweige dann grafisch darzustellen.

Ich habe es schon mit basic.value oder basic.dual probiert, aber es klappt einfach nicht.

Vielen Dank für eure Rückmeldung.
Gruss

herrmannj

#1
etwas mehr Info wäre hilfreich!

So siehts bei mir aus:
{{ basic.symbol('id.ovw.door.front.closed', 'sensor.door.front', 'Eingangstür geschlossen', 'fts_door.svg', 'closed', '', '#4cd964') }}
{{ basic.symbol('id.ovw.door.front.open', 'sensor.door.front', 'Eingangstür offen', 'fts_door_open.svg', 'open', '', '#ff3b30') }}

battery88

#2
Guten Morgen

Vielen Dank für die rasche Rückmeldung.
Ich habe nun das bei mir implementiert

{{ basic.symbol('Esszimmer.Fenster.closed', 'FensterBalkonEGlinks', 'Eingangstür geschlossen', 'fts_door.svg', 'closed', '', '#4cd964') }}
{{ basic.symbol(''Esszimmer.Fenster.open', 'FensterBalkonEGlinks', 'Eingangstür offen', 'fts_door_open.svg', 'open', '', '#ff3b30') }}

Leider kommt dann immer folgender Fehler:

Error accoured in twig-template engine!
error: Unexpected character "#"

Nun habe ich die Farbe einfach mal weggelassen; also:

{{ basic.symbol('FensterBalkonEGlinks.closed', 'Esszimmer.Fenster', 'Eingangstür geschlossen', 'fts_door.svg', 'closed') }}
{{ basic.symbol('FensterBalkonEGlinks.open', 'Esszimmer.Fenster', 'Eingangstür offen', 'fts_door_open.svg', 'open') }}

Das Problem ist es zeigt in der Visualisierung gar nichts an.
Habe ich da was vertauscht?

Das GAD heisst bei mir Esszimmer.Fenster und hat folgende Parameter:
mode: item
devide: FensterBalkonEGlinks
reading: state
Converter: direct
cmd set: state


Hast du denn 2 GAD oder gibt man mit GAD.closed und GAD.open den Status mit?

Vielen Dank im Voraus.





herrmannj

Ein GAD. Es wird jeweils das Symbol angezeigt wo die Bedingung ('closed', 'open') wahr ist.
Wenn die raute nicht funktioniert hast du wohl möglich weitere Fehler in einem der templates.

Fangen wir mal vorne an:
  Verbindung steht (fronthem device connected ?)
  GAD wir im editor als vorhanden an erkannt.

Denk dran das Du den sv cache nach Anpassungen löschen musst (Fehler von sv). der temp ordner.

battery88

Also das Problem mit der Route ist tatsächlich verschwunden, hab nochmals das Standard Room HTML verwendet.

Ja frohthem device ist connected

fronthemDevice
PC connected

Wenn ich auf das FronthemDevice klicke, dann kommt unter 100eten von Zeilen diese mit einem kleinen "Computer" links vorne dran.
(komischerweise haben das die Funksteckdosen nicht, die aber funktionieren)
Esszimmer.Fenster           FensterBalkonEGlinks

Auch in der DeviceOverview von FHEM ist der Status immer korrekt:
FensterBalkonEGlinks  open

Mit dem SV Cache meinst du einfach den Ordner "/var/www/html/smartvisu/temp" löschen? Habe ich auch gelöscht.

Immer wenn ich die Seite mit dem Fensterkontakt aufrufe kommt im FHEM Logfile folgende Zeile:
PC: error doing $result = fronthem::direct($param); Undefined subroutine &fronthem::direct called at (eval 988) line 1.

Ich werde daraus aber nicht wirklich schlau... :(

Kennt das Problem jemand?

Danke und Gruss



herrmannj

da stimmt was nicht.

Mach mal einen kompletten Neustart des fhem servers. Wenn das nicht reicht musst Du die Installation von fronthem, speziell fhconverter.pm, überprüfen.

vg
joerg

battery88

ich habe den ganzen Raspberry neu gestartet; es kommt auch eine Fehlermeldung (Nur anderer eval?)
error doing $result = fronthem::direct($param); Undefined subroutine &fronthem::direct called at (eval 57) line 1.

Es kann nicht daran liegen, dass ich bei FHEM ein Kennwort auf das Webinterface gesetzt habe?

Komisch ist, dass sich andere Geräte wie die Lampe (Steckdose) ein und ausschalten lässt, der Status angezeigt wird etc.
Was kann ich denn an dieser Datei überprüfen? Hab da dran noch nichts geändert. Sie lautet wie folgt:

Muss ich denn am fhconverter was eigenes ändern? Ich habe ja den Converter direct verwendet.


##############################################
# $Id: fhconverter.pm 21 2015-02-13 20:25:09Z. herrmannj $

package fronthem;
use strict;
use warnings;

###############################################################################
#
# Read status and trigger a fhem notify (gadval == notify => trigger)
#
###############################################################################
sub Trigger(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};
  my $device = $param->{device};
  my $attribute = $param->{reading};
  my $event = $param->{event};
  my @args = @{$param->{args}};
  my $cache = $param->{cache};
  my $result = '';
  if ($param->{cmd} eq 'get')
  {
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
    $param->{gadval} = main::ReadingsVal($device, $attribute, '');;
    $param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
    # TODO check with bernd alternative syntax: trigger <arg0> gadval or other options
    $result = main::fhem('trigger '.$device);
    return 'done';
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: Trigger';
  }
  return undef;
}
###############################################################################
#
# Read and write fhem device Attributes (gadval == attribute == setval)
#
###############################################################################
sub Attribute(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};
  my $device = $param->{device};
  my $attribute = $param->{reading}; # TODO check with bernd usage of args to keep reading free to trigger
  my $event = $param->{event};
  my @args = @{$param->{args}};
  my $cache = $param->{cache};
  my $result = '';

  if ($param->{cmd} eq 'get')
  {
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
    $param->{gadval} = main::AttrVal($device, $attribute, '');
    $param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
    $result = main::fhem('attr '.$device.' '.$attribute.' '.$gadval);
    return 'done';
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: Direct';
  }
  return undef;
}
###############################################################################
#
# Read fhem device Reading timestamps (gadval == timestamp)
#
###############################################################################
sub ReadingsTimestamp(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};
  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
    $param->{gadval} = main::ReadingsTimestamp($device, $reading, 0);
    $param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
    return 'done';
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: Readingstimestamp';
  }
  return undef;
}


###############################################################################
#
# direkt relations (gadval == reading == setval)
#
###############################################################################
sub Direct(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};

  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, '');
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
$param->{gadval} = $event;
$param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
$param->{result} = $gadval;
$param->{results} = [];
    return undef;
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: Direct';
  }
  return undef;
}

###############################################################################
#
# direct relations (gadval == reading == setval)
# numerical, @param min and max
#
###############################################################################
sub NumDirect(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};

  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, '');
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    return "NumDirect converter got [$event] from $device, $reading but cant interpret it as a number" unless $event =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/;
    $event = $1;
    $param->{gad} = $gad;
    $param->{gadval} = $event;
    $param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
my $min = $args[0];
my $max = $args[1];
my $adj = 0;
return "NumDirect converter received [$gadval] but cant interpret it as a number" unless $gadval =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/;
    $gadval = $1;

if (defined($min) && ($gadval < $min))
{
      my $s = ($reading eq 'state')?'':$reading;
      $gadval = $min;
      main::fhem("trigger $device $s $gadval");
    }
if (defined($max) && ($gadval > $max))
{
      my $s = ($reading eq 'state')?'':$reading;
      $gadval = $max;
      main::fhem("trigger $device $s $gadval");
    }

  $param->{result} = $gadval;
  $param->{results} = [];
    return undef;
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: Direct';
  }
  return undef;
}

###############################################################################
#
# connect fhem device with on|off state to switch
#
###############################################################################
sub OnOff(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};

  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, 'off');
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
$param->{gadval} = (lc($event) eq 'off')?'0':'1';
$param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
$param->{result} = ($gadval)?'on':'off';
$param->{results} = [];
    return undef;
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: OnOff';
  }
  return undef;
}

###############################################################################
#
# numerical readings, one way fhem->fronthem
#
###############################################################################
sub NumDisplay(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};

  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, '0');
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    return "NumDisplay converter got [$event] from $device, $reading but cant interpret it as a number" unless $event =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/;
    $event = $1;
my $format = (@args)?$args[0]:"%.1f";
    $param->{gad} = $gad;
$param->{gadval} = sprintf($format, $1);
$param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
    return 'done'; # only a display, no set
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: TBD!!!';
  }
  return undef;
}

###############################################################################
#
# RGB device, param: gad_r, gad_g, gad_b
# send: RGB HEX reading into three gad (r,g,b)
# rcv: 3 gad, serielized. Assembled to RGB HEX
#
###############################################################################
sub RGBCombined(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};

  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  return "error $gad: converter syntax: missing paramter" if (@args != 3);
  if ($param->{cmd} eq 'get')
  {
    $event = main::ReadingsVal($device, $reading, '000000');
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    return 'done' if ($gad ne $args[0]); #only one outgoing msg desired but we get triggered three times (each of r,g,b)
    push @{$param->{gads}}, ($args[0], hex substr($event, 0, 2), $args[1], hex substr($event, 2, 2), $args[2], hex substr($event, 4, 2));
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
    my $count = $cache->{$gad}->{count};
    foreach my $g (@args)
    {
      return 'done' if ($cache->{$g}->{count} != $count);
    }
    my $rgb = sprintf("%02x%02x%02x", $cache->{$args[0]}->{val}, $cache->{$args[1]}->{val}, $cache->{$args[2]}->{val});
    $param->{result} = $rgb;
    $param->{results} = [];
    return undef;
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: RGBCombined gad_r, gad_g, gad_b';
  }
  return undef;
}


1;

herrmannj

Der Converter is case sensitive (wie alles andere auch ;) )

Wenn Du die Werte aus der Autovervollständigung nimmst (vermute ich) gehts besser :) -> Direkt

battery88

Vielen herzlichen Dank für deine Mühe und Geduld mit mir - es lag tatsächlich daran, das hätte ich nie gedacht.
Da wär ich wahrscheinlich in 1 Monat noch nicht drauf gekommen...

(zumal die anderen Status klein geschrieben werden, auch mit Autovervollständigung)

Vielen Dank und
Gruss