get CUL raw T02 Bufferinhalt auf Frontend anzeigen

Begonnen von Zrrronggg!, 04 Februar 2015, 17:42:33

Vorheriges Thema - Nächstes Thema

Zrrronggg!

Ich habe so die Vorstellung auf einer speziellen "Befindlichkeitsseite" mir so ein paar kritische Werte der CULs anzeigen zu lassen.

Ich hab da schon eine RSSI Readings und Batteriezustände, wo "gefährliche" Werte in rot und gute in Grün angezeigt werden (mit Readings Group), suche aber nach einen Weg wie ich dort auch gleich sehen kann, on die CULs sich "wohlfühlen".

Hilfreich wäre z.b. der Zustand von

get CUL raw T02 (FHT Buffer)
get CUL raw X (frei Sendezeit im MS)

1. Hat einer eine Idee wie ich das hinbekomme? Im Grunde müsste FHEM CUL raw T02 und CUL raw X in sinnvollen abständen abfragen (z.b. alle 5 Minuten) und der inhalt müsste irgendwie(TM) auf der Webseite ausgebbar sein.

Oder noch besser, nicht der Inhalt, sondern die Anzahl oder ein Threshold der je nach zu definiernden Werten grün, gelb und rot anzeigt.

Z.B.

get CUL raw X 
Wert/22<10 ROT   <22 GELB und >22 GRÜN 

Schwieriger düfte sein:
get CUL raw T02 
Mehr als  X Befehle in der Queue = rot
Hilfsweise einfacher wäre es vielleicht die Anzahl der Zeichen im Rückgabestring zu zählen... Es geht ja nur um den schnellen Blick, ob was faul ist oder nicht.

optimal aber sicher echt schwierig (jedenfalls für mich) wäre: Inhalt von
get CUL raw T02 
auswerten und dann anzeigen, welches FHT mehr als z.b. 3 Befehle in der Queue hat.

Für ALLE diese Ideen fehlts mir an Know How.

Jemand Vorschläge oder Ideen für mich?

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Elektrolurch

Vielleicht hilft Dir das ja als Denkanstoss weiter:

define CUL_notify  notify (CUL_(0|433)|CUNO_1):UNKNOWNCODE.* {CUL_notify("$NAME","$EVENT");}

# Die Routine setzt den CUL zurück, wenn der Buffer voll ist, speichert die fhem-Config und startet fhem neu:


sub CUL_notify($$)
{
my ($name,$event) = @_;

# Log(1,"$name $event");


if ($CUL_count == 0)
{
my $now = time();
fhem("setreading $name startculoverflow $now");
} # start cul disfunction

$CUL_count++;
if ($CUL_count > 12)
{
$CUL_count = 0;
my $t = ReadingsVal($name,'startculoverflow',0);

my $culbuf = fhem("get $name raw T02");
Log(1,"$name $event Inhalt des $name Sendebuffers: $culbuf");

if ((time() - $t) < 90)
{
AktivMon("ALARM","CUL reset $name $event buff: $culbuf");
fhem('save');
# workaround
return undef if($name eq 'CUL_433');
culreset($name);
fhem("set $name raw B00");
fhem('shutdown restart');
} # if < 120 sek
else
{
AktivMon ("INFO","CUL Funklimit ueberschritten $name $event");
$CUL_count = 0;
} # intervall > 90 sek
} # if count > 10
return undef;
} # end sub CUL_notify
####################################

Diese Routine wertet den CUL-Buffer (raw T02) aus und sucht in fhem das dazugehörige fht.
Mit dem hatte ich nämlich die meisten Probleme.

