erste beta - fronthem, smartVISU (closed, Bitte die Anschlussthreads benutzen)

Begonnen von herrmannj, 23 Dezember 2014, 22:36:44

Vorheriges Thema - Nächstes Thema

herrmannj

Zitat von: bgewehr am 28 März 2015, 09:54:36
Eine Lösung mit einem customWidgets Folder, der automatisch mit im Suchpfad ist, fände ich aber auch gut!
Im Prinzip funktioniert das doch - oder ?

vg
jörg

bgewehr


Zitat von: herrmannj am 28 März 2015, 10:09:41
Im Prinzip funktioniert das doch - oder ?

vg
jörg

Ich muss nochmal genau prüfen, aber ich glaube, wenn ich das sv-cleaninstall clone durch Hinzufügen verändert habe, kann ich kein GIT pull mehr machen ohne vorher git stash, dann sind aber alle meine Veränderungen Weg...

Es ist also der Updatepfad, der mich beschäftigt.

Wir könnten aber einen customwidgets Folder in das cleaninstall aufnehmen, ihn in die Ladeprozesse integrieren und dort den Inhalt des widgets GITs ablegen, dann ist das nicht so kompliziert mit den Updates...

Vorschläge?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

vbs

Ich hab da mal etwas gebastelt, um eigene Widgets komplett zu trennen vom eigentlichen SmartVisu-Verzeichnisbaum (soll auch unabhängig von pages sein). Und zwar hab ich in die config.ini einen weiteren Parameter "user_directory" hinzugefügt (und entsprechend "lib/functions.config.php") erweitert:
[smartVISU]
version = '2.8'
multiuser = true
ident_by_ip = true
ip_allowed = ''
ident_by_cert = false
ca_cert = ''
auto_add = true
user_directory = 'smartvisu-widgets'


Dann die index.php erweitert, damit dieser Pfad in die Suchpfade aufgenommen wird:
$loader->addPath(const_path.user_directory);

Außerdem zwei Variablen "icon0user" und "icon1user" angelegt, damit Icons auch aus dem User-Dir geladen werden können:
if (config_design == 'ice')
{
$twig->addGlobal('icon1', 'icons/bl/');
$twig->addGlobal('icon0', 'icons/sw/');
   
$twig->addGlobal('icon1user', user_directory . 'icons/bl/');
$twig->addGlobal('icon0user', user_directory . 'icons/sw/');

}
elseif (config_design == 'greenhornet')
{
$twig->addGlobal('icon1', 'icons/gn/');
$twig->addGlobal('icon0', 'icons/ws/');

$twig->addGlobal('icon1user', user_directory . 'icons/gn/');
$twig->addGlobal('icon0user', user_directory . 'icons/ws/');
  }
else
{
$twig->addGlobal('icon1', 'icons/or/');
$twig->addGlobal('icon0', 'icons/ws/');

$twig->addGlobal('icon1user', user_directory . 'icons/or/');
$twig->addGlobal('icon0user', user_directory . 'icons/ws/');
}


In seinen Widgets muss man dann jedoch, je nachdem, ob die Icons aus SmartVISU oder aus dem User-Dir kommen, entweder "icon0" oder "icon0user" angeben (bzw. icon1).

