Neues Modul für Alarmanlage

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

Vorheriges Thema - Nächstes Thema

Wolle02

ZitatNo, Sir. Habe ich eigentlich nicht vor, weil das größere Änderungen am Modul nach sich zieht - Attribute sollten nämlich eigentlich auch per Webinterface setzbar sein.

Schade. Ich dachte, dass das für dich ein Klacks wäre.

Aber vielleicht kannst du mir ja bei einem anderen Problem helfen:
Ich probiere gerade mit dem Modul herum und habe zum Ausprobieren mal einen Einbruchsalarm auf Level 6 versucht zu erstellen, der automatisch scharf geschaltet wird, wenn wir nicht da sind und automatisch disarmed wird, wenn wir wieder anwesend sind. Als Sensoren habe ich meine Tür-/Fensterkontakte und einen Bewegungsmelder integriert. Als Actor dient momentan einfach nur ein Dummy.
Das Setting habe ich im Anhang mal angehängt.

Wenn der Dummy für 'EinerAnwesend' nun auf 'Nein' schaltet sollte die Anlage ja nun scharf geschaltet werden. Leider funktioniert das nicht und ich bekomme folgende Fehlermeldung:
[Alarm 6] cannot be armed due to wrong delay timespec
Hier steh ich nun auf dem Schlauch. Welcher Delay timespec ist denn in meinem Setting falsch? Ich habe eigentlich gar kein Delay angegeben und alles auf 0 gelassen. Die Einsen bei den Actionfeldern oben hat das Modul auch selber eingetragen, weil ich die Felder einfach offen gelassen hatte, da dort keine Aktion gewünscht.

Was übersehe ich hier? Für einen Fingerzeig wäre ich dankbar.

Danke und Gruß
Wolle

A.Harrenberg

#286
Hallo Wolle,

also an der Stelle ist eine "0" nicht zulässig...
      if( ($xdl eq '')|($xdl eq '0:00')|($xdl eq '00:00') ){
         CommandAttr(undef,$name.' level'.$level.'xec armed');
         $msg = "[Alarm $level] armed from device $dev with event $evt";
         Log3 $hash,3,$msg;
      } elsif( $xdl =~ /([0-9])?:([0-5][0-9])?/  ){


Du kannst 0:00 oder 00:00 schreiben, Leerlassen sollte auch gehen. Falls man eine Zeit angeben möchte scheint er die Minuten ein- und zweistellig zu akzeptieren, wobei ich die Regex an der Stelle nicht wirklich verstehe...

Edit: Das mit "0" und "00:00" ist im Modul nicht einheitlich, pah wollte das aber in einer der nächsten Versionen ändern.

Ich würde ja eigentlich sagen es geht nur einstellig, der Versuch zeigt aber das auch zweistellige Werte einwandfrei gehen -> Zeit sich mal näher mit Regex zu beschäftigen ,-)

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

Wolle02

Hallo Andreas,

danke für deine Hilfe.

Zitatalso an der Stelle ist eine "0" nicht zulässig...

Ok, aber an welcher Stelle? Beim Delay unter Settings oder beim Delay beim Actor?

Egal, ich probiers einfach mal aus  8)

Gruß
Wolle

A.Harrenberg

Hallo Wolle,

sorry, noch mehr Verwirrung gestiftet...

Also das Delay oben (Wait Action -> Arm Action) akzeptiert keine "0", sondern nur die "0:00", "00:00", "" oder eine echte Zeitangabe.
Die Delays bei den "Set by Alarm Level" akzeptieren keine "00:00", sondern benötigen eine "0" (oder eine echte Zeitangabe).

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

Wolle02

Oh Mann, super, ich danke dir. Ich hatte auch rumprobiert und es kam noch mehr Verwirrung rein, denn das Modul hat dann beim Delay bei Settings eine 1 eingetragen als ich die 0 gelöscht hatte.
Als ich beim Delay beim Actor die 0 rausgelöscht habe hat mir das Modul einfach die "Set Action" und "Unset Action" Anweisungen gelöscht  ;D

