Veri Tabanı Sink Konfigürasyonu
Veri Tabanı Sink Tanımı
- ConnectionString: Veri tabanı sink'e bağlanmak için kullanılacak bağlantı dizesi
- DbType: Veri tabanı sink'e bağlanmak için kullanılacak veri tabanı tipi
- Enabled: Veri tabanı sink'in aktif olup olmayacağı
- Name: Veri tabanı sink'in adı
- Publish: Public Only Configuration: Veri tabanı sink'e sadece tanımların gönderilip göndeirlmeyeceği
- Publish: Publish Only Latest DateTime Values: Veri tabanı sinkine tarih/zaman tipinden okunan sinyallerin sadece son değerlerinin mi gönderilip gönderilmeyeceği
- Publish: Publish Only Latest Guid Values: Veri tabanı sinkine Guid tipinden okunan sinyallerin sadece son değerlerinin mi gönderilip gönderilmeyeceği
- Publish: Publish Only Latest String Values: Veri tabanı sinkine metin tipinden okunan sinyallerin sadece son değerlerinin mi gönderilip gönderilmeyeceği
- Publish Discards: Discard Empty Guid: Boş Guid (00000000-0000-0000-0000-000000000000) değerlerin göz ardı edilip edilmeyeceği
- Publish Discards: Discard Empty String: Boş metin değerlerin göz ardı edilip edilmeyeceği
- Publish Discards: Discard Min DateTime Values:
- Discard Zero: Okunan nümerik değerlerden 0 olanların göz ardı edilip edilmeyeceği
Redis Sink Konfigürasyonu
{
"sinkType": "Database",
"sinkKind": "Integration",
"connectionStringEnc": "",
"dbType": "pgsql",
"discardZeroValues": false,
"discardEmptyString": false,
"discardEmptyGuid": false,
"discardMinDateTime": false,
"doNotPublishValues": false,
"publishOnlyLatestStringValues": true,
"publishOnlyLatestGuidValues": true,
"publishOnlyLatestDateTimeValues": true,
"mqttWorkOrderSubscribers": [],
"redisWorkOrderSubscribers": [],
"rabbitWorkOrderSubscribers": [],
"workOrderSubscribers": [],
"uid": "490cb92c-ced2-4b2a-a8d0-8f3e6b5bbf39",
"id": "490cb92c-ced2-4b2a-a8d0-8f3e6b5bbf39",
"enabled": false,
"name": "TimeScale Docker"
}
Veri tabanı sinkinin veri gönderdiği tabloların yapısı aşağıdaki C# sınıfları ile temsil edilmektedir.
Database Sink İçin Veri Tabanının Oluşturulması
Adım-1
Database sinkinin ihtiyaç duyduğu veri tabanı tablolarını oluşturmak için kullanacağınız nw-db uygulamasını indirdiğiniz Windows veya Linux kurulum klasörü içindeki Trex.NightWatch.DbMigrator alt klasöründe bulabilirsiniz.
Adım-2
nw-db uygulamasını komut satırında nw-db --help
komutu ile çalıştırın. Aşağıdaki gibi bir çıktı alacaksınız.
NightWatch Database Migrator
- -p|--provider: Veri tabanı sağlayıcısı.
pgsql
,mssql
,sqlite
vemysql
desteklenmektedir. - -c|--cs: Veri tabanı bağlantı cümlesi. Farklı veri tabanlarının bağlantı cümlesi formatlarını bu adresten öğrenebilirsiniz.
Örnek Kullanım
$ nw-db -p "pgsql" -c "Host=localhost;Port=5432;Database=nightwatch;Username=postgres;Password=postgres"
Docker Kullanımı
nw-db aracının Docker üzerinde de imajını edindikten sonra yukarıda açıklamasını yaptığımız parametreler ile kullanabilirsiniz.
Konfigürasyon Tanımları
Tüm konfigürasyon tanımları NwBaseDefinition
sınıfından türer, dolayısıyla bu sınıftan türeyen tüm tanımlar bu sınıfın alanlarını içerir.
public abstract class NwBaseDefinition
{
[Key]
[Column("id")]
public long Id { get; set; }
[Column("tenant_id")]
public Guid? TenantId { get; set; }
[Column("instance_id")]
public Guid? InstanceId { get; set; }
[Column("external_id")]
public string? ExternalId { get; set; }
[Column("external_group_code")]
public string? ExternalGroupCode { get; set; }
[Column("display_name")]
public string? DisplayName { get; set; }
[Column("version_no")]
public int? VersionNo { get; set; }
}
NwDeviceEntity
, konfigürasyon içinde yer alan Device tipinden tanımların özet bilgisini ifade eder.
[Table("trex_nightwatch_device")]
public class NwDeviceEntity: NwBaseDefinition
{
[Column("instance_name")]
public string? InstanceName { get; set; }
[Column("version")]
public string? Version { get; set; }
[Column("config_uid")]
public Guid? ConfigUid { get; set; }
[Column("device_group_uid")]
public Guid DeviceGroupUid { get; set; }
[Column("device_uid")]
public Guid DeviceUid { get; set; }
[Column("name")]
public string? Name { get; set; }
[Column("ip_address")]
public string? IpAddress { get; set; }
[Column("port_no")]
public int PortNo { get; set; }
[Column("inserted_on")]
public DateTimeOffset InsertedOn { get; set; }
public virtual List<NwUnitEntity> Units { get; set; } = new();
[Column("collector_type")]
public DataCollectorTypes? DataCollectorType { get; set; }
[Column("collector_type_name")]
public string? DataCollectorTypeName { get; set; }
}
NwUnitEntity
, konfigürasyon içinde yer alan Unit tipinden tanımların özet bilgisini ifade eder.
[Table("trex_nightwatch_unit")]
public class NwUnitEntity: NwBaseDefinition
{
[Column("device_id")]
public long DeviceId { get; set; }
[Column("unit_uid")]
public Guid UnitUid { get; set; }
[Column("plant_id")]
public Guid? PlantId { get; set; }
[Column("plant_name")]
public string? PlantName { get; set; }
[Column("plant_no")]
public string? PlantNo { get; set; }
[Column("plant_code")]
public string? PlantCode { get; set; }
[Column("name")]
public string? Name { get; set; }
[Column("inserted_on")]
public DateTimeOffset InsertedOn { get; set; }
[ForeignKey(nameof(DeviceId))]
public virtual NwDeviceEntity Device { get;set; }
public virtual List<NwReadingDefEntity> ReadingDefs { get; set; } = new();
}
NwReadingDefEntity
, konfigürasyon içinde yer alan ReadingDefinition tipinden tanımların özet bilgisini ifade eder.
[Table("trex_nightwatch_reading_def")]
public class NwReadingDefEntity: NwBaseDefinition
{
[Column("unit_id")]
public long UnitId { get; set; }
[Column("address")]
public int Address { get; set; }
[Column("readingdef_name")]
public string? ReadingDefinitionName { get; set; }
[Column("readingdef_uid")]
public Guid ReadingDefinitionUid { get; set; }
[Column("formula_name")]
public string? FormulaName { get; set; }
[Column("si_unit")]
public string? MeasurementUnit{ get; set; }
[Column("inserted_on")]
public DateTimeOffset InsertedOn { get; set; }
[ForeignKey(nameof(UnitId))]
public virtual NwUnitEntity Units { get; set; }
[Column("external_signal_type")]
public string? ExternalSignalType { get; set; }
[Column("external_signal_category")]
public string? ExternalSignalCategory { get; set; }
[Column("array_start_index")]
public int? ArrayStartIndex { get; set; }
[Column("array_end_index")]
public int? ArrayEndIndex { get; set; }
[Column("exclude_from_oee")]
public bool? ExcludeFromOee { get; set; }
}
Zaman Serisi Verisi Tanımları
NighWatch tarafından toplanan tüm sinyal değerlerinin zaman serisi verisini temsil eden sınıflar NwBaseData
sınıfından türer, dolayısıyla bu sınıftan türeyen tüm tanımlar bu sınıfın alanlarını içerir.
public abstract class NwBaseData
{
[Key]
[Column("id")]
public Guid Id { get; set; }
[Column("tenant_id")]
public Guid? TenantId { get; set; }
[Column("instance_id")]
public Guid? InstanceId { get; set; }
[Column("readingdef_uid")]
public Guid ReadingDefinitionUid { get; set; }
[Column("external_id")]
public string? ExternalId { get; set; }
[Column("time")]
public DateTimeOffset Time { get; set; }
[Column("inserted_on")]
public DateTimeOffset InsertedOn { get; set; }
[Column("source_utc_timestamp")]
public DateTimeOffset? SourceUtcTimestamp { get; set; }
[Column("server_utc_timestamp")]
public DateTimeOffset? ServerUtcTimestamp { get; set; }
[Column("index")]
public int? Index { get; set; }
[Column("correlation_id")]
public long? CorrelationId { get; set; }
[Column("is_expression")]
public bool? IsExpression { get; set; }
[Column("is_manual_entry")]
public bool? IsManualEntry { get; set; } = false;
[Column("version_no")]
public int? VersionNo { get; set; }
}
NwDataNumericEntity
, nümerik makine ve sensör verisini serisi verisinin temsil eden sınıf.
[Table("trex_nightwatch_data")]
public class NwDataNumericEntity: NwBaseData
{
[Column("value")]
public double? Value { get; set; }
}
NwDataStringEntity
, metin tipinden makine ve sensör verisini zaman serisi verisinin temsil eden sınıf.
[Table("trex_nightwatch_data_string")]
public class NwDataStringEntity: NwBaseData
{
[Column("value")]
public string? Value { get; set; }
}
NwDataDateTimeEntity
, Tarih tipinden makine ve sensör verisini zaman serisi verisinin temsil eden sınıf.
[Table("trex_nightwatch_data_datetime")]
public class NwDataDateTimeEntity: NwBaseData
{
[Column("value")]
public DateTime? Value { get; set; }
}
NwDataDateTimeEntity
, Guid tipinden makine ve sensör verisini zaman serisi verisinin temsil eden sınıf.
[Table("trex_nightwatch_data_guid")]
public class NwDataGuidEntity: NwBaseData
{
[Column("value")]
public Guid? Value { get; set; }
}