[{"server":null,"owner":null,"id":"7c48ee6f-66f2-448f-8f09-1f532123c2a5","params":{"script":{"value":"# имя: 'CCTMK client 2'\r\n# описание: клиент протокола ССТМК\r\n# тип триггера: 'EgsScheduled'\r\n# создан: 2018.01.19 16.53.25, Сельченков Н.Ю.\r\n# изменен: '2018.04.25 17.20.43', Сельченков Н.Ю.\r\n# подробности: https://redmine.integra-s.com:11000/projects/eilyacuario/wiki/CCTMK_client_2\r\n\r\nuse acuario2.utils.TextExtension\r\nuse System.IO.StringReader\r\nuse System.Xml.XmlConvert\r\nuse System.Xml.Serialization.XmlSerializer\r\nuse System.Uri\r\nuse System.Text.RegularExpressions.Regex\r\nuse acuario2.webserver.soap12.UsernameToken\r\nuse acuario2.webserver.soap12.Security\r\nuse acuario2.webserver.soap12.ReplyTo\r\nuse acuario2.webserver.soap12.Header\r\nuse acuario2.webserver.soap12.Envelope\r\nuse acuario2.webserver.onvif.wsdl.GetServicesRequest from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.GetServicesResponse from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.CreatePullPointSubscriptionRequest from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.CreatePullPointSubscriptionResponse from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.PullMessagesRequest from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.PullMessagesResponse from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.Renew from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.RenewResponse from acuario2.onvif\r\nuse acuario2.webserver.onvif.wsdl.NotificationMessageHolderType from acuario2.onvif\r\nuse acuario2.webserver.onvif.Message\r\nuse acuario2.webserver.onvif.CCTMK\r\nuse acuario2.types.OnvifItem\r\n\r\nlet regexFind(text as string, pattern as string) = with Regex(pattern).Match(text) do if Success then Groups[1].Value\r\n\r\n### settings ###\r\n\r\nuse typedef\r\n`\r\n    <root>\r\n        <param name=\"deviceUrl\" type=\"text\">http://192.168.10.84:9000/onvif/device_service</param>\r\n        <param name=\"initialTerminationTime\" type=\"text\">PT10M</param>\r\n        <param name=\"messageLimit\" type=\"int\">1024</param>\r\n        <param name=\"timeout\" type=\"text\">PT10S</param>\r\n    </root>\r\n` as Settings\r\n\r\nconst settings               = Settings(trigger.settings)\r\nconst deviceUri              = Uri(settings.deviceUrl)\r\nconst initialTerminationTime = XmlConvert.ToTimeSpan(settings.initialTerminationTime)\r\nconst timeout                = XmlConvert.ToTimeSpan(settings.timeout)\r\n\r\nlet serializer = XmlSerializer(Message)\r\n\r\nonce eventsUrl = \"\"\r\nif eventsUrl is empty then\r\n    print(\"deviceUrl:\", deviceUri)\r\n    let request               = GetServicesRequest() \r\n    request.IncludeCapability = false\r\n    let response              = Envelope(request, null, null).Post(deviceUri, GetServicesResponse) as GetServicesResponse\r\n    eventsUrl                 = from response.Service \r\n                                select new \r\n                                { \r\n                                    type = regexFind(Namespace, \"http://www.onvif.org/ver10/(.+)/wsdl\"),\r\n                                    url  = XAddr\r\n                                }\r\n                                where type is \"events\"\r\n                                select url\r\n                                single\r\n   print(\"eventsUrl:\", eventsUrl)\r\nend\r\n\r\nonce subscription = \"\" \r\n\r\nif subscription is empty then\r\n    let request                    = CreatePullPointSubscriptionRequest()\r\n    request.InitialTerminationTime = settings.initialTerminationTime\r\n    let envelope                   = Envelope(request, null, null)\r\n    let response                   = envelope.Post(Uri(eventsUrl), CreatePullPointSubscriptionResponse) as CreatePullPointSubscriptionResponse\r\n    subscription                   = response.SubscriptionReference.Address.Value \r\n    print(\"subscription:\", subscription)\r\nend\r\n\r\nlet header   = Header()\r\nheader.To    = subscription\r\nsubscription = null\r\n\r\nwith void do  \r\n    let request          = PullMessagesRequest()\r\n    request.MessageLimit = settings.messageLimit\r\n    request.Timeout      = settings.timeout\r\n    let envelope         = Envelope(request, null, null)\r\n    envelope.Header      = header\r\n    let response         = envelope.Post(Uri(eventsUrl), PullMessagesResponse) as PullMessagesResponse\r\n    if response.NotificationMessage isnt empty then\r\n        from response.NotificationMessage do\r\n            let topic = Topic.Any[0].Value\r\n            let type  = regexFind(topic, \".+/(.+)/.+\")\r\n            let state = regexFind(topic, \".+/.+/(.+)\")\r\n            let msg   = serializer.Deserialize(StringReader(it.Message.OuterXml)) as Message\r\n            let id    = from msg.Source where Name is \"Id\" select Value single\r\n            let item  = from graph.Values of type OnvifItem where onvifId is id try single\r\n            if item isnt null then\r\n                state = try CCTMK.Systems[type].Events.FromCCTMK(state).Replace('.', '_') else \"DEFAULT\"\r\n                item[\"state\"].Set(state, null, msg.UtcTime)\r\n                from msg.Data do \r\n                    let param = item[TextExtension.LowercaseFirst(Name)]\r\n                    param?.Set?(Value, null, msg.UtcTime) \r\n                now\r\n            else\r\n                print(\"NOT FOUND\", type, id)\r\n            end\r\n        now    \r\n    end    \r\nend\r\n\r\nwith void do  \r\n    let request             = Renew()\r\n    request.TerminationTime = settings.initialTerminationTime \r\n    let envelope            = Envelope(request, null, null)\r\n    envelope.Header         = header\r\n    envelope.Post(Uri(eventsUrl), RenewResponse)\r\nend\r\n\r\nsubscription = header.To","datetime":1524662454,"status":null,"version":0},"type":{"value":"EgsScheduled","datetime":1524662061,"status":null,"version":0},"settings":{"value":"{\"deviceUrl\":\"http://192.168.10.84:9000/onvif/device_service\",\"initialTerminationTime\":\"PT10M\",\"messageLimit\":1024,\"timeout\":\"PT10S\"}","datetime":1524662484,"status":null,"version":0},"period_unit":{"value":"Second","datetime":1524662036,"status":null,"version":0},"period_count":{"value":1,"datetime":1524662036,"status":null,"version":0},"result":{"value":"","datetime":1524662036,"status":null,"version":0},"enabled":{"value":false,"datetime":1524662378,"status":null,"version":0},"state":{"value":"ok.normal","datetime":1524662454,"status":null,"version":0},"hash":{"value":"gzBhskuhnDLZgyLXCCeCXA==","datetime":1524662423,"status":null,"version":0},"period_time":{"value":null,"datetime":1524662036,"status":null,"version":0},"name":{"value":"CCTMK client 2","datetime":1524662036,"status":null,"version":0},"error_text":{"value":null,"datetime":1524662454,"status":null,"version":0},"repeat":{"value":0,"datetime":1524662036,"status":null,"version":0}},"entity":"item","operation":"create"}]