#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member #endregion #region Constructors public Thing(ThingKey key, List <Port> ports) { this.ThingKey = key; this.Ports = ports; this.Config = new List <ConfigParameter>(); this.ReadonlyInfo = new List <ConfigParameter>(); }
private ThingCollection GetResultGroupFromResponse( string groupName, HealthRecordAccessor accessor, ThingQuery matchingQuery, XPathNavigator groupNavigator) { ThingCollection result = new ThingCollection(groupName, accessor, matchingQuery, _connection); int maxResultsPerRequest = 0; XPathNodeIterator thingNodeIterator = groupNavigator.Select("thing"); XPathNodeIterator unprocessedThingKeyInfoNodeIterator = groupNavigator.Select("unprocessed-thing-key-info"); XPathNavigator filteredNodeNavigator = groupNavigator.SelectSingleNode("filtered"); XPathNavigator orderByCultureNodeNavigator = groupNavigator.SelectSingleNode("order-by-culture"); if (thingNodeIterator != null) { foreach (XPathNavigator thingNode in thingNodeIterator) { ThingBase resultThingBase = DeserializeItem(thingNode); result.AddResult(resultThingBase); maxResultsPerRequest++; } } if (unprocessedThingKeyInfoNodeIterator != null) { foreach (XPathNavigator unprocessedThingKeyInfoNode in unprocessedThingKeyInfoNodeIterator) { XPathNavigator thingIdNavigator = unprocessedThingKeyInfoNode.SelectSingleNode("thing-id"); Guid thingId = Guid.Parse(thingIdNavigator.Value); Guid versionStamp = Guid.Parse(thingIdNavigator.GetAttribute("version-stamp", string.Empty)); ThingKey key = new ThingKey(thingId, versionStamp); result.AddResult(key); } } if (filteredNodeNavigator != null) { result.WasFiltered = filteredNodeNavigator.ValueAsBoolean; } if (orderByCultureNodeNavigator != null) { result.OrderByCulture = orderByCultureNodeNavigator.Value; } if (maxResultsPerRequest > 0) { result.MaxResultsPerRequest = maxResultsPerRequest; } return(result); }
public void ActorPermissionDeleted() { var sut = new PermissionableService(_client); var actor = new ActorKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Actor" }; var node = new NodeKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Node" }; var node2 = new NodeKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Node2" }; var thing = new ThingKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Thing" }; sut.MakeMember(actor, node); sut.MakeMember(node, node2); sut.MakeMember(node2, node); sut.GrantPermission(node2, thing, $"{GetMethodName()}_Action"); sut.RemoveMember(node, node2); Assert.False(sut.CanItAccess(actor, thing, $"{GetMethodName()}_Action")); }
public static Thing CreateThing(NodeKey NodeKey) { //create key ThingKey = new ThingKey(NodeKey, PluginMain.ThingKeyPrefix + "Test_Text_IO"); PortKey_Text = new PortKey(ThingKey, "Text"); //create thing var thing = new Thing() { ThingKey = ThingKey, Name = "Text IO", ConfFlags = eThingConf.Removable, }; thing.Ports = new List <Port>() { new Yodiwo.API.Plegma.Port() { PortKey = PortKey_Text, ioDirection = Yodiwo.API.Plegma.ioPortDirection.InputOutput, Name = "Text", State = "", Type = Yodiwo.API.Plegma.ePortType.String, ConfFlags = ePortConf.None, }, }; return(thing); }
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 }
//------------------------------------------------------------------------------------------------------------------------ public override void OnThingActivated(ThingKey thingKey) { DebugEx.TraceLog($"Thing Activated {thingKey}"); // Check when we activate periodic if (things["Periodic"]?.ThingKey == thingKey) { DebugEx.TraceLog("Periodic Thing Activated"); // Dispose old task PeriodicRunning = false; PeriodicTask?.Wait(); PeriodicTask?.Dispose(); // Create a new cancellation source PeriodicRunning = true; //start alive task PeriodicTask = TaskEx.RunSafe(() => { while (!IsDisposed && PeriodicRunning) { // Send timestamp if we are connected if (_CloudConnected && (Ports?.ContainsKey("periodicTimestamp") ?? false)) { SetPortState(Ports["periodicTimestamp"].PortKey, DateTime.UtcNow.ToStringInvariant()); } Thread.Sleep(Period); } }); } }
public static void SetIdentity(this Resource resource, ThingKey key) { if (key != null) { resource.SetId(key.Id); resource.SetVersionStamp(key.VersionStamp); } }
//------------------------------------------------------------------------------------------------------------------------ #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); }
//------------------------------------------------------------------------------------------------------------------------ public override void OnThingDeactivated(ThingKey thingKey) { // Check when we activate periodic if (things["Periodic"]?.ThingKey == thingKey) { DebugEx.TraceLog("Periodic Thing Deactivated"); // Dispose old task PeriodicRunning = false; PeriodicTask?.Wait(); PeriodicTask?.Dispose(); PeriodicTask = null; } }
/// <summary> /// Creates a new instance of the <see cref="MshItemBase"/> class /// specifying wrapped object. /// </summary> /// <param name="wrappedInstance">Wrapped instance</param> /// <param name="typeId">Unique type id</param> protected MshItemBase(IMshItem wrappedInstance, Guid typeId) : base(typeId) { if (wrappedInstance != null) { WrappedTypeName = wrappedInstance.WrappedTypeName; WrappedInstanceJson = wrappedInstance.Base64EncodedJson; if (wrappedInstance.ThingId != Guid.Empty && wrappedInstance.VersionStamp != Guid.Empty) { Key = new ThingKey(wrappedInstance.ThingId, wrappedInstance.VersionStamp); } } Headers = new Dictionary <string, string>(); }
//------------------------------------------------------------------------------------------------------------------------ /// <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"); } }
/// <summary> /// Creates a new instance of the <see cref="MshItemBase"/> class /// specifying wrapped object. /// </summary> /// <param name="typeId">Unique type id</param> /// <param name="wrappedTypeName">Wrapped type name</param> /// <param name="base64EncodedJson">Base64-encoded JSON</param> /// <param name="thingId">ThingBase id</param> /// <param name="versionStamp">ThingBase versionstamp</param> protected MshItemBase( Guid typeId, string wrappedTypeName, string base64EncodedJson, Guid thingId, Guid versionStamp) : base(typeId) { WrappedTypeName = wrappedTypeName; WrappedInstanceJson = base64EncodedJson; if (thingId != Guid.Empty && versionStamp != Guid.Empty) { Key = new ThingKey(thingId, versionStamp); } Headers = new Dictionary <string, string>(); }
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); }
private static List <ThingKey> GetPartialThingKeys( XPathNavigator nav) { List <ThingKey> partialThingKeys = new List <ThingKey>(); XPathNodeIterator partialThingIterator = nav.Select("//unprocessed-thing-key-info/thing-id"); foreach (XPathNavigator partialThingNav in partialThingIterator) { string versionStamp = partialThingNav.GetAttribute( "version-stamp", String.Empty); ThingKey key = new ThingKey( new Guid(partialThingNav.Value), new Guid(versionStamp)); partialThingKeys.Add(key); } return(partialThingKeys); }
public void ActorPermissionMultiplePath(int depth) { var s = GetMethodName(); var sut = new PermissionableService(_client); var actor = new ActorKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Actor" }; ICanJoinKey next = actor; ICanJoinKey next2 = actor; for (int i = 0; i < depth; i++) { { var node = new NodeKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Node_Path1_" + depth }; sut.MakeMember(next, node); next = node; } { var node = new NodeKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Node_Path2_" + depth }; sut.MakeMember(next2, node); next2 = node; } } var thing = new ThingKey { Key = Guid.NewGuid().ToString(), Name = $"{GetMethodName()}_Thing" }; sut.GrantPermission(next, thing, $"{GetMethodName()}_Action"); sut.GrantPermission(next2, thing, $"{GetMethodName()}_Action"); Assert.True(sut.CanItAccess(actor, thing, $"{GetMethodName()}_Action")); }
private void AddPartialThingRow(ThingKey key) { DataRow row = this.NewRow(); foreach (DataColumn column in this.Columns) { switch (column.ColumnName) { case "wc-id": row[column.Ordinal] = key.Id.ToString(); break; case "wc-version": row[column.Ordinal] = key.VersionStamp.ToString(); break; default: row[column.Ordinal] = ItemTypeDataColumn.GetNotPresentValue(column.DataType); break; } } this.Rows.Add(row); }
public bool IsThingActive(ThingKey tk) { return(_ActiveThingKeys?.Contains(tk) ?? false); }
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 }
//------------------------------------------------------------------------------------------------------------------------ private List <Thing> SetupSerialPortThings() { List <Thing> things = new List <Thing>(); // Serial Port Data { var tkey1 = new ThingKey(NodeKey, CreateThingId("1")); SendToCloudPort = new Port() { ioDirection = Yodiwo.API.Plegma.ioPortDirection.Output, Name = "FromSerialPort", State = "", ConfFlags = ePortConf.None, Type = Yodiwo.API.Plegma.ePortType.String, PortKey = PortKey.BuildFromArbitraryString(tkey1, "0") }; var t = new Yodiwo.API.Plegma.Thing() { ThingKey = tkey1, Type = "com.yodiwo.serialport", Name = "SerialOut", UIHints = new ThingUIHints() { IconURI = "http://www.aimtouch.com/images/RS232-icon.png", }, Ports = new List <Port>() { SendToCloudPort } }; t = AddThing(t); things.Add(t); } // Serial Port success write { var tkey2 = new ThingKey(NodeKey, CreateThingId("2")); ReceiveFromCloudPort = new Port() { ioDirection = Yodiwo.API.Plegma.ioPortDirection.Input, Name = "ToSerialPort", State = "", ConfFlags = ePortConf.None, Type = Yodiwo.API.Plegma.ePortType.String, PortKey = PortKey.BuildFromArbitraryString(tkey2, "0") }; var t = new Yodiwo.API.Plegma.Thing() { ThingKey = tkey2, Type = "com.yodiwo.serialport", Name = "SerialIn", UIHints = new ThingUIHints() { IconURI = "http://www.aimtouch.com/images/RS232-icon.png", }, Ports = new List <Port>() { ReceiveFromCloudPort } }; t = AddThing(t); things.Add(t); } return(things); }
public bool IsThingActive(ThingKey tk) { return _ActiveThingKeys?.Contains(tk) ?? false; }
//------------------------------------------------------------------------------------------------------------------------ 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); }
//------------------------------------------------------------------------------------------------------------------------ public ThingTimelineInfo(Yodiwo.API.Warlock.ThingDescriptor desc) { ThingKey = desc.ThingKey; Name = desc.Name; }
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); }
public Thing(ThingKey key) : this(key, new List <Port>()) { }