Zitat von: rudolfkoenig am 08 September 2022, 12:28:24Ich wuerde mit einem at die Zeit der letzten Kommunikation (gespeichert im Internal cul868_TIME) auswerten, evtl gekoppelt mit regelmaessiger Abfrage der Version.
# after x failures reopen
my $errorcnt=3;
# try reopen x times
my $tryreopen=5;
# check cul
my $chkCUL="cubeCUN2";
# check changing cul reading
my $chkReading="cubeCUN2_TIME";
define cubeCUN2_chk_at at +*00:01:00 set x=1
DEF +*00:01:00 {
# after x failures reopen
my $errorcnt=3;
# try reopen x times
my $tryreopen=5;
# check cul
my $chkCUL="cubeCUN2";
# check changing cul reading
my $chkReading="cubeCUN2_TIME";
my $prefix="chk_";
# get curtime internal
my $internaltime=InternalVal("$chkCUL","$chkReading","unknown");
# get last time
my $internaltimeLast=ReadingsVal("$chkCUL", "$prefix"."time_internal_last", "0");
my $reopencounter=ReadingsVal("$chkCUL", "$prefix"."reopen_counter", "0");
my $reopencountertry=ReadingsVal("$chkCUL", "$prefix"."reopen_counter_try", "0");
fhem("setReading $chkCUL $prefix"."time_internal $internaltime");
# check if time changed
if ("$internaltime" eq "$internaltimeLast")
{ $reopencounter++;
Log3("global",3,"DEBUG-AT:$chkCUL: Reading $chkReading not changed $reopencounter times! Device offline?");
# reset reopencounter after 100 times
if ($reopencounter > 100) {$reopencounter=0};
fhem("setReading $chkCUL $prefix"."reopen_counter " . $reopencounter);
}
else
{ Log3("global",3,"DEBUG-AT:$chkCUL: Reading $chkReading changed. Device alive.");
fhem("setReading $chkCUL $prefix"."time_internal_last $internaltime");
if ($reopencounter>0) {fhem("setReading $chkCUL $prefix"."reopen_counter 0")};
if ($reopencountertry>0) {fhem("setReading $chkCUL $prefix"."reopen_counter_try 0")};
$reopencounter=0;$reopencountertry=0;
}
# reopen part
if ($reopencounter > $errorcnt)
{ $reopencountertry++;
if ($reopencountertry < $tryreopen+1)
{ Log3("global",3,"DEBUG-AT:$chkCUL: Try $reopencountertry/$tryreopen to reopen.");
fhem("set $chkCUL reopen");
}
else
{ Log3("global",3,"DEBUG-AT:$chkCUL: Try reopen failed $tryreopen times. Abort reopen!");
$reopencountertry=$tryreopen;
}
fhem("setReading $chkCUL $prefix"."reopen_counter_try " . $reopencountertry);
}
}
FUUID 6645271b-f33f-37ef-3475-5a484d4d8f7f19e4
NAME cubeCUN2_chk_at
NR 6828
NTM 14:17:05
PERIODIC yes
RELATIVE yes
REP -1
STATE Next: 14:17:05
TIMESPEC 00:01:00
TRIGGERTIME 1715861825.88127
TRIGGERTIME_FMT 2024-05-16 14:17:05
TYPE at
eventCount 874
.attraggr:
.attrminint:
Helper:
DBLOG:
state:
logdb:
TIME 1715861766.07761
VALUE Next: 14:17:05
READINGS:
2024-05-16 14:16:06 state Next: 14:17:05
Attributes:
room CUL
verbose 1
Perl-Modus:
define di_Fenster DOIF {if (["^Window:open"]) {foreach (AggrDoIf('@','^windows','state','"open"')) {Log3 "di_Fenster",3,"Das Fenster $_ ist noch offen"}}}
define di_FensterDisplay DOIF (["^*.fk.*:open"])
{my $str = "http://192.168.178.46/control?cmd=epd,txl,1,Fenster,2,offen:";; my $idx=2;; foreach (AggrDoIf('@','^*.fk.*','state','"open"')) {$idx++;;$str=$str.",".$idx.',%22'.uri_escape(AttrVal($_,"alias",$_)).'%22'}system("wget -q $str &");;Log(3, $str)}
DOELSEIF (["^*.fk.*:closed"] and [#"^*.fk.*":state:"open"]>0)
{my $str = "http://192.168.178.46/control?cmd=epd,txl,1,Fenster,2,offen:";; my $idx=2;; foreach (AggrDoIf('@','^*.fk.*','state','"open"')) {$idx++;;$str=$str.",".$idx.',%22'.uri_escape(AttrVal($_,"alias",$_)).'%22'}system("wget -q $str &");;Log(3, $str)}
DOELSEIF (["^*.fk.*:closed"] and [#"^*.fk.*":state:"open"]==0)
{system("wget -q http://192.168.178.46/control?cmd=epd,clear &")}
DOELSE
{system("wget -q http://192.168.178.46/control?cmd=epd,clear &")}
Start | Ende | Ferienname |
TT.MM.YYYY | TT.MM.YYYY | Osterbeispiel |
defmod SA_Ferien_Art readingsGroup SA_Ferien_view:*summary,*bdate,*edate
attr SA_Ferien_Art alias Termine
attr SA_Ferien_Art group _Kalenderview_
attr SA_Ferien_Art mapping %READING
attr SA_Ferien_Art nonames 1
attr SA_Ferien_Art notime 1
attr SA_Ferien_Art room Kalender
werden alle Daten hintereinander geschrieben.defmod SA_Ferien_Ende readingsGroup SA_Ferien_view:*edate
attr SA_Ferien_Ende alias Ferienende
attr SA_Ferien_Ende group _Kalenderview_
attr SA_Ferien_Ende mapping %READING
attr SA_Ferien_Ende nonames 1
attr SA_Ferien_Ende notime 1
attr SA_Ferien_Ende room Kalender
werden diese untereinander dargestellt.Zitat von: heramol am 10 Mai 2024, 13:32:40Hallo,Ja, das funktioniert alles. Das Webfrontend und die Regelung der Einspeisebegrenzung funktionieren. Das Problem besteht auch schon länger soweit ich das beurteilen kann, aber es fällt mir jetzt erst (öfter) auf, da ich den Fronius Smartmeter über das API jetzt anstelle des SDM630 den ich vorher hatte verwende.
Modbus-Terminierung passt auch?
VG Tom
/usr/bin/deCONZ --dbg-info=2
startet die GUI-Variante von deCONZ. Weiß nicht ob das beabsichtigt ist?/usr/bin/deCONZ -platform minimal --dbg-info=2