コード例 #1
0
ファイル: Program.cs プロジェクト: sm6uax/plegma
        private void _SetupThings()
        {
            #region thing for pin20
            var thingPin20Id = CreateThingKey("Pin20");
            Console.WriteLine("Adding thing with ID: {0}", thingPin20Id);
            ThingIdToPin.Add(thingPin20Id, GpioPin.Pin20);
            ThingIdToThing.Add(thingPin20Id, new Yodiwo.API.Plegma.Thing()
            {
                ThingKey = ThingKey.BuildFromArbitraryString(NodeKey, thingPin20Id),
                Type     = ThingTypeLibrary.Lights.Type + PlegmaAPI.ThingModelTypeSeparator + ThingTypeLibrary.Gpio_Type,
                Name     = "GPIO pin 20",
                Config   = null,
                UIHints  = new ThingUIHints()
                {
                    IconURI = "/Content/img/icons/Generic/gpio.png",
                },
                Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        PortKey     = PortKey.BuildFromArbitraryString(ThingKey.BuildFromArbitraryString(NodeKey, thingPin20Id), "0"),
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                        Name        = "PinState",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.GpioModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                    }
                }
            });
            #endregion

            #region thing for pin21
            var thingPin21Id = CreateThingKey("Pin21");
            Console.WriteLine("Adding thing with ID: {0}", thingPin21Id);
            ThingIdToPin.Add(thingPin21Id, GpioPin.Pin21);
            ThingIdToThing.Add(thingPin21Id, new Yodiwo.API.Plegma.Thing()
            {
                ThingKey = ThingKey.BuildFromArbitraryString(NodeKey, thingPin21Id),
                Type     = ThingTypeLibrary.Lights.Type + PlegmaAPI.ThingModelTypeSeparator + ThingTypeLibrary.Gpio_Type,
                Name     = "GPIO pin 21",
                Config   = null,
                UIHints  = new ThingUIHints()
                {
                    IconURI = "/Content/img/icons/Generic/gpio.png",
                },
                Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        PortKey     = PortKey.BuildFromArbitraryString(ThingKey.BuildFromArbitraryString(NodeKey, thingPin21Id), "0"),
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                        Name        = "PinState",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.GpioModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                    }
                }
            });
            #endregion
        }
コード例 #2
0
        //------------------------------------------------------------------------------------------------------------------------
        #endregion

        #region Functions
        //------------------------------------------------------------------------------------------------------------------------
        public override bool Initialize(mNodeConfig mNodeConfig, string PluginConfig, string UserConfig)
        {
            //init base
            if (base.Initialize(mNodeConfig, PluginConfig, UserConfig) == false)
            {
                return(false);
            }


            //initialize native system (threads etc)
            try
            {
                if (Native.Initialize(ThingKeyPrefix) != 0)
                {
                    DebugEx.TraceLog("Could not initialize native system");
                }
                else
                {
                    DebugEx.TraceLog("Initialized native system");

                    // Get things
                    var json   = Native.GetThings();
                    var things = json.FromJSON <List <Thing> >();
                    DebugEx.TraceLog($"Things:{things.Count} - {things[0].Name}");

                    // Fix keys
                    foreach (var t in things)
                    {
                        t.ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", t.ThingKey);
                        foreach (var p in t.Ports)
                        {
                            p.PortKey = PortKey.BuildFromArbitraryString("$ThingKey$", p.PortKey);
                        }
                    }

                    // Add things
                    AddThing(things);


                    //start command retriver
                    isRunning = true;
                    CommandRetrieverThread = new Thread(commandRetrieverHeartbeatEntryPoint);
                    CommandRetrieverThread.IsBackground = true;
                    CommandRetrieverThread.Start();
                }
            }
            catch (Exception ex) { DebugEx.TraceError(ex, "Failed to init plugin"); return(false); }


            //init plugin
            DebugEx.TraceLog("C++11 Plugin up and running !! ");

            //done
            return(true);
        }
コード例 #3
0
        //------------------------------------------------------------------------------------------------------------------------
        /// <summary> Process commands received by the native library </summary>
        void processCommand(string jsonMsg)
        {
            try
            {
                var msg = jsonMsg.FromJSON <Msg>();

                if (msg.Type == MsgType.SendPortEvent)
                {
                    var sendPortEvent = msg.Message.FromJSON <SendPortEvent>();
                    var tKey          = ThingKey.BuildFromArbitraryString(this.NodeKey, sendPortEvent.ThingKey);
                    var pKey          = PortKey.BuildFromArbitraryString(tKey, sendPortEvent.PortKey);
                    SetPortState(pKey, sendPortEvent.State);
                }
            }
            catch (Exception ex) { DebugEx.TraceError(ex, "processCommand failed"); }
        }
