コード例 #1
0
        public async Task InitEmberTree()
        {
            bool done = false;

            while (!done)
            {
                try
                {
                    log.Info("Initializing EmBER+ tree");

                    // Initiate EmBER+ tree
                    _emberTree = new EmberPlusProvider(
                        _configuration.EmberTree.Port,
                        _configuration.EmberTree.Identifier,
                        _configuration.EmberTree.Description);

                    _emberTree.ChangedTreeEvent      += EmberTreeOnTreeDataAsync;
                    _emberTree.MatrixConnectionEvent += ReceivedMatrixConnectionEvent;

                    _emberTree.CreateIdentityNode(
                        RootIdentifiers.Identity,
                        _configuration.EmberTree.Product,
                        _configuration.EmberTree.Company,
                        _configuration.EmberTree.Version);

                    // Get saved values
                    //var template = TemplateParserHelper.ParseTemplateJsonFile(_configuration.EmberTree.TreeTemplateFile);

                    // Initialize the actual tree
                    var node = _emberTree.AddChildNode(RootIdentifiers.Utilities);
                    node.AddBooleanParameter(1, "booleanParam", _emberTree, true, true);
                    node.AddStringParameter(2, "stringParam", _emberTree, true, "default");
                    node.AddIntegerParameter(3, "integerParam", _emberTree, true, 125, 0, 255);
                    //node.AddEnumParameter(4, "enumParameter", this, true, typeof(MockEnumParameter), 0, "");

                    string[] sourceNames     = { "On" };
                    string   blindSourceName = "Off";
                    string[] targetNames     = { "T1", "T2" };
                    _gpioMatrix = _emberTree.ProviderRoot.AddMatrixOneToNBlindSource(RootIdentifiers.Matrix, sourceNames, targetNames, blindSourceName, _emberTree, true, "", "GPO");

                    _emberTree.SetUpFinalListeners();
                    EmberTreeState = true;
                    log.Info("EmBER+ tree initiated");
                    done = true;
                }
                catch (Exception ex)
                {
                    EmberTreeState = false;
                    log.Error(ex, "Exception when initializing EmBER+ tree");
                    Thread.Sleep(4000);
                }
            }
        }
コード例 #2
0
        public void TeardownEmberTree()
        {
            log.Info("Tearing down current EmBER+ tree");

            if (_emberTree != null)
            {
                _emberTree.ChangedTreeEvent -= EmberTreeOnTreeDataAsync;
                _emberTree.Dispose();
                _emberTree     = null;
                EmberTreeState = false;
            }
            else
            {
                log.Warn("EmBER+ tree was already null, so no need to tear it down");
            }
        }
コード例 #3
0
        public async Task InitEmberTree()
        {
            bool done = false;

            while (!done)
            {
                try
                {
                    log.Info("Initializing EmBER+ tree");
                    Debug.WriteLine("Initializing EmBER+ tree");

                    // Initiate EmBER+ tree
                    _emberTree = new EmberPlusProvider(
                        _configuration.EmberTree.Port,
                        _configuration.EmberTree.Identifier,
                        _configuration.EmberTree.Description);
                    _emberTree.ChangedTreeEvent += EmberTreeOnTreeDataAsync;
                    _emberTree.CreateIdentityNode(
                        RootIdentifiers.Identity,
                        _configuration.EmberTree.Product,
                        _configuration.EmberTree.Company,
                        _configuration.EmberTree.Version);

                    // Get saved values
                    //var template = TemplateParserHelper.ParseTemplateJsonFile(_configuration.EmberTree.TreeTemplateFile);
                    _emberTree.InitializeAllNodes(RootIdentifiers.Utilities);

                    _emberTree.SetUpFinalListeners();
                    EmberTreeState = true;
                    log.Info("EmBER+ tree initiated");
                    done = true;
                }
                catch (Exception ex)
                {
                    EmberTreeState = false;
                    log.Error(ex, "Exception when initializing EmBER+ tree");
                    Thread.Sleep(4000);
                }
            }
        }
コード例 #4
0
 public static void AddIntegerParameter(this Node node, int index, string identifier, EmberPlusProvider provider, bool isWritable, int value = 0, int min = 0, int max = 255, string description = "")
 {
     NodeAsserter.AssertIdentifierValid(identifier);
     new IntegerParameter(index, node, identifier, provider.dispatcher, min, max, isWritable)
     {
         Value = value, Description = description
     };
 }
コード例 #5
0
 public static void AddBooleanParameter(this Node node, int index, string identifier, EmberPlusProvider provider, bool isWritable, bool value = false, string description = "")
 {
     NodeAsserter.AssertIdentifierValid(identifier);
     new BooleanParameter(index, node, identifier, provider.dispatcher, isWritable)
     {
         Value = value, Description = description
     };
 }
