Konfigürasyonun Diskten Yüklenmesi
NightWatch Data Collector uygulaması veri toplama ve veri dağıtım konfigürasyonunu diskte yer alan json dosyasından yükleyerek da çalışabilir.
Diskten okunacak konfigürasyon dosyasını aşağıda belirttiğimiz üç farklı yöntemle üretebilir veya elde edebilirsiniz.
- EasyThings Platformu üzerinden konfigürasyonunuzu oluşturup json dosya olarak indirebilirsiniz
- NightWatch Masaüstü Konfigürasyon ve İzleme Uygulaması kullanarak konfigürasyonuuzu oluşturuo json dosya olarak kaydedebilirsiniz
Konfigürasyon dosyasını oluşturduktan sonra NightWatch Data Collector uygulamasının kurulu olduğu dizindeki nightwatchsettings.json dosyasını bir metin editöründe açın.
Aşağıdaki şablona uygun bir içerik ile karşılaşacaksınız. nightwatchsettings.json içeriği aşağıdaki formatta değilse dosyayı bu formata uygun hale getirin
{
"NightWatch": {
"Provider": {
"Path": "file:///C:/NightWatch/Config/sampleconfig.json",
"CheckIntervalInSeconds": 5
},
"InstanceId": "79f33fff-02eb-4634-9e05-0979cf022c2c",
"Simulation": false
}
}
Konfigürasyon dosyasında aşağıdaki alanları size uygun değerler ile doldurun
Anahtar | Değer |
---|---|
Path | Konfigürasyon dosyanızın tam yolu. Klasör ayracaı olarak / kullanabilirsiniz |
CheckIntervalInSeconds | Konfigürasyon dosyası değişikliklerini kontrol etme arlığı (saniye cinsinden) |
InstanceId | Konfigürasyon dosyanızı EasyThings'den indirdiyseniz Configuration Id değeri, konfigürasyton dosyasını masaüstü uygulama ile oluşturduysanız konfigürasyonun içine verdiğiniz GUID değeri |
EK BİLGİ
NightWatch Data Collector uygulaması konfigürasyonu diskten yüklediği durumda CheckIntervalInSeconds belirttiğiniz zaman aralıklarında dosyada değişiklik olup olmadığını otomatik olarak kontrol eder. Bu sayede konfigürasyon değişiklikleri anlık olarak uygulamaya yansır.
Konfigürasyonun REST API'den Yüklenmesi
NightWatch Data Collector uygulaması veri toplama ve veri dağıtım konfigürasyonunu sizin sağlayacağınız ve NightWatch'un desteklediği konvansiyona uygun geliştirilmiş herhangi bir REST API üzerinden de yükleyebilir.
NightWatch Data Collector uygulamasının kurulu olduğu dizindeki nightwatchsettings.json dosyasını bir metin editöründe açın.
Aşağıdaki şablona uygun bir içerik ile karşılaşacaksınız. nightwatchsettings.json içeriği aşağıdaki formatta değilse dosyayı bu formata uygun hale getirin
{
"NightWatch": {
"Provider": {
"Path": "http://localhost/load",
"CheckPath":"http://localhost/check",
"CheckIntervalInSeconds": 5,
"ClientId": "sample_client_id",
"ClientSecret": "sample_client_secret",
"AcceptInvalidCertificate": true,
"AcceptObsoleteProtocols": true
}
}
}
Konfigürasyon dosyasında aşağıdaki alanları size uygun değerler ile doldurun
Anahtar | Değer |
---|---|
Path | Konfigürasyon'un yükleneceği REST API GET url |
CheckPath | Konfigürasyon değişikliklerinin kontrol REST API GET url |
ClientId | Rest API Client Id (Basic Authentication) |
ClientSecret | Rest API Client Secret (Basic Authentication) |
AcceptInvalidCertificate | Self signed sertifikalar ile deneme yapabilmek için true olarak verilmeli. Varsayılan değeri false |
AcceptObsoleteProtocols | Tls, Tls 1.1, SSL 2 ve SSL 3 gibi eski protokollerin desteklenmesi gerektiği durumlarda true olarak verilmeli. Varsayılan değeri false |
EK BİLGİ
NightWatch Data Collector uygulaması konfigürasyonu REST API'den okuduğu durumda CheckIntervalInSeconds belirttiğiniz zaman aralıklarında CheckPath'den dönen MD5 hash değerini kontrol eder. Yüklenen konfigürasyonun MD5 değeri CheckPath'den dönen MD5 değeri farklı ise konfigürasyonu tekrar yükler. Bu sayede konfigürasyon değişiklikleri anlık olarak uygulamaya yansır.
Konfigürasyonu Yükleme GET Response Örneği
{
"Descriptor":{
"Name":"MyConfig",
"Md5":"b10a8db164e0754105b7a99be72e3fe5"
},
"Config": {
"uid": "2728d2d2-9636-4f29-94b8-fd7d34c20922",
"type": "OpcUA",
"dataVersioningEnabled": false,
"tenantId": "ea6335f8-de93-4024-8af2-180c56a2338b",
"instanceId": "79f33fff-02eb-4634-9e05-0979cf022c2c",
"instanceName": "KepWare_CoreMes",
"name": "KepWare",
"alertChartsEnabled": false,
"chartGeneratorRemoteActorPath": "akka.tcp://NightWatchCharts@localhost:8888/user/chartgenerator",
"chartGeneratorConfiguratorRemoteActorPath": "akka.tcp://NightWatchCharts@localhost:8888/user/chartgeneratorconfig",
"modbusRetryPolicy": {
"waitToRetryMilliseconds": 250,
"maxRetries": 3,
"slaveBusyUsesRetryCount": false
},
"tcpRetryPolicy": {
"waitToRetryMilliseconds": 10000
},
"serialPortRetryPolicy": {
"waitToRetryMilliseconds": 10000
},
"mqBrokerRetryPolicy": {
"waitToRetryMilliseconds": 10000
},
"deviceGroups": [
{
"deviceCount": 1,
"devices": [
{
"deviceType": "OpcUA",
"enabled": true,
"discardAllOnError": false,
"ipAddress": "opc.tcp://127.0.0.1:49320",
"portNo": -1,
"pollIntervalInMilliseconds": 5000,
"unitGroups": [
{
"unitCount": 1,
"units": [
{
"unitId": 0,
"readingDefinitions": [
{
"enabled": true,
"address": 0,
"numberOfPoints": 0,
"dataType": "UInt32",
"formulaNames": [
"Adet"
],
"formulaNamesAsCsv": "Adet",
"isResidual": false,
"isVariable": false,
"expressionInfo": "...",
"isExpression": false,
"useAdvancedEvaluatorMethod": false,
"slice": {},
"hasSlice": false,
"extraProps": {
"processOnChange": true,
"doNotPublishToSinks": false,
"hideFromDashboard": false,
"mesDoNotProcess": false,
"excludeFromOee": false,
"mesProcess": true,
"signalType": "COUNT",
"signalCategory": "",
"discardAllCounters": false,
"discardCounterUids": [],
"isLongCycleCounter": true,
"resetPulseCounterUids": [],
"hasValidResetPulseCounterUid": false,
"isValidCycleSignalForUndefinedStoppage": false,
"isValidCycleTypeForUndefinedStoppage": false
},
"plcDataType": "None",
"plcDataBlock": 0,
"plcArraySize": 1,
"isPlcArray": false,
"bitAdr": 0,
"path": "1,0",
"isSystemGeneratedSignal": false,
"displayOrder": 0,
"uid": "bbb559bd-df3d-4fd9-be65-54bd47e56864",
"name": "ns=2;s=Channel1.Device1.Counter",
"displayName": "Saya\u00E7"
}
],
"displayOrder": 0,
"uid": "c96f7d75-6abe-4166-aef4-40d2e85ca47d",
"name": "Sample"
}
],
"unitGroupCount": 1,
"publishResidualValues": false,
"addResidualsToRelatedReadings": true,
"plcClientConfig": {
"cpuType": "S7200",
"rack": 0,
"slot": 0,
"parsePlcAddressesFromName": false
},
"libPlcClientConfig": {
"plcType": "ControlLogix",
"protocol": "ab_eip",
"timeoutInMilliseconds": 5000
},
"opcUaClientConfig": {
"isAnonymousClient": true,
"sessionTimeout": 10000,
"defaultSessionTimeout": 60000,
"sessionCloseTimeout": 10000,
"operationTimeout": 15000,
"reconnectPeriod": 10000,
"applicationCertificate": {
"storeType": "Directory",
"storePath": "%CommonApplicationData%\\OPC Foundation\\CertificateStores\\MachineDefault",
"subjectName": "CN=SAMPLE, DC=ALIOZGURMINI"
},
"trustedIssuerCertificates": {
"storeType": "Directory",
"storePath": "%CommonApplicationData%\\OPC Foundation\\CertificateStores\\UA Certificate Authorities"
},
"trustedPeerCertificates": {
"storeType": "Directory",
"storePath": "%CommonApplicationData%\\OPC Foundation\\CertificateStores\\UA Applications"
},
"rejectedCertificateStore": {
"storeType": "Directory",
"storePath": "%CommonApplicationData%\\OPC Foundation\\CertificateStores\\RejectedCertificates"
}
},
"opcUaUseSubscriptions": false,
"discardBadQualitySignals": true,
"serialPortConfg": {},
"numberOfRawDataProcessTasks": 1,
"effectiveNumberOfRawDataProcessTasks": 1,
"mqBrokerType": "None",
"mqttDataCollectorConfig": {
"connection": {
"port": 1883,
"cleanSession": true,
"autoReconnectDelayInSeconds": 5,
"maxPendingMessages": 100,
"hasCredentials": false
},
"qos": "ExactlyOnce",
"isTimestampUtc": false,
"messageDeserializerType": "None",
"deserializerClassSourceCode": ""
},
"rabbitDataCollectorConfig": {
"connection": {
"virtualHost": "/",
"port": 5672
},
"isTimestampUtc": false,
"messageDeserializerType": "None",
"deserializerClassSourceCode": ""
},
"redisDataCollectorConfig": {
"connection": {},
"isTimestampUtc": false,
"messageDeserializerType": "None",
"deserializerClassSourceCode": ""
},
"useMethods": false,
"advancedMethods": [],
"displayOrder": 0,
"uid": "f1a5574f-69ad-44bf-aee2-34ede9aa1a14",
"name": "KepWare",
"externalGroupCode": "DEV"
}
],
"displayOrder": 0,
"uid": "90a2477b-f51f-4aaf-b0f4-ada94f64aa97",
"name": "Simulation"
}
],
"numericFormulas": [
{
"formulaString": "(value / 1) * 1 ",
"divisor": 1,
"multiplier": 1,
"enabled": true,
"displayOrder": 0,
"uid": "6d5ed694-12ff-4596-bbb2-2f8cd8296a01",
"name": "Default"
},
{
"formulaString": "(value / 1) * 1 Adet",
"measurementUnit": "Adet",
"divisor": 1,
"multiplier": 1,
"enabled": true,
"displayOrder": 0,
"uid": "dd8d98fc-fae9-4c7e-9a31-65909796c6ae",
"name": "Adet"
},
{
"formulaString": "(value / 1) * 1 Duru\u015F",
"measurementUnit": "Duru\u015F",
"divisor": 1,
"multiplier": 1,
"enabled": true,
"displayOrder": 0,
"uid": "aef627f0-5164-4d04-9c12-19aa61622cab",
"name": "Duru\u015F"
}
],
"smtpChannels": [
{
"sinkType": "EMail",
"hostName": "localhost",
"port": 2525,
"enableSsl": false,
"username": "UserNone",
"uid": "f9d68ed2-be18-416c-bb27-2d2d9a2ff3a5",
"id": "f9d68ed2-be18-416c-bb27-2d2d9a2ff3a5",
"enabled": false,
"name": "SMTP 4"
}
],
"telegramChannels": [
{
"sinkType": "Telegram",
"uid": "8988579a-2548-4008-b908-ba70336eef8d",
"id": "8988579a-2548-4008-b908-ba70336eef8d",
"enabled": false,
"name": "Sample Telegram"
}
],
"alerts": [
{
"enabled": false,
"readingDefinitionName": "ns=2;s=Channel1.Device1.TagUintArr",
"readingDefinitionFormulaName": "Default",
"value": 100,
"triggerWhen": "ValueAbove",
"notifyWhenEnds": false,
"effectiveThreshold": 100,
"trackDurationInSeconds": 10,
"evalIntervalInSeconds": 2,
"channelNotifications": [
{
"channelType": "EMail",
"channelConfigUid": "f9d68ed2-be18-416c-bb27-2d2d9a2ff3a5",
"attachDetails": true,
"recipients": "aliozgur@trex.com.tr;volkandagdelen@trex.com.tr",
"recipientsList": [
"aliozgur@trex.com.tr",
"volkandagdelen@trex.com.tr"
],
"enabled": true,
"message": "Merhaba,\r\nBu mesaj Trex NightWatch taraf\u0131ndan otomatik olarak g\u00F6nderilmi\u015Ftir.",
"unitUidsFilter": [],
"unitUidsFilterCount": 0,
"displayOrder": 0,
"uid": "507f15c5-63cd-4f18-b185-44752759b216",
"name": "SMTP"
}
],
"sinkNotifications": [],
"unitUidsFilter": [],
"unitUidsFilterCount": 0,
"isExpression": false,
"conditionText": "Evaluate every 2 seconds for 10 seconds and alert when ns=2;s=Channel1.Device1.TagUintArr is above 100",
"chartDataPointCount": 10,
"attachLatestValuesAsChart": true,
"displayOrder": 0,
"uid": "849956af-ed8d-413c-9dbd-3635be522d17",
"name": "UInt Array"
}
],
"itemRefs": [],
"mqttSinks": [],
"redisSinks": [],
"rabbitSinks": [],
"ModbusDataDbSinks": [
{
"sinkType": "Database",
"sinkKind": "Integration",
"connectionStringEnc":"Encrypted Database Connection String",
"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": true,
"name": "TimeScale Docker"
}
],
"dcasEnergySinks": [],
"webHookSinks": [],
"opcUaSinks": [],
"dcasPanelSinks": [],
"influxDbSinks": [],
"useUndefinedStoppageGenerator": false
}
}
Konfigürasyonu Değişikliği Kontrolü GET Response Örneği
{
"Name":"MyConfig",
"Md5":"b10a8db164e0754105b7a99be72e3fe5"
}