コード例 #4
0
ファイル: FlicThing.cs プロジェクト: sm6uax/plegma
        public static Thing CreateThing(string btnID, string flicBtnName)
        {
            var thing = new Thing()
            {
                ThingKey  = ThingKey.BuildFromArbitraryString("$NodeKey$", CreateThingKey(btnID)),
                Name      = "Flic-" + flicBtnName,
                ConfFlags = eThingConf.Removable,
                UIHints   = new ThingUIHints()
                {
                    Description = "FLIC Button " + flicBtnName + ".",
                    IconURI     = "/Content/img/icons/Generic/icon-thing-flic.png"
                },
            };

            thing.Ports = new List <Port>()
            {
                new Yodiwo.API.Plegma.Port()
                {
                    PortKey     = PortKey.BuildFromArbitraryString(thing.ThingKey, SingleClick),
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Single Click",
                    State       = "",
                    Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                    ConfFlags   = ePortConf.None,
                },
                new Yodiwo.API.Plegma.Port()
                {
                    PortKey     = PortKey.BuildFromArbitraryString(thing.ThingKey, DoubleClick),
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Double Click",
                    State       = "",
                    Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                    ConfFlags   = ePortConf.None,
                },
                new Yodiwo.API.Plegma.Port()
                {
                    PortKey     = PortKey.BuildFromArbitraryString(thing.ThingKey, LongClick),
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Long Click",
                    State       = "",
                    Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                    ConfFlags   = ePortConf.None,
                },
            };
            return(thing);
        }