コード例 #6
0
 public static EmberNode AddSubNode(this Node node, int index, string identifier, EmberPlusProvider provider)
 {
     NodeAsserter.AssertIdentifierValid(identifier);
     return(new EmberNode(index, node, identifier, provider));
 }
コード例 #7
0
 public static EmberNode AddSubNode(this Node node, ValueType identifier, EmberPlusProvider provider)
 {
     return(AddSubNode(node, (int)identifier, identifier.ToString(), provider));
 }
コード例 #8
0
 public EmberNode(int number, Element parent, string identifier, EmberPlusProvider provider) : base(number, parent, identifier)
 {
     Provider = provider;
 }
コード例 #9
0
 public static IntegerParameter AddIntegerParameter(this Node node, ValueType identifier, EmberPlusProvider provider, bool isWritable, int value = 0, int min = 0, int max = 255, string description = "")
 {
     return(AddIntegerParameter(node, (int)identifier, identifier.ToString().Replace("_", " "), provider, isWritable, value, min, max, description));
 }
コード例 #10
0
 public static BooleanParameter AddBooleanParameter(this Node node, ValueType identifier, EmberPlusProvider provider, bool isWritable, bool value = false, string description = "")
 {
     return(AddBooleanParameter(node, (int)identifier, identifier.ToString().Replace("_", " "), provider, isWritable, value, description));
 }
コード例 #11
0
 public static StringParameter AddStringParameter(this Node node, int index, string identifier, EmberPlusProvider provider, bool isWritable, string value = "", string description = "")
 {
     NodeAsserter.AssertIdentifierValid(identifier);
     return(new StringParameter(index, node, identifier, provider.dispatcher, isWritable)
     {
         Value = value, Description = description
     });
 }
コード例 #12
0
        public static OneToNBlindSourceMatrix AddMatrixOneToNBlindSource(this Node node, int index, string identifier, string[] sourceNames, string[] targetNames, string blindSourceName, EmberPlusProvider provider, bool isWritable = true, string description = "", string matrixIdentifier = "matrix")
        {
            var oneToN = new Node(index, node, identifier)
            {
                Description = description,
            };

            var labels = new Node(1, oneToN, "labels")
            {
                //SchemaIdentifier = "de.l-s-b.emberplus.matrix.labels"
            };

            var targetLabels = new Node(1, labels, "targets");
            var sourceLabels = new Node(2, labels, "sources");

            var targets = new List <Signal>();
            var sources = new List <Signal>();

            // Add the blind source
            var blindIndex     = 0;
            var blindParameter = new StringParameter(blindIndex, sourceLabels, $"b-{blindIndex}", provider.dispatcher, isWritable: true)
            {
                Value = blindSourceName
            };
            var blindSignal = new Signal(blindIndex, blindParameter);

            sources.Add(blindSignal);

            // Add sources
            var numberOfBlinds = sources.Count();

            for (int number = 0; number < sourceNames.Length; number++)
            {
                var sourceParameter = new StringParameter(number + numberOfBlinds, sourceLabels, $"s-{number}", provider.dispatcher, isWritable: true)
                {
                    Value = sourceNames[number]
                };

                sources.Add(new Signal(number + numberOfBlinds, sourceParameter));
            }

            // Add targets
            for (int number = 0; number < targetNames.Length; number++)
            {
                var targetParameter = new StringParameter(number, targetLabels, $"t-{number}", provider.dispatcher, isWritable: true)
                {
                    Value = targetNames[number]
                };

                targets.Add(new Signal(number, targetParameter));
            }

            var matrix = new OneToNBlindSourceMatrix(
                2,
                oneToN,
                matrixIdentifier,
                provider.dispatcher,
                targets,
                sources,
                blindSignal,
                labels,
                isWritable)
            {
                //SchemaIdentifier = "de.l-s-b.emberplus.matrix.oneToN"
            };

            //foreach (var target in matrix.Targets)
            //    matrix.Connect(target, new[] { matrix.BlindSource }, null);

            return(matrix);
        }
コード例 #13
0
 public static OneToNBlindSourceMatrix AddMatrixOneToNBlindSource(this Node node, ValueType identifier, string[] sourceNames, string[] targetNames, string blindSourceName, EmberPlusProvider provider, bool isWritable = true, string description = "", string matrixIdentifier = "matrix")
 {
     return(AddMatrixOneToNBlindSource(node, (int)identifier, identifier.ToString().Replace("_", " "), sourceNames, targetNames, blindSourceName, provider, isWritable, description, matrixIdentifier));
 }