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.

  1. EasyThings Platformu üzerinden konfigürasyonunuzu oluşturup json dosya olarak indirebilirsiniz
  2. 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"
}