コード例 #5
0
        public static void CreateThings(Transport trans, Node node)
        {
            #region READ CONFIGURATION

            var SavedThingsConfig = ReadConfig();
            if (SavedThingsConfig == null)
            {
                DebugEx.Assert("Could not retrieve or create config; startup failed");
                return;
            }

            //use pin configuration from saved conf file
            var buzzerPin      = SavedThingsConfig[typeof(Buzzer)].Pin;
            var rgbLedPin      = SavedThingsConfig[typeof(RgbLed)].Pin;
            var soundSensorPin = SavedThingsConfig[typeof(SoundSensor)].Pin;
            var lightSensorPin = SavedThingsConfig[typeof(LightSensor)].Pin;
            var buttonPin      = SavedThingsConfig[typeof(Button)].Pin;
            var rotaryAnglePin = SavedThingsConfig[typeof(RotaryAngleSensor)].Pin;
            var relayPin       = SavedThingsConfig[typeof(Relay)].Pin;
            var htSensorPin    = SavedThingsConfig[typeof(TempAndHumidity)].Pin;
            var ultrasonicPin  = SavedThingsConfig[typeof(UltraSonicRanger)].Pin;
            var lcdPin         = SavedThingsConfig[typeof(LCD)].Pin;

            //use sampling period configuration from saved conf file
            var gpio_Sampling       = SavedThingsConfig[typeof(GPIO)].Period;
            var soundSensorSampling = SavedThingsConfig[typeof(SoundSensor)].Period;
            var lightSensorSampling = SavedThingsConfig[typeof(LightSensor)].Period;
            var buttonSampling      = SavedThingsConfig[typeof(Button)].Period;
            var rotaryAngleSampling = SavedThingsConfig[typeof(RotaryAngleSensor)].Period;
            var relaySampling       = SavedThingsConfig[typeof(Relay)].Period;
            var htSensorSampling    = SavedThingsConfig[typeof(TempAndHumidity)].Period;
            var ultrasonicSampling  = SavedThingsConfig[typeof(UltraSonicRanger)].Period;

            #endregion


            #region CREATE SENSORS

            /* A2MCU */
            GPIO GPIO_2 = new GPIO(Pin.DigitalPin2, trans, gpio_Sampling);
            GPIO GPIO_3 = new GPIO(Pin.DigitalPin3, trans, gpio_Sampling);
            GPIO GPIO_4 = new GPIO(Pin.DigitalPin4, trans, gpio_Sampling);
            GPIO GPIO_5 = new GPIO(Pin.DigitalPin5, trans, gpio_Sampling);
            GPIO GPIO_6 = new GPIO(Pin.DigitalPin6, trans, gpio_Sampling);
            /* /A2MCU */

            Buzzer            buzzer            = new Buzzer(GrovePiSensor.PinNameToPin[buzzerPin], trans);
            RgbLed            rgbled            = new RgbLed(GrovePiSensor.PinNameToPin[rgbLedPin], trans);
            SoundSensor       soundSensor       = new SoundSensor(GrovePiSensor.PinNameToPin[soundSensorPin], trans, soundSensorSampling);
            LightSensor       lightSensor       = new LightSensor(GrovePiSensor.PinNameToPin[lightSensorPin], trans, lightSensorSampling);
            Button            button            = new Button(GrovePiSensor.PinNameToPin[buttonPin], trans, buttonSampling);
            RotaryAngleSensor rotaryAngleSensor = new RotaryAngleSensor(GrovePiSensor.PinNameToPin[rotaryAnglePin], trans, rotaryAngleSampling);
            Relay             relaySensor       = new Relay(GrovePiSensor.PinNameToPin[relayPin], trans, relaySampling);
            TempAndHumidity   htSensor          = new TempAndHumidity(GrovePiSensor.PinNameToPin[htSensorPin], trans, htSensorSampling);
            UltraSonicRanger  ultrasonicSensor  = new UltraSonicRanger(GrovePiSensor.PinNameToPin[ultrasonicPin], trans, ultrasonicSampling);
            LCD lcd = new LCD(GrovePiSensor.PinNameToPin[lcdPin], trans);

            #endregion


            #region SETUP THINGS

            #region Setup A2MCU GPIO things

            List <Thing> gpio_things = new List <Thing>();
            for (int i = 2; i <= 6; i++)
            {
                //var pinConfig = new ConfigParameter() { Name = "Pin", Value = buzzerPin };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = gpio_Sampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "gpio_thing" + i),
                    Type     = ThingTypeLibrary.Gpio.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "GPIO_" + i,
                    Config   = new List <ConfigParameter>()
                    {
                        samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/Generic/gpio.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                        Name        = "GPO",
                        PortModelId = ModelTypeLibrary.GpioModel_Id,
                        State       = "false",
                        Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "GPO")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "GPI",
                        State       = "false",
                        PortModelId = ModelTypeLibrary.GpioModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "GPI")
                    }
                };
                thing = node.AddThing(thing);
                gpio_things.Add(thing);
                Things.Add(thing);
            }

            //gpio thing --> gpio sensor class
            GPIOs.Add(gpio_things.ElementAt(0), GPIO_2);
            GPIOs.Add(gpio_things.ElementAt(1), GPIO_3);
            GPIOs.Add(gpio_things.ElementAt(2), GPIO_4);
            GPIOs.Add(gpio_things.ElementAt(3), GPIO_5);
            GPIOs.Add(gpio_things.ElementAt(4), GPIO_6);

            //gpio thing --> generic sensor class
            Lookup.Add(gpio_things.ElementAt(0), GPIO_2);
            Lookup.Add(gpio_things.ElementAt(1), GPIO_3);
            Lookup.Add(gpio_things.ElementAt(2), GPIO_4);
            Lookup.Add(gpio_things.ElementAt(3), GPIO_5);
            Lookup.Add(gpio_things.ElementAt(4), GPIO_6);

            gpio_things.Clear();

            #endregion

            //setup Buzzer  thing
            #region Setup Buzzer thing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = buzzerPin
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "buzzerthing"),
                    Type     = ThingTypeLibrary.Buzzer.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "Buzzer",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/buzzer.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                        Name        = "BuzzerState",
                        State       = "false",
                        PortModelId = ModelTypeLibrary.BuzzerModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Decimal,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                BuzzerThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup RgbLed thing
            #region SetUp RgbLedThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = rgbLedPin
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "RgbLedThing"),
                    Type     = ThingTypeLibrary.Lights.Type + PlegmaAPI.ThingModelTypeSeparator + ThingTypeLibrary.Lights_BooleanModelType,
                    Name     = "RgbLed",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/Generic/thing-genericlight.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                        Name        = "RgbLedState",
                        State       = "false",
                        PortModelId = ModelTypeLibrary.OnOffLightModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                RgbLedThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup SoundSensorThing
            #region SetUp SoundSensorThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = soundSensorPin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = soundSensorSampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "SoundSensorThing"),
                    Type     = ThingTypeLibrary.SoundSensor.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "SoundSensor",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/sound.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Value",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.SoundSensorModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Integer,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                SoundSensorThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup Light Sensor thing
            #region SetUp LightSensorThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = lightSensorPin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = lightSensorSampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "LightSensorThing"),
                    Type     = ThingTypeLibrary.LightSensor.Type + PlegmaAPI.ThingModelTypeSeparator + ThingTypeLibrary.LightSensor_NonNormalizedModelType,
                    Name     = "LightSensor",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/light.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Lumens",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.Brightness_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Integer,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                LightSensorThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup Button thing
            #region SetUp ButtonThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = buttonPin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = buttonSampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "ButtonSensorThing"),
                    Type     = ThingTypeLibrary.Button.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "Button",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/Generic/thing-genericbutton.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "ButtonState",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.ButtonModel_OnOffActuatorId,
                        Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                ButtonSensorThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup RotaryAngle Sensor thing
            #region SetUp RotaryAngleSensorThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = rotaryAnglePin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = rotaryAngleSampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "RotaryAngleSensorThing"),
                    Type     = ThingTypeLibrary.Slider.Type + PlegmaAPI.ThingModelTypeSeparatorStr,
                    Name     = "Rotary Angle Sensor",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/Generic/thing-slider.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "RotaryAngle",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.SliderModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Decimal,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                RotaryAngleSensorThing = thing = node.AddThing(thing);
            }
            #endregion

