Alarm system - rule problems - (Beginner)

  • Platform information:

    • Hardware: Raspberry 2 + RaZberry Z-Wave module
      additional: 2x Popp KFOB 4 button remote controls, 4x Philio PST02-1A 4in1 sensors, Aeotec siren gen5, Aeotec 6in1 sensor
    • OS: Raspian stretch
    • Java Runtime Environment: ?
    • openHAB version: 2.2 (actual)
  • Issue of the topic: Log error when saving the 1st .rules -file

*.items file:

Number    KFOB_01_Scene            "Schluessel1_Szene"  <kfob_rc>       (Presence, gPresent)            {channel="zwave:device:84293c37:node3:scene_number", expire="1s,state=(10 + zwave:device:84293c37:node3:scene_number)" }
Number    KFOB_01_Battery          "Batterie"           <battery>       (Presence, gBattery)            {channel="zwave:device:84293c37:node3:battery-level"}
Number    KFOB_02_Scene            "Schluessel2_Szene"  <kfob_rc>       (Presence, gPresent)            {channel="zwave:device:84293c37:node4:scene_number", expire="1s,state=(10 + zwave:device:84293c37:node4:scene_number)" }
Number    KFOB_02_Battery          "Batterie"           <battery>       (Presence, gBattery)            {channel="zwave:device:84293c37:node4:battery-level"}
Switch    sAlarmanlage_aktiv       "Alarmanlage_aktiv"  <lock>          (Presence, gPresent)
Switch    sAlarm                   "A L A R M"          <siren>         (Presence, gPresent)

*.rules file:

var String alarm_source = null  // Text: Alarmauslösender Sensor

rule "Systemstart"
when 
    System started 
then 
    postUpdate(sAlarmanlage_aktiv, OFF)
    postUpdate(sAlarm, OFF)
//  sendCommand(sAlarmanlage_aktiv, OFF)   // ..no sending to binding required for local flag
//  sendCommand(sAlarm, OFF)               // ..no sending to binding required for local flag
    logInfo("Info", "RaZberry gestartet")
end

rule "Arm"	// Scharfschalten
when
    Item "KFOB_01_Scene.state" received update 1 or
    Item "KFOB_02_Scene.state" received update 1
then
//  sendCommand(sAlarmanlage_aktiv, ON)
//  sendCommand(sAlarm, OFF)
    postUpdate(sAlarmanlage_aktiv, ON)
    postUpdate(sAlarm, ON)
    alarm_source = "Alarmanlage SCHARF geschaltet"
    logInfo("Info", "Alarmanlage SCHARF geschaltet")
    If (KFOB_01_Scene.state == 1) { KFOB_01_Scene.state = 11 }
    If (KFOB_02_Scene.state == 1) { KFOB_02_Scene.state = 11 }
//  If (KFOB_01_Scene.state == 1) { KFOB_02_Scene.sendcommand(11) } ?
end

rule "UnArm"		// Entschaerfen
when
    Item "KFOB_01_Scene.state" received update 2 or
    Item "KFOB_02_Scene.state" received update 2
then
//  sendCommand(sAlarmanlage_aktiv, OFF)
//  sendCommand(sAlarm, OFF)
    postUpdate(sAlarmanlage_aktiv, OFF)
    postUpdate(sAlarm, OFF)
    alarm_source = "Alarmanlage DEaktiviert"
    logInfo("Info", "Alarmanlage DEaktiviert")
    If (KFOB_01_Scene.state == 2) { KFOB_01_Scene.state = 22 }
    If (KFOB_02_Scene.state == 2) { KFOB_02_Scene.state = 22 }
end

Log messages:

2018-03-10 14:18:02.431 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Alarmanlage.rules' has errors, therefore ignoring it: [32,5]: no viable alternative at input '"KFOB_01_Scene.state"'

[33,5]: no viable alternative at input '"KFOB_02_Scene.state"'
[47,5]: no viable alternative at input '"KFOB_01_Scene.state"'
[48,5]: no viable alternative at input '"KFOB_02_Scene.state"'

2018-03-10 14:18:02.715 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Alarmanlage.rules' has errors, therefore ignoring it: [32,5]: no viable alternative at input '"KFOB_01_Scene.state"'

[33,5]: no viable alternative at input '"KFOB_02_Scene.state"'
[48,5]: no viable alternative at input '"KFOB_01_Scene.state"'
[49,5]: no viable alternative at input '"KFOB_02_Scene.state"'

I tried some different version… with/without the .state, different version postUpdate/sendcommand… What do I make wrong? Thankfull for all tips & improvement suggestions!

I have only corrected the systax, not checked the logic.

var String alarm_source = null  // Text: Alarmauslösender Sensor

rule "Systemstart"
when 
    System started 
then 
    postUpdate(sAlarmanlage_aktiv, OFF)
    postUpdate(sAlarm, OFF)
//  sendCommand(sAlarmanlage_aktiv, OFF)   // ..no sending to binding required for local flag
//  sendCommand(sAlarm, OFF)               // ..no sending to binding required for local flag
    logInfo("Info", "RaZberry gestartet")
end

rule "Arm"	// Scharfschalten
when
    Item KFOB_01_Scene received update 1 or
    Item KFOB_02_Scene received update 1
then
//  sendCommand(sAlarmanlage_aktiv, ON)
//  sendCommand(sAlarm, OFF)
    postUpdate(sAlarmanlage_aktiv, ON)
    postUpdate(sAlarm, ON)
    alarm_source = "Alarmanlage SCHARF geschaltet"
    logInfo("Info", "Alarmanlage SCHARF geschaltet")
    if (KFOB_01_Scene.state == 1) { KFOB_01_Scene.postUpdate(11) }
    if (KFOB_02_Scene.state == 1) { KFOB_02_Scene.postUpdate(11) }
//  If (KFOB_01_Scene.state == 1) { KFOB_02_Scene.sendcommand(11) } ?
end

rule "UnArm"		// Entschaerfen
when
    Item KFOB_01_Scene received update 2 or
    Item KFOB_02_Scene received update 2
then
//  sendCommand(sAlarmanlage_aktiv, OFF)
//  sendCommand(sAlarm, OFF)
    postUpdate(sAlarmanlage_aktiv, OFF)
    postUpdate(sAlarm, OFF)
    alarm_source = "Alarmanlage DEaktiviert"
    logInfo("Info", "Alarmanlage DEaktiviert")
    if (KFOB_01_Scene.state == 2) { KFOB_01_Scene.postUpdate(22) }
    if (KFOB_02_Scene.state == 2) { KFOB_02_Scene.postUpdate(22) }
end

Remove the quotes “” in your when section of the rules:

when
    Item KFOB_01_Scene received update 1 or
    Item KFOB_02_Scene received update 1
then

openHAB wants an item after an Item declaration not a string