Simülasyon Verisi İle Test
NightWatch nümerik (int,double, float), mantıksal (bool), metin (string), tarih (date time) ve uuid (guid) tipinde simülasyon verisi üretebilmektedir. NightWatch kurulumunuzu test etmek için aşağıdaki adımları takip edebilirsiniz.
EK BİLGİ
Simülasyon işlevi aşağıdaki versiyonlar ve daha üst versiyonlarda çalışır.
- NightWatch Data Collector Uygulaması (nwx): 2.12.0.0
- NightWatch Test Uygulaması (nw-test): 2.12.0.0
Simülasyon Verisi Üretimi
Adım-1
Örnek simülasyon konfigürasyonunu bilgisayarınıza indiriniz.
Adım-2
Ekstralar bölümü altındaki Konfigürasyonun Diskten Yüklenmesi başlığı altında yer alan nightwatchsettings.json
dosya içeriğindeki NightWatch:Provider:Path
yolundaki Path değerini 1. adımda indirdiğiniz Hackathon_Simulation.json
dosya yolunu gösterecek şekilde güncelleyin.
Adım-3
nightwatchsettings.json
içinde NightWatch:Simulation
yolundaki Simulation değerini true
olarak güncelleyin.
Adım-4
Simülasyon verisi üretme sıklığını saniye cinsinden aşağıdaki değeri değiştirerek güncelleyin. Bu değer varsayılan olarak 1 saniye
olarak belirlenmiştir.
{
"simulationDataGenerationIntervalInSeconds": 1,
}
Adım-5: Veri Tabanına Gönderim
Simülasyon verilerinin bir PostgreSQL (TimeScaleDb) veri tabanına yazılmasını istiyorsanız Veri Tabanı Sink Konfigürasyonu sayfasındaki Database Sink İçin Veri Tabanının Oluşturulması bölümünde anlatıldğı şekilde boş bir veri tabanı oluşturmalısınız.
Hackathon_Simulation.json
dosyası içinde yer alan aşağıdaki bölümde plainTextConnectionString
değerini kendi veri tabanı bağlantı bilgileriniz ile güncelleyiniz.
"ModbusDataDbSinks": [
{
"sinkType": "Database",
"sinkKind": "Integration",
"plainTextConnectionString": "Server=localhost;Port=5432;User Id=postgres;Password=1;Database=NightWatch_Raw;",
"dbType": "pgsql",
"discardZeroValues": false,
"discardEmptyString": false,
"discardEmptyGuid": false,
"discardMinDateTime": false,
"doNotPublishValues": false,
"publishOnlyLatestStringValues": false,
"publishOnlyLatestGuidValues": false,
"publishOnlyLatestDateTimeValues": false,
"mqttWorkOrderSubscribers": [],
"redisWorkOrderSubscribers": [],
"rabbitWorkOrderSubscribers": [],
"workOrderSubscribers": [],
"uid": "41a89a6b-266a-4797-b615-20b4898cc1a7",
"id": "41a89a6b-266a-4797-b615-20b4898cc1a7",
"enabled": true,
"name": "PostgreSQL"
}
]
Adım-6: MQTT'ye Gönderim
Simülasyon verilerinin bir MQTT'ye gönderilmesi için bilgisayarınıza Mosquitto veya benzeri bir MQTT broker kurmalısınız.
Hackathon_Simulation.json
dosyası içinde yer veri gönderimi ("sinkKind":"Integration"
) için ve alarmlar ("sinkKind": "Alert"
) için iki adet MQTT konfigürasyonu tanımlanmıştır. Bu konfigürasyonlarda yer alan server
, port
, username
(varsa) ve plainTextPassword
(varsa) bilgilerini kendi MQTT Broker bağlantı bilgileriniz ile güncelleyiniz.
"mqttSinks": [
{
"sinkType": "MQTT",
"maxPendingMessages": 1000,
"autoReconnectDelayInSeconds": 10,
"cleanSession": true,
"topics": [
{
"qualityOfServiceLevel": "AtMostOnce",
"enabled": true,
"publishType": "Unit_Flat",
"alertPublishType": "PerAlertMessage",
"mesMode": "None"
}
],
"server": "localhost",
"port": 1883,
"username":"",
"plainTextPassword":"",
"uid": "2a6cca2b-b381-4007-827b-e85833e47395",
"id": "2a6cca2b-b381-4007-827b-e85833e47395",
"enabled": true,
"name": "MQTT Integration",
"sinkKind": "Integration"
},
{
"sinkType": "MQTT",
"maxPendingMessages": 1000,
"autoReconnectDelayInSeconds": 10,
"cleanSession": true,
"topics": [],
"server": "localhost",
"port": 1883,
"username":"",
"plainTextPassword":"",
"uid": "1382baf8-63e3-45b3-8000-fa79e8849c0b",
"id": "1382baf8-63e3-45b3-8000-fa79e8849c0b",
"enabled": true,
"name": "MQTT Alert",
"sinkKind": "Alert"
}
]
Simülasyon Verisi Üreteçleri
Simülasyon verisi üreteç ayarları her bir sinyal konfigürasyonu altındaki simulation
nesnesi içinde tanımlanır. Aşağıda örnek bir tanım görebilirsiniz.
"simulation": {
"generatorType": "Number",
"randomNumberGeneration": {
"minValue": 0,
"maxValue": 100,
"onlyPositiveValues": true,
"rounding": {
"roundTo": 0
},
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {}
},
"gaussianNumberGeneration": {
"mean": 100,
"deviation": 40,
"rounding": {
"roundTo": 0
},
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {}
},
"numberGeneration": {
"startValue": 1,
"endValue": 300,
"incrementBy": 1,
"rounding": {
"roundTo": 0
},
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {
"keepLastValueIntervalInSecs": 5
}
},
"booleanGeneration": {
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {}
},
"guidGeneratorOptions": {
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {}
},
"dateTimeGeneratorOptions": {
"pickAndIterate": false,
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {}
},
"stringGeneratorOptions": {
"asFileName": false,
"asFilePath": false,
"asDirectory": false,
"array": {
"arrayItemCount": 12,
"isArray": false
},
"timing": {}
}
}
Genel Simülasyon Verisi Üreteç Ayarları
public abstract class NwGeneratorOptionsBase
{
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("Array")]
public NwGeneratorArrayOptions Array { get; set; } = new();
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("Timing")]
public NwGeneratorTimingOptions Timing { get; set; } = new();
}
public class NwGeneratorArrayOptions
{
[DisplayName("Array Item Count")]
public int ArrayItemCount {get;set;}
[DisplayName("Array")]
public bool IsArray { get; set; } = false;
}
public class NwGeneratorRoundingOptions
{
[DisplayName("Round To Decimal Places")]
[Description("Empty or a value between 0 and 15")]
public int? RoundTo {get;set;}
}
public class NwGeneratorTimingOptions
{
[DisplayName("Keep Last Value Interval (Seconds)")]
public int? KeepLastValueIntervalInSecs {get;set;}
}
Rastgele Sayı Üreteci
Rastgele sayı üreteci seçenekleri randomNumberGeneration
nesnesi içinde tanımlanır.
public class NwRandomNumberGeneratorOptions: NwGeneratorOptionsBase
{
[DisplayName("Minimum Value")]
public double MinValue { get; set; } = 0;
[DisplayName("Maximum Value")]
public double? MaxValue { get; set; } = 100;
[DisplayName("Only Positive Values")]
public bool OnlyPositiveValues { get; set; } = true;
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("Rounding")]
public NwGeneratorRoundingOptions Rounding { get; set; } = new();
}
Normal Dağılım Sayı Üreteci
Rastgele sayı üreteci seçenekleri gaussianNumberGeneration
nesnesi içinde tanımlanır.
public class NwGaussianNumberGeneratorOptions: NwGeneratorOptionsBase
{
[DisplayName("Mean")]
public double Mean { get; set; } = 100;
[DisplayName("Std. Deviation")]
public double Deviation { get; set; } = 40;
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("Rounding")]
public NwGeneratorRoundingOptions Rounding { get; set; } = new();
}
Sayı Üreteci
Sayı üreteci seçenekleri numberGeneration
nesnesi içinde tanımlanır.
public class NwNumberGeneratorOptions: NwGeneratorOptionsBase
{
[DisplayName("Start Value")]
public double StartValue { get; set; } = 0;
[DisplayName("Stop Value")]
public double? EndValue { get; set; } = 100;
[DisplayName("Increment By")]
public double IncrementBy { get; set; } = 1;
[TypeConverter(typeof(ExpandableObjectConverter))]
[DisplayName("Rounding")]
public NwGeneratorRoundingOptions Rounding { get; set; } = new();
}
Boolean Üreteci
Boolean üreteci seçenekleri booleanGeneration
nesnesi içinde tanımlanır.
public class NwBooleanGeneratorOptions: NwGeneratorOptionsBase
{
}
Uuid Üreteci
Uuid üreteci seçenekleri guidGeneratorOptions
nesnesi içinde tanımlanır.
public class NwGuidGeneratorOptions: NwGeneratorOptionsBase
{
public static NwGuidGeneratorOptions Default => new();
}
Tarih ve Saat Üreteci
Tarih ve saat üreteci seçenekleri dateTimeGeneratorOptions
nesnesi içinde tanımlanır.
public class NwDateTimeGeneratorOptions: NwGeneratorOptionsBase
{
[DisplayName("Pick Value And Iterate")]
public bool PickAndIterate { get; set; }
[DisplayName("Pick Value And Iterate By Seconds")]
public int? PickAndIterateSeconds { get; set; }
[Category("Between")]
[DisplayName("Start Date")]
public DateTime? StartDate { get; set; }
[Category("Between")]
[DisplayName("End Date")]
public DateTime? EndDate { get; set; }
[Category("Future or Past")]
[DisplayName("Reference Date")]
public DateTime? ReferenceDate { get; set; }
[Category("Future or Past")]
[DisplayName("Years To Go Forward")]
public int? YearsToGoForward { get; set; }
[Category("Future or Past")]
[DisplayName("Years To Go Backward")]
public int? YearsToGoBackward { get; set; }
[Category("Soon or Recent")]
[DisplayName("Days To Go Forward")]
public int? DaysToGoForward { get; set; }
[Category("Soon or Recent")]
[DisplayName("Days To Go Bacjward")]
public int? DaysToGoBackward { get; set; }
}
Metin Üreteci
Metin üreteci seçenekleri stringGeneratorOptions
nesnesi içinde tanımlanır.
public class NwStringGeneratorOptions: NwGeneratorOptionsBase
{
[Category("Lorem String")]
public string Prefix { get; set; }
[Category("Lorem String")]
public string Postfix { get; set; }
[Category("File System")]
[DisplayName("File Name")]
public bool AsFileName { get; set; }
[Category("File System")]
[DisplayName("File Path")]
public bool AsFilePath { get; set; }
[Category("File System")]
[DisplayName("Directory Path")]
public bool AsDirectory { get; set; }
public static NwStringGeneratorOptions Default => new();
}
nw-test ile simülasyon
nw-test ile simülasyon seçimi
nw-test simülasyon verisi tablo görünümü