#if false
            //setup Relay thing
            #region SetUp RelayThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = relayPin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = relaySampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "RelaySensorThing"),
                    Type     = ThingTypeLibrary.SwitchActuator.Type + PlegmaAPI.ThingModelTypeSeparator + ThingTypeLibrary.SwitchActuator_RelayModelType,
                    Name     = "Relay",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/relay.jpg",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "RelayState",
                        PortModelId = ModelTypeLibrary.RelayModel_RelayId,
                        State       = "0",
                        Type        = Yodiwo.API.Plegma.ePortType.Integer,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                RelaySensorThing = thing = node.AddThing(thing);
            }
            #endregion
#endif
            //setup Temperature and Humidity Sensor thing
            #region SetUp HTSensorThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = htSensorPin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = htSensorSampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "HTSensorThing"),
                    Type     = ThingTypeLibrary.HTSensor.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "Temperature and Humidity Sensor",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/ht.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        PortModelId = ModelTypeLibrary.HTSensorModel_TemperatureSensorId,
                        Name        = "HT",
                        State       = "0",
                        Type        = Yodiwo.API.Plegma.ePortType.Integer,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                HTSensorThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup UltraSonic Sensor thing
            #region SetUp UltrasonicThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = ultrasonicPin
                };
                var samplePeriodConfig = new ConfigParameter()
                {
                    Name = "SamplePeriod", Value = ultrasonicSampling.ToStringInvariant()
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "UltrasonicSensorThing"),
                    Type     = ThingTypeLibrary.ProximitySensor.Type + PlegmaAPI.ThingModelTypeSeparator + ThingTypeLibrary.ProximitySensor_UltrasonicModelType,
                    Name     = "Ultrasonic Sensor",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig, samplePeriodConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/proximity.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "cm",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.UltrasonicSensorModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.Integer,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                UltrasonicSensorThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup LCD Sensor thing
            #region SetUp LCDThing
            {
                var pinConfig = new ConfigParameter()
                {
                    Name = "Pin", Value = lcdPin
                };
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "LCDThing"),
                    Type     = ThingTypeLibrary.Lcd.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "LCD",
                    Config   = new List <ConfigParameter>()
                    {
                        pinConfig
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/lcd.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                        Name        = "Message",
                        State       = "0",
                        PortModelId = ModelTypeLibrary.LcdModel_Id,
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    }
                };
                LCDThing = thing = node.AddThing(thing);
            }
            #endregion

            #endregion


            #region LUT CRETION

            Things.Add(BuzzerThing);
            Things.Add(RgbLedThing);
            Things.Add(SoundSensorThing);
            Things.Add(LightSensorThing);
            Things.Add(ButtonSensorThing);
            Things.Add(RotaryAngleSensorThing);
            //Things.Add(RelaySensorThing);
            Things.Add(HTSensorThing);
            Things.Add(UltrasonicSensorThing);
            Things.Add(LCDThing);


            Lookup.Add(BuzzerThing, buzzer);
            Lookup.Add(RgbLedThing, rgbled);
            Lookup.Add(SoundSensorThing, soundSensor);
            Lookup.Add(LightSensorThing, lightSensor);
            Lookup.Add(ButtonSensorThing, button);
            Lookup.Add(RotaryAngleSensorThing, rotaryAngleSensor);
            //Lookup.Add(RelaySensorThing, relaySensor);
            Lookup.Add(HTSensorThing, htSensor);
            Lookup.Add(UltrasonicSensorThing, ultrasonicSensor);
            Lookup.Add(LCDThing, lcd);


            /*
             * GroveSensors.Add(BuzzerThing.Name, buzzer);
             * GroveSensors.Add(RgbLedThing.Name, rgbled);
             * GroveSensors.Add(SoundSensorThing.Name, soundSensor);
             * GroveSensors.Add(LightSensorThing.Name, lightSensor);
             * GroveSensors.Add(ButtonSensorThing.Name, button);
             * GroveSensors.Add(RotaryAngleSensorThing.Name, rotaryAngleSensor);
             * GroveSensors.Add(RelaySensorThing.Name, relaySensor);
             * GroveSensors.Add(HTSensorThing.Name, htSensor);
             * GroveSensors.Add(UltrasonicSensorThing.Name, ultrasonicSensor);
             * GroveSensors.Add(LCDThing.Name, lcd);
             */

            #endregion


            #region REGISTER EVENTS

            foreach (var gpio in GPIOs.Values)
            {
                gpio.OnGetContinuousDatacb += data => OnGetContinuousDatacb(gpio, data);
            }

            soundSensor.OnGetContinuousDatacb       += data => OnGetContinuousDatacb(soundSensor, data);
            lightSensor.OnGetContinuousDatacb       += data => OnGetContinuousDatacb(lightSensor, data);
            button.OnGetContinuousDatacb            += data => OnGetContinuousDatacb(button, data);
            rotaryAngleSensor.OnGetContinuousDatacb += data => OnGetContinuousDatacb(rotaryAngleSensor, data);
            relaySensor.OnGetContinuousDatacb       += data => OnGetContinuousDatacb(relaySensor, data);
            htSensor.OnGetContinuousDatacb          += data => OnGetContinuousDatacb(htSensor, data);
            ultrasonicSensor.OnGetContinuousDatacb  += data => OnGetContinuousDatacb(ultrasonicSensor, data);

            #endregion
        }