Nun habe ich das smartvisu-widgets-Repository (https://github.com/herrmannj/smartvisu-widgets) als Unterverzeichnis in mein SV gelegt (als Submodule, damit Git nicht verwirrt wird). Das klappt auch soweit und ich kann nun Widgets aus dem Verzeichnis zB einbinden mit "{% import "homematic/widget_homematic.html" as homematic %}". Und er lädt dann auch die Icons entsprechend aus "smartvisu-widgets/icons" (musste dazu jedoch zB in dem Homematic-Widget ein Icon umstellen von icon0 auf icon0user).

Was jetzt jedoch noch fehlt, ist ein Mechanismus, um die js-Dateien aus dem User-Dir einzubinden. Da bin ich im Moment noch am Grübeln...

Ich werde die Sachen nachher mal versuchen, sauber in mein Git einzuchecken. Kann ich dann gerne posten bei Interesse. Ist natürlich erstmal nur ein Vorschlag. Was haltet ihr davon? Ideen zur Verbesserung?

Hans Franz

#2103
Zitat von: bgewehr am 27 März 2015, 17:48:39
Hallo, kann ich so nicht bestätigen, klappt bei mir auch mit dem von mir geposteten Code vollständig korrekt. Woran könnte das liegen?

Ich erhalte bei eingesetzten Zeiten korrekte Zeiten und bei weggelassenen Zeiten korrekt "" im timestring, was der WDT auch korrekt auswertet.

Ist Dein UZSU-Konverter aktuell?

Hallo Bernd,
Ich raff's nicht.

UZSU_execute mit den neuen Zeilen ergibt immer {sunrise_abs("REAL",0,"","")}, und damit eine Zeit von 00:00. Ist ja auch korrekt lt. commandref:
ZitatThe second and third specify min and max values (format: "HH:MM").

Der UZSU-Konverter:
###############################################################################
# For use with UZSU-Widget in SV and UZSU-notify in fhem
# Setreading a device reading using JSON conversion (gadval => reading=decode_json() => setval => encode_json(reading) )
# the reading (e.g. "uzsu") must be created manually for each USU-enabled device in fhem using "setreading <device> uzsu {}"
# in the fhem commandline
###############################################################################

sub UZSU(@)
{
  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::fronthem_decodejson(main::ReadingsVal($device, $reading, ''));
$param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
$gadval = main::fronthem_encodejson($gadval);
$gadval =~ s/;/;;/ig;
$param->{result} = main::fhem("setreading $device $reading $gadval");
$param->{results} = [];
    return 'done';
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: UZSU';
  }
  return undef;
}


Irgenwo hakt es noch bei mir.

Gruß
Hans

Edit:
Habe es vorerst 'mal so gelöst:

my $sun_min = $uzsu->{list}[$i]->{timeMin} ne '' ? $uzsu->{list}[$i]->{timeMin} :'00:00';
my $sun_max = $uzsu->{list}[$i]->{timeMax} ne '' ? $uzsu->{list}[$i]->{timeMax} :'23:59';
$weekdays_part = $weekdays_part.' '.$weekdays.'|{'.$uzsu->{list}[$i]->{event}.'_abs("REAL",'.$uzsu->{list}[$i]->{timeOffset} * 60 .',"'.$sun_min.'","'.$sun_max.'")}|'.$uzsu->{list}[$i]->{value};
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

bumbumb

Hallo
ich habe es jetzt mit dem HM-cc-RT-DN hinbekommen. Was aber noch fehlt ist der aktuelle Baterriestatus. Was muss gemacht werden, damit dieser Funktioniert. Wie kann man die Umschaltzeiten von 2,5 Minuten verkürzen. Wie kann man die Texte für den Status anzeigen ohne die --- Striche
Bin für jeden Tip dank bar. Danke
Bumbumb

vbs

Umschaltzeit kann man mMn nicht verändern. Die Striche bekommst du wege, indem du für txt-gad null oder "" übergibst. Batterie musst du ein gad anlegen und mit Batterie-Level-Reading per NumDirect verknüpfen. So zumindest ging es bei mir.

bumbumb

ok,
ich habe es so gemacht. In Fhem steht für Batterylevel 3.2 und battery = ok, das reading ist angelegt aber das Icon ändert sich nicht. Hast du noch eine Idee. Wie ist es bei einem Schalten von Homeatic hat man dort auch die 2m5 min. bis dann das Licht angeht?. Wäre schön wenn es mit der Batterie noch klappen würde. Wofür sind den die --- gewesen?
Gruß
bumbumb

marvin78

@bumbum: Zur Batterie steht hier eine ganze Menge im Thread.

Der Statuswechsel kommt live. Und das bei JEDEM Homematic Device (max 2-3 Sekunden - in der Regel eher unter 1 Sekunde). Der Zeitversatz beim HM-Thermostat kommt daher, dass das Device nur alle paar Minuten aufwacht und dann den Befehle annimmt. Das ist ein völlig normales Verhalten und hat nichts mit Fronthem und SmartVisu zu tun.

bumbumb

danke für deine Info,

