import java.util.concurrent.locks.ReentrantLock var ReentrantLock lockState = new ReentrantLock() var Timer FFAlarmTimer = null var Timer FFAlarmSoundTimer = 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 Alarmtrigger") postUpdate(FFAlarmTrigger,transform("JSONPATH","$.AlarmTrigger",FFAlarmJSON.state.toString)) end rule "FFR Alarm Logik" when Item FFAlarmTrigger changed to ON then if (FFAlarmTimer === null) { postUpdate(FFAlarmView,"ON") postUpdate(FHZPush,"ON") REMWEBIO001_Ausgang5.sendCommand(ON) REMWEBIO001_Ausgang6.sendCommand(ON) sendHttpGetRequest("http://admin:rt8qff8ppkma82bzxq2vcy3m3@10.112.30.31/control/rcontrol?action=sound&soundfile=FirehouseAlarmGongEinsatz&speakerlevel=30") sendHttpGetRequest("http://admin:pdgqa62v4f4bd9trmvp7z7t88@10.112.30.32/control/rcontrol?action=sound&soundfile=FirehouseAlarmGongEinsatz&speakerlevel=30") FFAlarmSound.sendCommand(ON) FFAlarmSoundTimer = createTimer(now.plusSeconds(30)) [| sendHttpGetRequest("http://admin:rt8qff8ppkma82bzxq2vcy3m3@10.112.30.31/control/rcontrol?action=sound&soundfile=FirehouseAlarmGongEinsatz&speakerlevel=30") sendHttpGetRequest("http://admin:pdgqa62v4f4bd9trmvp7z7t88@10.112.30.32/control/rcontrol?action=sound&soundfile=FirehouseAlarmGongEinsatz&speakerlevel=30") if (FFAlarmSound.state = ON) { logInfo("FFRAlarm.rules", "Rescheduling timer") FFAlarmSoundTimer.reschedule(now.plusSeconds(30)) } else { logInfo("FFRAlarm.rules", "All done") FFAlarmSoundTimer.cancel() FFAlarmSoundTimer = null } ] FFAlarmTimer = createTimer(now.plusMinutes(60)) [| postUpdate(FFAlarmTrigger,"OFF") postUpdate(FHZPush,"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 // val telegramActionProd = getActions("telegramActionProd","telegram:telegramBot:11a46758") // val telegramActionDEV = getActions("telegram","telegram:telegramBot:a0986dc8") logInfo("Alarmschleife", "Alarmschleife wurde aktualisiert") switch(FFAlarmSchleife.state.toString) { case "57459": { logInfo("Alarmschleife", "Vollalarm Rembrücken und Heusenstamm") postUpdate(FFAlarmTrigger,"ON") NotificationIPAD3Pushover.sendCommand("Vollalarm Rembrücken und Heusenstamm") // telegramActionProd.sendTelegram("Alarmschleife hat ausgelöst: Vollalarm Rembrücken und Heusenstamm") // telegramActionDEV.sendTelegram("Alarmschleife hat ausgelöst: Vollalarm Rembrücken und Heusenstamm") } case "57449": { logInfo("Alarmschleife", "Einsatz für den ELW") postUpdate(FFAlarmTrigger,"ON") NotificationIPAD3Pushover.sendCommand("Einsatz für den ELW") // telegramActionProd.sendTelegram("Alarmschleife hat ausgelöst: Einsatz für den ELW") // telegramActionDEV.sendTelegram("Alarmschleife hat ausgelöst: Einsatz für den ELW") } case "57455": { logInfo("Alarmschleife", "Vollalarm Rembrücken") postUpdate(FFAlarmTrigger,"ON") NotificationIPAD3Pushover.sendCommand("Vollalarm Rembrücken") // telegramActionProd.sendTelegram("Alarmschleife hat ausgelöst: Vollalarm Rembrücken") // telegramActionDEV.sendTelegram("Alarmschleife hat ausgelöst: Vollalarm Rembrücken") } case "57451": { logInfo("Alarmschleife", "Vollalarm Heusenstamm") NotificationIPAD3Pushover.sendCommand("Vollalarm Heusenstamm") } } end rule "Push Fahrzeugstatus" when Member of gFHZ changed then Thread::sleep(300) if (!lockState.isLocked) { lockState.lock() try { logInfo("GroupTest","gFHZ 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") { NotificationIPAD3Pushover.sendCommand(name + " ist aus zur E-Stelle") } NotificationPatrickPushover.sendCommand(name + " ist aus zur E-Stelle") } if (FFAlarmTrigger.state == ON && member.state.toString == "4") { logInfo("GroupTest", "Member "+ name +" to " + member.state ) if (FHZPush.state == ON && member.state.toString == "4") { NotificationIPAD3Pushover.sendCommand(name + " an der E-Stelle angekommen") } NotificationPatrickPushover.sendCommand(name + " an der E-Stelle angekommen") } } finally { lockState.unlock() } } else { logInfo("Testing","Locked, update ignored") } end