コード例 #6
0
ファイル: Helper.cs プロジェクト: sm6uax/plegma
        public static void CreateThings(Transport trans, Node node)
        {
            //setup Position  thing
            //3 ports (x,y,z)
            #region Setup Position thing
            {
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "PositionThing"),
                    Type     = ThingTypeLibrary.PositionSensor.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "Position",
                    Config   = null,
                    UIHints  = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/Generic/position.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Position x State",
                        State       = "0",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.PositionSensorModel_XId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Position y State",
                        State       = "0",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.PositionSensorModel_YId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "1")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Position z State",
                        State       = "0",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.PositionSensorModel_ZId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "2")
                    },
                };
                PositionThing = thing = node.AddThing(thing);
            }
            #endregion

            //setup Gesture thing
            // 5 ports(i.e tap:'center','flick':north2south,'touch':west...)
            #region Setup Gesture thing
            {
                var thing = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", "GestureThing"),
                    Type     = ThingTypeLibrary.GestureSensor.Type + PlegmaAPI.ThingModelTypeSeparatorPlusDefault,
                    Name     = "Gesture",
                    Config   = null,
                    UIHints  = new ThingUIHints()
                    {
                        IconURI = "/Content/img/icons/Generic/motion.png",
                    },
                };
                thing.Ports = new List <Yodiwo.API.Plegma.Port>()
                {
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Tap",
                        State       = "false",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.GestureSensorModel_TapId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Touch",
                        State       = "false",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.GestureSensorModel_TouchId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "1")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "DoubleTap",
                        State       = "false",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.GestureSensorModel_DoubleTapId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "2")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Airwheel",
                        State       = "false",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.GestureSensorModel_AirwheelId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "3")
                    },
                    new Yodiwo.API.Plegma.Port()
                    {
                        ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                        Name        = "Flick",
                        State       = "false",
                        Type        = Yodiwo.API.Plegma.ePortType.String,
                        PortModelId = ModelTypeLibrary.GestureSensorModel_FlickId,
                        PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "4")
                    },
                };
                GestureThing = thing = node.AddThing(thing);
            }
            #endregion

            //add things
            Things.Add(PositionThing);
            Things.Add(GestureThing);

            //create skywriter sensors
            PositionSensor positionsensor = new PositionSensor(trans);
            GestureSensor  gesturesensor  = new GestureSensor(trans);
            //update dictinaries
            Lookup.Add(PositionThing, positionsensor);
            Lookup.Add(GestureThing, gesturesensor);
            SkyWriterSensors.Add(PositionThing.Name, positionsensor);
            SkyWriterSensors.Add(GestureThing.Name, gesturesensor);

            //register events
            positionsensor.OnGetContinuousDatacb += p => OnGetPositionDatacb(positionsensor, p);
            gesturesensor.OnGetContinuousDatacb  += p => OnGetGestureDatacb(gesturesensor, p);
        }
