import java.util.concurrent.locks.ReentrantLock var ReentrantLock lockState = new ReentrantLock() var Timer FFAlarmTimer = null rule "Auswertung Alarm JSON" when Item FFAlarmJSON changed then logInfo("FFAlarmJSON","Vor FFAlarmEinsatznummer") postUpdate(FFAlarmEinsatznummer,transform("JSONPATH", "$.Einsatznummer", FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmOrt") postUpdate(FFAlarmOrt,transform("JSONPATH", "$.Ort", FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmOrtsteil") postUpdate(FFAlarmOrtsteil,transform("JSONPATH", "$.Ortsteil", FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmStrasse") postUpdate(FFAlarmStrasse,transform("JSONPATH","$.Strasse",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmObjekt") postUpdate(FFAlarmObjekt,transform("JSONPATH","$.Objekt",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmEStelleZusatz") // postUpdate(FFAlarmEStelleZusatz,transform("JSONPATH","$.E-Stelle-Zusatz",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmEStelleBem") postUpdate(FFAlarmEStelleBem,transform("JSONPATH","$.E-Stelle-Bem",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmKoordinate") postUpdate(FFAlarmKoordinate,transform("JSONPATH","$.Koordinate",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmStichwort") postUpdate(FFAlarmStichwort,transform("JSONPATH","$.Stichwort",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmMeldebild") postUpdate(FFAlarmMeldebild,transform("JSONPATH","$.Meldebild",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmAlarmierungszeit") postUpdate(FFAlarmAlarmierungszeit,transform("JSONPATH", "$.Alarmierungszeit", FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmBemerkung") postUpdate(FFAlarmBemerkung,transform("JSONPATH","$.Bemerkung",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmMeldender") postUpdate(FFAlarmMeldender,transform("JSONPATH", "$.Meldender", FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor FFAlarmEinsatzmittel") postUpdate(FFAlarmEinsatzmittel,transform("JSONPATH","$.Einsatzmittel",FFAlarmJSON.state.toString)) logInfo("FFAlarmJSON","Vor ") postUpdate(FFAlarmTrigger,transform("JSONPATH","$.AlarmTrigger",FFAlarmJSON.state.toString)) end rule "FFR Alarm Logik" when Item FFAlarmTrigger changed to ON then if (FFRAlarmTimer === null) { postUpdate(FFAlarmView,"ON") postUpdate(FHZPush,"ON") postUpdate(REMCAM001Record,"ON") postUpdate(REMCAM002Record,"ON") FFAlarmTimer = createTimer(now.plusMinutes(60)) [| postUpdate(FFAlarmTrigger,"OFF") postUpdate(FHZPush,"OFF") postUpdate(REMCAM001Record,"OFF") postUpdate(REMCAM002Record,"OFF") FFAlarmTimer.cancel() FFAlarmTimer = null ] } end rule "FFAlarmTrigger OFF" when Item FFAlarmTrigger changed to OFF then postUpdate(FHZPush,"OFF") postUpdate(FFAlarmView,"OFF") end rule "Alarmschleifen Auswertung" when Item FFAlarmSchleife received update then logInfo("Alarmschleife", "Alarmschleife wurde aktualisiert") switch(FFAlarmSchleife.state.toString) { case "57459": { logInfo("Alarmschleife", "Vollalarm Rembrücken und Heusenstamm") postUpdate(FFAlarmTrigger,"ON") sendPushoverMessage(pushoverBuilder("Vollalarm Rembrücken und Heusenstamm").withSound("siren").withPriority(1)) } case "57449": { logInfo("Alarmschleife", "Einsatz für den ELW") postUpdate(FFAlarmTrigger,"ON") sendPushoverMessage(pushoverBuilder("Einsatz für den ELW").withSound("siren").withPriority(1)) } case "57455": { logInfo("Alarmschleife", "Vollalarm Rembrücken") postUpdate(FFAlarmTrigger,"ON") sendPushoverMessage(pushoverBuilder("Vollalarm Rembrücken").withSound("siren").withPriority(1)) } } end rule "Push Fahrzeugstatus" when Member of gFHZ changed then Thread::sleep(300) if (!lockState.isLocked) { lockState.lock() try { logInfo("Testing","gNetwork received update") val member = gFHZ.members.filter[d | d.lastUpdate("jdbc") !== null].sortBy[lastUpdate("jdbc")].last val name = member.label.toString if (FFAlarmTrigger.state == ON && member.state.toString == "3") { logInfo("GroupTest", "Member "+ name +" to " + member.state ) if (FHZPush.state == ON && member.state.toString == "3") { sendPushoverMessage(pushoverBuilder(name + " ist aus zur E-Stelle").withSound("siren").withUser("upgb55kps8rx2xotn7dvdg3w2yjpt6")) } sendPushoverMessage(pushoverBuilder(name + " ist aus zur E-Stelle").withSound("siren").withUser("u8s32g4yym8xbk7yqn66cokjys13mf")) } if (FFAlarmTrigger.state == ON && member.state.toString == "4") { logInfo("GroupTest", "Member "+ name +" to " + member.state ) if (FHZPush.state == ON && member.state.toString == "4") { sendPushoverMessage(pushoverBuilder(name + " an der E-Stelle angekommen").withSound("siren").withUser("upgb55kps8rx2xotn7dvdg3w2yjpt6")) } sendPushoverMessage(pushoverBuilder(name + " an der E-Stelle angekommen").withSound("siren").withUser("u8s32g4yym8xbk7yqn66cokjys13mf")) } } finally { lockState.unlock() } } else { logInfo("Testing","Locked, update ignored") } end