sub _culreset($)
{
my ($d) = @_;
my $found = 0;
my $ret = fhem("get $d raw T02");
(undef,$ret) = split('=> ',$ret);
return undef if(!defined($ret));

$ret = ltrim(rtrim($ret));
return undef if($ret =~m/.*N\/A/);
Log(1,">$d buffer $ret");

my @devs = split(' ',$ret);
my %problems;

my $t = shift(@devs);

while($t)
{
my ($code) = split(':',$t);
$code = lc($code);
foreach my $tt (devspec2array("TYPE=FHT"))
{
if($code eq $defs{$tt}{CODE})
{
$problems{$tt}++;
my $errtext = "\nProbleme mit $tt -> $d - Buffer voll";
$ret .= $errtext;
Log(1,$errtext);
$found++;
# last;
} # if fht gefunden

} # foreach $tt
$t = shift(@devs);
} # end foreach
if($found)
{
my $mon = $d . "Buffer voll mit " . join(',',sort keys %problems);
AktivMon('ALARM',$mon);
} # if found
return $ret;
} # end _culreset

Aufruf zum Testen über die Kommandozeile mit
{_culreset('NamedesCuULS');;}

Zur Anzeige kannst Du ja dann später einen dummy verwenden und das Ergebnis in state vom dummy ablegen oder wenn Du mehr möchtest in readings vom dummy und dann zur Anzeige eine readingsGroup verwenden.

P.S: AktivMon('ALARM','...
ist meine Messagebox, die etwas auf einer Seite in Listen historisiert anzeigt und bei Parameter 1 = ALARM eine Mail verschickt.
Bei 'INFO' macht sie nur Anzeige.

Viel Spaß

Elektrolurch



# Habe drei CULs im Einsatz

für die 99_myUtils:

# CUL - Verwaltung
my $CUL_count;



configDB und Windows befreite Zone!

Zrrronggg!

Okeeeeee. Schon mal was zum drauf rumkauen, danke.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

Hm. Ich wollte auf die Schnelle (ist ja für mich als perl nix-könner durchaus was zum kauen) erstmal sehen ob ich eine Dummy mit  Ergebniss von
get CUL raw T02
befüllen kann und mich deinen Ideen dann Schrittweise nähern.
Leider bin ich da dran gerade schonmal gescheitert, ich mache irgendeine Kleinigkeit falsch.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Elektrolurch

ohne perl dürfte es wohl nicht gehen.

my $message = fhem("get CUL raw T02");
fhem("set mydum $message");

In eine Subroutine packen und per at regelmässig aufrufen.
configDB und Windows befreite Zone!

Zrrronggg!

Zitatohne perl dürfte es wohl nicht gehen.
Schon klar. Ich mach ja ne Menge mit Perl (ich verwende z.B. kein IF oder DOIF sondern nur perl if) ich bin eben nur nicht der Crack. Wenn ich einen Syntaxfehler bastle, brauch mitunter recht lange den zu finden. Dein Code ist hart an der Grenze dessen was ich in sinnvollen Zeiten kapiere, deswegen wollte ich in kleinen Schritten vorgehen.

my $message = fhem("get CUL raw T02");
fhem("set mydum $message");

Ziemlich so ähnlich hab ich es versucht, klappte aber nicht.
Vermutlich irgendeine Kleinigkeit mit Klammer falsch oder so, ich seh es mir nachher noch mal an.

Ich wollte eigentlich nur sicherstellen, dass ich nicht schon da auf dem total falschen Dampfer bin.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Elektrolurch


my $message = fhem("get CUL raw T02");
# CUL ist natürlich Dein Ding
fhem("set mydum $message");
mydum - ist natürlich ein dummy, dennn Du definiert hast und der auf einer Seite dargestellt werden soll.

attr mydum room Überwachung-fhem


Kopf hoch, das wird schon, wenns dann mal den Klick gemacht hat. Ich habe nach 30 Jahren wieder zur Waffe der "Programmierung" gegriffen....
configDB und Windows befreite Zone!

Zrrronggg!

So klappt.

Wenn man escapen nicht vergisst.

sub FHTBufferauslesen() {
my $message = fhem("get CUL1 raw T02");;
fhem("set FHTBuffer $message")
}
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL