Neues Modul für Alarmanlage

Begonnen von Prof. Dr. Peter Henning, 08 September 2014, 20:43:06

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

#300
 ::)
Was bitte soll das 'ndef' als dritter Parameter bei ReadingsVal sein ?
Und warum so kompliziert mit lokaler Variablen und nicht einfach

{fhem('set rh.alarms add '.ReadingsVal('alarm.AlarmModul', 'short',undef))}

Ein Blick in eine Perl-Doku wäre manchmal ganz hilfreich.

pah

A.Harrenberg

Hallo pah,

Zitat von: Prof. Dr. Peter Henning am 01 Mai 2015, 10:28:53
::)
Was bitte soll das 'ndef' als dritter Parameter bei ReadingsVal sein ?

Ich habe das als Defaultvalue der Funktion eingesetzt. [ReadingsVal(<devicename>,<reading>,<defaultvalue>)] Was ist daran nicht korrekt? Darf man da nichts explizit als String übergeben? Ich wollte also das Wort "ndef" (für "nicht definiert") angezeigt bekommen wenn was nicht in Ordnung ist.

Zitat von: Prof. Dr. Peter Henning am 01 Mai 2015, 10:28:53
Und warum so kompliziert mit lokaler Variablen und nicht einfach

{fhem('set rh.alarms add '.ReadingsVal('alarm.AlarmModul', 'short',undef))}

Ein Blick in eine Perl-Doku wäre manchmal ganz hilfreich.

pah

Tja, als "Anfänger" ist das halt alles etwas try-and-error...
Der erste Versuch mit <set rh.alarms add {ReadingsVal("AAA", "short", "ndef");;}> hat ja gar nicht funktioniert, da hier das Vermischen von fhem Befehlen und dem Perl-Teil in {} nicht funktioniert. Ich war davon ausgegangen das der Perl-Teil "seinen" String zurückmeldet und der set befehl dann mit diesem Wert ausgeführt wird.

Dann habe ich versucht das ganze in Perl Syntax mit fhem Befehl zu packen, aber auch dort wurde das ReadingsVal nicht aufgelöst (da ich es mit in den fhem Befehl geschrieben hatte). Mit der lokalen Variable ging es dann erst einmal, aber mit den doppelten Anführungszeichen funktioniert das dann wieder nicht in dem Set-Actor Feld.

Wenn ich mir jetzt Deine Lösung anschaue stelle ich für mich fest: Der "Trick" wäre gewesen den Befehlsstring für fhem hinter dem add zu beenden und dann das ReadingsVal anzuhängen. Insofern habe ich jetzt wieder etwas im Umgang mit FHEM gelernt.

Allerdings behaupte ich jetzt mal das mir an der Stelle eine Perl-Doku nicht viel genutzt hätte. Zumindest bei mir fehlt(e) an der Stelle eher das Verständnis wann man jetzt auf fhem-ebene und wann man auf perl-ebene ist. Wobei ich nicht abstreiten möchte das ich öfter mal eine Doku schauen könnte... ;-)
Hättest Du denn eine Empfehlung für eine gute Perl-Doku? Ich habe hier in Papier nur die O'Reilly Perl 5 (kurz&gut) Version, die ist meiner Meinung nach selbst zum Nachschlagen nicht wirklich geeignet. Ansonsten schaue ich mir die Syntax online z.B. hier http://www.tizag.com/perlT/index.php an.

Was ich jetzt allerdings immer noch nicht begriffen habe ist, warum das in der Befehlszeile funktioniert und das Reading in die History geschrieben wird, bei Ausführung über das set-actor Feld dann wieder nur "$tmp" eingetragen wird.
{my $tmp=ReadingsVal('alarm.AlarmModul', 'short', 'ndef');;fhem('set rh.alarms add $tmp');;}

Wenn ich das gelernte umsetze und das so anpasse
{my $tmp=ReadingsVal('alarm.AlarmModul', 'short', 'ndef');;fhem('set rh.alarms add ' .$tmp);;}

funktioniert es auch wieder, erklärt aber nicht wo der Unterschied ist ob der Befehl in das Befehlsfenster eingegeben wird oder intern über einen fhem Befehl ausgeführt wird.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

DerFrickler

{fhem('set rh.alarms add '.ReadingsVal('alarm.AlarmModul', 'short',undef))}

klappt wunderbar aus der Kommandozeile, bewirkt alleine in 'Set Action' leider nichts. Was noch fehlt ist eine Verzögerung von 1 Sekunde. Allem Anschein nach wird "short" erst nach dem Abarbeiten der Set Actions generiert.

Um das ganze einfacher zu gestalten und möglicherweise haben andere ja auch ein Interesse daran... besteht die Möglichkeit dem Modul eine Historie hinzuzufügen?

Hintergrund: Meine Konfiguration sieht folgendermaßen aus...

Alarm-Level 0 sind bei mir Warnungen wie z.B. Frost Warnung, schwache Batterien u.s.w.
Alarm-Level 1 sind Ausfälle von Komponenten / Devices wie z.B. SCC, Heizungsregler u.s.w.
Alarm-Level 1 sind Systemstörungen wie z.B. Switch oder ähnliches

Die Text Parts in Message I und II sind so gestaltet dass beim Auslösen eines Alarms immer schlüssige Mitteilungen ausgegeben werden. Dummerweise können derartige Mitteilungen aber auch durch einen Alarm auf einen anderen Level oder dem "Canceln" eines Alarms (geht bei bestimmten Komponenten bei mir auch automatisch) überschrieben werden.

Grundsätzlich kann man sich eine solche Historie auch mit den Notifiers der Device Detektoren generieren, nur habe ich ja bereits eine Konfiguration im Alarm Modul die einigermassen aussagekräftig ist.

Als Beispiel hier mal ein Test-Device für Wetter (anders kann ich gerade keine Frostwarnung generieren)
01 May 2015 15:50:03  Test-Wetter - Device Nr. 1, 1°C: Frost - warnung

A.Harrenberg

Hi,

Ich würde vorschlagen das Du übergangsweise den Delay nutzt.
Wenn pah wie angekündigt die Readings im Modul anpasst, dann kannst Du Dir das alles sparen und das einfach direkt im ReadingsHistory Modul angeben.

Ich habe mir die Änderung für den state (nicht für short) mal selber lokal gemacht und bei mir sieht die ReadingHistory dann z.B. so aus:
Fr 2015-05-01 16:58  AAA OOOOOOOO
Fr 2015-05-01 16:48  AAA OOOOOOOO
Fr 2015-05-01 16:47  AAA OOOOOOOO Level 6 canceled
Fr 2015-05-01 16:47  AAA OOOOOOXO Haustuer geoeffnet Einbruchalarm
Fr 2015-05-01 16:44  AAA OOOOOOOO
Fr 2015-05-01 16:37  AAA OOOOOOOO
Fr 2015-05-01 16:35  AAA OOOOOOOO Level 6 canceled
Fr 2015-05-01 16:35  AAA OOOOOOXO Haustuer geoeffnet Einbruchalarm
Fr 2015-05-01 15:56  AAA OOOOOOOO
Fr 2015-05-01 15:34  AAA OOOOOOOO Level 6 canceled
Fr 2015-05-01 15:33  AAA OOOOOOXO Haustuer geoeffnet Einbruchalarm
Fr 2015-05-01 15:33  AAA OOOOOOOO
Fr 2015-05-01 15:32  AAA OOOOOOOO
Fr 2015-05-01 15:30  AAA OOOOOOOO Level 6 canceled
Fr 2015-05-01 15:30  AAA OOOOOOXO Haustuer geoeffnet Einbruchalarm
Fr 2015-05-01 15:29  AAA OOOOOOOO
Fr 2015-05-01 15:27  AAA OOOOOOOO
Fr 2015-05-01 15:27  AAA OOOOOOOO Level 6 canceled
Fr 2015-05-01 15:27  AAA OOOOOOXO Haustuer geoeffnet Einbruchalarm
Fr 2015-05-01 15:27  AAA OOOOOOXO Haustuer geoeffnet Einbruchalarm


Die "leeren" Eintrage werden immer dann erzeugt wenn man die Alarms-Seite aufruft, das kriegt man im Code aber sicherlich auch noch weg...

Und keine Angst, so oft wird bei mir nicht eingebrochen, ich "trigger" das immer um meinen MP3-Gong auszuprobieren... ,-)

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

Tommy82

Hi, ich versuche über doif einen Dummy zu schalten der mir den Status des Alarmlevels 6 zeigt, allerdings klappt das nicht und ich finde den Fehler nicht, hoffe hier hat einer eine idee

Internals:
   CFGFN
   DEF        ([Alarmanlage_Neu:level6] eq "on")   (set Status_Alaram on) DOELSE  (set Status_Alaram off)
   NAME       doif_Status_Alarmanlage
   NR         15065
   NTFY_ORDER 50-doif_Status_Alarmanlage
   STATE      ???
   TYPE       DOIF
   Condition:
     0          ReadingValDoIf('Alarmanlage_Neu','level6','') eq "on"
   Devices:
     0           Alarmanlage_Neu
     all         Alarmanlage_Neu
   Do:
     0          set Status_Alaram on
     1          set Status_Alaram off
   Helper:
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           Alarmanlage_Neu:level6
     all         Alarmanlage_Neu:level6
   State:
Attributes:


Internals:
   NAME       Alarmanlage_Neu
   NR         268
   STATE       0
   TYPE       Alarm
   VERSION    2.5
   Readings:
     2015-04-03 14:05:17   level           0
     2015-04-05 11:16:55   level0          off
     2015-04-10 21:34:06   level6          off
     2015-03-31 20:18:07   lockstate       unlocked
     2015-04-10 21:34:06   short           0
     2015-05-01 16:01:58   state            0
