ActionDetector

Begonnen von kossmann, 21 Januar 2013, 17:26:17

Vorheriges Thema - Nächstes Thema

tobi73

Hi,
versucht hab ich das Ganze mit einem Notify pro Devicetyp zu realisieren. Setzt aber voraus, dass eine konsequente und eindeutige Namensgebung vorliegt, bei der du per regex eindeutig alle zu überwachenden Devices herausfindest. Ich bin zwar kein Fan davon, über Devicenamen irgendwelche Aktionen zu steuern, bei den Notifies hab ich aber keine andre Lösung gefunden... Wenn ich richtig sehe, hast Du das mit den Namen aber schon mal ähnlich gelöst wie ich:

Bsp: Fensterkontakte sind bei mir so zu identifizieren:
Ein Kürzel für den Raum mit mindestens 2 Buchstaben, danach ,,_FK" für Fensterkontakt und dann eine laufende Nummer. Ergibt folgendes Notify
\D{2,}_FK\d{1,}.?(battery:.low|Activity:alive|Activity:dead) {health("@","%")}
Der reagiert also, wenn einer der FKs eine kritische Meldung abgibt und ruft dann die Funktion health($$) in 99_myUtils.pm  auf, die den Auslöser und die Meldung übergeben bekommt. Sorry, hab gerade festgestellt daß der Code ziemlich doof aussieht, aber als ich das geschrieben hab wars recht spät und nicht mehr das erste Bier ;-) Wahrscheinlich könnte man das ganze sogar inline in den Notify reinbringen - ich hab eigene Funktionen aber lieber, die lassen sich wiederverwenden und sind übersichtlicher.

sub health ($$) {
my ($obj, $ts) = @_;
my ($bat) = ReadingsVal ($obj, "battery", "");
#Log 1, "Debug: $ts von $obj - Batterie: $bat";

if ($ts eq "Activity:dead") {
fhem ("set ".$obj."_Health missing");
return 1;
      # -> Gerät tot, das wars
}

if ($ts eq "battery: low") {
fhem ("set ".$obj."_Health lowbat");
return 1;
                # -> Gerät da, aber Batterie leer, das wars nun auch.
}

if ($ts eq "Activity:alive") {
              # Gerät wieder am Leben, also wird geprüft, ob die Batterie OK ist...
     if ($bat eq "low") {
                 fhem ("set ".$obj."_Health lowbat");
                 return 1;
     } else {
                 fhem ("set ".$obj."_Health alive");
                 return 1;
              }
}
        return 0;
}

Für jedes Device gibt's wie gesagt einen Dummy, der den ,,Gesundheitsstatus" speichert und im Webfrontend anzeigt. Dieser Dummy heisst genau wie das device selber mit angehängtem ,,_Health".
Auf Sicherheitsabfragen, ob der Dummy existiert oder die Funktion richtig aufgerufen wurde, hab ich hier verzichtet. Wenn man es anständig programmiert, sollte man das eigentlich tun ;-)

Hoffe das hilft etwas!

Gruß,
Tobi

Dennis D.

Ok, vielen Dank! Ich denke damit komme ich zurecht. Damit werde ich am WE mal basteln. Nur noch ein paar kurze Fragen zum Syntax:

1. "\D{2,}_FK\d{1,}": Was bedeutet das \D{2,} und was das \d{1,0} ???

2. Bezüglich der Funktion "sub health ($$)": Was bedeutet das ($$)? In manchen Funktionen sieht man mal drei Dollarzeichen und mal zwei. Wieso?
FHEM 5.5 auf RPi Rev. B 512 mit HMLAN (HM-CFG-LAN)

CUL_HM: HM-LC-Bl1PBU-FM,HM-LC-SW1-BA-PCB,HM-LC-SW4-SM,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-PB-2-WM55,HM-RC-KEY3-B,HM-SEC-KEY,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-WDS10-TH-O,HM-WDS40-TH-I

OWDevice: DS18B20,DS2438

tobi73

Hi,

