Modul 95_Alarm.pm

Begonnen von Prof. Dr. Peter Henning, 09 Januar 2021, 10:44:29

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Dieser thread dient dem Support des Moduls 95_Alarm.pm, das ich 2014 programmiert habe. Eine genauere Dokumentation findet man im Wiki https://wiki.fhem.de/wiki/Modul_Alarm

Wer das Modul nicht nutzen will, soll sich bitte irgendwelcher Bemerkungen enthalten.

LG

pah

Romoker

Ich nutze das Alarm-Modul seit vielen Jahren. Bei einer notwendigen Konfigurationsanpassung im Set Action-Feld des Actor-Panels kann ich jetzt nicht mehr einen Funktionsaufruf mit Parameterübergabe definieren. Ich bekomme folgende Fehlermeldung im Log:
2021.04.16 14:29:11.212 1: PERL WARNING: String found where operator expected at (eval 206653) line 1, near "Test")}""
2021.04.16 14:29:11.212 3: eval: {Alarm_Test("AZFhem","{aaa("Test")}")}
2021.04.16 14:29:11.212 1: ERROR evaluating {Alarm_Test("AZFhem","{aaa("Test")}")}: syntax error at (eval 206653) line 1, near ""{aaa("Test"


Die entsprechende Definition in meinem Alarm-Objekt lautet:
attr AZFhem level2onact {aaa('Test')}

Ein Set Action mit {bbb()} macht keine Probleme. Wie gesagt, der Funktionsaufruf mit Parameterübergabe hat schon mal funktioniert.
Die Modulversion und FHEM sind aktuell.

Vielel Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Prof. Dr. Peter Henning

Hm. Keine Änderung am Modul seit ewigen Monaten, und bei mir funktioniert sowohl das Setzen von Argumenten wie
Zitat{speak('Tab1.EG','Achtung,Einbruchswarnung')}
problemlos.

Möglicherweise hat sich etwas geändert an der Verarbeitung in der REST-Schnittstelle.

Bitte mal mit der angehängten alarm.js in in /opt/fhem/www/pgm2/ probieren.

LG

pah

Romoker

Hallo pah,
yep, mit Deiner neuen alarm.js funktioniert bei mir der Funktionsaufruf mit Parametern wieder.
Danke für den Support.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Romoker

Hallo pah,
ich war etwas zu voreilig. Meine Funktion
Zitat{telebot_call('Geräteausfall', '$SHORT')}
wird erfolgreich ausgeführt, aber im Log steht jetzt noch folgender Warnhinweis:

2021.04.17 13:41:21.259 1: PERL WARNING: Unrecognized escape \K passed through at (eval 278202) line 1.
2021.04.17 13:41:21.259 3: eval: {telebot_call("Geräteausfall", "\Kurznachricht")}


Übergebe ich $SHORT ohne eingefasste Hochkommata, wird die Funktion nicht ausgeführt:
2021.04.17 13:35:11.943 1: ERROR evaluating {telebot_call("Geräteausfall", \Kurznachricht)}: Bareword "Kurznachricht" not allowed while "strict subs" in use at (eval 277867) line 1.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Prof. Dr. Peter Henning

Schon richtig - die Sequenz \K wird nicht erkannt. Was soll denn der "\"darin bewirken?

LG

pah

Romoker

"\Kurznachricht" liefert das Alarmmodul, wenn ich die Actor Action über die Testfunktion aufrufe. Das Verhalten ist dann der Testfunktion geschuldet, mit der ich bisher die Actor Action getestet habe. Bei einem echten Alarm-Event wird die Kurznachricht korrekt generiert und es gibt auch keine Warnungen im Log.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Prof. Dr. Peter Henning

Nein, das ist nicht gemeint. "\K" wird nicht als "Schrägstrich-K" interpretiert, sondern als Abkürzung für einen Sonderbefehl wie "Zeilenumbruch = \n". Also was soll "\K" bedeuten, was hat das "\" da verloren?

LG

pah

Romoker

Der Backslash kommt nicht von mir, sondern wird von der Testfunktion des Alarm-Moduls generiert:

  • In meiner Set Action ist definiert: {telebot_call('Geräteausfall', '$SHORT')}
  • Führe Testfunktion "T" aus
  • Das Pop-Up-Panel zeigt den modifizierten Aufruf mit Backslash an: {telebot_call("Geräteausfall", "\$SHORT")}
Im Testfall ist das Reading short vom Alarmobjekt leer. Die Funktion wird aber korrekt mit dem Text 'Kurznachricht' ausgeführt.

Viele Grüße

BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Prof. Dr. Peter Henning

Kann ich so nicht stehenlassen. Beim Dollarzeichen: Ja. Weil das sonst von Perl gefressen wird (als Beginn eines Variablennamens). Aber es wird nicht aus "K" ein "\K" gemacht.

LG

pah

Romoker

Wenn bei Dir in meinem Testfall mit übergebener $SHORT-Variable im Pop-Up-Panel kein Backslash vor dem $ erscheint, habe ich auch keine Erklärung, woher der Backslash bei mir herkommt. Aber wie gesagt, mit der korrigierten alarm.js funtionieren die Actions im Event-Fall wieder wie erwartet. Die Warnings im Log bei Testausführung kann ich ignorieren.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

alanblack

Hallo pah,

Du hast ja schon bemerkt, dass ich mir dieses Modul anschaue. Ich bekomme bei der Einrichtung aber immer wieder Logmeldungen:
1.

2021.12.08 21:21:40 1: PERL WARNING: Use of uninitialized value in index at ./FHEM/95_Alarm.pm line 1414.
2021.12.08 21:21:40 3: eval: {Alarm_Html("ZZ_Alarm")}
2021.12.08 21:21:40 1: PERL WARNING: Use of uninitialized value $aval[1] in concatenation (.) or string at ./FHEM/95_Alarm.pm line 1417.
2021.12.08 21:21:40 3: eval: {Alarm_Html("ZZ_Alarm")}
2021.12.08 21:21:40 1: PERL WARNING: Use of uninitialized value $aval[2] in concatenation (.) or string at ./FHEM/95_Alarm.pm line 1418.
2021.12.08 21:21:40 3: eval: {Alarm_Html("ZZ_Alarm")}
2021.12.08 21:21:40 1: PERL WARNING: Use of uninitialized value $aval[3] in string eq at ./FHEM/95_Alarm.pm line 1419.
2021.12.08 21:21:40 3: eval: {Alarm_Html("ZZ_Alarm")}
2021.12.08 21:21:40 1: PERL WARNING: Use of uninitialized value $aval[3] in string eq at ./FHEM/95_Alarm.pm line 1421.
2021.12.08 21:21:40 3: eval: {Alarm_Html("ZZ_Alarm")}

ZZ_Alarm ist der Name meines Alarm-Devices. Diese Meldungen kommen beim "define" des Devices.

Kurz danach meckert FHEM - 2.

2021.12.08 21:21:40 1: [Alarm] Settings incomplete for alarmSensor EG_Bad_Fenster

im Abstand von einer bis ein paar Sekunden viermal pro als attr x alarmDevice Sensor festgelegtem Device.

Vielleicht ist der Ablauf der Einrichtung im Wiki auch nicht hinreichend nachvollziehbar beschrieben.

Grüße
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

Prof. Dr. Peter Henning

ZitatVielleicht ist der Ablauf der Einrichtung im Wiki auch nicht hinreichend nachvollziehbar beschrieben.
Sicher nicht. Sowohl im Wiki (schon älter) als auch in den SmartHome Hacks ist das genau beschrieben.

Und die Probleme kann ich auch nicht nachvollziehen - eine Neuinstallation eines Alarmdevices in einem frischen FHEM liefert keines der genannten Resultate.

Zitat[Alarm] Settings incomplete for alarmSensor EG_Bad_Fenster
Nun, dann muss man sie eben im Frontend von Alarm setzen...

LG

pah

alanblack

Zitat von: Prof. Dr. Peter Henning am 09 Dezember 2021, 12:10:23
Sicher nicht. Sowohl im Wiki (schon älter) als auch in den SmartHome Hacks ist das genau beschrieben.
Du kannst mir ja mal ein Exemplar zur Rezension schicken.  8)

Was ich meine ist:
define => attr alarmDevice => Settings ? oder
attr alarmDevice => define => Settings ?

Kann ich nicht herauslesen.

Zitat
Und die Probleme kann ich auch nicht nachvollziehen - eine Neuinstallation eines Alarmdevices in einem frischen FHEM liefert keines der genannten Resultate.

Jedenfalls kommen die Fehler bei
define => attr alarmDevice => Settings
beim ersten Aufruf des AlarmRoom.

Zitat
Nun, dann muss man sie eben im Frontend von Alarm setzen...
Da wollte ich hin. Es irritiert mich aber, wenn beim Aufruf des AlarmRoom Einträge mit Loglevel 1 erzeugt werden.

Laut Wiki
Zitat
Das Attribut alarmSettings wird beim Setzen der Alarme auf der Alarmkonfigurationsseite automatisch befüllt.
allerdings wird beim Generieren des HTML für den AlarmRoom

1403           my $avl = AttrVal($d, "alarmSettings","");
...
1406           if( int(@aval) != 4){
1407             Log3 $hash, 1, "[Alarm] Settings incomplete for alarmSensor $d";

anscheinend dieses Attribut als gefüllt vorausgesetzt.

Damit beißt sich diese Maus in den Schwanz; durch die Fehler werden in Folge die Sensoren NICHT angezeigt, so dass ich diese auch nicht setzen kann.
Bei den Aktoren hast Du die alarmSettings über die sub "Alarm_getsettings" geholt. Darin gibt es

431  my $avl = AttrVal($dev, "alarmSettings","|||0:00");

einen Defaultwert. Im Gegensatz dazu ist in

1403          my $avl = AttrVal($d, "alarmSettings","");

ein leerer Defaultwert. Wäre hier nicht auch ein nicht-leerer Defaultwert sinnvoll?

Grüße
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

Prof. Dr. Peter Henning

ZitatDu kannst mir ja mal ein Exemplar zur Rezension schicken.  8)
Ach danke, es betteln mich zwar immer wieder Menschen um kostenlose Exemplare an, aber meine diversen Bücher verkaufen sich auch so ganz gut.

ZitatWas ich meine ist:
define => attr alarmDevice => Settings ? oder
attr alarmDevice => define => Settings ?

Kann ich nicht herauslesen.
Ich verstehe nicht, wie das gemeint ist. Bevor eine Alarmanlage definiert ist, gibt es das globale UserAttr alarmDevice gar nicht

Zitatein leerer Defaultwert. Wäre hier nicht auch ein nicht-leerer Defaultwert sinnvoll?
Aber nicht doch. Ich habe es gerade eben noch einmal ausprobiert, mit einem ganz jungfräulichen FHEM. Selbstverständlich wird ein Device, bei dem das alarmDevice Attribut gesetzt wird, in der Alarm-Oberfläche angezeigt - und zwar unabhängig von den alarmSettings, und ohne Fehlermeldung. Sobald ein "Parameter setzen" in der Alarmanlage ausgeführt wird, wird das alarmSettings-Attribut auch befüllt.

Zusammengefasst: Ich sehe das Problem nicht - und > 300 andere Nutzer des Moduls haben es offenbar auch nicht.

LG

pah