Attributes:
   armact     set Android_Wohnzimmer ttsSay Alarm ist scharf
   armdelay   02:00
   armwait    set Android_Wohnzimmer ttsSay Alarm wird in 2 Minuten scharf geschaltet
   cancelact  set Android_Wohnzimmer ttsSay Alarm zurückgesetzt
   disarmact  set Android_Wohnzimmer ttsSay Alarm ist unscharf
   level0end  1
   level0msg  1
   level0offact set FritzDect_Wohnzimmerschrank off;
   level0onact define alarm0dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level0start 1
   level0xec  disarmed
   level1end  0
   level1msg  0
   level1start 0
   level1xec  disarmed
   level2end  0
   level2msg  0
   level2start 0
   level2xec  disarmed
   level3end  0
   level3msg  0
   level3start 0
   level3xec  disarmed
   level4end  0
   level4msg  0
   level4start 0
   level4xec  disarmed
   level5end  0
   level5msg  0
   level5start 0
   level5xec  disarmed
   level6end  06:00
   level6msg  Einbruchalarm AN
   level6offact set FritzDect_Wohnzimmerschrank off;
   level6onact define alarm6dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level6start 23:00
   level6xec  armed
   level7end  0
   level7msg  0
   level7start 0
   level7xec  disarmed
   lockstate  unlock
   room       Alarmanlage
   statedisplay graphics


Internals:
   NAME       Status_Alaram
   NR         284
   STATE      ???
   TYPE       dummy
Attributes:


Danke
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Bernd Leo

Hallo ,
zunächst ein Riesenlob an den Entwickler dieses tollen Moduls.
Ich bin Anfänger im Umgang mit fhem und erst Recht im Umgang mit dem Alarmmodul. Dennoch ist mir schon viel gelungen und auch die
Alarmanlage läuft schon in groben Zügen. Allerdings weiss ich nicht ob das folgende Verhalten "as designed" ist. Mein Wunsch wäre ein etwas
anderes Verhalten, jedoch gelingt es mir nicht dies per Konfiguration hin zu bekommen.
Also:
Tür geschlossen -> arm setzen -> alles ok. Wenn Tür geöffnet, dann Alarm
Aber:
Tür offen -> arm setzen, Anlage ist scharf -> nun müßte doch Alarm ausgelöst werden, aber dieser kommt erst nachdem dir Tür geschlossen
und dann wieder geöffnet wird, also einmal ein Signalwechsel durchgeführt wurde.

wär dankbar für einen Lösungsvorschlag
viele Grüße
Bernd


Prof. Dr. Peter Henning

Wenn die Scharfschaltung erst durch das Öffnen der Tür erfolgt, kann natürlich erst beim nächsten Öffnen der Tür ein Alarm ausgelöst werden

Die Scharfschalttung muss also logischerweise vorher erfolgen.

LG

pah

Bernd Leo

Hallo Peter,
Danke für die schnelle Antwort.
Sorry, ich hab mich unpräzise ausgedrückt,
ich schrieb:   Tür offen -> arm setzen, Anlage ist scharf ...

hätte exakter wie folgt formulieren müssen:
zu überwachende Tür ist offen.
In diesem Zustand wird mit einem Taster, der unter "Sensors" mit "arm" konfiguriert ist, scharf geschaltet.

Darf ich dann erwarten, dass der Alarm kommt?
Es funktioniert ja alles, wenn die Tür bei Scharfschaltung geschlossen ist

vielen Dank
und Grüße
Bernd

Prof. Dr. Peter Henning

 ::) Natürlich funktioniert das nicht. Solange sich am Türzustand nichts ändert, wird doch kein Event ausgelöst, den die Alarmanlage feststellen könnte !

Ggf. einfach eine periodische Abfrage des Türzustandes ausführen und diesen Timer als Alarmsensor benutzen.

LG

pah

Bernd Leo

Danke für die prompte Hilfe,

Gruß
Bernd

Tommy82

Hallo pah, kannst du mir etwas auf die Sprünge helfen wieso ich mein Problem oben nicht gelöst bekomme?

Danke
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

DerFrickler

#311
Hallo zusammen,

wurde das Modul in der letzten Zeit aktualisiert? Ich habe bisher immer einen Sensor für das Raise genutzt und einen fürs Cancel, das Raise funktioniert immer noch... das Cancel leider nicht mehr.

Gruß!

Nachtrag:

war nur ein verirrtes Leerzeichen...

duke-f

Bin rein zufällig über dieses Modul gestolpert. Und wirklich absolut positive überrascht. Der Name "Alarm" läßt die Möglichkeiten, die damit gegeben sind gar nicht komplett einschätzen. Ich glaube, das ist genau sowas, was ich beispielsweise für die für die Zukunft geplante Gartenbewässerung noch brauche (wenn doch endlich die aktuelle mal kaputt ginge >:()
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

Prof. Dr. Peter Henning

Mein Tipp: Gardena kaufen - ist garantiert in jedem Frühjahr kaputt.

LG

pah

duke-f

Tja, Gardena läuft bei mir leider seit 6-8 Jahren ....
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite