[{"server":null,"owner":null,"id":"189be964-17b3-4bd7-83e0-6272d1933dc5","params":{"result":{"value":null,"datetime":1574514826,"status":null,"version":0},"hash":{"value":"98Hna6hYzioJtIE01FLQrw==","datetime":1574685036,"status":null,"version":0},"enabled":{"value":true,"datetime":1574516135,"status":null,"version":0},"error_text":{"value":null,"datetime":1574516016,"status":null,"version":0},"type":{"value":"EgsScenario","datetime":1574684864,"status":null,"version":0},"settings":{"value":"{\r\n  \"param\": \"position\",\r\n  \"table\": {\r\n    \"UndefinedTarget\": 20,\r\n    \"SeaTarget\": 60\r\n  },\r\n  \"interval\": 5.0\r\n}","datetime":1574684985,"status":null,"version":0},"state":{"value":"ok.normal","datetime":1574516016,"status":null,"version":0},"script":{"value":"# имя: 'Param Actualizer'\r\n# описание: актуализация значения параметра\r\n# тип триггера: 'EgsScenario'\r\n# создан: 2019.11.11 16.41.39, Сельченков Н.Ю.\r\n# изменен: '2019.11.25 16.30.36', Сельченков Н.Ю.\r\n# подробности: https://redmine.integra-s.com:11000/projects/eilyacuario/wiki/Param_Actualizer\r\n\r\nuse acuario2.types.BaseObject as BaseObject from acuario2.types\r\nuse acuario2.utils.DateTimeExtension\r\n\r\nuse json_schema\r\n`\r\n{\r\n    \"type\": \"object\",\r\n    \"properties\":\r\n    {\r\n        \"param\": { \"type\": \"string\", \"default\": \"position\" },\r\n        \"table\": \r\n        { \r\n            \"type\": \"object\", \r\n            \"additionalProperties\": { \"type\": \"integer\", \"default\": 60 }\r\n        },\r\n        \"interval\": { \"type\": \"number\", \"default\": 5 } \r\n    }\r\n}\r\n` as Settings\r\n\r\nconst settings = Settings(trigger.settings)\r\n\r\nconst get_type(typename as string) = \r\n    Type.GetType(\"acuario2.types.\"..typename..\",acuario2.client\") ??\r\n    Type.GetType(\"acuario2.types.\"..typename..\",acuario2.types\")\r\n\r\neval settings.table.Add(\"Item\", int.MaxValue)\r\n\r\neval from settings.table.Keys do \r\n    if get_type(it) is null then error \"type \"..it..\" not found\"\r\nnow\r\n\r\n######################################\r\n\r\n\r\nlet unix_now() = DateTimeExtension.ToUnixTime(DateTime.UtcNow)\r\n\r\nlet seconds_passed(datetime as DateTime) = unix_now() - DateTimeExtension.ToUnixTime(datetime)\r\n\r\nlet changed_in(param as Param, seconds as int) = seconds_passed(param.DateTime) <= seconds\r\n\r\nlet get_timeout(types as string[]) = from settings.table where Key in types select Value first \r\n\r\nlet on_timer() = \r\n    from graph.Values select it[settings.param] of type Param do\r\n        let timeout = get_timeout(Owner.Types)\r\n        if it isnt changed_in timeout then Set(Value, \"outofdate\", null)\r\n    now\r\nend\r\n\r\nthis.RunOnTimer(settings.interval, on_timer)\r\n\r\n","datetime":1574685036,"status":null,"version":0},"name":{"value":"Param Actualizer","datetime":1574514950,"status":null,"version":0}},"entity":"item","operation":"create"}]