ich habe das homeatic device angelegt, leider fehlen die aktuellen Fhem Einstellungen dafür.
Könnt die die Fhem Einstellung dafür
id, txt, gad_actual, gad_set, gad_controlmode, gad_daytemp, gad_nighttemp, gad_window, gad_battery, gad_state, gad_txt, step, gad_valve, gad_humidity

posten wäre echt toll kann die richtigen einstellungen nicht finden

bumbumb

ich meine natürlich die Readings in Fhem

vbs

Zwei Sachen, die mir aufgefallen sind. Zum einen wird in FHEM der lauschende Websocket nicht mehr richtig geöffnet, wenn ich "shutdown restart" eingebe. Im Log erscheint dann sowas und es ist kein Zugriff mehr möglich:
2015.03.28 20:00:29 2: fronthem: ipc listener opened at port 16385
2015.03.28 20:00:29 1: Including ./log/fhem.save
2015.03.28 20:00:29 1: in INITIALIZED
2015.03.28 20:00:29 1: in INITIALIZED
2015.03.28 20:00:29 3: Opening sbserver device 192.168.2.232:9090
2015.03.28 20:00:29 3: sbserver device opened
2015.03.28 20:00:29 3: SB_SERVER_DoInit(sbserver): STATE: opened power: ?
2015.03.28 20:00:29 3: SB_SERVER_DoInit(sbserver): SB-Server is back again.
2015.03.28 20:00:29 2: 1
2015.03.28 20:00:29 0: Server started with 247 defined entities (version $Id: fhem.pl 8265 2015-03-22 13:58:15Z rudolfkoenig $, os linux, user tc, pid 17607)
2015.03.28 20:00:29 1: Perfmon: possible freeze starting at 20:00:25, delay is 4.977
2015.03.28 20:00:29 1: HMLAN_Parse: HMLAN0 new condition ok
2015.03.28 20:00:30 1: tv.fritz.box:55000 reappeared (wz_tv)
2015.03.28 20:00:30 3: ipc fronthem:127.0.0.1:52287 (ws): ws alive with pid 17609
2015.03.28 20:00:30 1: ipc fronthem:127.0.0.1:52287 (ws): ws could not open port 2121
2015.03.28 20:00:30 1: fronthem: thread ws closed for unknown reason

Wenn ich dann korrekt FHEM beende und händisch neu starte, dann funktioniert es wieder.

Und ich habe ziemlich viel solche Sachen im Log:

2015.03.22 12:32:48 1: in DEFINED
2015.03.22 12:32:48 1: in DEFINED
2015.03.22 12:32:48 1: in ATTR
2015.03.22 12:32:48 1: in ATTR
2015.03.22 12:32:48 1: in ATTR
2015.03.22 12:32:48 1: in ATTR
2015.03.22 12:32:48 1: in ATTR
2015.03.22 12:32:48 1: in ATTR
2015.03.22 12:33:46 1: in DELETED


Das kommt wohl aus der Datei 01_fronthem.pm:
sub
fronthem_Notify($$)
{
  my ($hash, $ntfyDev) = @_;
  my $ntfyDevName = $ntfyDev->{NAME};

  # responde to fhem system events
  # INITIALIZED|REREADCFG|DEFINED|RENAMED|SHUTDOWN
  if ($ntfyDevName eq "global")
  {
    foreach my $event (@{$ntfyDev->{CHANGED}})
    {
      my @e = split(' ', $event);
      Log3 ($hash, 1, "in $e[0]"); #TODO remove

Ist sogar schon mit "TODO remove" kommentiert. Sollte man das mal machen? Ich hab jetzt für mich erstmal das verbose-Level auf 0 gedreht. Das sollte ja erstmal helfen.

herrmannj

Du meinst vmtl nicht shutdown retart sondern was anderes (reload) ?

vg
jörg

vbs

Hm, ist das falsch? Doch doch, ich meine "shutdown restart". Das gebe ich als Befehl in FHEM ein, um FHEM neu zu starten.

herrmannj

ok - das "sollte" nicht. Was für ein os ist 'n das ?

btw die Zeile mit dem Log kannste bei Dir auskommentieren.

vg
jötg

vbs

Das ist ein TinyCore-Linux (http://distro.ibiblio.org/tinycorelinux/), das auf einem Windows 8.1 mit i5-CPU als VMWare läuft.