Zitat"\D{2,}_FK\d{1,}": Was bedeutet das \D{2,} und was das \d{1,0}
Regex - Syntax:
\d steht für eine Ziffer, ist eine Abkürzung für [0-9]
\D ist die Negierung davon - also [^0-9] -> Heisst ein beliebiges Zeichen, dass keine Ziffer ist.
\D{2,} heisst, dass \D(also eine nicht-Ziffer) mindestens 2xvorkommen muss
\d{1,} analog: eine Ziffer mindestens einmal

ZitatWas bedeutet das ($$)
Perl-Syntax: Anzahl der Dollars = Anzahl der Parameter, ganz grob ausgedrückt...

Gruß Tobi

justme1968

gibt es eine möglichkeit das peerList reading im ActionDetector zu unterdrücken oder zumindest auf mehrere zeilen aufzuteilen? bei 7 fenstern und eimem bewegungsmelder ist die zeile jetzt schon so lang das sie noch mehr auf den monitor passt. und es werden noch sensoren dazu kommen.

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

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

martinp876

Hallo Andre,

in mehrere Zeilen austeilen kann ich nicht, das macht das Front-end. Habe noch keinen Weg gefunden, dies zu bewerkstelligen - aus CUL_HM heraus...
Unterdrücken ... hm, ich koennte es in den expert-level schieben.

Gruss
Martin

justme1968

hallo martin,

ich habe gestern das peerList reading einfach mal gelöscht. nach einem neustart ist es zwar wieder da, die liste ist aber nicht gefüllt.

das peerIDs attribut ist richtig gefüllt und die überwachung scheint zu gehen. wenn es sonst keine negativen seiteneffekte hat  kann ich damit auch leben :)

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

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

martinp876

funktional aendert dies nichts, das ist korrekt. Es dient nur der Lesbarkeit - und die hat sich deiner Ansicht nach verschlechtert :-(

justme1968

hallo martin,

die neue zusammenfassung im state ist wunderbar und mit einem reading pro aktor meiner ansicht nach perfekt. das die eine lange zeile nicht da ist verschlechtert meiner ansicht nach nichts :)

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

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

martinp876

ok - dann werden ich es so festmachen. Es gibt ja eh pro peer ein reading

Billy

Hallo,
habe da noch ein paar Fragen zu den Readings? (Auszug vom ActionDetector)


(siehe Anhang / see attachement)


Warum wird im state unkn:0 gezeigt, obwohl ein Device mit unknown gekennzeichnet ist?
Was bedeutet status_1 ? Ist das ein device?

Danke für Antworten Billy.
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

martinp876

kannst du zeigen, was im attribut peerIDs steht?

Billy

Da steht:
peerIDs    1D8E62,1DAB08,1CE600,1CEDA1,1A7985,1A88B3,19E3E7,19B431,19D70E,1D94AE,1D9ECB,1A7D0F,1A8526,1A7AC1,1A89AD,1B7C13,1B7C1B,1D9085,1D9EC2,1D8D69,1DA3DD,1D8BA9,

FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

martinp876

die _1 ist sicher ein "rest" - hier muss ich noch aufraeumen - also nicht (mehr) relevante states loeschen.

Du hast 22 eintraege.
sind alle auf "alive" (also 21) ausser der eine Unknown?
Den _1 nicht mitgerechnet

Das Zaehlen schaue ich mir noch einmal an


Billy

Danke Martin.

werde jetzt mal bei meinem Test-VD die Batterien herausnehmen und schauen was passiert.

Gruss Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Billy

Hallo Martin,
Der Test-VD ging wie zu erwarten auf dead nach Rausnahme der Batterien!

Nach einem shutdown restart wird die peerIDs komplett gelöscht und alle 22 Einträge gehen auf Unknown!
Ist das so richtig?
Muss ich die peerIDs von Hand eintragen oder füllen die sich mit der Zeit wieder automatisch?
Ohne Eintrag in den peerIDs scheint ja nichts zu passieren. Bin ich da richtig?

Gruss Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*