public async Task <Guid> CreateMatcher(MatcherCreate matcherCreate)
        {
            SetupHttpClient();
            _logger.Information($"Creating Matcher: {JsonConvert.SerializeObject(matcherCreate, Formatting.Indented)}");
            var content  = JsonConvert.SerializeObject(matcherCreate);
            var response = await _httpClient.PostAsync("matchers", new StringContent(content, Encoding.UTF8, "application/json"));

            return(await GetIdFromResponse(response, _logger));
        }
Ejemplo n.º 2
0
        private static async Task SetTemperatureSensorValueUDF()
        {
            var ids = await clients.MatchersClient.RetrieveAsync(names : "SetTemperatureSensorValue");

            if (ids.Any())
            {
                await clients.MatchersClient.DeleteAsync(ids.First().Id);
            }
            // define the matcher
            var handleTemperatureMatchCreate = new MatcherCreate
            {
                SpaceId      = rootId,
                FriendlyName = "SetTemperatureSensorValue",
                Name         = "SetTemperatureSensorValue",
                Description  = "SetTemperatureSensorValue",
                Conditions   = new List <ConditionCreate>()
            };

            // create the matcher
            handleTemperatureMatchCreate.Conditions.Add(
                new ConditionCreate
            {
                Path       = "$.dataType",
                Comparison = ConditionCreateComparison.Equals,
                Value      = "\"Temperature\"",
                Target     = ConditionCreateTarget.Sensor
            });
            var handleTemperatureMatcherId =
                await clients.MatchersClient.CreateAsync(handleTemperatureMatchCreate);

            var fids = await clients.UserDefinedFunctionsClient.RetrieveAsync(names : "SetTemperatureSensorValue");

            if (fids.Any())
            {
                await clients.UserDefinedFunctionsClient.DeleteAsync(fids.First().Id);
            }

            var handleTemperatureUDFId = await CreateUserDefinedFunction(
                new CreateUserDefinedFunctionArgs
            {
                SpaceId     = rootId,
                Name        = "SetTemperatureSensorValue",
                Description = "SetTemperatureSensorValue",
                Matchers    = new Guid[] { handleTemperatureMatcherId }
            },
                await System.IO.File.ReadAllTextAsync("SetTemperatureSensorValue.js")
                );

            // UDF descriptor
            //var handleTemperatureUDFCreate = new UserDefinedFunctionCreate
            //{
            //    SpaceId = rootId,
            //    Name = "SetTemperatureSensorValue",
            //    FriendlyName = "SetTemperatureSensorValue",
            //    Description = "SetTemperatureSensorValue",
            //    Matchers = new List<Guid>()
            //};
            //handleTemperatureUDFCreate.Matchers.Add(handleTemperatureMatcherId);

            //var handleTemperatureUDFId =
            //    await clients.UserDefinedFunctionsClient.CreateAsync(
            //        handleTemperatureUDFCreate.ToJson(),
            //        new FileParameter(System.IO.File.OpenRead("SetTemperatureSensorValue.js"), "SetTemperatureSensorValue.js", "text/javascript")
            //    );

            var root = await clients.SpacesClient.RetrieveByIdAsync(rootId, includes : Includes21.FullPath);

            var rids = await clients.RoleAssignmentsClient.RetrieveAsync(root.SpacePaths.First());

            foreach (var rid in rids)
            {
                await clients.RoleAssignmentsClient.DeleteAsync(rid.Id);
            }

            var roleId = await clients.RoleAssignmentsClient.CreateAsync(new RoleAssignmentCreate
            {
                RoleId       = Roles.SpaceAdministrator,
                ObjectIdType = RoleAssignmentCreateObjectIdType.UserDefinedFunctionId,
                ObjectId     = handleTemperatureUDFId.ToString(),
                Path         = root.SpacePaths.First()
            });

            var sss = await clients.SensorsClient.RetrieveAsync(dataTypes : "Temperature");

            foreach (var s in sss)
            {
                var result = await clients.MatchersClient.EvaluateAsync(handleTemperatureMatcherId, s.Id, true);

                var rrrr = await clients.SensorsClient.MatchersAsync(s.Id, includes : Includes19.UserDefinedFunctions);
            }
        }