Aber so wie von dir geschrieben mit 00:00 oben und 0 unten scheint es nun zu gehen. Morgen teste ich nochmal den Automatismus.

Ich danke dir!

Gruß
Wolle

DerFrickler

wenn ich die generierten Meldungen in einer ReadingsHistory mit "loggen" möchte (der String befindet sich im Reading "short" des Alarm Moduls), wie muss der set-add Befehl dazu aussehen?

Ich benutze dazu einen Actor und würde den Befehl in Set Action einbauen wollen: set rh.alarms add <??>

Vielen Dank!

A.Harrenberg

Hi,

entweder warten bis pah das Modul so umbaut das Du es normal loggen kannst, oder so:
{my $tmp=ReadingsVal("AAA", "short", "ndef");;fhem ("set rh.alarms add $tmp");;}

Bin jetzt auch nicht der erfahrendste Anwender, ich dachte zuerst man könnte einfach:
set rh.alarms add {ReadingsVal("AAA", "short", "ndef");;}
verwenden, das funktioniert aber nicht.

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

DerFrickler

#292
set rh.alarms add {ReadingsVal("AAA", "short", "ndef");;}


exakt so sieht meine aktuelle Variante aus!

Vielen Dank!


Nachtrag:

Bei Set Alarms schneidet mir das Modul ständig einen Teil des Syntax ab:

alarmSettings     alarm0,alarm1,alarm2,|{my $tmp=ReadingsVal(||0       deleteattr

trage ich dann den Code direkt in den Actor ein, wird mir im Alarm Modul auch nur der Part bis zum "(" angezeigt

A.Harrenberg

Hi,

und das funktionier bei Dir?

Bei mir schreibt er dann einfach das "ReadingsVal.." als String da rein und nicht den Inhalt des Readings.
Jetzt bin ich verwirrt warum das bei mir dann nicht funktioniert...

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

DerFrickler

es funktionierte nicht, deshalb auch meine Anfrage hier im Forum

A.Harrenberg

Hi,

achso, dann war das ein Missverständnis.

Meine andere Variante funktioniert aber, das habe ich hier eben ausprobiert. Die legt das Reading in einer temporären Variable ab und setzt dann den fhem Befehl ab.

Wahrscheinlich muss man bei der anderen Variante irgendwelche Zeichen "escapen" oder ' einfügen damit es geht... Vielleicht kann ja mal ein erfahrener Anwender hier erklären warum das so nicht funktioniert.

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

DerFrickler

#296
Bei Set Alarms schneidet mir das Modul ständig einen Teil des Syntax ab:

alarmSettings     alarm0,alarm1,alarm2,|{my $tmp=ReadingsVal(||0       deleteattr

trage ich dann den Code direkt in den Actor ein, wird mir im Alarm Modul auch nur der Part bis zum "(" angezeigt

so sieht der Eintrag unter Alarm Settings im Actor aus wenn ich den Code direkt im Actor eingebe:

alarm0,alarm1,alarm2,|{my $tmp=ReadingsVal("alarm.AlarmModul");;}||0

so unter Set Action im Modul:

{my $tmp=ReadingsVal(

Prof. Dr. Peter Henning


DerFrickler

#298
vielen Dank!

Nachtrag: Leider hilft das auch nicht ganz, der Code wird zwar jetzt im Modul komplett angezeigt... nur

{my $tmp=ReadingsVal('alarm.AlarmModul', 'short', 'ndef');;fhem('set rh.alarms add $tmp');;}

sollte zu folgendem Output in der History führen: Test-Wetter - Device Nr. 1, 2°C: Frost - warnung

leider steht in der History nur: 30 Apr 2015 23:11:11  $tmp

A.Harrenberg

Hi,

hmm, stimmt, ich habe das nicht in die Set-Action für einen Alarm_Aktor eingetragen sondern einfach als Befehl in die Kommandozeile getippt... Da scheint es noch Unterschiede zu geben.

Sorry, da kann ich dann auch erst mal nicht weiterhelfen.

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