[{"server":null,"owner":null,"id":"fcfccf07-0de4-4682-a4ca-a4fecabf0ff7","params":{"type":{"value":"EgsScheduled","datetime":1545209687,"status":null,"version":0},"settings":{"value":"{\"type\":\"Sensor\",\"event\":\"verification\",\"timeout\":\"01:00:00\"}","datetime":1545214019,"status":null,"version":0},"period_time":{"value":null,"datetime":1544608647,"status":null,"version":0},"error_text":{"value":null,"datetime":1545210574,"status":null,"version":0},"repeat":{"value":0,"datetime":1544608647,"status":null,"version":0},"period_unit":{"value":"Second","datetime":1544608647,"status":null,"version":0},"hash":{"value":"Zph5ez75kZScBlCWHVSZmg==","datetime":1545213612,"status":null,"version":0},"name":{"value":"Event checker 2","datetime":1544608647,"status":null,"version":0},"enabled":{"value":true,"datetime":1545213621,"status":null,"version":0},"result":{"value":"","datetime":1544608647,"status":null,"version":0},"period_count":{"value":5,"datetime":1544608647,"status":null,"version":0},"state":{"value":"ok.normal","datetime":1545210574,"status":null,"version":0},"script":{"value":"# имя: 'Event checker 2'\r\n# описание: Тех. осмотр, проверка и т.п. \r\n# тип триггера: 'EgsScheduled'\r\n# создан: 2017.10.27 13.12.06, Сельченков Н.Ю.\r\n# изменен: '2018.12.19 14.00.11', Сельченков Н.Ю.\r\n# подробности: https://redmine.integra-s.com:11000/projects/eilyacuario/wiki/Event_checker_2\r\n\r\nuse acuario2.types.OnMaintance from acuario2.types \r\nuse acuario2.types.OnMaintanceStateargs from acuario2.types \r\nuse acuario2.utils.TextExtension from acuario2.utils\r\n\r\nuse typedef\r\n`\r\n    <root>\r\n    <param name=\"type\" type=\"text\" />\r\n    <param name=\"event\" type=\"text\" />\r\n    <param name=\"timeout\" type=\"span\" />\r\n    </root>\r\n` as Settings\r\n\r\nconst settings = Settings(trigger.settings)\r\n\r\nuse (\"acuario2.types.\" + settings.type) as ItemType from acuario2.types\r\n\r\nconst eventName = TextExtension.LowercaseFirst(settings.event) \r\nconst EventName = TextExtension.UppercaseFirst(settings.event) \r\n\r\nconst eventPeriod   = eventName..\"Period\" \r\nconst eventLast     = eventName..\"Last\" \r\nconst eventPlanned  = eventName..\"Planned\" \r\n\r\nconst EventNeeded  = OnMaintanceStateargs(eval EventName..\"Needed\")\r\nconst EventExpired = OnMaintanceStateargs(eval EventName..\"Expired\")\r\n\r\nconst timeout = settings.timeout ?? TimeSpan.Zero\r\n\r\nlet clearStateArg(item, value) = if value is   in item.stateargs then item.stateargs = from item.stateargs except value to array\r\nlet setStateArg(item, value)   = if value isnt in item.stateargs then item.stateargs = from item.stateargs union  value to array \r\n\r\nfrom graph.Values of type OnMaintance where it is ItemType do \r\n    if stateargs is nil then stateargs = OnMaintanceStateargs[](0)\r\n    let period = it.(eventPeriod) \r\n    if period is TimeSpan.Zero then it[eventPeriod].Set(period, Status.invalid, null)\r\n    else\r\n        let now  = DateTime.UtcNow\r\n        let last = it.(eventLast)\r\n        if (last is DateTime.MinValue) or (last > now) then it[eventLast].Set(last, Status.invalid, null)\r\n        else\r\n            it.(eventPlanned) = last + period\r\n            if now > it.(eventPlanned) then\r\n                setStateArg(it, EventExpired)\r\n                it[eventLast].Set(last, Status.alarm, null)\r\n            else if now > it.(eventPlanned) - timeout then setStateArg(it, EventNeeded)\r\n            else clearStateArg(it, EventExpired); clearStateArg(it, EventNeeded)\r\n        end\r\n    end\r\nnow\r\n\r\n","datetime":1545213611,"status":null,"version":0}},"entity":"item","operation":"create"}]