public override bool Init() { if (mIsInitCalled) { return(false); } mIsInitCalled = true; MyBaseThing.LastMessage = "Device Ready"; MyBaseThing.StatusLevel = 0; IsConnected = false; MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(MyBaseThing.Address), cdeT = ePropertyTypes.TString, Required = true, Description = "", Generalize = true }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(MyBaseThing.FriendlyName), cdeT = ePropertyTypes.TString, Description = "" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(Interval), cdeT = ePropertyTypes.TNumber, DefaultValue = 1000, RangeMin = 100, Description = "Time interval at which to poll the sensor for values" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(CustomPort), cdeT = ePropertyTypes.TNumber, DefaultValue = 502, Description = "" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(SlaveAddress), cdeT = ePropertyTypes.TNumber, DefaultValue = 1, Description = "" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(AutoConnect), cdeT = ePropertyTypes.TBoolean, DefaultValue = false, Description = "" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(KeepOpen), cdeT = ePropertyTypes.TBoolean, DefaultValue = true, Description = "" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(Offset), cdeT = ePropertyTypes.TNumber, Description = "" }); MyBaseThing.DeclareConfigProperty(new TheThing.TheConfigurationProperty { Name = nameof(ConnectionType), cdeT = ePropertyTypes.TNumber, DefaultValue = 3, Description = "Read Coils:1, Read Input:2, Holding Registers:3, Input Register:4, Read Multiple Register:23" }); MyModFieldStore = new TheStorageMirror <FieldMapping>(TheCDEngines.MyIStorageService); MyModFieldStore.IsRAMStore = true; MyModFieldStore.IsCachePersistent = true; MyModFieldStore.IsStoreIntervalInSeconds = true; if (string.IsNullOrEmpty(MyBaseThing.ID)) { MyBaseThing.ID = Guid.NewGuid().ToString(); if (MyDevice != null && !string.IsNullOrEmpty(MyDevice.Id)) { MyBaseThing.ID = MyDevice.Id; } if (GetProperty("CustomPort", false) == null) { TheThing.SetSafePropertyNumber(MyBaseThing, "CustomPort", 502); } if (GetProperty("SlaveAddress", false) == null) { TheThing.SetSafePropertyNumber(MyBaseThing, "SlaveAddress", 1); } Interval = 1000; } MyModFieldStore.CacheTableName = $"MBFLDS{MyBaseThing.ID}"; MyModFieldStore.RegisterEvent(eStoreEvents.StoreReady, sinkStoreReady); MyModFieldStore.RegisterEvent(eStoreEvents.UpdateRequested, sinkUpdated); MyModFieldStore.RegisterEvent(eStoreEvents.Inserted, sinkUpdated); MyModFieldStore.InitializeStore(true, false); return(false); }