コード例 #7
0
        //------------------------------------------------------------------------------------------------------------------------
        private IEnumerable <Thing> SetupSerialPortThing()
        {
            // Clean old things
            things.Clear();

            // mNode transport conncted event
            {
                var isTransportConnected = new Port()
                {
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Connected",
                    State       = "",
                    ConfFlags   = ePortConf.IsTrigger,
                    Type        = Yodiwo.API.Plegma.ePortType.Boolean,
                    PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                };
                Ports.Add("isTransportConnected", isTransportConnected);

                var connectionTimestamp = new Port()
                {
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Timestamp",
                    State       = "",
                    ConfFlags   = ePortConf.None,
                    Type        = Yodiwo.API.Plegma.ePortType.Timestamp,
                    PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "1")
                };
                Ports.Add("connectionTimestamp", connectionTimestamp);

                var t = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", CreateThingKey("0")),
                    Type     = "",
                    Name     = "Transport",
                    Config   = new List <ConfigParameter>(),
                    UIHints  = new ThingUIHints()
                    {
                        IconURI = "http://simpleicon.com/wp-content/uploads/cloud-connection-1.png",
                    },

                    Ports = new List <Port>()
                    {
                        isTransportConnected,
                        connectionTimestamp
                    }
                };

                t = AddThing(t);
                things.Add("Transport", t);
            }

            // mNode periodic send
            {
                var periodicTimestamp = new Port()
                {
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Timestamp",
                    State       = "",
                    ConfFlags   = ePortConf.None,
                    Type        = Yodiwo.API.Plegma.ePortType.Timestamp,
                    PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                };
                Ports.Add("periodicTimestamp", periodicTimestamp);

                var t = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", CreateThingKey("1")),
                    Type     = "",
                    Name     = "Periodic",
                    Config   = new List <ConfigParameter>()
                    {
                        // TODO: Use the actual value of the thing
                        new ConfigParameter()
                        {
                            Description = "Period Seconds",
                            Name        = "Period",
                            Value       = "10"
                        }
                    },
                    UIHints = new ThingUIHints()
                    {
                        IconURI = "https://openreferral.org/wp-content/uploads/2015/02/icon_4034-300x300.png",
                    },

                    Ports = new List <Port>()
                    {
                        periodicTimestamp
                    }
                };

                t = AddThing(t);
                things.Add("Periodic", t);
            }

            // mNode Ping
            {
                var echoPortOut = new Port()
                {
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output,
                    Name        = "Echo",
                    State       = "",
                    ConfFlags   = ePortConf.None,
                    Type        = Yodiwo.API.Plegma.ePortType.String,
                    PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "0")
                };
                Ports.Add("echoPortOut", echoPortOut);

                var echoPortIn = new Port()
                {
                    ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input,
                    Name        = "Echo",
                    State       = "",
                    ConfFlags   = ePortConf.None,
                    Type        = Yodiwo.API.Plegma.ePortType.String,
                    PortKey     = PortKey.BuildFromArbitraryString("$ThingKey$", "1")
                };
                Ports.Add("echoPortIn", echoPortIn);

                var t = new Yodiwo.API.Plegma.Thing()
                {
                    ThingKey = ThingKey.BuildFromArbitraryString("$NodeKey$", CreateThingKey("2")),
                    Type     = "",
                    Name     = "Ping",
                    Config   = new List <ConfigParameter>(),
                    UIHints  = new ThingUIHints()
                    {
                        IconURI = "https://apk-dl.com/detail/image/com.lipinic.ping-w250.png",
                    },

                    Ports = new List <Port>()
                    {
                        echoPortIn,
                        echoPortOut
                    }
                };

                t = AddThing(t);
                things.Add("Ping", t);
            }

            return(things.Values);
        }