From 7c6669ddba11c527e83b3f7f7b6472c69075678f Mon Sep 17 00:00:00 2001 From: Jakub Klena Date: Thu, 16 Oct 2025 02:24:24 +0200 Subject: [PATCH] Backup senica-RVO16 on 16.10.2025 --- RVO16/addSwitch.py | 36 + RVO16/cloud_topic.py | 76 + RVO16/config | 12 + RVO16/createNode.py | 43 + RVO16/databases/accelerometer_db.js | 3055 +++++++ RVO16/databases/modbus_config.js | 114 + RVO16/databases/nodes.table | 128 + .../nodes_original/nodes_original.table | 1 + RVO16/databases/notifications.table | 41 + RVO16/databases/pins.table | 14 + RVO16/databases/relays.table | 5 + RVO16/databases/settings.table | 2 + RVO16/databases/tbdata.nosql | 0 RVO16/databases/tbdatacloud.nosql | 0 RVO16/databases/total_energy.js | 38 + RVO16/debug.js | 16 + RVO16/err.txt | 33 + RVO16/flow/cloudmqttconnect.js | 357 + RVO16/flow/cmd_manager.js | 3071 +++++++ RVO16/flow/cmd_manager_orig.txt | 2800 ++++++ RVO16/flow/code.js | 90 + RVO16/flow/comment.js | 11 + RVO16/flow/count.js | 60 + RVO16/flow/db_connector.js | 286 + RVO16/flow/db_init.js | 113 + RVO16/flow/debug.js | 100 + RVO16/flow/designer.json | 3102 +++++++ RVO16/flow/dido_controller.js | 1486 +++ RVO16/flow/dido_controller_orig.txt | 1473 +++ RVO16/flow/helper/DataToTbHandler.js | 187 + RVO16/flow/helper/ErrorToServiceHandler.js | 91 + RVO16/flow/helper/db_helper.js | 44 + RVO16/flow/helper/logger.js | 30 + RVO16/flow/helper/md5.js | 5 + RVO16/flow/helper/notification_reporter.js | 121 + RVO16/flow/helper/register.js | 144 + RVO16/flow/helper/serialport_helper.js | 99 + RVO16/flow/helper/suncalc.js | 317 + RVO16/flow/helper/utils.js | 161 + RVO16/flow/httprequest.js | 137 + RVO16/flow/httpresponse.js | 76 + RVO16/flow/httproute.js | 326 + RVO16/flow/infosender.js | 81 + RVO16/flow/modbus_reader.js | 346 + RVO16/flow/monitorconsumption.js | 156 + RVO16/flow/monitordisk.js | 96 + RVO16/flow/monitormemory.js | 87 + RVO16/flow/nodesdb_changecheck.js | 77 + RVO16/flow/show_dbdata.js | 243 + RVO16/flow/slack_filter.js | 188 + RVO16/flow/thermometer.js | 99 + RVO16/flow/trigger.js | 79 + RVO16/flow/variables.txt | 0 RVO16/flow/virtualwirein.js | 43 + RVO16/flow/virtualwireout.js | 41 + RVO16/flow/wsmqttpublish.js | 448 + RVO16/monitor.txt | 7953 +++++++++++++++++ RVO16/package-lock.json | 2139 +++++ RVO16/package.json | 30 + RVO16/release.js | 15 + RVO16/release.js.json | 34 + RVO16/report_data.log | 2191 +++++ 62 files changed, 32647 insertions(+) create mode 100755 RVO16/addSwitch.py create mode 100755 RVO16/cloud_topic.py create mode 100755 RVO16/config create mode 100755 RVO16/createNode.py create mode 100755 RVO16/databases/accelerometer_db.js create mode 100755 RVO16/databases/modbus_config.js create mode 100755 RVO16/databases/nodes.table create mode 100755 RVO16/databases/nodes_original/nodes_original.table create mode 100755 RVO16/databases/notifications.table create mode 100755 RVO16/databases/pins.table create mode 100755 RVO16/databases/relays.table create mode 100755 RVO16/databases/settings.table create mode 100755 RVO16/databases/tbdata.nosql create mode 100755 RVO16/databases/tbdatacloud.nosql create mode 100755 RVO16/databases/total_energy.js create mode 100755 RVO16/debug.js create mode 100755 RVO16/err.txt create mode 100755 RVO16/flow/cloudmqttconnect.js create mode 100755 RVO16/flow/cmd_manager.js create mode 100755 RVO16/flow/cmd_manager_orig.txt create mode 100755 RVO16/flow/code.js create mode 100755 RVO16/flow/comment.js create mode 100755 RVO16/flow/count.js create mode 100755 RVO16/flow/db_connector.js create mode 100755 RVO16/flow/db_init.js create mode 100755 RVO16/flow/debug.js create mode 100755 RVO16/flow/designer.json create mode 100755 RVO16/flow/dido_controller.js create mode 100755 RVO16/flow/dido_controller_orig.txt create mode 100755 RVO16/flow/helper/DataToTbHandler.js create mode 100755 RVO16/flow/helper/ErrorToServiceHandler.js create mode 100755 RVO16/flow/helper/db_helper.js create mode 100755 RVO16/flow/helper/logger.js create mode 100755 RVO16/flow/helper/md5.js create mode 100755 RVO16/flow/helper/notification_reporter.js create mode 100755 RVO16/flow/helper/register.js create mode 100755 RVO16/flow/helper/serialport_helper.js create mode 100755 RVO16/flow/helper/suncalc.js create mode 100755 RVO16/flow/helper/utils.js create mode 100755 RVO16/flow/httprequest.js create mode 100755 RVO16/flow/httpresponse.js create mode 100755 RVO16/flow/httproute.js create mode 100755 RVO16/flow/infosender.js create mode 100755 RVO16/flow/modbus_reader.js create mode 100755 RVO16/flow/monitorconsumption.js create mode 100755 RVO16/flow/monitordisk.js create mode 100755 RVO16/flow/monitormemory.js create mode 100755 RVO16/flow/nodesdb_changecheck.js create mode 100755 RVO16/flow/show_dbdata.js create mode 100755 RVO16/flow/slack_filter.js create mode 100755 RVO16/flow/thermometer.js create mode 100755 RVO16/flow/trigger.js create mode 100755 RVO16/flow/variables.txt create mode 100755 RVO16/flow/virtualwirein.js create mode 100755 RVO16/flow/virtualwireout.js create mode 100755 RVO16/flow/wsmqttpublish.js create mode 100755 RVO16/monitor.txt create mode 100755 RVO16/package-lock.json create mode 100755 RVO16/package.json create mode 100755 RVO16/release.js create mode 100755 RVO16/release.js.json create mode 100755 RVO16/report_data.log diff --git a/RVO16/addSwitch.py b/RVO16/addSwitch.py new file mode 100755 index 0000000..c35e96b --- /dev/null +++ b/RVO16/addSwitch.py @@ -0,0 +1,36 @@ +import os + +def process_set_file(): + """ + Checks if /root/flowserver exists, reads set.txt, and modifies the second line. + """ + default_folder = "/root/flowserver" if os.path.exists("/root/flowserver") else "/home/unipi/flowserver" + flag = 1 if default_folder == "/root/flowserver" else 0 + + try: + with open("/home/unipi/flowserver/databases/settings.table", "r") as f: + lines = f.readlines() + + if len(lines) >= 2: + lines[0] = lines[0].rstrip('\n') + "|main_switch:boolean\n" + second_line = lines[1].strip() # remove trailing newline + last_pipe_index = second_line.rfind("|") + + if last_pipe_index != -1: + modified_line = second_line[:last_pipe_index + 1] + str(flag) + "|" + second_line[last_pipe_index + 1:] + lines[1] = modified_line + else: + print("Warning: No '|' character found in the second line of set.txt") + + with open("/home/unipi/flowserver/databases/settings.table", "w") as f: + f.writelines(lines) + else: + print("Warning: settings.table has less than two lines.") + + except FileNotFoundError: + print("Error: settings.table not found.") + except Exception as e: + print(e) + +# if __name__ == "__main__": +process_set_file() diff --git a/RVO16/cloud_topic.py b/RVO16/cloud_topic.py new file mode 100755 index 0000000..77c31f1 --- /dev/null +++ b/RVO16/cloud_topic.py @@ -0,0 +1,76 @@ +# import os +# +# def modify_file(file_path): +# """ +# Modifies the given file by: +# 1. Appending "|cloud_topic" to the first line. +# 2. Inserting the text from the third "." to the first "|" on the second line after the last "|" character. +# +# Args: +# file_path (str): The path to the file to be modified. +# """ +# +# with open(file_path, 'r+') as f: +# lines = f.readlines() +# +# # Modify the first line +# lines[0] += "|cloud_topic:string" +# +# # Modify the second line +# second_line = lines[1].strip() # Remove leading/trailing whitespace +# first_pipe_index = second_line.find('|') +# third_dot_index = second_line.find('.', second_line.find('.', second_line.find('.') + 1) + 1) +# text_to_insert = second_line[third_dot_index:first_pipe_index] +# +# last_pipe_index = second_line.rfind('|') +# lines[1] = second_line[:last_pipe_index + 1] + text_to_insert + "|" + second_line[last_pipe_index + 1:] +# +# print(first_pipe_index, third_dot_index, text_to_insert, last_pipe_index) +# # Write the modified lines back to the file +# # f.seek(0) +# # f.writelines(lines) +# # f.truncate() +# +# # Example usage: +# file_path = "settings.table" # Replace with the actual file path +# modify_file(file_path) +# + + +def modify_file(file_path): + """ + Modifies the given file by: + 1. Appending "|cloud_topic" to the first line. + 2. Inserting the text between the third "." and the second "|" on the second line after the last "|" character. + + Args: + file_path (str): The path to the file to be modified. + """ + + with open(file_path, 'r+') as f: + lines = f.readlines() + + first_line = lines[0].strip() + first_line += "|cloud_topic:string\n" + # Modify the first line + lines[0] = first_line + + # Modify the second line + second_line = lines[1].strip() # Remove leading/trailing whitespace + first_pipe_index = second_line.find('|') + second_pipe_index = second_line.find('|', first_pipe_index + 1) + third_dot_index = second_line.find('.', second_line.find('.', second_line.find('.') + 1) + 1) + text_to_insert = "u" + second_line[third_dot_index+1:second_pipe_index] + + last_pipe_index = second_line.rfind('|') + lines[1] = second_line[:last_pipe_index + 1] + text_to_insert + "|" + second_line[last_pipe_index + 1:] + + print(first_pipe_index, third_dot_index, text_to_insert, last_pipe_index) + # Write the modified lines back to the file + f.seek(0) + f.writelines(lines) + f.truncate() + +# Example usage: +file_path = "/home/unipi/flowserver/databases/settings.table" # Replace with the actual file path +modify_file(file_path) diff --git a/RVO16/config b/RVO16/config new file mode 100755 index 0000000..cd0a8a9 --- /dev/null +++ b/RVO16/config @@ -0,0 +1,12 @@ +name : Total.js Flow +default_timezone : Europe/Bratislava + +// Packages settings +package#flow (Object) : { url: '/' } + + +table.relays : line:number|tbname:string|contactor:number|profile:string +table.nodes : node:number|pole_number:string|node_type:string|tbname:string|line:number|profile:string|processed:boolean|status:boolean|time_of_last_communication:number +table.settings : rvo_name:string|lang:string|temperature_address:string|latitude:number|longitude:number|mqtt_host:string|mqtt_clientid:string|mqtt_username:string|mqtt_port:number|maintanace_mode:boolean|project_id:number|controller_type:string|serial_port:string|backup_on_failure:boolean|restore_from_backup:number|restore_backup_wait:number|node_status_nok_time:number|phases:number|cloud_topic:string|has_main_switch:boolean|daily_report:boolean|send_changed_node_numbers:boolean +table.pins : pin:string|type:string|line:number +table.notifications : key:string|weight:string|sk:string|en:string diff --git a/RVO16/createNode.py b/RVO16/createNode.py new file mode 100755 index 0000000..21406cc --- /dev/null +++ b/RVO16/createNode.py @@ -0,0 +1,43 @@ +print("zaciname") +import re, json + +search_str = '|' +final = [] +counter = 1 +with open("/home/unipi/flowserver/databases/nodes.table", 'r') as file: +# with open("/home/rasta5man/dev/oms/flowserver/databases/nodes.table", 'r') as file: + # Read each line in the file + for line in file: + # Print each line + line = line.strip() + print(line) + if counter != 1: + i = [m.start() for m in re.finditer(re.escape(search_str), line)] + node = line[ i[0] + 1 : i[1] ] + tbname = line[ i[1] + 1 : i[2] ] + final.append({node:tbname}) + counter += 1 +print(json.dumps(final)) +f = open("/home/unipi/flowserver/databases/nodes_original/nodes_original.table", "w") +f.write(json.dumps(final)) +f.close() + + +# +# # ``d`` has to be replaced with a different character +# old_character = "'" +# +# # ``t`` will replace ``d` +# new_character = '"' +# resultant_string = 0; +# with open("/home/unipi/flowserver/databases/nodes_original/nodes_original.table", 'r') as file: +# for line in file: +# resultant_string = re.sub("'", '"', line) +# +# resultant_string = re.sub(" ", "", resultant_string) +# print(resultant_string) +# +# f = open("/home/unipi/flowserver/databases/nodes_original/nodes_original.table", "w") +# f.write(str(resultant_string)) +# f.close() +# diff --git a/RVO16/databases/accelerometer_db.js b/RVO16/databases/accelerometer_db.js new file mode 100755 index 0000000..fdfc7fd --- /dev/null +++ b/RVO16/databases/accelerometer_db.js @@ -0,0 +1,3055 @@ +let naklony = { + "3993": { "label": "1/3A", "naklon": 0 }, + "3989": { "label": "1/3B", "naklon": 15 }, + "3976": { "label": "1/1", "naklon": 0 }, + "4181": { "label": "1/2", "naklon": 0 }, + "4376": { "label": "1/4", "naklon": 15 }, + "3868": { "label": "1/5", "naklon": 15 }, + "3728": { "label": "1/6", "naklon": 15 }, + "3730": { "label": "1/7", "naklon": 0 }, + "4374": { "label": "1/8", "naklon": 0 }, + "3718": { "label": "1/9", "naklon": 15 }, + "4375": { "label": "1/10", "naklon": 15 }, + "4172": { "label": "1/11", "naklon": 15 }, + "4176": { "label": "1/12", "naklon": 15 }, + "3800": { "label": "2/1", "naklon": 5 }, + "3823": { "label": "2/2", "naklon": 5 }, + "3905": { "label": "2/3", "naklon": 5 }, + "3803": { "label": "2/4", "naklon": 5 }, + "3817": { "label": "2/5", "naklon": 5 }, + "3818": { "label": "2/6", "naklon": 5 }, + "3811": { "label": "2/7", "naklon": 5 }, + "3915": { "label": "2/8", "naklon": 5 }, + "3843": { "label": "2/9", "naklon": 10 }, + "3827": { "label": "2/10", "naklon": 10 }, + "4220": { "label": "2/11", "naklon": 10 }, + "3826": { "label": "2/12", "naklon": 10 }, + "3834": { "label": "2/13", "naklon": 10 }, + "3838": { "label": "2/14", "naklon": 10 }, + "2823": { "label": "2/15", "naklon": 10 }, + "3750": { "label": "2/16", "naklon": 10 }, + "3378": { "label": "2/17", "naklon": 0 }, + "3376": { "label": "2/18", "naklon": 0 }, + "3379": { "label": "2/19", "naklon": 0 }, + "3285": { "label": "2/20", "naklon": 0 }, + "3382": { "label": "2/21", "naklon": 0 }, + "3383": { "label": "2/22", "naklon": 0 }, + "3375": { "label": "2/24", "naklon": 0 }, + "3381": { "label": "2/25", "naklon": 0 }, + "3380": { "label": "2/26", "naklon": 0 }, + "3828": { "label": "2/27", "naklon": 10 }, + "3377": { "label": "2/28", "naklon": 0 }, + "3591": { "label": "7/1", "naklon": 0 }, + "3587": { "label": "7/2", "naklon": 0 }, + "3468": { "label": "7/3", "naklon": 0 }, + "3466": { "label": "7/4", "naklon": 0 }, + "3474": { "label": "7/5", "naklon": 0 }, + "3481": { "label": "7/6", "naklon": 0 }, + "3589": { "label": "7/7", "naklon": 0 }, + "3472": { "label": "7/8", "naklon": 0 }, + "3473": { "label": "7/9", "naklon": 0 }, + "3584": { "label": "7/10", "naklon": 0 }, + "3571": { "label": "7/11", "naklon": 0 }, + "3476": { "label": "7/12", "naklon": 0 }, + "3590": { "label": "7/13", "naklon": 0 }, + "3478": { "label": "7/14", "naklon": 0 }, + "3471": { "label": "7/15", "naklon": 0 }, + "3467": { "label": "7/16", "naklon": 0 }, + "3479": { "label": "7/17", "naklon": 0 }, + "3480": { "label": "7/18", "naklon": 0 }, + "3477": { "label": "7/19", "naklon": 0 }, + "3362": { "label": "12/1", "naklon": 0 }, + "3355": { "label": "12/2", "naklon": 0 }, + "3356": { "label": "12/3", "naklon": 0 }, + "3349": { "label": "12/4", "naklon": 0 }, + "3357": { "label": "12/5", "naklon": 0 }, + "3350": { "label": "12/6", "naklon": 0 }, + "3353": { "label": "12/7", "naklon": 0 }, + "3539": { "label": "12/8", "naklon": 0 }, + "3050": { "label": "12/9", "naklon": 0 }, + "3361": { "label": "12/10", "naklon": 0 }, + "3360": { "label": "12/11", "naklon": 0 }, + "3358": { "label": "12/12", "naklon": 0 }, + "3541": { "label": "12/13", "naklon": 0 }, + "3551": { "label": "12/14", "naklon": 0 }, + "3514": { "label": "12/15", "naklon": 0 }, + "3547": { "label": "12/16", "naklon": 0 }, + "3562": { "label": "12/17", "naklon": 0 }, + "3525": { "label": "12/18", "naklon": 0 }, + "3558": { "label": "12/19", "naklon": 0 }, + "3511": { "label": "12/20", "naklon": 0 }, + "3058": { "label": "12/21", "naklon": 0 }, + "3062": { "label": "12/22", "naklon": 0 }, + "3070": { "label": "12/23", "naklon": 0 }, + "3447": { "label": "12/24", "naklon": 0 }, + "3056": { "label": "12/25", "naklon": 0 }, + "3057": { "label": "12/26", "naklon": 0 }, + "3071": { "label": "12/27", "naklon": 0 }, + "3061": { "label": "12/28", "naklon": 0 }, + "3069": { "label": "12/29", "naklon": 0 }, + "3077": { "label": "12/30", "naklon": 0 }, + "3080": { "label": "12/31", "naklon": 0 }, + "3081": { "label": "12/32", "naklon": 0 }, + "3078": { "label": "12/33", "naklon": 0 }, + "4037": { "label": "12/34", "naklon": 0 }, + "3067": { "label": "12/35", "naklon": 0 }, + "3051": { "label": "12/36", "naklon": 0 }, + "2924": { "label": "12/37", "naklon": 0 }, + "3060": { "label": "12/38", "naklon": 0 }, + "3073": { "label": "12/39", "naklon": 0 }, + "3469": { "label": "12/40", "naklon": 0 }, + "2923": { "label": "12/41", "naklon": 0 }, + "2925": { "label": "12/42", "naklon": 0 }, + "3359": { "label": "12/43", "naklon": 0 }, + "3055": { "label": "12/44", "naklon": 0 }, + "2922": { "label": "12/45", "naklon": 0 }, + "3084": { "label": "12/46", "naklon": 0 }, + "3064": { "label": "12/47", "naklon": 0 }, + "3066": { "label": "12/48", "naklon": 0 }, + "3072": { "label": "12/49", "naklon": 0 }, + "3415": { "label": "13/13A", "naklon": 0 }, + "3409": { "label": "13/13B", "naklon": 0 }, + "3399": { "label": "13/13C", "naklon": 0 }, + "3410": { "label": "13/29A", "naklon": 0 }, + "3407": { "label": "13/29B", "naklon": 0 }, + "3405": { "label": "13/34A", "naklon": 0 }, + "3404": { "label": "13/34B", "naklon": 0 }, + "3392": { "label": "13/45A", "naklon": 0 }, + "3386": { "label": "13/45B", "naklon": 0 }, + "3303": { "label": "13/60A", "naklon": 3 }, + "3302": { "label": "13/60B", "naklon": 3 }, + "3319": { "label": "13/70A", "naklon": 6 }, + "3317": { "label": "13/70B", "naklon": 6 }, + "3326": { "label": "13/70C", "naklon": 6 }, + "3351": { "label": "13/73A", "naklon": 6 }, + "3313": { "label": "13/73B", "naklon": 6 }, + "3316": { "label": "13/83A", "naklon": 0 }, + "3320": { "label": "13/83B", "naklon": 0 }, + "3336": { "label": "13/95A", "naklon": 0 }, + "3323": { "label": "13/95B", "naklon": 0 }, + "3339": { "label": "13/98A", "naklon": 0 }, + "3333": { "label": "13/98B", "naklon": 0 }, + "3425": { "label": "13/1", "naklon": 0 }, + "3419": { "label": "13/2", "naklon": 0 }, + "3416": { "label": "13/3", "naklon": 0 }, + "3332": { "label": "13/4", "naklon": 0 }, + "3422": { "label": "13/5", "naklon": 0 }, + "3417": { "label": "13/6", "naklon": 0 }, + "3418": { "label": "13/7", "naklon": 0 }, + "3424": { "label": "13/8", "naklon": 0 }, + "3334": { "label": "13/9", "naklon": 0 }, + "4363": { "label": "13/10", "naklon": 0 }, + "3423": { "label": "13/11", "naklon": 0 }, + "3406": { "label": "13/12", "naklon": 0 }, + "3411": { "label": "13/14", "naklon": 0 }, + "3412": { "label": "13/15", "naklon": 0 }, + "3413": { "label": "13/16", "naklon": 0 }, + "3414": { "label": "13/17", "naklon": 0 }, + "3391": { "label": "13/18", "naklon": 0 }, + "3370": { "label": "13/19", "naklon": 0 }, + "3369": { "label": "13/20", "naklon": 0 }, + "3408": { "label": "13/21", "naklon": 0 }, + "3393": { "label": "13/22", "naklon": 0 }, + "3128": { "label": "13/23", "naklon": 0 }, + "3197": { "label": "13/24", "naklon": 0 }, + "4364": { "label": "13/25", "naklon": 0 }, + "3155": { "label": "13/26", "naklon": 0 }, + "3196": { "label": "13/27", "naklon": 0 }, + "3144": { "label": "13/28", "naklon": 0 }, + "3150": { "label": "13/30", "naklon": 0 }, + "3390": { "label": "13/31", "naklon": 0 }, + "3401": { "label": "13/32", "naklon": 0 }, + "3275": { "label": "13/33", "naklon": 0 }, + "3371": { "label": "13/35", "naklon": 0 }, + "3389": { "label": "13/36", "naklon": 0 }, + "3388": { "label": "13/37", "naklon": 0 }, + "3365": { "label": "13/38", "naklon": 0 }, + "3363": { "label": "13/39", "naklon": 0 }, + "3397": { "label": "13/40", "naklon": 0 }, + "3567": { "label": "13/40/1", "naklon": 0 }, + "3387": { "label": "13/41", "naklon": 0 }, + "3403": { "label": "13/42", "naklon": 0 }, + "3147": { "label": "13/43", "naklon": 0 }, + "3141": { "label": "13/44", "naklon": 0 }, + "3364": { "label": "13/46", "naklon": 0 }, + "3367": { "label": "13/47", "naklon": 0 }, + "3368": { "label": "13/48", "naklon": 0 }, + "3402": { "label": "13/49", "naklon": 0 }, + "3366": { "label": "13/50", "naklon": 0 }, + "3395": { "label": "13/51", "naklon": 0 }, + "3372": { "label": "13/52", "naklon": 0 }, + "3394": { "label": "13/53", "naklon": 0 }, + "3308": { "label": "13/54", "naklon": 0 }, + "3847": { "label": "13/54/1", "naklon": 0 }, + "3312": { "label": "13/55", "naklon": 3 }, + "3309": { "label": "13/56", "naklon": 3 }, + "3311": { "label": "13/57", "naklon": 3 }, + "3310": { "label": "13/58", "naklon": 3 }, + "4365": { "label": "13/59", "naklon": 3 }, + "4093": { "label": "13/60/1", "naklon": 3 }, + "3304": { "label": "13/61", "naklon": 3 }, + "3307": { "label": "13/62", "naklon": 3 }, + "3271": { "label": "13/63", "naklon": 3 }, + "3301": { "label": "13/64", "naklon": 3 }, + "4366": { "label": "13/65", "naklon": 3 }, + "3300": { "label": "13/66", "naklon": 3 }, + "3185": { "label": "13/67", "naklon": 0 }, + "3184": { "label": "13/68", "naklon": 0 }, + "3188": { "label": "13/69", "naklon": 0 }, + "3343": { "label": "13/71", "naklon": 6 }, + "3819": { "label": "13/71/1", "naklon": 6 }, + "3880": { "label": "13/71/2", "naklon": 6 }, + "3348": { "label": "13/72", "naklon": 6 }, + "3344": { "label": "13/74", "naklon": 6 }, + "3346": { "label": "13/75", "naklon": 6 }, + "3597": { "label": "13/75/1", "naklon": 6 }, + "3345": { "label": "13/76", "naklon": 6 }, + "3322": { "label": "13/77", "naklon": 0 }, + "3325": { "label": "13/78", "naklon": 0 }, + "4310": { "label": "13/78/1", "naklon": 0 }, + "3315": { "label": "13/79", "naklon": 0 }, + "3328": { "label": "13/80", "naklon": 0 }, + "3321": { "label": "13/81", "naklon": 0 }, + "3324": { "label": "13/82", "naklon": 0 }, + "3140": { "label": "13/84", "naklon": 0 }, + "3153": { "label": "13/85", "naklon": 0 }, + "3145": { "label": "13/86", "naklon": 0 }, + "3134": { "label": "13/87", "naklon": 0 }, + "3151": { "label": "13/88", "naklon": 0 }, + "3143": { "label": "13/89", "naklon": 0 }, + "3318": { "label": "13/90", "naklon": 0 }, + "3347": { "label": "13/91", "naklon": 0 }, + "3314": { "label": "13/94", "naklon": 0 }, + "3331": { "label": "13/96", "naklon": 0 }, + "3327": { "label": "13/97", "naklon": 0 }, + "3329": { "label": "13/99", "naklon": 0 }, + "3337": { "label": "13/100", "naklon": 0 }, + "3330": { "label": "13/101", "naklon": 0 }, + "3335": { "label": "13/102", "naklon": 0 }, + "3420": { "label": "13/103", "naklon": 0 }, + "3421": { "label": "13/104", "naklon": 0 }, + "4361": { "label": "13/105", "naklon": 0 }, + "4362": { "label": "13/106", "naklon": 0 }, + "3526": { "label": "13/107", "naklon": 0 }, + "4424": { "label": "13/108", "naklon": null }, + "3561": { "label": "13/109", "naklon": null }, + "3527": { "label": "13/110", "naklon": null }, + "3521": { "label": "13/111", "naklon": null }, + "3552": { "label": "13/112", "naklon": null }, + "3544": { "label": "13/113", "naklon": null }, + "3534": { "label": "13/114", "naklon": null }, + "3516": { "label": "13/115", "naklon": null }, + "3513": { "label": "13/116", "naklon": null }, + "3565": { "label": "13/117", "naklon": null }, + "3866": { "label": "13/118", "naklon": null }, + "3136": { "label": "14/1", "naklon": 0 }, + "3137": { "label": "14/2", "naklon": 0 }, + "3135": { "label": "14/3", "naklon": 0 }, + "3149": { "label": "14/4", "naklon": 0 }, + "3142": { "label": "14/5", "naklon": 0 }, + "3342": { "label": "14/6", "naklon": 0 }, + "3340": { "label": "14/7", "naklon": 0 }, + "3152": { "label": "14/8", "naklon": 0 }, + "3886": { "label": "14/9", "naklon": 0 }, + "3341": { "label": "14/10", "naklon": null }, + "3352": { "label": "14/11", "naklon": null }, + "3396": { "label": "15/1", "naklon": 5 }, + "2784": { "label": "15/2", "naklon": 5 }, + "2788": { "label": "15/3", "naklon": 5 }, + "2801": { "label": "15/4", "naklon": 5 }, + "2815": { "label": "15/5", "naklon": 5 }, + "2829": { "label": "15/6", "naklon": 5 }, + "2796": { "label": "15/7", "naklon": 5 }, + "2803": { "label": "15/8", "naklon": 5 }, + "4304": { "label": "15/8/1", "naklon": 5 }, + "4311": { "label": "15/8/2", "naklon": 5 }, + "2821": { "label": "15/9", "naklon": 5 }, + "3400": { "label": "15/10", "naklon": 5 }, + "2799": { "label": "15/11", "naklon": 5 }, + "2804": { "label": "15/12", "naklon": 5 }, + "4303": { "label": "15/12/1", "naklon": 5 }, + "4309": { "label": "15/12/2", "naklon": 5 }, + "2806": { "label": "15/13", "naklon": 5 }, + "2787": { "label": "15/14", "naklon": 5 }, + "2809": { "label": "15/15", "naklon": 5 }, + "2814": { "label": "15/16", "naklon": 0 }, + "3934": { "label": "15/17", "naklon": 0 }, + "3192": { "label": "15/18", "naklon": 0 }, + "2812": { "label": "15/19", "naklon": 0 }, + "4070": { "label": "15/20", "naklon": 0 }, + "2826": { "label": "15/21", "naklon": 0 }, + "2808": { "label": "15/22", "naklon": 3 }, + "2795": { "label": "15/23", "naklon": 3 }, + "2807": { "label": "15/24", "naklon": 3 }, + "2831": { "label": "15/25", "naklon": 0 }, + "2862": { "label": "15/26", "naklon": null }, + "2861": { "label": "15/27", "naklon": 0 }, + "2866": { "label": "15/28", "naklon": 0 }, + "3546": { "label": "15/28/1", "naklon": 0 }, + "4146": { "label": "15/29", "naklon": 0 }, + "3001": { "label": "15/29/1", "naklon": 0 }, + "2835": { "label": "15/30", "naklon": 0 }, + "2874": { "label": "15/31", "naklon": 0 }, + "2852": { "label": "15/32", "naklon": 0 }, + "2851": { "label": "15/33", "naklon": 0 }, + "3560": { "label": "15/33/1", "naklon": 0 }, + "2858": { "label": "15/34", "naklon": 0 }, + "4306": { "label": "15/34/1", "naklon": 0 }, + "2856": { "label": "15/35", "naklon": 0 }, + "2847": { "label": "15/36", "naklon": 0 }, + "3556": { "label": "15/36/1", "naklon": 0 }, + "3950": { "label": "15/37", "naklon": 0 }, + "2848": { "label": "15/38", "naklon": 0 }, + "2863": { "label": "15/39", "naklon": 0 }, + "4313": { "label": "15/39/1", "naklon": 0 }, + "2873": { "label": "15/40", "naklon": 0 }, + "2984": { "label": "15/40/1", "naklon": 0 }, + "2854": { "label": "15/41", "naklon": 0 }, + "2859": { "label": "15/42", "naklon": 0 }, + "2872": { "label": "15/43", "naklon": 0 }, + "2849": { "label": "15/44", "naklon": 0 }, + "2864": { "label": "15/45", "naklon": 0 }, + "3553": { "label": "15/46", "naklon": null }, + "3021": { "label": "15/47", "naklon": null }, + "3008": { "label": "15/47/1", "naklon": null }, + "3017": { "label": "15/48", "naklon": null }, + "3014": { "label": "15/49", "naklon": null }, + "2981": { "label": "15/50", "naklon": null }, + "3020": { "label": "15/51", "naklon": null }, + "3027": { "label": "15/52", "naklon": null }, + "3006": { "label": "15/53", "naklon": null }, + "3012": { "label": "15/54", "naklon": null }, + "2738": { "label": "15/55", "naklon": 0 }, + "2725": { "label": "15/56", "naklon": 0 }, + "3016": { "label": "15/57", "naklon": null }, + "3005": { "label": "15/58", "naklon": null }, + "3009": { "label": "15/58/1", "naklon": null }, + "3010": { "label": "15/59", "naklon": 0 }, + "3538": { "label": "15/59/1", "naklon": 0 }, + "4145": { "label": "15/59/2", "naklon": 0 }, + "2713": { "label": "15/60", "naklon": 0 }, + "2789": { "label": "15/61", "naklon": 0 }, + "2736": { "label": "15/62", "naklon": 0 }, + "2739": { "label": "15/63", "naklon": 0 }, + "4346": { "label": "15/64", "naklon": 0 }, + "2731": { "label": "15/65", "naklon": 0 }, + "2818": { "label": "15/66", "naklon": 0 }, + "3557": { "label": "15/66/1", "naklon": 0 }, + "2822": { "label": "15/67", "naklon": 0 }, + "2833": { "label": "15/68", "naklon": 0 }, + "2834": { "label": "15/69", "naklon": 0 }, + "3097": { "label": "15/70", "naklon": 0 }, + "2824": { "label": "15/71", "naklon": 0 }, + "2828": { "label": "15/72", "naklon": 0 }, + "2600": { "label": "15/73", "naklon": 0 }, + "4314": { "label": "15/73/1", "naklon": 0 }, + "2832": { "label": "15/74", "naklon": 0 }, + "4360": { "label": "15/75", "naklon": 0 }, + "2846": { "label": "15/76", "naklon": 0 }, + "2584": { "label": "15/77", "naklon": 0 }, + "2843": { "label": "15/78", "naklon": 0 }, + "4308": { "label": "15/78/1", "naklon": 0 }, + "4144": { "label": "15/79", "naklon": null }, + "2844": { "label": "15/80", "naklon": 0 }, + "2842": { "label": "15/81", "naklon": 0 }, + "2838": { "label": "15/82", "naklon": 0 }, + "2837": { "label": "15/83", "naklon": null }, + "3555": { "label": "15/83/1", "naklon": null }, + "2839": { "label": "15/84", "naklon": 0 }, + "2830": { "label": "15/85", "naklon": 0 }, + "4066": { "label": "15/86", "naklon": 0 }, + "2836": { "label": "15/87", "naklon": 0 }, + "2911": { "label": "15/88", "naklon": 0 }, + "2825": { "label": "15/89", "naklon": 0 }, + "2811": { "label": "15/90", "naklon": 0 }, + "3740": { "label": "15/94", "naklon": 15 }, + "2734": { "label": "15/95", "naklon": 15 }, + "3105": { "label": "15/96", "naklon": 15 }, + "2732": { "label": "15/97", "naklon": 15 }, + "2727": { "label": "15/98", "naklon": 15 }, + "2735": { "label": "15/99", "naklon": 15 }, + "3926": { "label": "15/100", "naklon": 15 }, + "2918": { "label": "15/101", "naklon": 0 }, + "2705": { "label": "15/102", "naklon": 10 }, + "2708": { "label": "15/103", "naklon": 10 }, + "2721": { "label": "15/104", "naklon": 10 }, + "2719": { "label": "15/105", "naklon": 10 }, + "2919": { "label": "15/106", "naklon": 10 }, + "3101": { "label": "15/107", "naklon": 10 }, + "2853": { "label": "15/108", "naklon": 10 }, + "2715": { "label": "15/109", "naklon": 10 }, + "2712": { "label": "15/110", "naklon": 0 }, + "2711": { "label": "15/111", "naklon": 0 }, + "2709": { "label": "15/112", "naklon": 0 }, + "2710": { "label": "15/113", "naklon": 0 }, + "2907": { "label": "15/114", "naklon": 0 }, + "2906": { "label": "15/115", "naklon": 0 }, + "2908": { "label": "15/116", "naklon": 0 }, + "2901": { "label": "15/117", "naklon": 0 }, + "2913": { "label": "15/118", "naklon": 0 }, + "3656": { "label": "15/119", "naklon": 0 }, + "2781": { "label": "15/120", "naklon": 0 }, + "2802": { "label": "15/121", "naklon": 0 }, + "2791": { "label": "15/122", "naklon": 0 }, + "2783": { "label": "15/123", "naklon": 0 }, + "2794": { "label": "15/124", "naklon": 0 }, + "3139": { "label": "15/125", "naklon": 0 }, + "3229": { "label": "15/126", "naklon": 5 }, + "3239": { "label": "15/127", "naklon": 5 }, + "3230": { "label": "15/128", "naklon": 5 }, + "4016": { "label": "15/129", "naklon": null }, + "3608": { "label": "16/16A", "naklon": 0 }, + "4151": { "label": "16/16B", "naklon": 0 }, + "3710": { "label": "16/1", "naklon": 0 }, + "3726": { "label": "16/2", "naklon": 0 }, + "3743": { "label": "16/3", "naklon": 0 }, + "3724": { "label": "16/4", "naklon": 0 }, + "3712": { "label": "16/5", "naklon": 0 }, + "3739": { "label": "16/6", "naklon": 0 }, + "3742": { "label": "16/7", "naklon": 0 }, + "3731": { "label": "16/8", "naklon": 0 }, + "3727": { "label": "16/9", "naklon": 0 }, + "3729": { "label": "16/10", "naklon": 0 }, + "3736": { "label": "16/11", "naklon": 0 }, + "3713": { "label": "16/12", "naklon": 0 }, + "3715": { "label": "16/13", "naklon": 0 }, + "3733": { "label": "16/14", "naklon": 0 }, + "3732": { "label": "16/15", "naklon": 0 }, + "3634": { "label": "16/17", "naklon": 0 }, + "3610": { "label": "16/18", "naklon": 0 }, + "3626": { "label": "16/19", "naklon": 0 }, + "3618": { "label": "16/20", "naklon": 0 }, + "3619": { "label": "16/21", "naklon": 0 }, + "3628": { "label": "16/22", "naklon": 0 }, + "3615": { "label": "16/23", "naklon": 0 }, + "3609": { "label": "16/24", "naklon": 0 }, + "3606": { "label": "16/25", "naklon": 0 }, + "3624": { "label": "16/26", "naklon": 0 }, + "3627": { "label": "16/27", "naklon": 0 }, + "3607": { "label": "16/28", "naklon": 0 }, + "4370": { "label": "16/29", "naklon": 0 }, + "3692": { "label": "16/30", "naklon": 0 }, + "3614": { "label": "16/31", "naklon": 0 }, + "3623": { "label": "16/32", "naklon": 0 }, + "4373": { "label": "16/33", "naklon": 0 }, + "3620": { "label": "16/34", "naklon": 0 }, + "3685": { "label": "16/35", "naklon": 0 }, + "3616": { "label": "16/36", "naklon": 0 }, + "3686": { "label": "16/37", "naklon": 0 }, + "3688": { "label": "16/38", "naklon": 0 }, + "3684": { "label": "16/39", "naklon": 0 }, + "3825": { "label": "16/40", "naklon": 0 }, + "3865": { "label": "16/41", "naklon": 0 }, + "3824": { "label": "16/42", "naklon": 0 }, + "3871": { "label": "16/43", "naklon": 0 }, + "3801": { "label": "16/44", "naklon": 0 }, + "3862": { "label": "16/45", "naklon": 0 }, + "3876": { "label": "16/46", "naklon": 0 }, + "3861": { "label": "16/47", "naklon": 0 }, + "4215": { "label": "16/48", "naklon": 0 }, + "3605": { "label": "16/49", "naklon": 10 }, + "3603": { "label": "16/50", "naklon": 10 }, + "3592": { "label": "16/51", "naklon": 10 }, + "3598": { "label": "16/52", "naklon": 10 }, + "3594": { "label": "16/53", "naklon": 10 }, + "3593": { "label": "16/54", "naklon": 10 }, + "3630": { "label": "16/55", "naklon": 10 }, + "3763": { "label": "16/56", "naklon": 10 }, + "3746": { "label": "16/57", "naklon": 10 }, + "3699": { "label": "16/58", "naklon": 0 }, + "3698": { "label": "16/59", "naklon": 0 }, + "3709": { "label": "16/60", "naklon": null }, + "3708": { "label": "16/61", "naklon": 0 }, + "3703": { "label": "16/62", "naklon": null }, + "3700": { "label": "16/63", "naklon": 0 }, + "3701": { "label": "16/64", "naklon": null }, + "3704": { "label": "16/65", "naklon": 0 }, + "3707": { "label": "16/66", "naklon": null }, + "3810": { "label": "16/67", "naklon": 0 }, + "4208": { "label": "16/68", "naklon": null }, + "3867": { "label": "16/69", "naklon": 0 }, + "4372": { "label": "16/70", "naklon": null }, + "3881": { "label": "16/71", "naklon": 0 }, + "4204": { "label": "16/72", "naklon": null }, + "3869": { "label": "16/73", "naklon": 0 }, + "4202": { "label": "16/74", "naklon": null }, + "3830": { "label": "16/75", "naklon": 0 }, + "3870": { "label": "16/76", "naklon": null }, + "3964": { "label": "16/77", "naklon": 0 }, + "3849": { "label": "16/78", "naklon": 0 }, + "3694": { "label": "16/79", "naklon": null }, + "3717": { "label": "16/80", "naklon": 0 }, + "3877": { "label": "16/81", "naklon": null }, + "3755": { "label": "16/82", "naklon": 0 }, + "3725": { "label": "16/83", "naklon": null }, + "3716": { "label": "16/84", "naklon": 0 }, + "3696": { "label": "16/85", "naklon": null }, + "3702": { "label": "16/86", "naklon": 0 }, + "3706": { "label": "16/87", "naklon": null }, + "3850": { "label": "16/88", "naklon": 0 }, + "3848": { "label": "16/89", "naklon": null }, + "3737": { "label": "16/90", "naklon": null }, + "3705": { "label": "16/91", "naklon": 0 }, + "3723": { "label": "16/92", "naklon": null }, + "3842": { "label": "16/93", "naklon": 0 }, + "3735": { "label": "16/94", "naklon": null }, + "3719": { "label": "16/95", "naklon": 0 }, + "3697": { "label": "16/96", "naklon": 0 }, + "3711": { "label": "16/97", "naklon": 0 }, + "4107": { "label": "16/98", "naklon": null }, + "4112": { "label": "16/99", "naklon": 5 }, + "4106": { "label": "16/100", "naklon": 5 }, + "4111": { "label": "16/101", "naklon": 5 }, + "4091": { "label": "16/102", "naklon": null }, + "4104": { "label": "16/103", "naklon": 5 }, + "4094": { "label": "16/104", "naklon": null }, + "4089": { "label": "16/105", "naklon": 5 }, + "4095": { "label": "16/106", "naklon": null }, + "4102": { "label": "16/107", "naklon": 5 }, + "4105": { "label": "16/108", "naklon": null }, + "3859": { "label": "16/109", "naklon": null }, + "4090": { "label": "16/110", "naklon": 5 }, + "4110": { "label": "16/111", "naklon": null }, + "4097": { "label": "16/112", "naklon": 5 }, + "4099": { "label": "16/113", "naklon": null }, + "4096": { "label": "16/114", "naklon": null }, + "4101": { "label": "16/115", "naklon": 5 }, + "4109": { "label": "16/116", "naklon": null }, + "4092": { "label": "16/117", "naklon": 5 }, + "3631": { "label": "16/118", "naklon": null }, + "3632": { "label": "16/119", "naklon": 0 }, + "3641": { "label": "16/120", "naklon": null }, + "3638": { "label": "16/121", "naklon": 0 }, + "3637": { "label": "16/122", "naklon": null }, + "4142": { "label": "16/123", "naklon": null }, + "4147": { "label": "16/124", "naklon": 5 }, + "4139": { "label": "16/125", "naklon": 5 }, + "3172": { "label": "20/30A", "naklon": 2 }, + "3164": { "label": "20/30B", "naklon": 2 }, + "3247": { "label": "20/1", "naklon": 10 }, + "3296": { "label": "20/2", "naklon": 10 }, + "3246": { "label": "20/3", "naklon": 10 }, + "3270": { "label": "20/4", "naklon": 10 }, + "3294": { "label": "20/5", "naklon": 10 }, + "3298": { "label": "20/6", "naklon": 10 }, + "3297": { "label": "20/7", "naklon": 10 }, + "3293": { "label": "20/8", "naklon": 10 }, + "3299": { "label": "20/9", "naklon": 10 }, + "3295": { "label": "20/10", "naklon": 10 }, + "3244": { "label": "20/11", "naklon": 10 }, + "3249": { "label": "20/12", "naklon": 10 }, + "3268": { "label": "20/13", "naklon": 10 }, + "3245": { "label": "20/14", "naklon": 10 }, + "3278": { "label": "20/15", "naklon": 10 }, + "3280": { "label": "20/16", "naklon": 10 }, + "3292": { "label": "20/17", "naklon": 10 }, + "3287": { "label": "20/18", "naklon": 10 }, + "3282": { "label": "20/19", "naklon": 10 }, + "3273": { "label": "20/20", "naklon": 0 }, + "3157": { "label": "20/21", "naklon": 0 }, + "3283": { "label": "20/22", "naklon": 0 }, + "3159": { "label": "20/23", "naklon": 0 }, + "3289": { "label": "20/24", "naklon": 0 }, + "3163": { "label": "20/25", "naklon": 0 }, + "3126": { "label": "20/26", "naklon": 0 }, + "3171": { "label": "20/27", "naklon": 0 }, + "3162": { "label": "20/28", "naklon": 0 }, + "3279": { "label": "20/29", "naklon": 10 }, + "3173": { "label": "20/31", "naklon": 0 }, + "3127": { "label": "20/32", "naklon": 0 }, + "3131": { "label": "20/33", "naklon": 0 }, + "3129": { "label": "20/34", "naklon": 0 }, + "3276": { "label": "20/35", "naklon": 2 }, + "3290": { "label": "20/36", "naklon": 2 }, + "3132": { "label": "20/37", "naklon": 0 }, + "3138": { "label": "20/38", "naklon": 0 }, + "3272": { "label": "20/39", "naklon": 0 }, + "3291": { "label": "20/40", "naklon": 0 }, + "3277": { "label": "20/41", "naklon": 10 }, + "3286": { "label": "20/42", "naklon": 10 }, + "3281": { "label": "20/43", "naklon": 10 }, + "3288": { "label": "20/44", "naklon": 10 }, + "3284": { "label": "20/45", "naklon": 10 }, + "3167": { "label": "20/46", "naklon": 10 }, + "3872": { "label": "20/47", "naklon": 0 }, + "3124": { "label": "20/48", "naklon": 0 }, + "3133": { "label": "20/49", "naklon": 0 }, + "3158": { "label": "20/50", "naklon": 0 }, + "3169": { "label": "20/51", "naklon": 0 }, + "3146": { "label": "20/52", "naklon": 0 }, + "3160": { "label": "20/53", "naklon": 0 }, + "3248": { "label": "20/54", "naklon": 0 }, + "3156": { "label": "20/55", "naklon": 0 }, + "3161": { "label": "20/56", "naklon": 0 }, + "3170": { "label": "20/57", "naklon": 0 }, + "3168": { "label": "20/58", "naklon": 0 }, + "3125": { "label": "20/59", "naklon": 0 }, + "3166": { "label": "20/60", "naklon": 0 }, + "3130": { "label": "20/61", "naklon": 0 }, + "3563": { "label": "20/62", "naklon": 0 }, + "3550": { "label": "20/63", "naklon": null }, + "3269": { "label": "20/67", "naklon": 0 }, + "2921": { "label": "21/1", "naklon": 0 }, + "2707": { "label": "21/2", "naklon": 0 }, + "2723": { "label": "21/3", "naklon": 0 }, + "2716": { "label": "21/4", "naklon": 0 }, + "2717": { "label": "21/5", "naklon": 0 }, + "2720": { "label": "21/6", "naklon": 0 }, + "2722": { "label": "21/7", "naklon": 0 }, + "2718": { "label": "21/8", "naklon": 0 }, + "2724": { "label": "21/9", "naklon": 0 }, + "2742": { "label": "21/10", "naklon": 0 }, + "2743": { "label": "21/11", "naklon": 0 }, + "2733": { "label": "21/12", "naklon": 0 }, + "2903": { "label": "21/14", "naklon": 0 }, + "2917": { "label": "21/15", "naklon": 0 }, + "2897": { "label": "21/16", "naklon": 0 }, + "2914": { "label": "21/17", "naklon": 0 }, + "2898": { "label": "21/18", "naklon": 0 }, + "2773": { "label": "21/19", "naklon": 0 }, + "2895": { "label": "21/20", "naklon": 0 }, + "2896": { "label": "21/21", "naklon": 0 }, + "2771": { "label": "21/22", "naklon": 0 }, + "2772": { "label": "21/23", "naklon": 0 }, + "2793": { "label": "21/24", "naklon": 0 }, + "2902": { "label": "21/25", "naklon": 0 }, + "2910": { "label": "21/26", "naklon": 0 }, + "2909": { "label": "21/27", "naklon": 0 }, + "2920": { "label": "21/28", "naklon": 0 }, + "2916": { "label": "21/29", "naklon": 0 }, + "2904": { "label": "21/30", "naklon": 0 }, + "2915": { "label": "21/31", "naklon": 0 }, + "2905": { "label": "21/32", "naklon": 0 }, + "2900": { "label": "21/33", "naklon": 0 }, + "2899": { "label": "21/34", "naklon": 0 }, + "2741": { "label": "21/36", "naklon": 0 }, + "2714": { "label": "21/37", "naklon": 0 }, + "2701": { "label": "21/38", "naklon": 0 }, + "2703": { "label": "21/39", "naklon": 0 }, + "2704": { "label": "21/40", "naklon": 0 }, + "2702": { "label": "21/41", "naklon": 0 }, + "2706": { "label": "21/42", "naklon": 0 }, + "2776": { "label": "21/43", "naklon": 0 }, + "2770": { "label": "21/44", "naklon": 0 }, + "2786": { "label": "21/45", "naklon": 0 }, + "2779": { "label": "21/46", "naklon": 0 }, + "2782": { "label": "21/47", "naklon": 0 }, + "2785": { "label": "21/48", "naklon": 0 }, + "2769": { "label": "21/49", "naklon": 0 }, + "3354": { "label": "21/50", "naklon": 0 }, + "2778": { "label": "21/51", "naklon": 0 }, + "2775": { "label": "21/52", "naklon": 0 }, + "2780": { "label": "21/53", "naklon": 0 }, + "2790": { "label": "21/54", "naklon": 0 }, + "2792": { "label": "21/55", "naklon": 0 }, + "2774": { "label": "21/56", "naklon": 0 }, + "2630": { "label": "22/1", "naklon": 0 }, + "2631": { "label": "22/2", "naklon": 0 }, + "2632": { "label": "22/3", "naklon": 0 }, + "2633": { "label": "22/4", "naklon": 0 }, + "2634": { "label": "22/5", "naklon": 0 }, + "2636": { "label": "22/6", "naklon": 0 }, + "4367": { "label": "22/7", "naklon": 0 }, + "2637": { "label": "22/8", "naklon": 0 }, + "2638": { "label": "22/9", "naklon": 0 }, + "2639": { "label": "22/10", "naklon": 0 }, + "2640": { "label": "22/11", "naklon": 0 }, + "2641": { "label": "22/12", "naklon": 0 }, + "2642": { "label": "22/13", "naklon": 0 }, + "2643": { "label": "22/14", "naklon": 0 }, + "2644": { "label": "22/15", "naklon": 0 }, + "2645": { "label": "22/16", "naklon": 0 }, + "2646": { "label": "22/17", "naklon": 0 }, + "2647": { "label": "22/18", "naklon": 0 }, + "2648": { "label": "22/19", "naklon": 0 }, + "2649": { "label": "22/20", "naklon": 0 }, + "2650": { "label": "22/21", "naklon": 0 }, + "2651": { "label": "22/22", "naklon": 0 }, + "4103": { "label": "22/23", "naklon": 0 }, + "2653": { "label": "22/24", "naklon": 0 }, + "2654": { "label": "22/25", "naklon": 0 }, + "2655": { "label": "22/26", "naklon": 0 }, + "2656": { "label": "22/27", "naklon": 0 }, + "2657": { "label": "22/28", "naklon": 0 }, + "2658": { "label": "22/29", "naklon": 0 }, + "2659": { "label": "22/30", "naklon": 0 }, + "2660": { "label": "22/31", "naklon": 0 }, + "2661": { "label": "22/32", "naklon": 0 }, + "3015": { "label": "22/32/1", "naklon": 0 }, + "2662": { "label": "22/33", "naklon": 0 }, + "2663": { "label": "22/34", "naklon": 0 }, + "2664": { "label": "22/35", "naklon": 0 }, + "2665": { "label": "22/36", "naklon": 0 }, + "2666": { "label": "22/37", "naklon": 0 }, + "2667": { "label": "22/38", "naklon": 0 }, + "2668": { "label": "22/39", "naklon": 0 }, + "2669": { "label": "22/40", "naklon": null }, + "2670": { "label": "22/41", "naklon": null }, + "2671": { "label": "22/42", "naklon": null }, + "3087": { "label": "23/9A", "naklon": 10 }, + "3090": { "label": "23/9B", "naklon": 10 }, + "3075": { "label": "23/1", "naklon": 0 }, + "3089": { "label": "23/2", "naklon": 0 }, + "3088": { "label": "23/3", "naklon": 0 }, + "3228": { "label": "23/4", "naklon": 10 }, + "2751": { "label": "23/5", "naklon": 10 }, + "3243": { "label": "23/6", "naklon": 10 }, + "4349": { "label": "23/7", "naklon": 10 }, + "3102": { "label": "23/8", "naklon": 10 }, + "3099": { "label": "23/10", "naklon": 10 }, + "3103": { "label": "23/11", "naklon": 10 }, + "3093": { "label": "23/12", "naklon": 10 }, + "3098": { "label": "23/13", "naklon": 10 }, + "3092": { "label": "23/14", "naklon": 10 }, + "3233": { "label": "23/15", "naklon": 0 }, + "3095": { "label": "23/16", "naklon": 0 }, + "4074": { "label": "23/17", "naklon": 0 }, + "2729": { "label": "23/18", "naklon": 0 }, + "3234": { "label": "23/19", "naklon": 0 }, + "3094": { "label": "23/20", "naklon": 0 }, + "2817": { "label": "23/21", "naklon": 0 }, + "3226": { "label": "23/22", "naklon": 0 }, + "3225": { "label": "23/23", "naklon": 0 }, + "3237": { "label": "23/24", "naklon": 0 }, + "4250": { "label": "23/25", "naklon": 0 }, + "3059": { "label": "23/26", "naklon": 10 }, + "3238": { "label": "23/27", "naklon": 10 }, + "3242": { "label": "23/28", "naklon": 10 }, + "3236": { "label": "23/29", "naklon": 10 }, + "3112": { "label": "23/30", "naklon": 10 }, + "3224": { "label": "23/31", "naklon": 0 }, + "4298": { "label": "23/32", "naklon": 10 }, + "4150": { "label": "23/33", "naklon": 10 }, + "3091": { "label": "23/34", "naklon": 10 }, + "3771": { "label": "25/1", "naklon": 5 }, + "3777": { "label": "25/2", "naklon": 5 }, + "3749": { "label": "25/3", "naklon": 5 }, + "3769": { "label": "25/4", "naklon": 5 }, + "3765": { "label": "25/5", "naklon": 5 }, + "3785": { "label": "25/6", "naklon": 5 }, + "3761": { "label": "25/7", "naklon": 5 }, + "3758": { "label": "25/8", "naklon": 5 }, + "3766": { "label": "25/9", "naklon": 5 }, + "3779": { "label": "25/10", "naklon": 5 }, + "3899": { "label": "25/11", "naklon": 10 }, + "3922": { "label": "25/12", "naklon": 10 }, + "3912": { "label": "25/13", "naklon": 10 }, + "3933": { "label": "25/14", "naklon": 10 }, + "3921": { "label": "25/15", "naklon": 10 }, + "4300": { "label": "25/16", "naklon": 10 }, + "3927": { "label": "25/17", "naklon": 10 }, + "3212": { "label": "25/18", "naklon": 10 }, + "3208": { "label": "25/19", "naklon": 10 }, + "3207": { "label": "25/20", "naklon": 10 }, + "4294": { "label": "25/21", "naklon": 10 }, + "3209": { "label": "25/22", "naklon": 10 }, + "3745": { "label": "25/23", "naklon": 10 }, + "3762": { "label": "25/24", "naklon": 10 }, + "3215": { "label": "25/25", "naklon": 10 }, + "3210": { "label": "25/26", "naklon": 10 }, + "3211": { "label": "25/27", "naklon": 10 }, + "3206": { "label": "25/28", "naklon": 10 }, + "3918": { "label": "25/29", "naklon": 5 }, + "3928": { "label": "25/30", "naklon": 5 }, + "3917": { "label": "25/31", "naklon": 5 }, + "4029": { "label": "25/32", "naklon": 0 }, + "4038": { "label": "25/33", "naklon": 0 }, + "4022": { "label": "25/34", "naklon": 0 }, + "3937": { "label": "25/35", "naklon": 0 }, + "3190": { "label": "25/36", "naklon": 0 }, + "3835": { "label": "25/37", "naklon": 0 }, + "3201": { "label": "25/38", "naklon": 0 }, + "3193": { "label": "25/39", "naklon": 0 }, + "3191": { "label": "25/40", "naklon": 0 }, + "3203": { "label": "25/41", "naklon": 0 }, + "4301": { "label": "25/42", "naklon": 0 }, + "3223": { "label": "25/43", "naklon": 0 }, + "3202": { "label": "25/44", "naklon": 0 }, + "3205": { "label": "25/45", "naklon": 0 }, + "3194": { "label": "25/46", "naklon": 0 }, + "3198": { "label": "25/47", "naklon": 0 }, + "3204": { "label": "25/48", "naklon": 0 }, + "3200": { "label": "25/49", "naklon": 0 }, + "3216": { "label": "25/50", "naklon": 0 }, + "3932": { "label": "25/51", "naklon": 5 }, + "3923": { "label": "25/52", "naklon": 5 }, + "3913": { "label": "25/53", "naklon": 5 }, + "3900": { "label": "25/54", "naklon": 5 }, + "4189": { "label": "25/55", "naklon": 10 }, + "4191": { "label": "25/56", "naklon": 10 }, + "3790": { "label": "25/57", "naklon": 10 }, + "4190": { "label": "25/58", "naklon": 10 }, + "4302": { "label": "25/59", "naklon": 0 }, + "4351": { "label": "25/60", "naklon": 0 }, + "4075": { "label": "25/61", "naklon": 0 }, + "4071": { "label": "25/62", "naklon": 0 }, + "3784": { "label": "25/63", "naklon": 0 }, + "4065": { "label": "25/64", "naklon": 0 }, + "4297": { "label": "25/65", "naklon": 0 }, + "4295": { "label": "25/66", "naklon": 0 }, + "4299": { "label": "25/67", "naklon": 0 }, + "3772": { "label": "25/68", "naklon": 0 }, + "3941": { "label": "25/69", "naklon": 0 }, + "3782": { "label": "25/70", "naklon": 0 }, + "4068": { "label": "25/71", "naklon": 0 }, + "4073": { "label": "25/72", "naklon": 0 }, + "3901": { "label": "25/73", "naklon": 5 }, + "4296": { "label": "25/74", "naklon": 5 }, + "3910": { "label": "25/75", "naklon": 5 }, + "4293": { "label": "25/76", "naklon": 5 }, + "3919": { "label": "25/77", "naklon": 5 }, + "3924": { "label": "25/78", "naklon": 5 }, + "3909": { "label": "25/79", "naklon": 5 }, + "3896": { "label": "25/80", "naklon": 5 }, + "3911": { "label": "25/81", "naklon": 5 }, + "2819": { "label": "25/82", "naklon": 15 }, + "3776": { "label": "25/83", "naklon": 15 }, + "3752": { "label": "25/84", "naklon": 15 }, + "4353": { "label": "25/85", "naklon": 15 }, + "3791": { "label": "25/86", "naklon": 0 }, + "3770": { "label": "25/87", "naklon": 0 }, + "3760": { "label": "25/88", "naklon": 0 }, + "3115": { "label": "25/89", "naklon": 0 }, + "3738": { "label": "25/90", "naklon": 0 }, + "3748": { "label": "25/91", "naklon": 0 }, + "3753": { "label": "25/92", "naklon": 0 }, + "3775": { "label": "25/93", "naklon": 0 }, + "3778": { "label": "25/94", "naklon": 5 }, + "4078": { "label": "25/95", "naklon": 5 }, + "4088": { "label": "25/96", "naklon": 5 }, + "3856": { "label": "25/97", "naklon": 5 }, + "4084": { "label": "25/98", "naklon": 5 }, + "4069": { "label": "25/99", "naklon": 5 }, + "4188": { "label": "25/100", "naklon": 5 }, + "4064": { "label": "25/101", "naklon": 5 }, + "3792": { "label": "25/102", "naklon": 5 }, + "3780": { "label": "25/103", "naklon": 5 }, + "4034": { "label": "25/104", "naklon": 5 }, + "4072": { "label": "25/105", "naklon": 5 }, + "3884": { "label": "25/106", "naklon": 5 }, + "3793": { "label": "25/107", "naklon": 5 }, + "3863": { "label": "25/108", "naklon": 5 }, + "3855": { "label": "25/109", "naklon": 5 }, + "3846": { "label": "33/1", "naklon": 0 }, + "3943": { "label": "33/2", "naklon": 0 }, + "3903": { "label": "33/3", "naklon": 0 }, + "3982": { "label": "33/4", "naklon": 0 }, + "3879": { "label": "33/5", "naklon": 0 }, + "3887": { "label": "33/6", "naklon": 0 }, + "3920": { "label": "33/7", "naklon": 5 }, + "3942": { "label": "33/8", "naklon": 5 }, + "3829": { "label": "33/9", "naklon": null }, + "3452": { "label": "34/79A", "naklon": 6 }, + "3460": { "label": "34/79B", "naklon": 6 }, + "3443": { "label": "34/90A", "naklon": 6 }, + "3445": { "label": "34/90B", "naklon": 6 }, + "3457": { "label": "34/90C", "naklon": 6 }, + "3461": { "label": "34/97A", "naklon": 6 }, + "3463": { "label": "34/97B", "naklon": 6 }, + "3426": { "label": "34/98A", "naklon": 6 }, + "3444": { "label": "34/98B", "naklon": 6 }, + "3453": { "label": "34/99A", "naklon": 6 }, + "3455": { "label": "34/99B", "naklon": 6 }, + "4009": { "label": "34/1", "naklon": 0 }, + "3602": { "label": "34/2", "naklon": 0 }, + "3441": { "label": "34/3", "naklon": 0 }, + "3464": { "label": "34/4", "naklon": 0 }, + "3883": { "label": "34/5", "naklon": 0 }, + "4098": { "label": "34/6", "naklon": 0 }, + "4003": { "label": "34/7", "naklon": 0 }, + "4004": { "label": "34/8", "naklon": 0 }, + "3888": { "label": "34/9", "naklon": 0 }, + "3997": { "label": "34/10", "naklon": 0 }, + "4006": { "label": "34/11", "naklon": 0 }, + "4000": { "label": "34/12", "naklon": 0 }, + "4011": { "label": "34/13", "naklon": 0 }, + "3999": { "label": "34/14", "naklon": 0 }, + "3981": { "label": "34/15", "naklon": 0 }, + "3988": { "label": "34/16", "naklon": 0 }, + "3986": { "label": "34/17", "naklon": 0 }, + "3998": { "label": "34/18", "naklon": 0 }, + "3983": { "label": "34/19", "naklon": 0 }, + "4005": { "label": "34/20", "naklon": 0 }, + "4001": { "label": "34/21", "naklon": 0 }, + "4008": { "label": "34/22", "naklon": 0 }, + "4002": { "label": "34/23", "naklon": 0 }, + "3996": { "label": "34/24", "naklon": 0 }, + "4007": { "label": "34/25", "naklon": 0 }, + "4113": { "label": "34/26", "naklon": 15 }, + "3595": { "label": "34/27", "naklon": 5 }, + "3599": { "label": "34/28", "naklon": 5 }, + "3601": { "label": "34/29", "naklon": 5 }, + "4205": { "label": "34/30", "naklon": 0 }, + "3987": { "label": "34/31", "naklon": null }, + "4214": { "label": "34/32", "naklon": 0 }, + "4226": { "label": "34/33", "naklon": 0 }, + "4209": { "label": "34/34", "naklon": 0 }, + "4201": { "label": "34/35", "naklon": 0 }, + "3440": { "label": "34/36", "naklon": 0 }, + "3465": { "label": "34/37", "naklon": 0 }, + "3446": { "label": "34/38", "naklon": 0 }, + "4039": { "label": "34/39", "naklon": 5 }, + "4057": { "label": "34/40", "naklon": 5 }, + "3985": { "label": "34/41", "naklon": 0 }, + "3882": { "label": "34/42", "naklon": 0 }, + "4040": { "label": "34/43", "naklon": 5 }, + "3231": { "label": "34/44", "naklon": 0 }, + "3227": { "label": "34/45", "naklon": 0 }, + "3431": { "label": "34/46", "naklon": 0 }, + "4013": { "label": "34/47", "naklon": 0 }, + "4045": { "label": "34/48", "naklon": 0 }, + "3949": { "label": "34/49", "naklon": 0 }, + "3953": { "label": "34/50", "naklon": 0 }, + "3952": { "label": "34/51", "naklon": 0 }, + "3995": { "label": "34/52", "naklon": 0 }, + "3992": { "label": "34/53", "naklon": 0 }, + "4198": { "label": "34/54", "naklon": 0 }, + "3935": { "label": "34/55", "naklon": 0 }, + "4050": { "label": "34/56", "naklon": 0 }, + "4049": { "label": "34/57", "naklon": 0 }, + "4054": { "label": "34/58", "naklon": 0 }, + "3663": { "label": "34/59", "naklon": 6 }, + "3661": { "label": "34/60", "naklon": 6 }, + "3664": { "label": "34/61", "naklon": 6 }, + "3660": { "label": "34/62", "naklon": 6 }, + "3662": { "label": "34/63", "naklon": 6 }, + "3665": { "label": "34/65", "naklon": 6 }, + "3667": { "label": "34/66", "naklon": 6 }, + "3675": { "label": "34/67", "naklon": 6 }, + "3666": { "label": "34/68", "naklon": 6 }, + "3652": { "label": "34/69", "naklon": 6 }, + "3458": { "label": "34/70", "naklon": 6 }, + "4425": { "label": "34/70/1", "naklon": 6 }, + "3459": { "label": "34/71", "naklon": 6 }, + "3435": { "label": "34/72", "naklon": 6 }, + "3448": { "label": "34/73", "naklon": 6 }, + "3451": { "label": "34/74", "naklon": 6 }, + "3442": { "label": "34/75", "naklon": 6 }, + "3449": { "label": "34/76", "naklon": 6 }, + "3450": { "label": "34/77", "naklon": 6 }, + "3433": { "label": "34/78", "naklon": 6 }, + "3432": { "label": "34/80", "naklon": 12 }, + "3470": { "label": "34/81", "naklon": 12 }, + "3438": { "label": "34/82", "naklon": 12 }, + "3439": { "label": "34/83", "naklon": 12 }, + "4028": { "label": "34/84", "naklon": 5 }, + "3596": { "label": "34/85", "naklon": 5 }, + "4021": { "label": "34/86", "naklon": 5 }, + "3437": { "label": "34/87", "naklon": 12 }, + "3428": { "label": "34/88", "naklon": 12 }, + "3430": { "label": "34/89", "naklon": 12 }, + "3454": { "label": "34/91", "naklon": 6 }, + "3492": { "label": "34/92", "naklon": 6 }, + "3462": { "label": "34/93", "naklon": 6 }, + "3427": { "label": "34/94", "naklon": 6 }, + "3434": { "label": "34/95", "naklon": 6 }, + "3456": { "label": "34/96", "naklon": 6 }, + "4307": { "label": "34/98/1", "naklon": 6 }, + "3968": { "label": "35/1", "naklon": 0 }, + "3969": { "label": "35/2", "naklon": 0 }, + "3947": { "label": "35/3", "naklon": 0 }, + "3979": { "label": "35/4", "naklon": 0 }, + "3959": { "label": "35/5", "naklon": 0 }, + "3948": { "label": "35/6", "naklon": 0 }, + "3961": { "label": "35/7", "naklon": 0 }, + "3956": { "label": "35/8", "naklon": 0 }, + "3604": { "label": "35/9", "naklon": 0 }, + "3944": { "label": "35/10", "naklon": 0 }, + "3960": { "label": "35/11", "naklon": 0 }, + "3958": { "label": "35/12", "naklon": 0 }, + "4036": { "label": "35/13", "naklon": 5 }, + "3893": { "label": "35/18", "naklon": 5 }, + "4108": { "label": "35/19", "naklon": 5 }, + "4017": { "label": "35/20", "naklon": 5 }, + "3963": { "label": "35/21", "naklon": 0 }, + "3658": { "label": "35/22", "naklon": 0 }, + "3975": { "label": "35/23", "naklon": 0 }, + "3980": { "label": "35/24", "naklon": 0 }, + "4012": { "label": "35/25", "naklon": 0 }, + "3655": { "label": "35/26", "naklon": 0 }, + "3962": { "label": "35/27", "naklon": 0 }, + "3945": { "label": "35/28", "naklon": 0 }, + "3569": { "label": "35/29", "naklon": 0 }, + "3429": { "label": "35/30", "naklon": 0 }, + "3657": { "label": "35/31", "naklon": 0 }, + "3646": { "label": "35/32", "naklon": 0 }, + "3622": { "label": "35/33", "naklon": 0 }, + "3612": { "label": "35/34", "naklon": 0 }, + "3955": { "label": "35/35", "naklon": 0 }, + "3878": { "label": "35/37", "naklon": 0 }, + "3965": { "label": "35/38", "naklon": 0 }, + "3970": { "label": "35/39", "naklon": 0 }, + "3611": { "label": "35/40", "naklon": 0 }, + "2635": { "label": "35/41", "naklon": 0 }, + "3978": { "label": "35/42", "naklon": 0 }, + "4213": { "label": "35/43", "naklon": 0 }, + "3984": { "label": "35/44", "naklon": 0 }, + "4218": { "label": "35/45", "naklon": 0 }, + "3973": { "label": "35/46", "naklon": 0 }, + "3974": { "label": "35/47", "naklon": 0 }, + "3759": { "label": "35/48", "naklon": 0 }, + "3844": { "label": "35/49", "naklon": 0 }, + "3804": { "label": "35/50", "naklon": 0 }, + "3831": { "label": "35/51", "naklon": 0 }, + "3643": { "label": "35/52", "naklon": 0 }, + "3966": { "label": "35/53", "naklon": 0 }, + "3971": { "label": "35/54", "naklon": 0 }, + "3650": { "label": "35/55", "naklon": 6 }, + "3651": { "label": "35/56", "naklon": 6 }, + "3669": { "label": "35/57", "naklon": 6 }, + "3648": { "label": "35/58", "naklon": 6 }, + "3645": { "label": "35/59", "naklon": 6 }, + "3659": { "label": "35/60", "naklon": 6 }, + "3647": { "label": "35/61", "naklon": 6 }, + "3644": { "label": "35/62", "naklon": 6 }, + "3671": { "label": "35/63", "naklon": 6 }, + "3682": { "label": "35/64", "naklon": 6 }, + "3672": { "label": "35/65", "naklon": 6 }, + "3683": { "label": "35/66", "naklon": 6 }, + "3673": { "label": "35/67", "naklon": 6 }, + "3674": { "label": "35/68", "naklon": 6 }, + "3679": { "label": "35/69", "naklon": 6 }, + "3649": { "label": "35/70", "naklon": 6 }, + "3687": { "label": "35/71", "naklon": 6 }, + "3677": { "label": "35/72", "naklon": 6 }, + "3690": { "label": "35/73", "naklon": 6 }, + "3691": { "label": "35/74", "naklon": 6 }, + "3676": { "label": "35/75", "naklon": 6 }, + "3680": { "label": "35/76", "naklon": 6 }, + "3668": { "label": "35/77", "naklon": 6 }, + "3681": { "label": "35/78", "naklon": 6 }, + "3670": { "label": "35/79", "naklon": 6 }, + "3689": { "label": "35/80", "naklon": 6 }, + "3678": { "label": "35/81", "naklon": 6 }, + "3693": { "label": "35/82", "naklon": 6 }, + "3654": { "label": "35/83", "naklon": null }, + "4086": { "label": "36/1", "naklon": 0 }, + "4085": { "label": "36/2", "naklon": 0 }, + "4083": { "label": "36/3", "naklon": 0 }, + "4087": { "label": "36/4", "naklon": 0 }, + "4077": { "label": "36/5", "naklon": 0 }, + "4082": { "label": "36/6", "naklon": 0 }, + "4186": { "label": "36/7", "naklon": 0 }, + "4206": { "label": "36/8", "naklon": 0 }, + "4080": { "label": "36/9", "naklon": 0 }, + "4081": { "label": "36/10", "naklon": 0 }, + "4210": { "label": "36/11", "naklon": 0 }, + "4079": { "label": "36/12", "naklon": 0 }, + "4076": { "label": "36/13", "naklon": 0 }, + "3852": { "label": "36/14", "naklon": 0 }, + "2813": { "label": "36/15", "naklon": 0 }, + "4219": { "label": "36/16", "naklon": 0 }, + "3104": { "label": "37/1A", "naklon": 15 }, + "3121": { "label": "37/1B", "naklon": 15 }, + "3113": { "label": "37/2", "naklon": 10 }, + "3118": { "label": "37/3", "naklon": 10 }, + "3111": { "label": "37/4", "naklon": 10 }, + "4020": { "label": "37/5", "naklon": 10 }, + "3119": { "label": "37/6", "naklon": 10 }, + "3110": { "label": "37/7", "naklon": 10 }, + "3108": { "label": "37/8", "naklon": 10 }, + "3107": { "label": "37/12", "naklon": 0 }, + "3199": { "label": "37/13", "naklon": 0 }, + "3120": { "label": "37/14", "naklon": 0 }, + "3122": { "label": "37/15", "naklon": 0 }, + "3908": { "label": "37/16", "naklon": 0 }, + "3114": { "label": "37/17", "naklon": 0 }, + "3105": { "label": "37/18", "naklon": 0 }, + "3116": { "label": "37/19", "naklon": 0 }, + "3106": { "label": "37/20", "naklon": 0 }, + "2887": { "label": "37/21", "naklon": 5 }, + "2888": { "label": "37/22", "naklon": 5 }, + "2877": { "label": "37/23", "naklon": 5 }, + "2891": { "label": "37/24", "naklon": 5 }, + "2886": { "label": "37/25", "naklon": 5 }, + "2892": { "label": "37/26", "naklon": 5 }, + "2882": { "label": "37/27", "naklon": 5 }, + "2883": { "label": "37/28", "naklon": 5 }, + "2876": { "label": "37/29", "naklon": 5 }, + "3109": { "label": "37/30", "naklon": 5 }, + "4152": { "label": "37/31", "naklon": 5 }, + "3117": { "label": "37/32", "naklon": 5 }, + "2870": { "label": "37/33", "naklon": 5 }, + "2867": { "label": "37/34", "naklon": 0 }, + "2865": { "label": "37/35", "naklon": 0 }, + "3096": { "label": "37/36", "naklon": 0 }, + "2871": { "label": "37/37", "naklon": 0 }, + "2884": { "label": "37/38", "naklon": 0 }, + "2855": { "label": "37/39", "naklon": 0 }, + "2878": { "label": "37/40", "naklon": 0 }, + "2889": { "label": "37/41", "naklon": 0 }, + "2879": { "label": "37/42", "naklon": 0 }, + "2850": { "label": "37/43", "naklon": 0 }, + "2894": { "label": "37/44", "naklon": 0 }, + "2880": { "label": "37/45", "naklon": 0 }, + "2893": { "label": "37/46", "naklon": 0 }, + "2890": { "label": "37/47", "naklon": 0 }, + "4355": { "label": "37/48", "naklon": 0 }, + "2885": { "label": "37/49", "naklon": 0 }, + "2875": { "label": "37/50", "naklon": 0 }, + "3486": { "label": "38/30A", "naklon": 5 }, + "3714": { "label": "38/30B", "naklon": 0 }, + "3483": { "label": "38/32A", "naklon": 5 }, + "3496": { "label": "38/32B", "naklon": 0 }, + "3487": { "label": "38/35A", "naklon": 5 }, + "3498": { "label": "38/35B", "naklon": 5 }, + "3578": { "label": "38/38A", "naklon": 5 }, + "3508": { "label": "38/38B", "naklon": 5 }, + "3787": { "label": "38/59A", "naklon": 5 }, + "3491": { "label": "38/59B", "naklon": 5 }, + "3568": { "label": "38/1", "naklon": null }, + "3502": { "label": "38/2", "naklon": 0 }, + "3836": { "label": "38/3", "naklon": 0 }, + "3588": { "label": "38/4", "naklon": 0 }, + "3493": { "label": "38/5", "naklon": 0 }, + "3580": { "label": "38/6", "naklon": 0 }, + "3572": { "label": "38/7", "naklon": 0 }, + "3506": { "label": "38/8", "naklon": 0 }, + "3503": { "label": "38/9", "naklon": 0 }, + "3579": { "label": "38/10", "naklon": 0 }, + "3586": { "label": "38/11", "naklon": 0 }, + "3495": { "label": "38/12", "naklon": 5 }, + "3492": { "label": "38/13", "naklon": 5 }, + "3532": { "label": "38/14", "naklon": 5 }, + "3574": { "label": "38/15", "naklon": 5 }, + "4140": { "label": "38/16", "naklon": 5 }, + "3795": { "label": "38/17", "naklon": 5 }, + "3788": { "label": "38/18", "naklon": 5 }, + "3796": { "label": "38/19", "naklon": 5 }, + "3797": { "label": "38/20", "naklon": 5 }, + "3798": { "label": "38/21", "naklon": 5 }, + "3786": { "label": "38/22", "naklon": 5 }, + "4067": { "label": "38/23", "naklon": 5 }, + "3773": { "label": "38/24", "naklon": 5 }, + "3774": { "label": "38/25", "naklon": 5 }, + "3789": { "label": "38/26", "naklon": 5 }, + "3520": { "label": "38/27", "naklon": null }, + "3577": { "label": "38/29", "naklon": 5 }, + "3530": { "label": "38/31", "naklon": null }, + "3488": { "label": "38/33", "naklon": 5 }, + "3505": { "label": "38/34", "naklon": 5 }, + "3497": { "label": "38/36", "naklon": 5 }, + "3490": { "label": "38/37", "naklon": 5 }, + "3585": { "label": "38/39", "naklon": 5 }, + "3582": { "label": "38/40", "naklon": 5 }, + "3507": { "label": "38/41", "naklon": 5 }, + "3484": { "label": "38/42", "naklon": 5 }, + "3501": { "label": "38/43", "naklon": 5 }, + "3581": { "label": "38/44", "naklon": 5 }, + "4192": { "label": "38/45", "naklon": 5 }, + "3576": { "label": "38/46", "naklon": 5 }, + "3489": { "label": "38/47", "naklon": 5 }, + "3573": { "label": "38/48", "naklon": 5 }, + "3504": { "label": "38/49", "naklon": 5 }, + "3794": { "label": "38/50", "naklon": 5 }, + "3485": { "label": "38/51", "naklon": 5 }, + "3482": { "label": "38/52", "naklon": 5 }, + "3575": { "label": "38/53", "naklon": 5 }, + "3499": { "label": "38/54", "naklon": 5 }, + "3494": { "label": "38/55", "naklon": 5 }, + "3583": { "label": "38/56", "naklon": 5 }, + "3570": { "label": "38/57", "naklon": 5 }, + "3500": { "label": "38/58", "naklon": 0 }, + "3510": { "label": "38/63", "naklon": null }, + "3512": { "label": "38/64", "naklon": null }, + "3535": { "label": "38/67", "naklon": null }, + "3531": { "label": "38/68", "naklon": null }, + "3537": { "label": "38/69", "naklon": null }, + "3522": { "label": "39/1", "naklon": 10 }, + "4018": { "label": "39/2", "naklon": 10 }, + "4019": { "label": "39/3", "naklon": 10 }, + "4154": { "label": "39/4", "naklon": 5 }, + "3907": { "label": "39/5", "naklon": 5 }, + "4148": { "label": "39/6", "naklon": 0 }, + "4153": { "label": "39/7", "naklon": 0 }, + "3938": { "label": "39/8", "naklon": 0 }, + "3802": { "label": "39/9", "naklon": 0 }, + "4015": { "label": "39/10", "naklon": 0 }, + "3929": { "label": "39/11", "naklon": 0 }, + "3946": { "label": "39/12", "naklon": 0 }, + "4014": { "label": "39/13", "naklon": 0 }, + "4155": { "label": "39/14", "naklon": 0 }, + "4149": { "label": "39/15", "naklon": 0 }, + "3642": { "label": "39/16", "naklon": 0 }, + "3636": { "label": "39/17", "naklon": 5 }, + "3991": { "label": "39/18", "naklon": 0 }, + "3994": { "label": "39/19", "naklon": 0 }, + "3990": { "label": "39/20", "naklon": 0 }, + "3967": { "label": "39/21", "naklon": 0 }, + "3977": { "label": "39/22", "naklon": 0 }, + "3757": { "label": "39/23", "naklon": 15 }, + "3633": { "label": "39/24", "naklon": 15 }, + "3744": { "label": "39/25", "naklon": 15 }, + "4023": { "label": "39/26", "naklon": 5 }, + "3720": { "label": "39/27", "naklon": 5 }, + "3734": { "label": "39/28", "naklon": 5 }, + "3741": { "label": "39/29", "naklon": 5 }, + "3721": { "label": "39/30", "naklon": 5 }, + "3845": { "label": "39/31", "naklon": 0 }, + "3840": { "label": "39/32", "naklon": 0 }, + "3837": { "label": "39/33", "naklon": null }, + "3839": { "label": "39/34", "naklon": 0 }, + "3542": { "label": "41/1", "naklon": null }, + "3566": { "label": "41/2", "naklon": null }, + "3548": { "label": "41/3", "naklon": null }, + "3515": { "label": "41/4", "naklon": null }, + "3559": { "label": "41/5", "naklon": null }, + "3509": { "label": "41/6", "naklon": null }, + "3524": { "label": "41/7", "naklon": null }, + "3518": { "label": "41/8", "naklon": null }, + "3182": { "label": "41/9", "naklon": null }, + "3187": { "label": "41/10", "naklon": null }, + "3195": { "label": "41/11", "naklon": 0 }, + "3857": { "label": "41/12", "naklon": 0 }, + "3183": { "label": "41/13", "naklon": 0 }, + "3177": { "label": "41/14", "naklon": 0 }, + "3189": { "label": "41/15", "naklon": 0 }, + "3186": { "label": "41/16", "naklon": 0 }, + "3178": { "label": "42/1", "naklon": 0 }, + "3219": { "label": "42/2", "naklon": 0 }, + "3475": { "label": "42/3", "naklon": 0 }, + "3175": { "label": "42/4", "naklon": 0 }, + "3222": { "label": "42/5", "naklon": 0 }, + "3221": { "label": "42/6", "naklon": 0 }, + "3181": { "label": "42/7", "naklon": 0 }, + "3180": { "label": "42/8", "naklon": 0 }, + "3218": { "label": "42/9", "naklon": 0 }, + "3176": { "label": "42/10", "naklon": 0 }, + "3174": { "label": "42/11", "naklon": 0 }, + "3220": { "label": "42/12", "naklon": 0 }, + "3533": { "label": "42/13", "naklon": null }, + "3543": { "label": "42/14", "naklon": null }, + "3554": { "label": "42/15", "naklon": null }, + "3549": { "label": "42/16", "naklon": null }, + "2857": { "label": "43/1", "naklon": 5 }, + "2752": { "label": "43/2", "naklon": 5 }, + "2753": { "label": "43/3", "naklon": 5 }, + "3024": { "label": "43/4", "naklon": 5 }, + "2754": { "label": "43/5", "naklon": 5 }, + "4423": { "label": "43/6", "naklon": 5 }, + "4368": { "label": "43/7", "naklon": 5 }, + "2978": { "label": "43/8", "naklon": 5 }, + "2868": { "label": "43/9", "naklon": 5 }, + "4377": { "label": "43/10", "naklon": 5 }, + "2757": { "label": "43/11", "naklon": 5 }, + "2970": { "label": "43/12", "naklon": 5 }, + "2758": { "label": "43/13", "naklon": 5 }, + "4378": { "label": "43/14", "naklon": 5 }, + "2759": { "label": "43/15", "naklon": 5 }, + "4342": { "label": "43/16", "naklon": 5 }, + "3026": { "label": "43/17", "naklon": null }, + "2986": { "label": "43/18", "naklon": null }, + "4343": { "label": "43/19", "naklon": null }, + "2760": { "label": "43/20", "naklon": null }, + "4379": { "label": "43/21", "naklon": null }, + "2971": { "label": "43/22", "naklon": null }, + "2761": { "label": "43/23", "naklon": null }, + "2762": { "label": "43/24", "naklon": null }, + "4339": { "label": "43/25", "naklon": null }, + "4380": { "label": "43/26", "naklon": null }, + "2975": { "label": "43/27", "naklon": null }, + "3003": { "label": "43/28", "naklon": null }, + "4338": { "label": "43/29", "naklon": null }, + "3002": { "label": "43/30", "naklon": null }, + "4345": { "label": "43/31", "naklon": null }, + "2979": { "label": "43/32", "naklon": null }, + "2989": { "label": "43/33", "naklon": null }, + "2996": { "label": "43/34", "naklon": null }, + "2972": { "label": "43/35", "naklon": null }, + "2988": { "label": "43/36", "naklon": null }, + "4344": { "label": "43/37", "naklon": null }, + "3022": { "label": "43/38", "naklon": null }, + "4341": { "label": "43/39", "naklon": null }, + "2983": { "label": "43/40", "naklon": null }, + "2995": { "label": "43/41", "naklon": null }, + "2763": { "label": "43/42", "naklon": null }, + "2764": { "label": "43/43", "naklon": null }, + "2765": { "label": "43/44", "naklon": null }, + "2766": { "label": "43/45", "naklon": null }, + "2767": { "label": "43/46", "naklon": null }, + "2768": { "label": "43/47", "naklon": null }, + "3018": { "label": "43/48", "naklon": null }, + "2982": { "label": "43/49", "naklon": null }, + "3019": { "label": "43/50", "naklon": 0 }, + "3013": { "label": "43/51", "naklon": null }, + "3007": { "label": "43/52", "naklon": null }, + "2980": { "label": "43/53", "naklon": null }, + "3011": { "label": "43/54", "naklon": null }, + "2672": { "label": "43/55", "naklon": null }, + "2673": { "label": "43/56", "naklon": null }, + "2674": { "label": "43/57", "naklon": null }, + "2675": { "label": "43/58", "naklon": null }, + "2676": { "label": "43/59", "naklon": null }, + "2677": { "label": "43/60", "naklon": null }, + "2678": { "label": "43/61", "naklon": null }, + "2679": { "label": "43/62", "naklon": null }, + "2680": { "label": "43/63", "naklon": null }, + "2840": { "label": "43/64", "naklon": null }, + "2682": { "label": "43/65", "naklon": null }, + "2683": { "label": "43/66", "naklon": null }, + "2684": { "label": "43/67", "naklon": 0 }, + "2685": { "label": "43/68", "naklon": null }, + "2686": { "label": "43/69", "naklon": null }, + "2687": { "label": "43/70", "naklon": null }, + "2688": { "label": "43/71", "naklon": null }, + "2689": { "label": "43/72", "naklon": null }, + "2690": { "label": "43/73", "naklon": null }, + "2691": { "label": "43/74", "naklon": null }, + "2692": { "label": "43/75", "naklon": null }, + "2693": { "label": "43/76", "naklon": 0 }, + "2694": { "label": "43/77", "naklon": null }, + "2695": { "label": "43/78", "naklon": null }, + "2696": { "label": "43/79", "naklon": 0 }, + "2697": { "label": "43/80", "naklon": null }, + "2698": { "label": "43/81", "naklon": 0 }, + "2699": { "label": "43/82", "naklon": null }, + "2700": { "label": "43/83", "naklon": 0 }, + "2744": { "label": "43/84", "naklon": null }, + "2745": { "label": "43/85", "naklon": 0 }, + "2746": { "label": "43/86", "naklon": null }, + "2747": { "label": "43/87", "naklon": 0 }, + "2748": { "label": "43/88", "naklon": null }, + "2749": { "label": "43/89", "naklon": 0 }, + "2841": { "label": "43/90", "naklon": null }, + "4237": { "label": "45/1", "naklon": 5 }, + "4226": { "label": "45/2", "naklon": 5 }, + "4242": { "label": "45/3", "naklon": 5 }, + "4179": { "label": "45/4", "naklon": 5 }, + "4247": { "label": "45/5", "naklon": 5 }, + "4245": { "label": "45/6", "naklon": 5 }, + "3872": { "label": "45/7", "naklon": 5 }, + "4175": { "label": "45/8", "naklon": 5 }, + "4236": { "label": "45/9", "naklon": 5 }, + "4170": { "label": "45/10", "naklon": 5 }, + "4238": { "label": "45/11", "naklon": 5 }, + "4246": { "label": "45/12", "naklon": 5 }, + "4166": { "label": "45/13", "naklon": 5 }, + "4227": { "label": "45/14", "naklon": 5 }, + "4171": { "label": "45/15", "naklon": 5 }, + "4180": { "label": "45/16", "naklon": 5 }, + "4244": { "label": "45/17", "naklon": 5 }, + "4199": { "label": "45/18", "naklon": 5 }, + "4239": { "label": "45/19", "naklon": 5 }, + "4207": { "label": "45/20", "naklon": 5 }, + "4223": { "label": "45/21", "naklon": 5 }, + "4230": { "label": "45/22", "naklon": 5 }, + "4233": { "label": "45/23", "naklon": 5 }, + "4222": { "label": "45/24", "naklon": 5 }, + "4217": { "label": "45/25", "naklon": 5 }, + "4243": { "label": "45/26", "naklon": 5 }, + "4200": { "label": "45/27", "naklon": 5 }, + "4228": { "label": "45/28", "naklon": 5 }, + "4211": { "label": "45/29", "naklon": 5 }, + "4234": { "label": "45/30", "naklon": 5 }, + "4235": { "label": "45/31", "naklon": 5 }, + "4203": { "label": "45/32", "naklon": 5 }, + "4240": { "label": "45/33", "naklon": 5 }, + "4224": { "label": "45/34", "naklon": 5 }, + "4232": { "label": "45/35", "naklon": 5 }, + "4231": { "label": "45/36", "naklon": 5 }, + "4161": { "label": "45/37", "naklon": 5 }, + "4225": { "label": "45/38", "naklon": 5 }, + "4241": { "label": "45/39", "naklon": 5 }, + "4229": { "label": "45/40", "naklon": 5 }, + "4221": { "label": "45/41", "naklon": 5 }, + "4212": { "label": "45/42", "naklon": 5 }, + "4216": { "label": "45/43", "naklon": 5 }, + "3864": { "label": "45/44", "naklon": null }, + "3806": { "label": "46/1", "naklon": 5 }, + "3813": { "label": "46/2", "naklon": 5 }, + "3815": { "label": "46/3", "naklon": 5 }, + "3807": { "label": "46/4", "naklon": 5 }, + "3895": { "label": "46/5", "naklon": 5 }, + "3809": { "label": "46/6", "naklon": 5 }, + "3820": { "label": "46/7", "naklon": 5 }, + "3805": { "label": "46/8", "naklon": 5 }, + "3894": { "label": "46/9", "naklon": 0 }, + "4055": { "label": "46/10", "naklon": 0 }, + "3812": { "label": "46/11", "naklon": 5 }, + "3822": { "label": "46/12", "naklon": 5 }, + "3821": { "label": "46/13", "naklon": 5 }, + "3808": { "label": "46/14", "naklon": 5 }, + "3799": { "label": "46/15", "naklon": 5 }, + "3816": { "label": "46/16", "naklon": 5 }, + "3751": { "label": "46/17", "naklon": 5 }, + "3814": { "label": "46/18", "naklon": 5 }, + "4044": { "label": "46/19", "naklon": 0 }, + "3931": { "label": "46/20", "naklon": 0 }, + "3902": { "label": "46/21", "naklon": 5 }, + "3916": { "label": "46/22", "naklon": 5 }, + "3892": { "label": "46/23", "naklon": 5 }, + "3914": { "label": "46/24", "naklon": 5 }, + "3898": { "label": "46/25", "naklon": 5 }, + "3897": { "label": "46/26", "naklon": 5 }, + "3885": { "label": "46/27", "naklon": 5 }, + "3906": { "label": "46/28", "naklon": 5 }, + "3930": { "label": "46/29", "naklon": 0 }, + "3936": { "label": "46/30", "naklon": 0 }, + "3860": { "label": "46/31", "naklon": 5 }, + "3841": { "label": "46/32", "naklon": 5 }, + "3873": { "label": "46/33", "naklon": 5 }, + "3854": { "label": "46/34", "naklon": 5 }, + "3939": { "label": "46/35", "naklon": 5 }, + "3858": { "label": "46/36", "naklon": 5 }, + "3940": { "label": "46/37", "naklon": 5 }, + "4035": { "label": "46/38", "naklon": 5 }, + "3373": { "label": "47/1", "naklon": 0 }, + "3374": { "label": "47/2", "naklon": 0 }, + "3384": { "label": "47/3", "naklon": 0 }, + "3385": { "label": "47/4", "naklon": 0 }, + "4051": { "label": "48/1", "naklon": 5 }, + "4041": { "label": "48/2", "naklon": 5 }, + "4056": { "label": "48/3", "naklon": 5 }, + "3875": { "label": "48/4", "naklon": 5 }, + "4061": { "label": "48/5", "naklon": 5 }, + "4047": { "label": "48/6", "naklon": 5 }, + "4060": { "label": "48/7", "naklon": 5 }, + "4059": { "label": "48/8", "naklon": 5 }, + "4058": { "label": "48/9", "naklon": 5 }, + "3635": { "label": "48/10", "naklon": 5 }, + "3640": { "label": "48/11", "naklon": 5 }, + "3747": { "label": "48/12", "naklon": 5 }, + "3629": { "label": "48/13", "naklon": 5 }, + "4048": { "label": "48/14", "naklon": 5 }, + "4063": { "label": "48/15", "naklon": 5 }, + "4062": { "label": "48/16", "naklon": 5 }, + "4043": { "label": "48/17", "naklon": 5 }, + "4052": { "label": "48/18", "naklon": 5 }, + "4042": { "label": "48/19", "naklon": 5 }, + "4053": { "label": "48/20", "naklon": 5 }, + "4167": { "label": "50/15A", "naklon": null }, + "4159": { "label": "50/15B", "naklon": null }, + "4183": { "label": "50/1", "naklon": 0 }, + "4157": { "label": "50/2", "naklon": 0 }, + "4160": { "label": "50/3", "naklon": 0 }, + "4173": { "label": "50/4", "naklon": 0 }, + "4177": { "label": "50/5", "naklon": 0 }, + "4174": { "label": "50/6", "naklon": 0 }, + "4178": { "label": "50/7", "naklon": 0 }, + "4195": { "label": "50/8", "naklon": 0 }, + "4169": { "label": "50/9", "naklon": 0 }, + "4162": { "label": "50/10", "naklon": 0 }, + "4158": { "label": "50/11", "naklon": 0 }, + "4182": { "label": "50/12", "naklon": 0 }, + "4194": { "label": "50/13", "naklon": 0 }, + "4184": { "label": "50/14", "naklon": 0 }, + "4197": { "label": "50/16", "naklon": null }, + "4164": { "label": "50/17", "naklon": null }, + "3306": { "label": "50/18", "naklon": null }, + "4168": { "label": "50/19", "naklon": null }, + "4193": { "label": "50/20", "naklon": null }, + "4187": { "label": "50/21", "naklon": null }, + "4163": { "label": "50/22", "naklon": null }, + "4165": { "label": "50/23", "naklon": null }, + "4185": { "label": "50/24", "naklon": null }, + "3904": { "label": "50/25", "naklon": null }, + "2619": { "label": "53/1", "naklon": 0 }, + "2623": { "label": "53/2", "naklon": 0 }, + "2617": { "label": "53/3", "naklon": 0 }, + "2622": { "label": "53/4", "naklon": 0 }, + "2618": { "label": "53/5", "naklon": 0 }, + "2626": { "label": "53/6", "naklon": 0 }, + "2869": { "label": "53/7", "naklon": 0 }, + "2613": { "label": "53/8", "naklon": 0 }, + "2608": { "label": "53/9", "naklon": 0 }, + "2611": { "label": "53/10", "naklon": 0 }, + "2598": { "label": "53/11", "naklon": 0 }, + "3528": { "label": "53/12", "naklon": 0 }, + "3545": { "label": "53/13", "naklon": 0 }, + "2620": { "label": "53/14", "naklon": 0 }, + "2612": { "label": "53/15", "naklon": 0 }, + "2615": { "label": "53/16", "naklon": 0 }, + "3722": { "label": "53/17", "naklon": 0 }, + "2624": { "label": "53/18", "naklon": 0 }, + "2609": { "label": "53/19", "naklon": 0 }, + "2625": { "label": "53/20", "naklon": 0 }, + "2602": { "label": "53/21", "naklon": 0 }, + "2610": { "label": "53/22", "naklon": 0 }, + "2599": { "label": "53/23", "naklon": 0 }, + "2605": { "label": "53/24", "naklon": 0 }, + "2593": { "label": "53/25", "naklon": 0 }, + "3074": { "label": "53/26", "naklon": 0 }, + "2740": { "label": "53/27", "naklon": 0 }, + "2614": { "label": "53/28", "naklon": 0 }, + "2601": { "label": "53/29", "naklon": 0 }, + "4196": { "label": "53/30", "naklon": 0 }, + "2607": { "label": "53/31", "naklon": 0 }, + "2582": { "label": "53/32", "naklon": 0 }, + "2594": { "label": "53/33", "naklon": 0 }, + "2589": { "label": "53/34", "naklon": 0 }, + "2596": { "label": "53/35", "naklon": 0 }, + "2603": { "label": "53/36", "naklon": 0 }, + "2597": { "label": "53/37", "naklon": 0 }, + "2590": { "label": "53/38", "naklon": 0 }, + "2581": { "label": "53/39", "naklon": 0 }, + "2583": { "label": "53/40", "naklon": 0 }, + "2580": { "label": "53/41", "naklon": 0 }, + "2579": { "label": "53/42", "naklon": 0 }, + "2797": { "label": "53/43", "naklon": 0 }, + "2577": { "label": "53/44", "naklon": 0 }, + "2586": { "label": "53/45", "naklon": 0 }, + "2588": { "label": "53/46", "naklon": 0 }, + "2591": { "label": "53/47", "naklon": 0 }, + "2592": { "label": "53/48", "naklon": 0 }, + "2573": { "label": "53/49", "naklon": 0 }, + "2595": { "label": "53/50", "naklon": 0 }, + "2587": { "label": "53/51", "naklon": 0 }, + "2578": { "label": "53/52", "naklon": 0 }, + "2574": { "label": "53/53", "naklon": 0 }, + "2571": { "label": "53/54", "naklon": 0 }, + "2570": { "label": "53/55", "naklon": 0 }, + "2576": { "label": "53/56", "naklon": 0 }, + "2881": { "label": "53/57", "naklon": 0 }, + "2575": { "label": "53/58", "naklon": 0 }, + "2572": { "label": "53/59", "naklon": 0 }, + "2569": { "label": "53/60", "naklon": 0 }, + "4324": { "label": "55/1", "naklon": 0 }, + "4319": { "label": "55/2", "naklon": 0 }, + "4327": { "label": "55/3", "naklon": 0 }, + "4333": { "label": "55/4", "naklon": 0 }, + "4332": { "label": "55/5", "naklon": 0 }, + "4320": { "label": "55/6", "naklon": 0 }, + "4317": { "label": "55/7", "naklon": 0 }, + "4318": { "label": "55/8", "naklon": 0 }, + "4328": { "label": "55/9", "naklon": 0 }, + "4323": { "label": "55/10", "naklon": 0 }, + "4325": { "label": "55/11", "naklon": 0 }, + "4326": { "label": "55/12", "naklon": 0 }, + "4316": { "label": "55/13", "naklon": 0 }, + "4322": { "label": "55/14", "naklon": 0 }, + "4331": { "label": "55/15", "naklon": 0 }, + "4321": { "label": "55/16", "naklon": 0 }, + "4315": { "label": "55/17", "naklon": 0 }, + "4329": { "label": "55/18", "naklon": 0 }, + "4334": { "label": "55/19", "naklon": 0 }, + "4330": { "label": "55/20", "naklon": 0 } +}; + + +let svetlaSorted = [{ "label": "1/3A", "node": 3993, "naklon": 0 }, +{ "label": "1/3B", "node": 3989, "naklon": 15 }, +{ "label": "1/1", "node": 3976, "naklon": 0 }, +{ "label": "1/2", "node": 4181, "naklon": 0 }, +{ "label": "1/4", "node": 4376, "naklon": 15 }, +{ "label": "1/5", "node": 3868, "naklon": 15 }, +{ "label": "1/6", "node": 3728, "naklon": 15 }, +{ "label": "1/7", "node": 3730, "naklon": 0 }, +{ "label": "1/8", "node": 4374, "naklon": 0 }, +{ "label": "1/9", "node": 3718, "naklon": 15 }, +{ "label": "1/10", "node": 4375, "naklon": 15 }, +{ "label": "1/11", "node": 4172, "naklon": 15 }, +{ "label": "1/12", "node": 4176, "naklon": 15 }, +{ "label": "2/1", "node": 3800, "naklon": 5 }, +{ "label": "2/2", "node": 3823, "naklon": 5 }, +{ "label": "2/3", "node": 3905, "naklon": 5 }, +{ "label": "2/4", "node": 3803, "naklon": 5 }, +{ "label": "2/5", "node": 3817, "naklon": 5 }, +{ "label": "2/6", "node": 3818, "naklon": 5 }, +{ "label": "2/7", "node": 3811, "naklon": 5 }, +{ "label": "2/8", "node": 3915, "naklon": 5 }, +{ "label": "2/9", "node": 3843, "naklon": 10 }, +{ "label": "2/10", "node": 3827, "naklon": 10 }, +{ "label": "2/11", "node": 4220, "naklon": 10 }, +{ "label": "2/12", "node": 3826, "naklon": 10 }, +{ "label": "2/13", "node": 3834, "naklon": 10 }, +{ "label": "2/14", "node": 3838, "naklon": 10 }, +{ "label": "2/15", "node": 2823, "naklon": 10 }, +{ "label": "2/16", "node": 3750, "naklon": 10 }, +{ "label": "2/17", "node": 3378, "naklon": 0 }, +{ "label": "2/18", "node": 3376, "naklon": 0 }, +{ "label": "2/19", "node": 3379, "naklon": 0 }, +{ "label": "2/20", "node": 3285, "naklon": 0 }, +{ "label": "2/21", "node": 3382, "naklon": 0 }, +{ "label": "2/22", "node": 3383, "naklon": 0 }, +{ "label": "2/24", "node": 3375, "naklon": 0 }, +{ "label": "2/25", "node": 3381, "naklon": 0 }, +{ "label": "2/26", "node": 3380, "naklon": 0 }, +{ "label": "2/27", "node": 3828, "naklon": 10 }, +{ "label": "2/28", "node": 3377, "naklon": 0 }, +{ "label": "7/1", "node": 3591, "naklon": 0 }, +{ "label": "7/2", "node": 3587, "naklon": 0 }, +{ "label": "7/3", "node": 3468, "naklon": 0 }, +{ "label": "7/4", "node": 3466, "naklon": 0 }, +{ "label": "7/5", "node": 3474, "naklon": 0 }, +{ "label": "7/6", "node": 3481, "naklon": 0 }, +{ "label": "7/7", "node": 3589, "naklon": 0 }, +{ "label": "7/8", "node": 3472, "naklon": 0 }, +{ "label": "7/9", "node": 3473, "naklon": 0 }, +{ "label": "7/10", "node": 3584, "naklon": 0 }, +{ "label": "7/11", "node": 3571, "naklon": 0 }, +{ "label": "7/12", "node": 3476, "naklon": 0 }, +{ "label": "7/13", "node": 3590, "naklon": 0 }, +{ "label": "7/14", "node": 3478, "naklon": 0 }, +{ "label": "7/15", "node": 3471, "naklon": 0 }, +{ "label": "7/16", "node": 3467, "naklon": 0 }, +{ "label": "7/17", "node": 3479, "naklon": 0 }, +{ "label": "7/18", "node": 3480, "naklon": 0 }, +{ "label": "7/19", "node": 3477, "naklon": 0 }, +{ "label": "12/1", "node": 3362, "naklon": 0 }, +{ "label": "12/2", "node": 3355, "naklon": 0 }, +{ "label": "12/3", "node": 3356, "naklon": 0 }, +{ "label": "12/4", "node": 3349, "naklon": 0 }, +{ "label": "12/5", "node": 3357, "naklon": 0 }, +{ "label": "12/6", "node": 3350, "naklon": 0 }, +{ "label": "12/7", "node": 3353, "naklon": 0 }, +{ "label": "12/8", "node": 3539, "naklon": 0 }, +{ "label": "12/9", "node": 3050, "naklon": 0 }, +{ "label": "12/10", "node": 3361, "naklon": 0 }, +{ "label": "12/11", "node": 3360, "naklon": 0 }, +{ "label": "12/12", "node": 3358, "naklon": 0 }, +{ "label": "12/13", "node": 3541, "naklon": 0 }, +{ "label": "12/14", "node": 3551, "naklon": 0 }, +{ "label": "12/15", "node": 3514, "naklon": 0 }, +{ "label": "12/16", "node": 3547, "naklon": 0 }, +{ "label": "12/17", "node": 3562, "naklon": 0 }, +{ "label": "12/18", "node": 3525, "naklon": 0 }, +{ "label": "12/19", "node": 3558, "naklon": 0 }, +{ "label": "12/20", "node": 3511, "naklon": 0 }, +{ "label": "12/21", "node": 3058, "naklon": 0 }, +{ "label": "12/22", "node": 3062, "naklon": 0 }, +{ "label": "12/23", "node": 3070, "naklon": 0 }, +{ "label": "12/24", "node": 3447, "naklon": 0 }, +{ "label": "12/25", "node": 3056, "naklon": 0 }, +{ "label": "12/26", "node": 3057, "naklon": 0 }, +{ "label": "12/27", "node": 3071, "naklon": 0 }, +{ "label": "12/28", "node": 3061, "naklon": 0 }, +{ "label": "12/29", "node": 3069, "naklon": 0 }, +{ "label": "12/30", "node": 3077, "naklon": 0 }, +{ "label": "12/31", "node": 3080, "naklon": 0 }, +{ "label": "12/32", "node": 3081, "naklon": 0 }, +{ "label": "12/33", "node": 3078, "naklon": 0 }, +{ "label": "12/34", "node": 4037, "naklon": 0 }, +{ "label": "12/35", "node": 3067, "naklon": 0 }, +{ "label": "12/36", "node": 3051, "naklon": 0 }, +{ "label": "12/37", "node": 2924, "naklon": 0 }, +{ "label": "12/38", "node": 3060, "naklon": 0 }, +{ "label": "12/39", "node": 3073, "naklon": 0 }, +{ "label": "12/40", "node": 3469, "naklon": 0 }, +{ "label": "12/41", "node": 2923, "naklon": 0 }, +{ "label": "12/42", "node": 2925, "naklon": 0 }, +{ "label": "12/43", "node": 3359, "naklon": 0 }, +{ "label": "12/44", "node": 3055, "naklon": 0 }, +{ "label": "12/45", "node": 2922, "naklon": 0 }, +{ "label": "12/46", "node": 3084, "naklon": 0 }, +{ "label": "12/47", "node": 3064, "naklon": 0 }, +{ "label": "12/48", "node": 3066, "naklon": 0 }, +{ "label": "12/49", "node": 3072, "naklon": 0 }, +{ "label": "13/13A", "node": 3415, "naklon": 0 }, +{ "label": "13/13B", "node": 3409, "naklon": 0 }, +{ "label": "13/13C", "node": 3399, "naklon": 0 }, +{ "label": "13/29A", "node": 3410, "naklon": 0 }, +{ "label": "13/29B", "node": 3407, "naklon": 0 }, +{ "label": "13/34A", "node": 3405, "naklon": 0 }, +{ "label": "13/34B", "node": 3404, "naklon": 0 }, +{ "label": "13/45A", "node": 3392, "naklon": 0 }, +{ "label": "13/45B", "node": 3386, "naklon": 0 }, +{ "label": "13/60A", "node": 3303, "naklon": 3 }, +{ "label": "13/60B", "node": 3302, "naklon": 3 }, +{ "label": "13/70A", "node": 3319, "naklon": 6 }, +{ "label": "13/70B", "node": 3317, "naklon": 6 }, +{ "label": "13/70C", "node": 3326, "naklon": 6 }, +{ "label": "13/73A", "node": 3351, "naklon": 6 }, +{ "label": "13/73B", "node": 3313, "naklon": 6 }, +{ "label": "13/83A", "node": 3316, "naklon": 0 }, +{ "label": "13/83B", "node": 3320, "naklon": 0 }, +{ "label": "13/95A", "node": 3336, "naklon": 0 }, +{ "label": "13/95B", "node": 3323, "naklon": 0 }, +{ "label": "13/98A", "node": 3339, "naklon": 0 }, +{ "label": "13/98B", "node": 3333, "naklon": 0 }, +{ "label": "13/1", "node": 3425, "naklon": 0 }, +{ "label": "13/2", "node": 3419, "naklon": 0 }, +{ "label": "13/3", "node": 3416, "naklon": 0 }, +{ "label": "13/4", "node": 3332, "naklon": 0 }, +{ "label": "13/5", "node": 3422, "naklon": 0 }, +{ "label": "13/6", "node": 3417, "naklon": 0 }, +{ "label": "13/7", "node": 3418, "naklon": 0 }, +{ "label": "13/8", "node": 3424, "naklon": 0 }, +{ "label": "13/9", "node": 3334, "naklon": 0 }, +{ "label": "13/10", "node": 4363, "naklon": 0 }, +{ "label": "13/11", "node": 3423, "naklon": 0 }, +{ "label": "13/12", "node": 3406, "naklon": 0 }, +{ "label": "13/14", "node": 3411, "naklon": 0 }, +{ "label": "13/15", "node": 3412, "naklon": 0 }, +{ "label": "13/16", "node": 3413, "naklon": 0 }, +{ "label": "13/17", "node": 3414, "naklon": 0 }, +{ "label": "13/18", "node": 3391, "naklon": 0 }, +{ "label": "13/19", "node": 3370, "naklon": 0 }, +{ "label": "13/20", "node": 3369, "naklon": 0 }, +{ "label": "13/21", "node": 3408, "naklon": 0 }, +{ "label": "13/22", "node": 3393, "naklon": 0 }, +{ "label": "13/23", "node": 3128, "naklon": 0 }, +{ "label": "13/24", "node": 3197, "naklon": 0 }, +{ "label": "13/25", "node": 4364, "naklon": 0 }, +{ "label": "13/26", "node": 3155, "naklon": 0 }, +{ "label": "13/27", "node": 3196, "naklon": 0 }, +{ "label": "13/28", "node": 3144, "naklon": 0 }, +{ "label": "13/30", "node": 3150, "naklon": 0 }, +{ "label": "13/31", "node": 3390, "naklon": 0 }, +{ "label": "13/32", "node": 3401, "naklon": 0 }, +{ "label": "13/33", "node": 3275, "naklon": 0 }, +{ "label": "13/35", "node": 3371, "naklon": 0 }, +{ "label": "13/36", "node": 3389, "naklon": 0 }, +{ "label": "13/37", "node": 3388, "naklon": 0 }, +{ "label": "13/38", "node": 3365, "naklon": 0 }, +{ "label": "13/39", "node": 3363, "naklon": 0 }, +{ "label": "13/40", "node": 3397, "naklon": 0 }, +{ "label": "13/40/1", "node": 3567, "naklon": 0 }, +{ "label": "13/41", "node": 3387, "naklon": 0 }, +{ "label": "13/42", "node": 3403, "naklon": 0 }, +{ "label": "13/43", "node": 3147, "naklon": 0 }, +{ "label": "13/44", "node": 3141, "naklon": 0 }, +{ "label": "13/46", "node": 3364, "naklon": 0 }, +{ "label": "13/47", "node": 3367, "naklon": 0 }, +{ "label": "13/48", "node": 3368, "naklon": 0 }, +{ "label": "13/49", "node": 3402, "naklon": 0 }, +{ "label": "13/50", "node": 3366, "naklon": 0 }, +{ "label": "13/51", "node": 3395, "naklon": 0 }, +{ "label": "13/52", "node": 3372, "naklon": 0 }, +{ "label": "13/53", "node": 3394, "naklon": 0 }, +{ "label": "13/54", "node": 3308, "naklon": 0 }, +{ "label": "13/54/1", "node": 3847, "naklon": 0 }, +{ "label": "13/55", "node": 3312, "naklon": 3 }, +{ "label": "13/56", "node": 3309, "naklon": 3 }, +{ "label": "13/57", "node": 3311, "naklon": 3 }, +{ "label": "13/58", "node": 3310, "naklon": 3 }, +{ "label": "13/59", "node": 4365, "naklon": 3 }, +{ "label": "13/60/1", "node": 4093, "naklon": 3 }, +{ "label": "13/61", "node": 3304, "naklon": 3 }, +{ "label": "13/62", "node": 3307, "naklon": 3 }, +{ "label": "13/63", "node": 3271, "naklon": 3 }, +{ "label": "13/64", "node": 3301, "naklon": 3 }, +{ "label": "13/65", "node": 4366, "naklon": 3 }, +{ "label": "13/66", "node": 3300, "naklon": 3 }, +{ "label": "13/67", "node": 3185, "naklon": 0 }, +{ "label": "13/68", "node": 3184, "naklon": 0 }, +{ "label": "13/69", "node": 3188, "naklon": 0 }, +{ "label": "13/71", "node": 3343, "naklon": 6 }, +{ "label": "13/71/1", "node": 3819, "naklon": 6 }, +{ "label": "13/71/2", "node": 3880, "naklon": 6 }, +{ "label": "13/72", "node": 3348, "naklon": 6 }, +{ "label": "13/74", "node": 3344, "naklon": 6 }, +{ "label": "13/75", "node": 3346, "naklon": 6 }, +{ "label": "13/75/1", "node": 3597, "naklon": 6 }, +{ "label": "13/76", "node": 3345, "naklon": 6 }, +{ "label": "13/77", "node": 3322, "naklon": 0 }, +{ "label": "13/78", "node": 3325, "naklon": 0 }, +{ "label": "13/78/1", "node": 4310, "naklon": 0 }, +{ "label": "13/79", "node": 3315, "naklon": 0 }, +{ "label": "13/80", "node": 3328, "naklon": 0 }, +{ "label": "13/81", "node": 3321, "naklon": 0 }, +{ "label": "13/82", "node": 3324, "naklon": 0 }, +{ "label": "13/84", "node": 3140, "naklon": 0 }, +{ "label": "13/85", "node": 3153, "naklon": 0 }, +{ "label": "13/86", "node": 3145, "naklon": 0 }, +{ "label": "13/87", "node": 3134, "naklon": 0 }, +{ "label": "13/88", "node": 3151, "naklon": 0 }, +{ "label": "13/89", "node": 3143, "naklon": 0 }, +{ "label": "13/90", "node": 3318, "naklon": 0 }, +{ "label": "13/91", "node": 3347, "naklon": 0 }, +{ "label": "13/94", "node": 3314, "naklon": 0 }, +{ "label": "13/96", "node": 3331, "naklon": 0 }, +{ "label": "13/97", "node": 3327, "naklon": 0 }, +{ "label": "13/99", "node": 3329, "naklon": 0 }, +{ "label": "13/100", "node": 3337, "naklon": 0 }, +{ "label": "13/101", "node": 3330, "naklon": 0 }, +{ "label": "13/102", "node": 3335, "naklon": 0 }, +{ "label": "13/103", "node": 3420, "naklon": 0 }, +{ "label": "13/104", "node": 3421, "naklon": 0 }, +{ "label": "13/105", "node": 4361, "naklon": 0 }, +{ "label": "13/106", "node": 4362, "naklon": 0 }, +{ "label": "13/107", "node": 3526, "naklon": 0 }, +{ "label": "13/108", "node": 4424, "naklon": null }, +{ "label": "13/109", "node": 3561, "naklon": null }, +{ "label": "13/110", "node": 3527, "naklon": null }, +{ "label": "13/111", "node": 3521, "naklon": null }, +{ "label": "13/112", "node": 3552, "naklon": null }, +{ "label": "13/113", "node": 3544, "naklon": null }, +{ "label": "13/114", "node": 3534, "naklon": null }, +{ "label": "13/115", "node": 3516, "naklon": null }, +{ "label": "13/116", "node": 3513, "naklon": null }, +{ "label": "13/117", "node": 3565, "naklon": null }, +{ "label": "13/118", "node": 3866, "naklon": null }, +{ "label": "14/1", "node": 3136, "naklon": 0 }, +{ "label": "14/2", "node": 3137, "naklon": 0 }, +{ "label": "14/3", "node": 3135, "naklon": 0 }, +{ "label": "14/4", "node": 3149, "naklon": 0 }, +{ "label": "14/5", "node": 3142, "naklon": 0 }, +{ "label": "14/6", "node": 3342, "naklon": 0 }, +{ "label": "14/7", "node": 3340, "naklon": 0 }, +{ "label": "14/8", "node": 3152, "naklon": 0 }, +{ "label": "14/9", "node": 3886, "naklon": 0 }, +{ "label": "14/10", "node": 3341, "naklon": null }, +{ "label": "14/11", "node": 3352, "naklon": null }, +{ "label": "15/1", "node": 3396, "naklon": 5 }, +{ "label": "15/2", "node": 2784, "naklon": 5 }, +{ "label": "15/3", "node": 2788, "naklon": 5 }, +{ "label": "15/4", "node": 2801, "naklon": 5 }, +{ "label": "15/5", "node": 2815, "naklon": 5 }, +{ "label": "15/6", "node": 2829, "naklon": 5 }, +{ "label": "15/7", "node": 2796, "naklon": 5 }, +{ "label": "15/8", "node": 2803, "naklon": 5 }, +{ "label": "15/8/1", "node": 4304, "naklon": 5 }, +{ "label": "15/8/2", "node": 4311, "naklon": 5 }, +{ "label": "15/9", "node": 2821, "naklon": 5 }, +{ "label": "15/10", "node": 3400, "naklon": 5 }, +{ "label": "15/11", "node": 2799, "naklon": 5 }, +{ "label": "15/12", "node": 2804, "naklon": 5 }, +{ "label": "15/12/1", "node": 4303, "naklon": 5 }, +{ "label": "15/12/2", "node": 4309, "naklon": 5 }, +{ "label": "15/13", "node": 2806, "naklon": 5 }, +{ "label": "15/14", "node": 2787, "naklon": 5 }, +{ "label": "15/15", "node": 2809, "naklon": 5 }, +{ "label": "15/16", "node": 2814, "naklon": 0 }, +{ "label": "15/17", "node": 3934, "naklon": 0 }, +{ "label": "15/18", "node": 3192, "naklon": 0 }, +{ "label": "15/19", "node": 2812, "naklon": 0 }, +{ "label": "15/20", "node": 4070, "naklon": 0 }, +{ "label": "15/21", "node": 2826, "naklon": 0 }, +{ "label": "15/22", "node": 2808, "naklon": 3 }, +{ "label": "15/23", "node": 2795, "naklon": 3 }, +{ "label": "15/24", "node": 2807, "naklon": 3 }, +{ "label": "15/25", "node": 2831, "naklon": 0 }, +{ "label": "15/26", "node": 2862, "naklon": null }, +{ "label": "15/27", "node": 2861, "naklon": 0 }, +{ "label": "15/28", "node": 2866, "naklon": 0 }, +{ "label": "15/28/1", "node": 3546, "naklon": 0 }, +{ "label": "15/29", "node": 4146, "naklon": 0 }, +{ "label": "15/29/1", "node": 3001, "naklon": 0 }, +{ "label": "15/30", "node": 2835, "naklon": 0 }, +{ "label": "15/31", "node": 2874, "naklon": 0 }, +{ "label": "15/32", "node": 2852, "naklon": 0 }, +{ "label": "15/33", "node": 2851, "naklon": 0 }, +{ "label": "15/33/1", "node": 3560, "naklon": 0 }, +{ "label": "15/34", "node": 2858, "naklon": 0 }, +{ "label": "15/34/1", "node": 4306, "naklon": 0 }, +{ "label": "15/35", "node": 2856, "naklon": 0 }, +{ "label": "15/36", "node": 2847, "naklon": 0 }, +{ "label": "15/36/1", "node": 3556, "naklon": 0 }, +{ "label": "15/37", "node": 3950, "naklon": 0 }, +{ "label": "15/38", "node": 2848, "naklon": 0 }, +{ "label": "15/39", "node": 2863, "naklon": 0 }, +{ "label": "15/39/1", "node": 4313, "naklon": 0 }, +{ "label": "15/40", "node": 2873, "naklon": 0 }, +{ "label": "15/40/1", "node": 2984, "naklon": 0 }, +{ "label": "15/41", "node": 2854, "naklon": 0 }, +{ "label": "15/42", "node": 2859, "naklon": 0 }, +{ "label": "15/43", "node": 2872, "naklon": 0 }, +{ "label": "15/44", "node": 2849, "naklon": 0 }, +{ "label": "15/45", "node": 2864, "naklon": 0 }, +{ "label": "15/46", "node": 3553, "naklon": null }, +{ "label": "15/47", "node": 3021, "naklon": null }, +{ "label": "15/47/1", "node": 3008, "naklon": null }, +{ "label": "15/48", "node": 3017, "naklon": null }, +{ "label": "15/49", "node": 3014, "naklon": null }, +{ "label": "15/50", "node": 2981, "naklon": null }, +{ "label": "15/51", "node": 3020, "naklon": null }, +{ "label": "15/52", "node": 3027, "naklon": null }, +{ "label": "15/53", "node": 3006, "naklon": null }, +{ "label": "15/54", "node": 3012, "naklon": null }, +{ "label": "15/55", "node": 2738, "naklon": 0 }, +{ "label": "15/56", "node": 2725, "naklon": 0 }, +{ "label": "15/57", "node": 3016, "naklon": null }, +{ "label": "15/58", "node": 3005, "naklon": null }, +{ "label": "15/58/1", "node": 3009, "naklon": null }, +{ "label": "15/59", "node": 3010, "naklon": 0 }, +{ "label": "15/59/1", "node": 3538, "naklon": 0 }, +{ "label": "15/59/2", "node": 4145, "naklon": 0 }, +{ "label": "15/60", "node": 2713, "naklon": 0 }, +{ "label": "15/61", "node": 2789, "naklon": 0 }, +{ "label": "15/62", "node": 2736, "naklon": 0 }, +{ "label": "15/63", "node": 2739, "naklon": 0 }, +{ "label": "15/64", "node": 4346, "naklon": 0 }, +{ "label": "15/65", "node": 2731, "naklon": 0 }, +{ "label": "15/66", "node": 2818, "naklon": 0 }, +{ "label": "15/66/1", "node": 3557, "naklon": 0 }, +{ "label": "15/67", "node": 2822, "naklon": 0 }, +{ "label": "15/68", "node": 2833, "naklon": 0 }, +{ "label": "15/69", "node": 2834, "naklon": 0 }, +{ "label": "15/70", "node": 3097, "naklon": 0 }, +{ "label": "15/71", "node": 2824, "naklon": 0 }, +{ "label": "15/72", "node": 2828, "naklon": 0 }, +{ "label": "15/73", "node": 2600, "naklon": 0 }, +{ "label": "15/73/1", "node": 4314, "naklon": 0 }, +{ "label": "15/74", "node": 2832, "naklon": 0 }, +{ "label": "15/75", "node": 4360, "naklon": 0 }, +{ "label": "15/76", "node": 2846, "naklon": 0 }, +{ "label": "15/77", "node": 2584, "naklon": 0 }, +{ "label": "15/78", "node": 2843, "naklon": 0 }, +{ "label": "15/78/1", "node": 4308, "naklon": 0 }, +{ "label": "15/79", "node": 4144, "naklon": null }, +{ "label": "15/80", "node": 2844, "naklon": 0 }, +{ "label": "15/81", "node": 2842, "naklon": 0 }, +{ "label": "15/82", "node": 2838, "naklon": 0 }, +{ "label": "15/83", "node": 2837, "naklon": null }, +{ "label": "15/83/1", "node": 3555, "naklon": null }, +{ "label": "15/84", "node": 2839, "naklon": 0 }, +{ "label": "15/85", "node": 2830, "naklon": 0 }, +{ "label": "15/86", "node": 4066, "naklon": 0 }, +{ "label": "15/87", "node": 2836, "naklon": 0 }, +{ "label": "15/88", "node": 2911, "naklon": 0 }, +{ "label": "15/89", "node": 2825, "naklon": 0 }, +{ "label": "15/90", "node": 2811, "naklon": 0 }, +{ "label": "15/94", "node": 3740, "naklon": 15 }, +{ "label": "15/95", "node": 2734, "naklon": 15 }, +{ "label": "15/96", "node": 3105, "naklon": 15 }, +{ "label": "15/97", "node": 2732, "naklon": 15 }, +{ "label": "15/98", "node": 2727, "naklon": 15 }, +{ "label": "15/99", "node": 2735, "naklon": 15 }, +{ "label": "15/100", "node": 3926, "naklon": 15 }, +{ "label": "15/101", "node": 2918, "naklon": 0 }, +{ "label": "15/102", "node": 2705, "naklon": 10 }, +{ "label": "15/103", "node": 2708, "naklon": 10 }, +{ "label": "15/104", "node": 2721, "naklon": 10 }, +{ "label": "15/105", "node": 2719, "naklon": 10 }, +{ "label": "15/106", "node": 2919, "naklon": 10 }, +{ "label": "15/107", "node": 3101, "naklon": 10 }, +{ "label": "15/108", "node": 2853, "naklon": 10 }, +{ "label": "15/109", "node": 2715, "naklon": 10 }, +{ "label": "15/110", "node": 2712, "naklon": 0 }, +{ "label": "15/111", "node": 2711, "naklon": 0 }, +{ "label": "15/112", "node": 2709, "naklon": 0 }, +{ "label": "15/113", "node": 2710, "naklon": 0 }, +{ "label": "15/114", "node": 2907, "naklon": 0 }, +{ "label": "15/115", "node": 2906, "naklon": 0 }, +{ "label": "15/116", "node": 2908, "naklon": 0 }, +{ "label": "15/117", "node": 2901, "naklon": 0 }, +{ "label": "15/118", "node": 2913, "naklon": 0 }, +{ "label": "15/119", "node": 3656, "naklon": 0 }, +{ "label": "15/120", "node": 2781, "naklon": 0 }, +{ "label": "15/121", "node": 2802, "naklon": 0 }, +{ "label": "15/122", "node": 2791, "naklon": 0 }, +{ "label": "15/123", "node": 2783, "naklon": 0 }, +{ "label": "15/124", "node": 2794, "naklon": 0 }, +{ "label": "15/125", "node": 3139, "naklon": 0 }, +{ "label": "15/126", "node": 3229, "naklon": 5 }, +{ "label": "15/127", "node": 3239, "naklon": 5 }, +{ "label": "15/128", "node": 3230, "naklon": 5 }, +{ "label": "15/129", "node": 4016, "naklon": null }, +{ "label": "16/16A", "node": 3608, "naklon": 0 }, +{ "label": "16/16B", "node": 4151, "naklon": 0 }, +{ "label": "16/1", "node": 3710, "naklon": 0 }, +{ "label": "16/2", "node": 3726, "naklon": 0 }, +{ "label": "16/3", "node": 3743, "naklon": 0 }, +{ "label": "16/4", "node": 3724, "naklon": 0 }, +{ "label": "16/5", "node": 3712, "naklon": 0 }, +{ "label": "16/6", "node": 3739, "naklon": 0 }, +{ "label": "16/7", "node": 3742, "naklon": 0 }, +{ "label": "16/8", "node": 3731, "naklon": 0 }, +{ "label": "16/9", "node": 3727, "naklon": 0 }, +{ "label": "16/10", "node": 3729, "naklon": 0 }, +{ "label": "16/11", "node": 3736, "naklon": 0 }, +{ "label": "16/12", "node": 3713, "naklon": 0 }, +{ "label": "16/13", "node": 3715, "naklon": 0 }, +{ "label": "16/14", "node": 3733, "naklon": 0 }, +{ "label": "16/15", "node": 3732, "naklon": 0 }, +{ "label": "16/17", "node": 3634, "naklon": 0 }, +{ "label": "16/18", "node": 3610, "naklon": 0 }, +{ "label": "16/19", "node": 3626, "naklon": 0 }, +{ "label": "16/20", "node": 3618, "naklon": 0 }, +{ "label": "16/21", "node": 3619, "naklon": 0 }, +{ "label": "16/22", "node": 3628, "naklon": 0 }, +{ "label": "16/23", "node": 3615, "naklon": 0 }, +{ "label": "16/24", "node": 3609, "naklon": 0 }, +{ "label": "16/25", "node": 3606, "naklon": 0 }, +{ "label": "16/26", "node": 3624, "naklon": 0 }, +{ "label": "16/27", "node": 3627, "naklon": 0 }, +{ "label": "16/28", "node": 3607, "naklon": 0 }, +{ "label": "16/29", "node": 4370, "naklon": 0 }, +{ "label": "16/30", "node": 3692, "naklon": 0 }, +{ "label": "16/31", "node": 3614, "naklon": 0 }, +{ "label": "16/32", "node": 3623, "naklon": 0 }, +{ "label": "16/33", "node": 4373, "naklon": 0 }, +{ "label": "16/34", "node": 3620, "naklon": 0 }, +{ "label": "16/35", "node": 3685, "naklon": 0 }, +{ "label": "16/36", "node": 3616, "naklon": 0 }, +{ "label": "16/37", "node": 3686, "naklon": 0 }, +{ "label": "16/38", "node": 3688, "naklon": 0 }, +{ "label": "16/39", "node": 3684, "naklon": 0 }, +{ "label": "16/40", "node": 3825, "naklon": 0 }, +{ "label": "16/41", "node": 3865, "naklon": 0 }, +{ "label": "16/42", "node": 3824, "naklon": 0 }, +{ "label": "16/43", "node": 3871, "naklon": 0 }, +{ "label": "16/44", "node": 3801, "naklon": 0 }, +{ "label": "16/45", "node": 3862, "naklon": 0 }, +{ "label": "16/46", "node": 3876, "naklon": 0 }, +{ "label": "16/47", "node": 3861, "naklon": 0 }, +{ "label": "16/48", "node": 4215, "naklon": 0 }, +{ "label": "16/49", "node": 3605, "naklon": 10 }, +{ "label": "16/50", "node": 3603, "naklon": 10 }, +{ "label": "16/51", "node": 3592, "naklon": 10 }, +{ "label": "16/52", "node": 3598, "naklon": 10 }, +{ "label": "16/53", "node": 3594, "naklon": 10 }, +{ "label": "16/54", "node": 3593, "naklon": 10 }, +{ "label": "16/55", "node": 3630, "naklon": 10 }, +{ "label": "16/56", "node": 3763, "naklon": 10 }, +{ "label": "16/57", "node": 3746, "naklon": 10 }, +{ "label": "16/58", "node": 3699, "naklon": 0 }, +{ "label": "16/59", "node": 3698, "naklon": 0 }, +{ "label": "16/60", "node": 3709, "naklon": null }, +{ "label": "16/61", "node": 3708, "naklon": 0 }, +{ "label": "16/62", "node": 3703, "naklon": null }, +{ "label": "16/63", "node": 3700, "naklon": 0 }, +{ "label": "16/64", "node": 3701, "naklon": null }, +{ "label": "16/65", "node": 3704, "naklon": 0 }, +{ "label": "16/66", "node": 3707, "naklon": null }, +{ "label": "16/67", "node": 3810, "naklon": 0 }, +{ "label": "16/68", "node": 4208, "naklon": null }, +{ "label": "16/69", "node": 3867, "naklon": 0 }, +{ "label": "16/70", "node": 4372, "naklon": null }, +{ "label": "16/71", "node": 3881, "naklon": 0 }, +{ "label": "16/72", "node": 4204, "naklon": null }, +{ "label": "16/73", "node": 3869, "naklon": 0 }, +{ "label": "16/74", "node": 4202, "naklon": null }, +{ "label": "16/75", "node": 3830, "naklon": 0 }, +{ "label": "16/76", "node": 3870, "naklon": null }, +{ "label": "16/77", "node": 3964, "naklon": 0 }, +{ "label": "16/78", "node": 3849, "naklon": 0 }, +{ "label": "16/79", "node": 3694, "naklon": null }, +{ "label": "16/80", "node": 3717, "naklon": 0 }, +{ "label": "16/81", "node": 3877, "naklon": null }, +{ "label": "16/82", "node": 3755, "naklon": 0 }, +{ "label": "16/83", "node": 3725, "naklon": null }, +{ "label": "16/84", "node": 3716, "naklon": 0 }, +{ "label": "16/85", "node": 3696, "naklon": null }, +{ "label": "16/86", "node": 3702, "naklon": 0 }, +{ "label": "16/87", "node": 3706, "naklon": null }, +{ "label": "16/88", "node": 3850, "naklon": 0 }, +{ "label": "16/89", "node": 3848, "naklon": null }, +{ "label": "16/90", "node": 3737, "naklon": null }, +{ "label": "16/91", "node": 3705, "naklon": 0 }, +{ "label": "16/92", "node": 3723, "naklon": null }, +{ "label": "16/93", "node": 3842, "naklon": 0 }, +{ "label": "16/94", "node": 3735, "naklon": null }, +{ "label": "16/95", "node": 3719, "naklon": 0 }, +{ "label": "16/96", "node": 3697, "naklon": 0 }, +{ "label": "16/97", "node": 3711, "naklon": 0 }, +{ "label": "16/98", "node": 4107, "naklon": null }, +{ "label": "16/99", "node": 4112, "naklon": 5 }, +{ "label": "16/100", "node": 4106, "naklon": 5 }, +{ "label": "16/101", "node": 4111, "naklon": 5 }, +{ "label": "16/102", "node": 4091, "naklon": null }, +{ "label": "16/103", "node": 4104, "naklon": 5 }, +{ "label": "16/104", "node": 4094, "naklon": null }, +{ "label": "16/105", "node": 4089, "naklon": 5 }, +{ "label": "16/106", "node": 4095, "naklon": null }, +{ "label": "16/107", "node": 4102, "naklon": 5 }, +{ "label": "16/108", "node": 4105, "naklon": null }, +{ "label": "16/109", "node": 3859, "naklon": null }, +{ "label": "16/110", "node": 4090, "naklon": 5 }, +{ "label": "16/111", "node": 4110, "naklon": null }, +{ "label": "16/112", "node": 4097, "naklon": 5 }, +{ "label": "16/113", "node": 4099, "naklon": null }, +{ "label": "16/114", "node": 4096, "naklon": null }, +{ "label": "16/115", "node": 4101, "naklon": 5 }, +{ "label": "16/116", "node": 4109, "naklon": null }, +{ "label": "16/117", "node": 4092, "naklon": 5 }, +{ "label": "16/118", "node": 3631, "naklon": null }, +{ "label": "16/119", "node": 3632, "naklon": 0 }, +{ "label": "16/120", "node": 3641, "naklon": null }, +{ "label": "16/121", "node": 3638, "naklon": 0 }, +{ "label": "16/122", "node": 3637, "naklon": null }, +{ "label": "16/123", "node": 4142, "naklon": null }, +{ "label": "16/124", "node": 4147, "naklon": 5 }, +{ "label": "16/125", "node": 4139, "naklon": 5 }, +{ "label": "20/30A", "node": 3172, "naklon": 2 }, +{ "label": "20/30B", "node": 3164, "naklon": 2 }, +{ "label": "20/1", "node": 3247, "naklon": 10 }, +{ "label": "20/2", "node": 3296, "naklon": 10 }, +{ "label": "20/3", "node": 3246, "naklon": 10 }, +{ "label": "20/4", "node": 3270, "naklon": 10 }, +{ "label": "20/5", "node": 3294, "naklon": 10 }, +{ "label": "20/6", "node": 3298, "naklon": 10 }, +{ "label": "20/7", "node": 3297, "naklon": 10 }, +{ "label": "20/8", "node": 3293, "naklon": 10 }, +{ "label": "20/9", "node": 3299, "naklon": 10 }, +{ "label": "20/10", "node": 3295, "naklon": 10 }, +{ "label": "20/11", "node": 3244, "naklon": 10 }, +{ "label": "20/12", "node": 3249, "naklon": 10 }, +{ "label": "20/13", "node": 3268, "naklon": 10 }, +{ "label": "20/14", "node": 3245, "naklon": 10 }, +{ "label": "20/15", "node": 3278, "naklon": 10 }, +{ "label": "20/16", "node": 3280, "naklon": 10 }, +{ "label": "20/17", "node": 3292, "naklon": 10 }, +{ "label": "20/18", "node": 3287, "naklon": 10 }, +{ "label": "20/19", "node": 3282, "naklon": 10 }, +{ "label": "20/20", "node": 3273, "naklon": 0 }, +{ "label": "20/21", "node": 3157, "naklon": 0 }, +{ "label": "20/22", "node": 3283, "naklon": 0 }, +{ "label": "20/23", "node": 3159, "naklon": 0 }, +{ "label": "20/24", "node": 3289, "naklon": 0 }, +{ "label": "20/25", "node": 3163, "naklon": 0 }, +{ "label": "20/26", "node": 3126, "naklon": 0 }, +{ "label": "20/27", "node": 3171, "naklon": 0 }, +{ "label": "20/28", "node": 3162, "naklon": 0 }, +{ "label": "20/29", "node": 3279, "naklon": 10 }, +{ "label": "20/31", "node": 3173, "naklon": 0 }, +{ "label": "20/32", "node": 3127, "naklon": 0 }, +{ "label": "20/33", "node": 3131, "naklon": 0 }, +{ "label": "20/34", "node": 3129, "naklon": 0 }, +{ "label": "20/35", "node": 3276, "naklon": 2 }, +{ "label": "20/36", "node": 3290, "naklon": 2 }, +{ "label": "20/37", "node": 3132, "naklon": 0 }, +{ "label": "20/38", "node": 3138, "naklon": 0 }, +{ "label": "20/39", "node": 3272, "naklon": 0 }, +{ "label": "20/40", "node": 3291, "naklon": 0 }, +{ "label": "20/41", "node": 3277, "naklon": 10 }, +{ "label": "20/42", "node": 3286, "naklon": 10 }, +{ "label": "20/43", "node": 3281, "naklon": 10 }, +{ "label": "20/44", "node": 3288, "naklon": 10 }, +{ "label": "20/45", "node": 3284, "naklon": 10 }, +{ "label": "20/46", "node": 3167, "naklon": 10 }, +{ "label": "20/47", "node": 3872, "naklon": 0 }, +{ "label": "20/48", "node": 3124, "naklon": 0 }, +{ "label": "20/49", "node": 3133, "naklon": 0 }, +{ "label": "20/50", "node": 3158, "naklon": 0 }, +{ "label": "20/51", "node": 3169, "naklon": 0 }, +{ "label": "20/52", "node": 3146, "naklon": 0 }, +{ "label": "20/53", "node": 3160, "naklon": 0 }, +{ "label": "20/54", "node": 3248, "naklon": 0 }, +{ "label": "20/55", "node": 3156, "naklon": 0 }, +{ "label": "20/56", "node": 3161, "naklon": 0 }, +{ "label": "20/57", "node": 3170, "naklon": 0 }, +{ "label": "20/58", "node": 3168, "naklon": 0 }, +{ "label": "20/59", "node": 3125, "naklon": 0 }, +{ "label": "20/60", "node": 3166, "naklon": 0 }, +{ "label": "20/61", "node": 3130, "naklon": 0 }, +{ "label": "20/62", "node": 3563, "naklon": 0 }, +{ "label": "20/63", "node": 3550, "naklon": null }, +{ "label": "20/67", "node": 3269, "naklon": 0 }, +{ "label": "21/1", "node": 2921, "naklon": 0 }, +{ "label": "21/2", "node": 2707, "naklon": 0 }, +{ "label": "21/3", "node": 2723, "naklon": 0 }, +{ "label": "21/4", "node": 2716, "naklon": 0 }, +{ "label": "21/5", "node": 2717, "naklon": 0 }, +{ "label": "21/6", "node": 2720, "naklon": 0 }, +{ "label": "21/7", "node": 2722, "naklon": 0 }, +{ "label": "21/8", "node": 2718, "naklon": 0 }, +{ "label": "21/9", "node": 2724, "naklon": 0 }, +{ "label": "21/10", "node": 2742, "naklon": 0 }, +{ "label": "21/11", "node": 2743, "naklon": 0 }, +{ "label": "21/12", "node": 2733, "naklon": 0 }, +{ "label": "21/14", "node": 2903, "naklon": 0 }, +{ "label": "21/15", "node": 2917, "naklon": 0 }, +{ "label": "21/16", "node": 2897, "naklon": 0 }, +{ "label": "21/17", "node": 2914, "naklon": 0 }, +{ "label": "21/18", "node": 2898, "naklon": 0 }, +{ "label": "21/19", "node": 2773, "naklon": 0 }, +{ "label": "21/20", "node": 2895, "naklon": 0 }, +{ "label": "21/21", "node": 2896, "naklon": 0 }, +{ "label": "21/22", "node": 2771, "naklon": 0 }, +{ "label": "21/23", "node": 2772, "naklon": 0 }, +{ "label": "21/24", "node": 2793, "naklon": 0 }, +{ "label": "21/25", "node": 2902, "naklon": 0 }, +{ "label": "21/26", "node": 2910, "naklon": 0 }, +{ "label": "21/27", "node": 2909, "naklon": 0 }, +{ "label": "21/28", "node": 2920, "naklon": 0 }, +{ "label": "21/29", "node": 2916, "naklon": 0 }, +{ "label": "21/30", "node": 2904, "naklon": 0 }, +{ "label": "21/31", "node": 2915, "naklon": 0 }, +{ "label": "21/32", "node": 2905, "naklon": 0 }, +{ "label": "21/33", "node": 2900, "naklon": 0 }, +{ "label": "21/34", "node": 2899, "naklon": 0 }, +{ "label": "21/36", "node": 2741, "naklon": 0 }, +{ "label": "21/37", "node": 2714, "naklon": 0 }, +{ "label": "21/38", "node": 2701, "naklon": 0 }, +{ "label": "21/39", "node": 2703, "naklon": 0 }, +{ "label": "21/40", "node": 2704, "naklon": 0 }, +{ "label": "21/41", "node": 2702, "naklon": 0 }, +{ "label": "21/42", "node": 2706, "naklon": 0 }, +{ "label": "21/43", "node": 2776, "naklon": 0 }, +{ "label": "21/44", "node": 2770, "naklon": 0 }, +{ "label": "21/45", "node": 2786, "naklon": 0 }, +{ "label": "21/46", "node": 2779, "naklon": 0 }, +{ "label": "21/47", "node": 2782, "naklon": 0 }, +{ "label": "21/48", "node": 2785, "naklon": 0 }, +{ "label": "21/49", "node": 2769, "naklon": 0 }, +{ "label": "21/50", "node": 3354, "naklon": 0 }, +{ "label": "21/51", "node": 2778, "naklon": 0 }, +{ "label": "21/52", "node": 2775, "naklon": 0 }, +{ "label": "21/53", "node": 2780, "naklon": 0 }, +{ "label": "21/54", "node": 2790, "naklon": 0 }, +{ "label": "21/55", "node": 2792, "naklon": 0 }, +{ "label": "21/56", "node": 2774, "naklon": 0 }, +{ "label": "22/1", "node": 2630, "naklon": 0 }, +{ "label": "22/2", "node": 2631, "naklon": 0 }, +{ "label": "22/3", "node": 2632, "naklon": 0 }, +{ "label": "22/4", "node": 2633, "naklon": 0 }, +{ "label": "22/5", "node": 2634, "naklon": 0 }, +{ "label": "22/6", "node": 2636, "naklon": 0 }, +{ "label": "22/7", "node": 4367, "naklon": 0 }, +{ "label": "22/8", "node": 2637, "naklon": 0 }, +{ "label": "22/9", "node": 2638, "naklon": 0 }, +{ "label": "22/10", "node": 2639, "naklon": 0 }, +{ "label": "22/11", "node": 2640, "naklon": 0 }, +{ "label": "22/12", "node": 2641, "naklon": 0 }, +{ "label": "22/13", "node": 2642, "naklon": 0 }, +{ "label": "22/14", "node": 2643, "naklon": 0 }, +{ "label": "22/15", "node": 2644, "naklon": 0 }, +{ "label": "22/16", "node": 2645, "naklon": 0 }, +{ "label": "22/17", "node": 2646, "naklon": 0 }, +{ "label": "22/18", "node": 2647, "naklon": 0 }, +{ "label": "22/19", "node": 2648, "naklon": 0 }, +{ "label": "22/20", "node": 2649, "naklon": 0 }, +{ "label": "22/21", "node": 2650, "naklon": 0 }, +{ "label": "22/22", "node": 2651, "naklon": 0 }, +{ "label": "22/23", "node": 4103, "naklon": 0 }, +{ "label": "22/24", "node": 2653, "naklon": 0 }, +{ "label": "22/25", "node": 2654, "naklon": 0 }, +{ "label": "22/26", "node": 2655, "naklon": 0 }, +{ "label": "22/27", "node": 2656, "naklon": 0 }, +{ "label": "22/28", "node": 2657, "naklon": 0 }, +{ "label": "22/29", "node": 2658, "naklon": 0 }, +{ "label": "22/30", "node": 2659, "naklon": 0 }, +{ "label": "22/31", "node": 2660, "naklon": 0 }, +{ "label": "22/32", "node": 2661, "naklon": 0 }, +{ "label": "22/32/1", "node": 3015, "naklon": 0 }, +{ "label": "22/33", "node": 2662, "naklon": 0 }, +{ "label": "22/34", "node": 2663, "naklon": 0 }, +{ "label": "22/35", "node": 2664, "naklon": 0 }, +{ "label": "22/36", "node": 2665, "naklon": 0 }, +{ "label": "22/37", "node": 2666, "naklon": 0 }, +{ "label": "22/38", "node": 2667, "naklon": 0 }, +{ "label": "22/39", "node": 2668, "naklon": 0 }, +{ "label": "22/40", "node": 2669, "naklon": null }, +{ "label": "22/41", "node": 2670, "naklon": null }, +{ "label": "22/42", "node": 2671, "naklon": null }, +{ "label": "23/9A", "node": 3087, "naklon": 10 }, +{ "label": "23/9B", "node": 3090, "naklon": 10 }, +{ "label": "23/1", "node": 3075, "naklon": 0 }, +{ "label": "23/2", "node": 3089, "naklon": 0 }, +{ "label": "23/3", "node": 3088, "naklon": 0 }, +{ "label": "23/4", "node": 3228, "naklon": 10 }, +{ "label": "23/5", "node": 2751, "naklon": 10 }, +{ "label": "23/6", "node": 3243, "naklon": 10 }, +{ "label": "23/7", "node": 4349, "naklon": 10 }, +{ "label": "23/8", "node": 3102, "naklon": 10 }, +{ "label": "23/10", "node": 3099, "naklon": 10 }, +{ "label": "23/11", "node": 3103, "naklon": 10 }, +{ "label": "23/12", "node": 3093, "naklon": 10 }, +{ "label": "23/13", "node": 3098, "naklon": 10 }, +{ "label": "23/14", "node": 3092, "naklon": 10 }, +{ "label": "23/15", "node": 3233, "naklon": 0 }, +{ "label": "23/16", "node": 3095, "naklon": 0 }, +{ "label": "23/17", "node": 4074, "naklon": 0 }, +{ "label": "23/18", "node": 2729, "naklon": 0 }, +{ "label": "23/19", "node": 3234, "naklon": 0 }, +{ "label": "23/20", "node": 3094, "naklon": 0 }, +{ "label": "23/21", "node": 2817, "naklon": 0 }, +{ "label": "23/22", "node": 3226, "naklon": 0 }, +{ "label": "23/23", "node": 3225, "naklon": 0 }, +{ "label": "23/24", "node": 3237, "naklon": 0 }, +{ "label": "23/25", "node": 4250, "naklon": 0 }, +{ "label": "23/26", "node": 3059, "naklon": 10 }, +{ "label": "23/27", "node": 3238, "naklon": 10 }, +{ "label": "23/28", "node": 3242, "naklon": 10 }, +{ "label": "23/29", "node": 3236, "naklon": 10 }, +{ "label": "23/30", "node": 3112, "naklon": 10 }, +{ "label": "23/31", "node": 3224, "naklon": 0 }, +{ "label": "23/32", "node": 4298, "naklon": 10 }, +{ "label": "23/33", "node": 4150, "naklon": 10 }, +{ "label": "23/34", "node": 3091, "naklon": 10 }, +{ "label": "25/1", "node": 3771, "naklon": 5 }, +{ "label": "25/2", "node": 3777, "naklon": 5 }, +{ "label": "25/3", "node": 3749, "naklon": 5 }, +{ "label": "25/4", "node": 3769, "naklon": 5 }, +{ "label": "25/5", "node": 3765, "naklon": 5 }, +{ "label": "25/6", "node": 3785, "naklon": 5 }, +{ "label": "25/7", "node": 3761, "naklon": 5 }, +{ "label": "25/8", "node": 3758, "naklon": 5 }, +{ "label": "25/9", "node": 3766, "naklon": 5 }, +{ "label": "25/10", "node": 3779, "naklon": 5 }, +{ "label": "25/11", "node": 3899, "naklon": 10 }, +{ "label": "25/12", "node": 3922, "naklon": 10 }, +{ "label": "25/13", "node": 3912, "naklon": 10 }, +{ "label": "25/14", "node": 3933, "naklon": 10 }, +{ "label": "25/15", "node": 3921, "naklon": 10 }, +{ "label": "25/16", "node": 4300, "naklon": 10 }, +{ "label": "25/17", "node": 3927, "naklon": 10 }, +{ "label": "25/18", "node": 3212, "naklon": 10 }, +{ "label": "25/19", "node": 3208, "naklon": 10 }, +{ "label": "25/20", "node": 3207, "naklon": 10 }, +{ "label": "25/21", "node": 4294, "naklon": 10 }, +{ "label": "25/22", "node": 3209, "naklon": 10 }, +{ "label": "25/23", "node": 3745, "naklon": 10 }, +{ "label": "25/24", "node": 3762, "naklon": 10 }, +{ "label": "25/25", "node": 3215, "naklon": 10 }, +{ "label": "25/26", "node": 3210, "naklon": 10 }, +{ "label": "25/27", "node": 3211, "naklon": 10 }, +{ "label": "25/28", "node": 3206, "naklon": 10 }, +{ "label": "25/29", "node": 3918, "naklon": 5 }, +{ "label": "25/30", "node": 3928, "naklon": 5 }, +{ "label": "25/31", "node": 3917, "naklon": 5 }, +{ "label": "25/32", "node": 4029, "naklon": 0 }, +{ "label": "25/33", "node": 4038, "naklon": 0 }, +{ "label": "25/34", "node": 4022, "naklon": 0 }, +{ "label": "25/35", "node": 3937, "naklon": 0 }, +{ "label": "25/36", "node": 3190, "naklon": 0 }, +{ "label": "25/37", "node": 3835, "naklon": 0 }, +{ "label": "25/38", "node": 3201, "naklon": 0 }, +{ "label": "25/39", "node": 3193, "naklon": 0 }, +{ "label": "25/40", "node": 3191, "naklon": 0 }, +{ "label": "25/41", "node": 3203, "naklon": 0 }, +{ "label": "25/42", "node": 4301, "naklon": 0 }, +{ "label": "25/43", "node": 3223, "naklon": 0 }, +{ "label": "25/44", "node": 3202, "naklon": 0 }, +{ "label": "25/45", "node": 3205, "naklon": 0 }, +{ "label": "25/46", "node": 3194, "naklon": 0 }, +{ "label": "25/47", "node": 3198, "naklon": 0 }, +{ "label": "25/48", "node": 3204, "naklon": 0 }, +{ "label": "25/49", "node": 3200, "naklon": 0 }, +{ "label": "25/50", "node": 3216, "naklon": 0 }, +{ "label": "25/51", "node": 3932, "naklon": 5 }, +{ "label": "25/52", "node": 3923, "naklon": 5 }, +{ "label": "25/53", "node": 3913, "naklon": 5 }, +{ "label": "25/54", "node": 3900, "naklon": 5 }, +{ "label": "25/55", "node": 4189, "naklon": 10 }, +{ "label": "25/56", "node": 4191, "naklon": 10 }, +{ "label": "25/57", "node": 3790, "naklon": 10 }, +{ "label": "25/58", "node": 4190, "naklon": 10 }, +{ "label": "25/59", "node": 4302, "naklon": 0 }, +{ "label": "25/60", "node": 4351, "naklon": 0 }, +{ "label": "25/61", "node": 4075, "naklon": 0 }, +{ "label": "25/62", "node": 4071, "naklon": 0 }, +{ "label": "25/63", "node": 3784, "naklon": 0 }, +{ "label": "25/64", "node": 4065, "naklon": 0 }, +{ "label": "25/65", "node": 4297, "naklon": 0 }, +{ "label": "25/66", "node": 4295, "naklon": 0 }, +{ "label": "25/67", "node": 4299, "naklon": 0 }, +{ "label": "25/68", "node": 3772, "naklon": 0 }, +{ "label": "25/69", "node": 3941, "naklon": 0 }, +{ "label": "25/70", "node": 3782, "naklon": 0 }, +{ "label": "25/71", "node": 4068, "naklon": 0 }, +{ "label": "25/72", "node": 4073, "naklon": 0 }, +{ "label": "25/73", "node": 3901, "naklon": 5 }, +{ "label": "25/74", "node": 4296, "naklon": 5 }, +{ "label": "25/75", "node": 3910, "naklon": 5 }, +{ "label": "25/76", "node": 4293, "naklon": 5 }, +{ "label": "25/77", "node": 3919, "naklon": 5 }, +{ "label": "25/78", "node": 3924, "naklon": 5 }, +{ "label": "25/79", "node": 3909, "naklon": 5 }, +{ "label": "25/80", "node": 3896, "naklon": 5 }, +{ "label": "25/81", "node": 3911, "naklon": 5 }, +{ "label": "25/82", "node": 2819, "naklon": 15 }, +{ "label": "25/83", "node": 3776, "naklon": 15 }, +{ "label": "25/84", "node": 3752, "naklon": 15 }, +{ "label": "25/85", "node": 4353, "naklon": 15 }, +{ "label": "25/86", "node": 3791, "naklon": 0 }, +{ "label": "25/87", "node": 3770, "naklon": 0 }, +{ "label": "25/88", "node": 3760, "naklon": 0 }, +{ "label": "25/89", "node": 3115, "naklon": 0 }, +{ "label": "25/90", "node": 3738, "naklon": 0 }, +{ "label": "25/91", "node": 3748, "naklon": 0 }, +{ "label": "25/92", "node": 3753, "naklon": 0 }, +{ "label": "25/93", "node": 3775, "naklon": 0 }, +{ "label": "25/94", "node": 3778, "naklon": 5 }, +{ "label": "25/95", "node": 4078, "naklon": 5 }, +{ "label": "25/96", "node": 4088, "naklon": 5 }, +{ "label": "25/97", "node": 3856, "naklon": 5 }, +{ "label": "25/98", "node": 4084, "naklon": 5 }, +{ "label": "25/99", "node": 4069, "naklon": 5 }, +{ "label": "25/100", "node": 4188, "naklon": 5 }, +{ "label": "25/101", "node": 4064, "naklon": 5 }, +{ "label": "25/102", "node": 3792, "naklon": 5 }, +{ "label": "25/103", "node": 3780, "naklon": 5 }, +{ "label": "25/104", "node": 4034, "naklon": 5 }, +{ "label": "25/105", "node": 4072, "naklon": 5 }, +{ "label": "25/106", "node": 3884, "naklon": 5 }, +{ "label": "25/107", "node": 3793, "naklon": 5 }, +{ "label": "25/108", "node": 3863, "naklon": 5 }, +{ "label": "25/109", "node": 3855, "naklon": 5 }, +{ "label": "33/1", "node": 3846, "naklon": 0 }, +{ "label": "33/2", "node": 3943, "naklon": 0 }, +{ "label": "33/3", "node": 3903, "naklon": 0 }, +{ "label": "33/4", "node": 3982, "naklon": 0 }, +{ "label": "33/5", "node": 3879, "naklon": 0 }, +{ "label": "33/6", "node": 3887, "naklon": 0 }, +{ "label": "33/7", "node": 3920, "naklon": 5 }, +{ "label": "33/8", "node": 3942, "naklon": 5 }, +{ "label": "33/9", "node": 3829, "naklon": null }, +{ "label": "34/79A", "node": 3452, "naklon": 6 }, +{ "label": "34/79B", "node": 3460, "naklon": 6 }, +{ "label": "34/90A", "node": 3443, "naklon": 6 }, +{ "label": "34/90B", "node": 3445, "naklon": 6 }, +{ "label": "34/90C", "node": 3457, "naklon": 6 }, +{ "label": "34/97A", "node": 3461, "naklon": 6 }, +{ "label": "34/97B", "node": 3463, "naklon": 6 }, +{ "label": "34/98A", "node": 3426, "naklon": 6 }, +{ "label": "34/98B", "node": 3444, "naklon": 6 }, +{ "label": "34/99A", "node": 3453, "naklon": 6 }, +{ "label": "34/99B", "node": 3455, "naklon": 6 }, +{ "label": "34/1", "node": 4009, "naklon": 0 }, +{ "label": "34/2", "node": 3602, "naklon": 0 }, +{ "label": "34/3", "node": 3441, "naklon": 0 }, +{ "label": "34/4", "node": 3464, "naklon": 0 }, +{ "label": "34/5", "node": 3883, "naklon": 0 }, +{ "label": "34/6", "node": 4098, "naklon": 0 }, +{ "label": "34/7", "node": 4003, "naklon": 0 }, +{ "label": "34/8", "node": 4004, "naklon": 0 }, +{ "label": "34/9", "node": 3888, "naklon": 0 }, +{ "label": "34/10", "node": 3997, "naklon": 0 }, +{ "label": "34/11", "node": 4006, "naklon": 0 }, +{ "label": "34/12", "node": 4000, "naklon": 0 }, +{ "label": "34/13", "node": 4011, "naklon": 0 }, +{ "label": "34/14", "node": 3999, "naklon": 0 }, +{ "label": "34/15", "node": 3981, "naklon": 0 }, +{ "label": "34/16", "node": 3988, "naklon": 0 }, +{ "label": "34/17", "node": 3986, "naklon": 0 }, +{ "label": "34/18", "node": 3998, "naklon": 0 }, +{ "label": "34/19", "node": 3983, "naklon": 0 }, +{ "label": "34/20", "node": 4005, "naklon": 0 }, +{ "label": "34/21", "node": 4001, "naklon": 0 }, +{ "label": "34/22", "node": 4008, "naklon": 0 }, +{ "label": "34/23", "node": 4002, "naklon": 0 }, +{ "label": "34/24", "node": 3996, "naklon": 0 }, +{ "label": "34/25", "node": 4007, "naklon": 0 }, +{ "label": "34/26", "node": 4113, "naklon": 15 }, +{ "label": "34/27", "node": 3595, "naklon": 5 }, +{ "label": "34/28", "node": 3599, "naklon": 5 }, +{ "label": "34/29", "node": 3601, "naklon": 5 }, +{ "label": "34/30", "node": 4205, "naklon": 0 }, +{ "label": "34/31", "node": 3987, "naklon": null }, +{ "label": "34/32", "node": 4214, "naklon": 0 }, +{ "label": "34/33", "node": 4226, "naklon": 0 }, +{ "label": "34/34", "node": 4209, "naklon": 0 }, +{ "label": "34/35", "node": 4201, "naklon": 0 }, +{ "label": "34/36", "node": 3440, "naklon": 0 }, +{ "label": "34/37", "node": 3465, "naklon": 0 }, +{ "label": "34/38", "node": 3446, "naklon": 0 }, +{ "label": "34/39", "node": 4039, "naklon": 5 }, +{ "label": "34/40", "node": 4057, "naklon": 5 }, +{ "label": "34/41", "node": 3985, "naklon": 0 }, +{ "label": "34/42", "node": 3882, "naklon": 0 }, +{ "label": "34/43", "node": 4040, "naklon": 5 }, +{ "label": "34/44", "node": 3231, "naklon": 0 }, +{ "label": "34/45", "node": 3227, "naklon": 0 }, +{ "label": "34/46", "node": 3431, "naklon": 0 }, +{ "label": "34/47", "node": 4013, "naklon": 0 }, +{ "label": "34/48", "node": 4045, "naklon": 0 }, +{ "label": "34/49", "node": 3949, "naklon": 0 }, +{ "label": "34/50", "node": 3953, "naklon": 0 }, +{ "label": "34/51", "node": 3952, "naklon": 0 }, +{ "label": "34/52", "node": 3995, "naklon": 0 }, +{ "label": "34/53", "node": 3992, "naklon": 0 }, +{ "label": "34/54", "node": 4198, "naklon": 0 }, +{ "label": "34/55", "node": 3935, "naklon": 0 }, +{ "label": "34/56", "node": 4050, "naklon": 0 }, +{ "label": "34/57", "node": 4049, "naklon": 0 }, +{ "label": "34/58", "node": 4054, "naklon": 0 }, +{ "label": "34/59", "node": 3663, "naklon": 6 }, +{ "label": "34/60", "node": 3661, "naklon": 6 }, +{ "label": "34/61", "node": 3664, "naklon": 6 }, +{ "label": "34/62", "node": 3660, "naklon": 6 }, +{ "label": "34/63", "node": 3662, "naklon": 6 }, +{ "label": "34/65", "node": 3665, "naklon": 6 }, +{ "label": "34/66", "node": 3667, "naklon": 6 }, +{ "label": "34/67", "node": 3675, "naklon": 6 }, +{ "label": "34/68", "node": 3666, "naklon": 6 }, +{ "label": "34/69", "node": 3652, "naklon": 6 }, +{ "label": "34/70", "node": 3458, "naklon": 6 }, +{ "label": "34/70/1", "node": 4425, "naklon": 6 }, +{ "label": "34/71", "node": 3459, "naklon": 6 }, +{ "label": "34/72", "node": 3435, "naklon": 6 }, +{ "label": "34/73", "node": 3448, "naklon": 6 }, +{ "label": "34/74", "node": 3451, "naklon": 6 }, +{ "label": "34/75", "node": 3442, "naklon": 6 }, +{ "label": "34/76", "node": 3449, "naklon": 6 }, +{ "label": "34/77", "node": 3450, "naklon": 6 }, +{ "label": "34/78", "node": 3433, "naklon": 6 }, +{ "label": "34/80", "node": 3432, "naklon": 12 }, +{ "label": "34/81", "node": 3470, "naklon": 12 }, +{ "label": "34/82", "node": 3438, "naklon": 12 }, +{ "label": "34/83", "node": 3439, "naklon": 12 }, +{ "label": "34/84", "node": 4028, "naklon": 5 }, +{ "label": "34/85", "node": 3596, "naklon": 5 }, +{ "label": "34/86", "node": 4021, "naklon": 5 }, +{ "label": "34/87", "node": 3437, "naklon": 12 }, +{ "label": "34/88", "node": 3428, "naklon": 12 }, +{ "label": "34/89", "node": 3430, "naklon": 12 }, +{ "label": "34/91", "node": 3454, "naklon": 6 }, +{ "label": "34/92", "node": 3492, "naklon": 6 }, +{ "label": "34/93", "node": 3462, "naklon": 6 }, +{ "label": "34/94", "node": 3427, "naklon": 6 }, +{ "label": "34/95", "node": 3434, "naklon": 6 }, +{ "label": "34/96", "node": 3456, "naklon": 6 }, +{ "label": "34/98/1", "node": 4307, "naklon": 6 }, +{ "label": "35/1", "node": 3968, "naklon": 0 }, +{ "label": "35/2", "node": 3969, "naklon": 0 }, +{ "label": "35/3", "node": 3947, "naklon": 0 }, +{ "label": "35/4", "node": 3979, "naklon": 0 }, +{ "label": "35/5", "node": 3959, "naklon": 0 }, +{ "label": "35/6", "node": 3948, "naklon": 0 }, +{ "label": "35/7", "node": 3961, "naklon": 0 }, +{ "label": "35/8", "node": 3956, "naklon": 0 }, +{ "label": "35/9", "node": 3604, "naklon": 0 }, +{ "label": "35/10", "node": 3944, "naklon": 0 }, +{ "label": "35/11", "node": 3960, "naklon": 0 }, +{ "label": "35/12", "node": 3958, "naklon": 0 }, +{ "label": "35/13", "node": 4036, "naklon": 5 }, +{ "label": "35/18", "node": 3893, "naklon": 5 }, +{ "label": "35/19", "node": 4108, "naklon": 5 }, +{ "label": "35/20", "node": 4017, "naklon": 5 }, +{ "label": "35/21", "node": 3963, "naklon": 0 }, +{ "label": "35/22", "node": 3658, "naklon": 0 }, +{ "label": "35/23", "node": 3975, "naklon": 0 }, +{ "label": "35/24", "node": 3980, "naklon": 0 }, +{ "label": "35/25", "node": 4012, "naklon": 0 }, +{ "label": "35/26", "node": 3655, "naklon": 0 }, +{ "label": "35/27", "node": 3962, "naklon": 0 }, +{ "label": "35/28", "node": 3945, "naklon": 0 }, +{ "label": "35/29", "node": 3569, "naklon": 0 }, +{ "label": "35/30", "node": 3429, "naklon": 0 }, +{ "label": "35/31", "node": 3657, "naklon": 0 }, +{ "label": "35/32", "node": 3646, "naklon": 0 }, +{ "label": "35/33", "node": 3622, "naklon": 0 }, +{ "label": "35/34", "node": 3612, "naklon": 0 }, +{ "label": "35/35", "node": 3955, "naklon": 0 }, +{ "label": "35/37", "node": 3878, "naklon": 0 }, +{ "label": "35/38", "node": 3965, "naklon": 0 }, +{ "label": "35/39", "node": 3970, "naklon": 0 }, +{ "label": "35/40", "node": 3611, "naklon": 0 }, +{ "label": "35/41", "node": 2635, "naklon": 0 }, +{ "label": "35/42", "node": 3978, "naklon": 0 }, +{ "label": "35/43", "node": 4213, "naklon": 0 }, +{ "label": "35/44", "node": 3984, "naklon": 0 }, +{ "label": "35/45", "node": 4218, "naklon": 0 }, +{ "label": "35/46", "node": 3973, "naklon": 0 }, +{ "label": "35/47", "node": 3974, "naklon": 0 }, +{ "label": "35/48", "node": 3759, "naklon": 0 }, +{ "label": "35/49", "node": 3844, "naklon": 0 }, +{ "label": "35/50", "node": 3804, "naklon": 0 }, +{ "label": "35/51", "node": 3831, "naklon": 0 }, +{ "label": "35/52", "node": 3643, "naklon": 0 }, +{ "label": "35/53", "node": 3966, "naklon": 0 }, +{ "label": "35/54", "node": 3971, "naklon": 0 }, +{ "label": "35/55", "node": 3650, "naklon": 6 }, +{ "label": "35/56", "node": 3651, "naklon": 6 }, +{ "label": "35/57", "node": 3669, "naklon": 6 }, +{ "label": "35/58", "node": 3648, "naklon": 6 }, +{ "label": "35/59", "node": 3645, "naklon": 6 }, +{ "label": "35/60", "node": 3659, "naklon": 6 }, +{ "label": "35/61", "node": 3647, "naklon": 6 }, +{ "label": "35/62", "node": 3644, "naklon": 6 }, +{ "label": "35/63", "node": 3671, "naklon": 6 }, +{ "label": "35/64", "node": 3682, "naklon": 6 }, +{ "label": "35/65", "node": 3672, "naklon": 6 }, +{ "label": "35/66", "node": 3683, "naklon": 6 }, +{ "label": "35/67", "node": 3673, "naklon": 6 }, +{ "label": "35/68", "node": 3674, "naklon": 6 }, +{ "label": "35/69", "node": 3679, "naklon": 6 }, +{ "label": "35/70", "node": 3649, "naklon": 6 }, +{ "label": "35/71", "node": 3687, "naklon": 6 }, +{ "label": "35/72", "node": 3677, "naklon": 6 }, +{ "label": "35/73", "node": 3690, "naklon": 6 }, +{ "label": "35/74", "node": 3691, "naklon": 6 }, +{ "label": "35/75", "node": 3676, "naklon": 6 }, +{ "label": "35/76", "node": 3680, "naklon": 6 }, +{ "label": "35/77", "node": 3668, "naklon": 6 }, +{ "label": "35/78", "node": 3681, "naklon": 6 }, +{ "label": "35/79", "node": 3670, "naklon": 6 }, +{ "label": "35/80", "node": 3689, "naklon": 6 }, +{ "label": "35/81", "node": 3678, "naklon": 6 }, +{ "label": "35/82", "node": 3693, "naklon": 6 }, +{ "label": "35/83", "node": 3654, "naklon": null }, +{ "label": "36/1", "node": 4086, "naklon": 0 }, +{ "label": "36/2", "node": 4085, "naklon": 0 }, +{ "label": "36/3", "node": 4083, "naklon": 0 }, +{ "label": "36/4", "node": 4087, "naklon": 0 }, +{ "label": "36/5", "node": 4077, "naklon": 0 }, +{ "label": "36/6", "node": 4082, "naklon": 0 }, +{ "label": "36/7", "node": 4186, "naklon": 0 }, +{ "label": "36/8", "node": 4206, "naklon": 0 }, +{ "label": "36/9", "node": 4080, "naklon": 0 }, +{ "label": "36/10", "node": 4081, "naklon": 0 }, +{ "label": "36/11", "node": 4210, "naklon": 0 }, +{ "label": "36/12", "node": 4079, "naklon": 0 }, +{ "label": "36/13", "node": 4076, "naklon": 0 }, +{ "label": "36/14", "node": 3852, "naklon": 0 }, +{ "label": "36/15", "node": 2813, "naklon": 0 }, +{ "label": "36/16", "node": 4219, "naklon": 0 }, +{ "label": "37/1A", "node": 3104, "naklon": 15 }, +{ "label": "37/1B", "node": 3121, "naklon": 15 }, +{ "label": "37/2", "node": 3113, "naklon": 10 }, +{ "label": "37/3", "node": 3118, "naklon": 10 }, +{ "label": "37/4", "node": 3111, "naklon": 10 }, +{ "label": "37/5", "node": 4020, "naklon": 10 }, +{ "label": "37/6", "node": 3119, "naklon": 10 }, +{ "label": "37/7", "node": 3110, "naklon": 10 }, +{ "label": "37/8", "node": 3108, "naklon": 10 }, +{ "label": "37/12", "node": 3107, "naklon": 0 }, +{ "label": "37/13", "node": 3199, "naklon": 0 }, +{ "label": "37/14", "node": 3120, "naklon": 0 }, +{ "label": "37/15", "node": 3122, "naklon": 0 }, +{ "label": "37/16", "node": 3908, "naklon": 0 }, +{ "label": "37/17", "node": 3114, "naklon": 0 }, +{ "label": "37/18", "node": 3105, "naklon": 0 }, +{ "label": "37/19", "node": 3116, "naklon": 0 }, +{ "label": "37/20", "node": 3106, "naklon": 0 }, +{ "label": "37/21", "node": 2887, "naklon": 5 }, +{ "label": "37/22", "node": 2888, "naklon": 5 }, +{ "label": "37/23", "node": 2877, "naklon": 5 }, +{ "label": "37/24", "node": 2891, "naklon": 5 }, +{ "label": "37/25", "node": 2886, "naklon": 5 }, +{ "label": "37/26", "node": 2892, "naklon": 5 }, +{ "label": "37/27", "node": 2882, "naklon": 5 }, +{ "label": "37/28", "node": 2883, "naklon": 5 }, +{ "label": "37/29", "node": 2876, "naklon": 5 }, +{ "label": "37/30", "node": 3109, "naklon": 5 }, +{ "label": "37/31", "node": 4152, "naklon": 5 }, +{ "label": "37/32", "node": 3117, "naklon": 5 }, +{ "label": "37/33", "node": 2870, "naklon": 5 }, +{ "label": "37/34", "node": 2867, "naklon": 0 }, +{ "label": "37/35", "node": 2865, "naklon": 0 }, +{ "label": "37/36", "node": 3096, "naklon": 0 }, +{ "label": "37/37", "node": 2871, "naklon": 0 }, +{ "label": "37/38", "node": 2884, "naklon": 0 }, +{ "label": "37/39", "node": 2855, "naklon": 0 }, +{ "label": "37/40", "node": 2878, "naklon": 0 }, +{ "label": "37/41", "node": 2889, "naklon": 0 }, +{ "label": "37/42", "node": 2879, "naklon": 0 }, +{ "label": "37/43", "node": 2850, "naklon": 0 }, +{ "label": "37/44", "node": 2894, "naklon": 0 }, +{ "label": "37/45", "node": 2880, "naklon": 0 }, +{ "label": "37/46", "node": 2893, "naklon": 0 }, +{ "label": "37/47", "node": 2890, "naklon": 0 }, +{ "label": "37/48", "node": 4355, "naklon": 0 }, +{ "label": "37/49", "node": 2885, "naklon": 0 }, +{ "label": "37/50", "node": 2875, "naklon": 0 }, +{ "label": "38/30A", "node": 3486, "naklon": 5 }, +{ "label": "38/30B", "node": 3714, "naklon": 0 }, +{ "label": "38/32A", "node": 3483, "naklon": 5 }, +{ "label": "38/32B", "node": 3496, "naklon": 0 }, +{ "label": "38/35A", "node": 3487, "naklon": 5 }, +{ "label": "38/35B", "node": 3498, "naklon": 5 }, +{ "label": "38/38A", "node": 3578, "naklon": 5 }, +{ "label": "38/38B", "node": 3508, "naklon": 5 }, +{ "label": "38/59A", "node": 3787, "naklon": 5 }, +{ "label": "38/59B", "node": 3491, "naklon": 5 }, +{ "label": "38/1", "node": 3568, "naklon": null }, +{ "label": "38/2", "node": 3502, "naklon": 0 }, +{ "label": "38/3", "node": 3836, "naklon": 0 }, +{ "label": "38/4", "node": 3588, "naklon": 0 }, +{ "label": "38/5", "node": 3493, "naklon": 0 }, +{ "label": "38/6", "node": 3580, "naklon": 0 }, +{ "label": "38/7", "node": 3572, "naklon": 0 }, +{ "label": "38/8", "node": 3506, "naklon": 0 }, +{ "label": "38/9", "node": 3503, "naklon": 0 }, +{ "label": "38/10", "node": 3579, "naklon": 0 }, +{ "label": "38/11", "node": 3586, "naklon": 0 }, +{ "label": "38/12", "node": 3495, "naklon": 5 }, +{ "label": "38/13", "node": 3492, "naklon": 5 }, +{ "label": "38/14", "node": 3532, "naklon": 5 }, +{ "label": "38/15", "node": 3574, "naklon": 5 }, +{ "label": "38/16", "node": 4140, "naklon": 5 }, +{ "label": "38/17", "node": 3795, "naklon": 5 }, +{ "label": "38/18", "node": 3788, "naklon": 5 }, +{ "label": "38/19", "node": 3796, "naklon": 5 }, +{ "label": "38/20", "node": 3797, "naklon": 5 }, +{ "label": "38/21", "node": 3798, "naklon": 5 }, +{ "label": "38/22", "node": 3786, "naklon": 5 }, +{ "label": "38/23", "node": 4067, "naklon": 5 }, +{ "label": "38/24", "node": 3773, "naklon": 5 }, +{ "label": "38/25", "node": 3774, "naklon": 5 }, +{ "label": "38/26", "node": 3789, "naklon": 5 }, +{ "label": "38/27", "node": 3520, "naklon": null }, +{ "label": "38/29", "node": 3577, "naklon": 5 }, +{ "label": "38/31", "node": 3530, "naklon": null }, +{ "label": "38/33", "node": 3488, "naklon": 5 }, +{ "label": "38/34", "node": 3505, "naklon": 5 }, +{ "label": "38/36", "node": 3497, "naklon": 5 }, +{ "label": "38/37", "node": 3490, "naklon": 5 }, +{ "label": "38/39", "node": 3585, "naklon": 5 }, +{ "label": "38/40", "node": 3582, "naklon": 5 }, +{ "label": "38/41", "node": 3507, "naklon": 5 }, +{ "label": "38/42", "node": 3484, "naklon": 5 }, +{ "label": "38/43", "node": 3501, "naklon": 5 }, +{ "label": "38/44", "node": 3581, "naklon": 5 }, +{ "label": "38/45", "node": 4192, "naklon": 5 }, +{ "label": "38/46", "node": 3576, "naklon": 5 }, +{ "label": "38/47", "node": 3489, "naklon": 5 }, +{ "label": "38/48", "node": 3573, "naklon": 5 }, +{ "label": "38/49", "node": 3504, "naklon": 5 }, +{ "label": "38/50", "node": 3794, "naklon": 5 }, +{ "label": "38/51", "node": 3485, "naklon": 5 }, +{ "label": "38/52", "node": 3482, "naklon": 5 }, +{ "label": "38/53", "node": 3575, "naklon": 5 }, +{ "label": "38/54", "node": 3499, "naklon": 5 }, +{ "label": "38/55", "node": 3494, "naklon": 5 }, +{ "label": "38/56", "node": 3583, "naklon": 5 }, +{ "label": "38/57", "node": 3570, "naklon": 5 }, +{ "label": "38/58", "node": 3500, "naklon": 0 }, +{ "label": "38/63", "node": 3510, "naklon": null }, +{ "label": "38/64", "node": 3512, "naklon": null }, +{ "label": "38/67", "node": 3535, "naklon": null }, +{ "label": "38/68", "node": 3531, "naklon": null }, +{ "label": "38/69", "node": 3537, "naklon": null }, +{ "label": "39/1", "node": 3522, "naklon": 10 }, +{ "label": "39/2", "node": 4018, "naklon": 10 }, +{ "label": "39/3", "node": 4019, "naklon": 10 }, +{ "label": "39/4", "node": 4154, "naklon": 5 }, +{ "label": "39/5", "node": 3907, "naklon": 5 }, +{ "label": "39/6", "node": 4148, "naklon": 0 }, +{ "label": "39/7", "node": 4153, "naklon": 0 }, +{ "label": "39/8", "node": 3938, "naklon": 0 }, +{ "label": "39/9", "node": 3802, "naklon": 0 }, +{ "label": "39/10", "node": 4015, "naklon": 0 }, +{ "label": "39/11", "node": 3929, "naklon": 0 }, +{ "label": "39/12", "node": 3946, "naklon": 0 }, +{ "label": "39/13", "node": 4014, "naklon": 0 }, +{ "label": "39/14", "node": 4155, "naklon": 0 }, +{ "label": "39/15", "node": 4149, "naklon": 0 }, +{ "label": "39/16", "node": 3642, "naklon": 0 }, +{ "label": "39/17", "node": 3636, "naklon": 5 }, +{ "label": "39/18", "node": 3991, "naklon": 0 }, +{ "label": "39/19", "node": 3994, "naklon": 0 }, +{ "label": "39/20", "node": 3990, "naklon": 0 }, +{ "label": "39/21", "node": 3967, "naklon": 0 }, +{ "label": "39/22", "node": 3977, "naklon": 0 }, +{ "label": "39/23", "node": 3757, "naklon": 15 }, +{ "label": "39/24", "node": 3633, "naklon": 15 }, +{ "label": "39/25", "node": 3744, "naklon": 15 }, +{ "label": "39/26", "node": 4023, "naklon": 5 }, +{ "label": "39/27", "node": 3720, "naklon": 5 }, +{ "label": "39/28", "node": 3734, "naklon": 5 }, +{ "label": "39/29", "node": 3741, "naklon": 5 }, +{ "label": "39/30", "node": 3721, "naklon": 5 }, +{ "label": "39/31", "node": 3845, "naklon": 0 }, +{ "label": "39/32", "node": 3840, "naklon": 0 }, +{ "label": "39/33", "node": 3837, "naklon": null }, +{ "label": "39/34", "node": 3839, "naklon": 0 }, +{ "label": "41/1", "node": 3542, "naklon": null }, +{ "label": "41/2", "node": 3566, "naklon": null }, +{ "label": "41/3", "node": 3548, "naklon": null }, +{ "label": "41/4", "node": 3515, "naklon": null }, +{ "label": "41/5", "node": 3559, "naklon": null }, +{ "label": "41/6", "node": 3509, "naklon": null }, +{ "label": "41/7", "node": 3524, "naklon": null }, +{ "label": "41/8", "node": 3518, "naklon": null }, +{ "label": "41/9", "node": 3182, "naklon": null }, +{ "label": "41/10", "node": 3187, "naklon": null }, +{ "label": "41/11", "node": 3195, "naklon": 0 }, +{ "label": "41/12", "node": 3857, "naklon": 0 }, +{ "label": "41/13", "node": 3183, "naklon": 0 }, +{ "label": "41/14", "node": 3177, "naklon": 0 }, +{ "label": "41/15", "node": 3189, "naklon": 0 }, +{ "label": "41/16", "node": 3186, "naklon": 0 }, +{ "label": "42/1", "node": 3178, "naklon": 0 }, +{ "label": "42/2", "node": 3219, "naklon": 0 }, +{ "label": "42/3", "node": 3475, "naklon": 0 }, +{ "label": "42/4", "node": 3175, "naklon": 0 }, +{ "label": "42/5", "node": 3222, "naklon": 0 }, +{ "label": "42/6", "node": 3221, "naklon": 0 }, +{ "label": "42/7", "node": 3181, "naklon": 0 }, +{ "label": "42/8", "node": 3180, "naklon": 0 }, +{ "label": "42/9", "node": 3218, "naklon": 0 }, +{ "label": "42/10", "node": 3176, "naklon": 0 }, +{ "label": "42/11", "node": 3174, "naklon": 0 }, +{ "label": "42/12", "node": 3220, "naklon": 0 }, +{ "label": "42/13", "node": 3533, "naklon": null }, +{ "label": "42/14", "node": 3543, "naklon": null }, +{ "label": "42/15", "node": 3554, "naklon": null }, +{ "label": "42/16", "node": 3549, "naklon": null }, +{ "label": "43/1", "node": 2857, "naklon": 5 }, +{ "label": "43/2", "node": 2752, "naklon": 5 }, +{ "label": "43/3", "node": 2753, "naklon": 5 }, +{ "label": "43/4", "node": 3024, "naklon": 5 }, +{ "label": "43/5", "node": 2754, "naklon": 5 }, +{ "label": "43/6", "node": 4423, "naklon": 5 }, +{ "label": "43/7", "node": 4368, "naklon": 5 }, +{ "label": "43/8", "node": 2978, "naklon": 5 }, +{ "label": "43/9", "node": 2868, "naklon": 5 }, +{ "label": "43/10", "node": 4377, "naklon": 5 }, +{ "label": "43/11", "node": 2757, "naklon": 5 }, +{ "label": "43/12", "node": 2970, "naklon": 5 }, +{ "label": "43/13", "node": 2758, "naklon": 5 }, +{ "label": "43/14", "node": 4378, "naklon": 5 }, +{ "label": "43/15", "node": 2759, "naklon": 5 }, +{ "label": "43/16", "node": 4342, "naklon": 5 }, +{ "label": "43/17", "node": 3026, "naklon": null }, +{ "label": "43/18", "node": 2986, "naklon": null }, +{ "label": "43/19", "node": 4343, "naklon": null }, +{ "label": "43/20", "node": 2760, "naklon": null }, +{ "label": "43/21", "node": 4379, "naklon": null }, +{ "label": "43/22", "node": 2971, "naklon": null }, +{ "label": "43/23", "node": 2761, "naklon": null }, +{ "label": "43/24", "node": 2762, "naklon": null }, +{ "label": "43/25", "node": 4339, "naklon": null }, +{ "label": "43/26", "node": 4380, "naklon": null }, +{ "label": "43/27", "node": 2975, "naklon": null }, +{ "label": "43/28", "node": 3003, "naklon": null }, +{ "label": "43/29", "node": 4338, "naklon": null }, +{ "label": "43/30", "node": 3002, "naklon": null }, +{ "label": "43/31", "node": 4345, "naklon": null }, +{ "label": "43/32", "node": 2979, "naklon": null }, +{ "label": "43/33", "node": 2989, "naklon": null }, +{ "label": "43/34", "node": 2996, "naklon": null }, +{ "label": "43/35", "node": 2972, "naklon": null }, +{ "label": "43/36", "node": 2988, "naklon": null }, +{ "label": "43/37", "node": 4344, "naklon": null }, +{ "label": "43/38", "node": 3022, "naklon": null }, +{ "label": "43/39", "node": 4341, "naklon": null }, +{ "label": "43/40", "node": 2983, "naklon": null }, +{ "label": "43/41", "node": 2995, "naklon": null }, +{ "label": "43/42", "node": 2763, "naklon": null }, +{ "label": "43/43", "node": 2764, "naklon": null }, +{ "label": "43/44", "node": 2765, "naklon": null }, +{ "label": "43/45", "node": 2766, "naklon": null }, +{ "label": "43/46", "node": 2767, "naklon": null }, +{ "label": "43/47", "node": 2768, "naklon": null }, +{ "label": "43/48", "node": 3018, "naklon": null }, +{ "label": "43/49", "node": 2982, "naklon": null }, +{ "label": "43/50", "node": 3019, "naklon": 0 }, +{ "label": "43/51", "node": 3013, "naklon": null }, +{ "label": "43/52", "node": 3007, "naklon": null }, +{ "label": "43/53", "node": 2980, "naklon": null }, +{ "label": "43/54", "node": 3011, "naklon": null }, +{ "label": "43/55", "node": 2672, "naklon": null }, +{ "label": "43/56", "node": 2673, "naklon": null }, +{ "label": "43/57", "node": 2674, "naklon": null }, +{ "label": "43/58", "node": 2675, "naklon": null }, +{ "label": "43/59", "node": 2676, "naklon": null }, +{ "label": "43/60", "node": 2677, "naklon": null }, +{ "label": "43/61", "node": 2678, "naklon": null }, +{ "label": "43/62", "node": 2679, "naklon": null }, +{ "label": "43/63", "node": 2680, "naklon": null }, +{ "label": "43/64", "node": 2840, "naklon": null }, +{ "label": "43/65", "node": 2682, "naklon": null }, +{ "label": "43/66", "node": 2683, "naklon": null }, +{ "label": "43/67", "node": 2684, "naklon": 0 }, +{ "label": "43/68", "node": 2685, "naklon": null }, +{ "label": "43/69", "node": 2686, "naklon": null }, +{ "label": "43/70", "node": 2687, "naklon": null }, +{ "label": "43/71", "node": 2688, "naklon": null }, +{ "label": "43/72", "node": 2689, "naklon": null }, +{ "label": "43/73", "node": 2690, "naklon": null }, +{ "label": "43/74", "node": 2691, "naklon": null }, +{ "label": "43/75", "node": 2692, "naklon": null }, +{ "label": "43/76", "node": 2693, "naklon": 0 }, +{ "label": "43/77", "node": 2694, "naklon": null }, +{ "label": "43/78", "node": 2695, "naklon": null }, +{ "label": "43/79", "node": 2696, "naklon": 0 }, +{ "label": "43/80", "node": 2697, "naklon": null }, +{ "label": "43/81", "node": 2698, "naklon": 0 }, +{ "label": "43/82", "node": 2699, "naklon": null }, +{ "label": "43/83", "node": 2700, "naklon": 0 }, +{ "label": "43/84", "node": 2744, "naklon": null }, +{ "label": "43/85", "node": 2745, "naklon": 0 }, +{ "label": "43/86", "node": 2746, "naklon": null }, +{ "label": "43/87", "node": 2747, "naklon": 0 }, +{ "label": "43/88", "node": 2748, "naklon": null }, +{ "label": "43/89", "node": 2749, "naklon": 0 }, +{ "label": "43/90", "node": 2841, "naklon": null }, +{ "label": "45/1", "node": 4237, "naklon": 5 }, +{ "label": "45/2", "node": 4226, "naklon": 5 }, +{ "label": "45/3", "node": 4242, "naklon": 5 }, +{ "label": "45/4", "node": 4179, "naklon": 5 }, +{ "label": "45/5", "node": 4247, "naklon": 5 }, +{ "label": "45/6", "node": 4245, "naklon": 5 }, +{ "label": "45/7", "node": 3872, "naklon": 5 }, +{ "label": "45/8", "node": 4175, "naklon": 5 }, +{ "label": "45/9", "node": 4236, "naklon": 5 }, +{ "label": "45/10", "node": 4170, "naklon": 5 }, +{ "label": "45/11", "node": 4238, "naklon": 5 }, +{ "label": "45/12", "node": 4246, "naklon": 5 }, +{ "label": "45/13", "node": 4166, "naklon": 5 }, +{ "label": "45/14", "node": 4227, "naklon": 5 }, +{ "label": "45/15", "node": 4171, "naklon": 5 }, +{ "label": "45/16", "node": 4180, "naklon": 5 }, +{ "label": "45/17", "node": 4244, "naklon": 5 }, +{ "label": "45/18", "node": 4199, "naklon": 5 }, +{ "label": "45/19", "node": 4239, "naklon": 5 }, +{ "label": "45/20", "node": 4207, "naklon": 5 }, +{ "label": "45/21", "node": 4223, "naklon": 5 }, +{ "label": "45/22", "node": 4230, "naklon": 5 }, +{ "label": "45/23", "node": 4233, "naklon": 5 }, +{ "label": "45/24", "node": 4222, "naklon": 5 }, +{ "label": "45/25", "node": 4217, "naklon": 5 }, +{ "label": "45/26", "node": 4243, "naklon": 5 }, +{ "label": "45/27", "node": 4200, "naklon": 5 }, +{ "label": "45/28", "node": 4228, "naklon": 5 }, +{ "label": "45/29", "node": 4211, "naklon": 5 }, +{ "label": "45/30", "node": 4234, "naklon": 5 }, +{ "label": "45/31", "node": 4235, "naklon": 5 }, +{ "label": "45/32", "node": 4203, "naklon": 5 }, +{ "label": "45/33", "node": 4240, "naklon": 5 }, +{ "label": "45/34", "node": 4224, "naklon": 5 }, +{ "label": "45/35", "node": 4232, "naklon": 5 }, +{ "label": "45/36", "node": 4231, "naklon": 5 }, +{ "label": "45/37", "node": 4161, "naklon": 5 }, +{ "label": "45/38", "node": 4225, "naklon": 5 }, +{ "label": "45/39", "node": 4241, "naklon": 5 }, +{ "label": "45/40", "node": 4229, "naklon": 5 }, +{ "label": "45/41", "node": 4221, "naklon": 5 }, +{ "label": "45/42", "node": 4212, "naklon": 5 }, +{ "label": "45/43", "node": 4216, "naklon": 5 }, +{ "label": "45/44", "node": 3864, "naklon": null }, +{ "label": "46/1", "node": 3806, "naklon": 5 }, +{ "label": "46/2", "node": 3813, "naklon": 5 }, +{ "label": "46/3", "node": 3815, "naklon": 5 }, +{ "label": "46/4", "node": 3807, "naklon": 5 }, +{ "label": "46/5", "node": 3895, "naklon": 5 }, +{ "label": "46/6", "node": 3809, "naklon": 5 }, +{ "label": "46/7", "node": 3820, "naklon": 5 }, +{ "label": "46/8", "node": 3805, "naklon": 5 }, +{ "label": "46/9", "node": 3894, "naklon": 0 }, +{ "label": "46/10", "node": 4055, "naklon": 0 }, +{ "label": "46/11", "node": 3812, "naklon": 5 }, +{ "label": "46/12", "node": 3822, "naklon": 5 }, +{ "label": "46/13", "node": 3821, "naklon": 5 }, +{ "label": "46/14", "node": 3808, "naklon": 5 }, +{ "label": "46/15", "node": 3799, "naklon": 5 }, +{ "label": "46/16", "node": 3816, "naklon": 5 }, +{ "label": "46/17", "node": 3751, "naklon": 5 }, +{ "label": "46/18", "node": 3814, "naklon": 5 }, +{ "label": "46/19", "node": 4044, "naklon": 0 }, +{ "label": "46/20", "node": 3931, "naklon": 0 }, +{ "label": "46/21", "node": 3902, "naklon": 5 }, +{ "label": "46/22", "node": 3916, "naklon": 5 }, +{ "label": "46/23", "node": 3892, "naklon": 5 }, +{ "label": "46/24", "node": 3914, "naklon": 5 }, +{ "label": "46/25", "node": 3898, "naklon": 5 }, +{ "label": "46/26", "node": 3897, "naklon": 5 }, +{ "label": "46/27", "node": 3885, "naklon": 5 }, +{ "label": "46/28", "node": 3906, "naklon": 5 }, +{ "label": "46/29", "node": 3930, "naklon": 0 }, +{ "label": "46/30", "node": 3936, "naklon": 0 }, +{ "label": "46/31", "node": 3860, "naklon": 5 }, +{ "label": "46/32", "node": 3841, "naklon": 5 }, +{ "label": "46/33", "node": 3873, "naklon": 5 }, +{ "label": "46/34", "node": 3854, "naklon": 5 }, +{ "label": "46/35", "node": 3939, "naklon": 5 }, +{ "label": "46/36", "node": 3858, "naklon": 5 }, +{ "label": "46/37", "node": 3940, "naklon": 5 }, +{ "label": "46/38", "node": 4035, "naklon": 5 }, +{ "label": "47/1", "node": 3373, "naklon": 0 }, +{ "label": "47/2", "node": 3374, "naklon": 0 }, +{ "label": "47/3", "node": 3384, "naklon": 0 }, +{ "label": "47/4", "node": 3385, "naklon": 0 }, +{ "label": "48/1", "node": 4051, "naklon": 5 }, +{ "label": "48/2", "node": 4041, "naklon": 5 }, +{ "label": "48/3", "node": 4056, "naklon": 5 }, +{ "label": "48/4", "node": 3875, "naklon": 5 }, +{ "label": "48/5", "node": 4061, "naklon": 5 }, +{ "label": "48/6", "node": 4047, "naklon": 5 }, +{ "label": "48/7", "node": 4060, "naklon": 5 }, +{ "label": "48/8", "node": 4059, "naklon": 5 }, +{ "label": "48/9", "node": 4058, "naklon": 5 }, +{ "label": "48/10", "node": 3635, "naklon": 5 }, +{ "label": "48/11", "node": 3640, "naklon": 5 }, +{ "label": "48/12", "node": 3747, "naklon": 5 }, +{ "label": "48/13", "node": 3629, "naklon": 5 }, +{ "label": "48/14", "node": 4048, "naklon": 5 }, +{ "label": "48/15", "node": 4063, "naklon": 5 }, +{ "label": "48/16", "node": 4062, "naklon": 5 }, +{ "label": "48/17", "node": 4043, "naklon": 5 }, +{ "label": "48/18", "node": 4052, "naklon": 5 }, +{ "label": "48/19", "node": 4042, "naklon": 5 }, +{ "label": "48/20", "node": 4053, "naklon": 5 }, +{ "label": "50/15A", "node": 4167, "naklon": null }, +{ "label": "50/15B", "node": 4159, "naklon": null }, +{ "label": "50/1", "node": 4183, "naklon": 0 }, +{ "label": "50/2", "node": 4157, "naklon": 0 }, +{ "label": "50/3", "node": 4160, "naklon": 0 }, +{ "label": "50/4", "node": 4173, "naklon": 0 }, +{ "label": "50/5", "node": 4177, "naklon": 0 }, +{ "label": "50/6", "node": 4174, "naklon": 0 }, +{ "label": "50/7", "node": 4178, "naklon": 0 }, +{ "label": "50/8", "node": 4195, "naklon": 0 }, +{ "label": "50/9", "node": 4169, "naklon": 0 }, +{ "label": "50/10", "node": 4162, "naklon": 0 }, +{ "label": "50/11", "node": 4158, "naklon": 0 }, +{ "label": "50/12", "node": 4182, "naklon": 0 }, +{ "label": "50/13", "node": 4194, "naklon": 0 }, +{ "label": "50/14", "node": 4184, "naklon": 0 }, +{ "label": "50/16", "node": 4197, "naklon": null }, +{ "label": "50/17", "node": 4164, "naklon": null }, +{ "label": "50/18", "node": 3306, "naklon": null }, +{ "label": "50/19", "node": 4168, "naklon": null }, +{ "label": "50/20", "node": 4193, "naklon": null }, +{ "label": "50/21", "node": 4187, "naklon": null }, +{ "label": "50/22", "node": 4163, "naklon": null }, +{ "label": "50/23", "node": 4165, "naklon": null }, +{ "label": "50/24", "node": 4185, "naklon": null }, +{ "label": "50/25", "node": 3904, "naklon": null }, +{ "label": "53/1", "node": 2619, "naklon": 0 }, +{ "label": "53/2", "node": 2623, "naklon": 0 }, +{ "label": "53/3", "node": 2617, "naklon": 0 }, +{ "label": "53/4", "node": 2622, "naklon": 0 }, +{ "label": "53/5", "node": 2618, "naklon": 0 }, +{ "label": "53/6", "node": 2626, "naklon": 0 }, +{ "label": "53/7", "node": 2869, "naklon": 0 }, +{ "label": "53/8", "node": 2613, "naklon": 0 }, +{ "label": "53/9", "node": 2608, "naklon": 0 }, +{ "label": "53/10", "node": 2611, "naklon": 0 }, +{ "label": "53/11", "node": 2598, "naklon": 0 }, +{ "label": "53/12", "node": 3528, "naklon": 0 }, +{ "label": "53/13", "node": 3545, "naklon": 0 }, +{ "label": "53/14", "node": 2620, "naklon": 0 }, +{ "label": "53/15", "node": 2612, "naklon": 0 }, +{ "label": "53/16", "node": 2615, "naklon": 0 }, +{ "label": "53/17", "node": 3722, "naklon": 0 }, +{ "label": "53/18", "node": 2624, "naklon": 0 }, +{ "label": "53/19", "node": 2609, "naklon": 0 }, +{ "label": "53/20", "node": 2625, "naklon": 0 }, +{ "label": "53/21", "node": 2602, "naklon": 0 }, +{ "label": "53/22", "node": 2610, "naklon": 0 }, +{ "label": "53/23", "node": 2599, "naklon": 0 }, +{ "label": "53/24", "node": 2605, "naklon": 0 }, +{ "label": "53/25", "node": 2593, "naklon": 0 }, +{ "label": "53/26", "node": 3074, "naklon": 0 }, +{ "label": "53/27", "node": 2740, "naklon": 0 }, +{ "label": "53/28", "node": 2614, "naklon": 0 }, +{ "label": "53/29", "node": 2601, "naklon": 0 }, +{ "label": "53/30", "node": 4196, "naklon": 0 }, +{ "label": "53/31", "node": 2607, "naklon": 0 }, +{ "label": "53/32", "node": 2582, "naklon": 0 }, +{ "label": "53/33", "node": 2594, "naklon": 0 }, +{ "label": "53/34", "node": 2589, "naklon": 0 }, +{ "label": "53/35", "node": 2596, "naklon": 0 }, +{ "label": "53/36", "node": 2603, "naklon": 0 }, +{ "label": "53/37", "node": 2597, "naklon": 0 }, +{ "label": "53/38", "node": 2590, "naklon": 0 }, +{ "label": "53/39", "node": 2581, "naklon": 0 }, +{ "label": "53/40", "node": 2583, "naklon": 0 }, +{ "label": "53/41", "node": 2580, "naklon": 0 }, +{ "label": "53/42", "node": 2579, "naklon": 0 }, +{ "label": "53/43", "node": 2797, "naklon": 0 }, +{ "label": "53/44", "node": 2577, "naklon": 0 }, +{ "label": "53/45", "node": 2586, "naklon": 0 }, +{ "label": "53/46", "node": 2588, "naklon": 0 }, +{ "label": "53/47", "node": 2591, "naklon": 0 }, +{ "label": "53/48", "node": 2592, "naklon": 0 }, +{ "label": "53/49", "node": 2573, "naklon": 0 }, +{ "label": "53/50", "node": 2595, "naklon": 0 }, +{ "label": "53/51", "node": 2587, "naklon": 0 }, +{ "label": "53/52", "node": 2578, "naklon": 0 }, +{ "label": "53/53", "node": 2574, "naklon": 0 }, +{ "label": "53/54", "node": 2571, "naklon": 0 }, +{ "label": "53/55", "node": 2570, "naklon": 0 }, +{ "label": "53/56", "node": 2576, "naklon": 0 }, +{ "label": "53/57", "node": 2881, "naklon": 0 }, +{ "label": "53/58", "node": 2575, "naklon": 0 }, +{ "label": "53/59", "node": 2572, "naklon": 0 }, +{ "label": "53/60", "node": 2569, "naklon": 0 }, +{ "label": "55/1", "node": 4324, "naklon": 0 }, +{ "label": "55/2", "node": 4319, "naklon": 0 }, +{ "label": "55/3", "node": 4327, "naklon": 0 }, +{ "label": "55/4", "node": 4333, "naklon": 0 }, +{ "label": "55/5", "node": 4332, "naklon": 0 }, +{ "label": "55/6", "node": 4320, "naklon": 0 }, +{ "label": "55/7", "node": 4317, "naklon": 0 }, +{ "label": "55/8", "node": 4318, "naklon": 0 }, +{ "label": "55/9", "node": 4328, "naklon": 0 }, +{ "label": "55/10", "node": 4323, "naklon": 0 }, +{ "label": "55/11", "node": 4325, "naklon": 0 }, +{ "label": "55/12", "node": 4326, "naklon": 0 }, +{ "label": "55/13", "node": 4316, "naklon": 0 }, +{ "label": "55/14", "node": 4322, "naklon": 0 }, +{ "label": "55/15", "node": 4331, "naklon": 0 }, +{ "label": "55/16", "node": 4321, "naklon": 0 }, +{ "label": "55/17", "node": 4315, "naklon": 0 }, +{ "label": "55/18", "node": 4329, "naklon": 0 }, +{ "label": "55/19", "node": 4334, "naklon": 0 }, +{ "label": "55/20", "node": 4330, "naklon": 0 } +]; + +module.exports = { naklony }; diff --git a/RVO16/databases/modbus_config.js b/RVO16/databases/modbus_config.js new file mode 100755 index 0000000..b73116a --- /dev/null +++ b/RVO16/databases/modbus_config.js @@ -0,0 +1,114 @@ +const timeoutInterval = 150000; + +const deviceConfig = [ + { + device: "em340", + deviceAddress: 1, + stream: [ + { + "tbAttribute": "Phase_1_voltage", + "register": 0, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "Phase_2_voltage", + "register": 2, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "Phase_3_voltage", + "register": 4, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "Phase_1_current", + "register": 12, + "size": 2, + "multiplier": 0.001 + }, + { + "tbAttribute": "Phase_2_current", + "register": 14, + "size": 2, + "multiplier": 0.001 + }, + { + "tbAttribute": "Phase_3_current", + "register": 16, + "size": 2, + "multiplier": 0.001 + }, + { + "tbAttribute": "Phase_1_power", + "register": 18, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "Phase_2_power", + "register": 20, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "Phase_3_power", + "register": 22, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "total_power", + "register": 40, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "total_energy", + "register": 52, + "size": 2, + "multiplier": 0.1 + }, + { + "tbAttribute": "Phase_1_pow_factor", + "register": 46, + "size": 1, + "multiplier": 0.001 + }, + { + "tbAttribute": "Phase_2_pow_factor", + "register": 47, + "size": 1, + "multiplier": 0.001 + }, + { + "tbAttribute": "Phase_3_pow_factor", + "register": 48, + "size": 1, + "multiplier": 0.001 + }, + { + "tbAttribute": "power_factor", + "register": 49, + "size": 1, + "multiplier": 0.001 + } + ] + }, + { + device: "twilight_sensor", + deviceAddress: 2, + stream: [ + { + "tbAttribute": "twilight_sensor", + "register": 60, + "size": 2, + "multiplier": 1 + } + ] + } +]; + +module.exports = { timeoutInterval, deviceConfig }; \ No newline at end of file diff --git a/RVO16/databases/nodes.table b/RVO16/databases/nodes.table new file mode 100755 index 0000000..3df00ab --- /dev/null +++ b/RVO16/databases/nodes.table @@ -0,0 +1,128 @@ +node:number|pole_number:string|node_type:string|tbname:string|line:number|profile:string|processed:boolean|status:boolean|time_of_last_communication:number ++|3831|17|NEMA|JzwxZXOvDj1bVrN4nkWwJKk8qdyBl3MRKLpGPgaQ|1||1|1|1760574248582|............. ++|3739|6|NEMA|5dBNwRp9graYJxZn409wGV7lVov1b2QLPDqGm6XK|1||1|1|1760573832281|............. ++|3801|44|NEMA|roKgWqY95V3mXMRzyAjmrz7bLjexpJPvaGDBw826|1||1|1|1760574246856|............. ++|3659|60|NEMA|ZmRwd93QL4gaezxEbAxW2O71prn2XjlPvGyqJ6BO|1||1|1|1760573713804|............. ++|3659|78|NEMA|ZmRwd93QL4gaezxEbAxW2O71prn2XjlPvGyqJ6BO|1||1|1|1760573713804|............. ++|3861|47|NEMA|gYbDLqlyZVoRerQpB72rGp7WJnwM5z24POKa8Exj|1||1|1|1760573552771|............. ++|3870|76|NEMA|B5EoxeMVp4zwr8nqW0GjBxARjvD1PNamOGbLg63Z|1||1|0|1760244554423|............. ++|4107|98|NEMA|rDbQ84xzwgdqEoPm3kbJErk9anOZY1RXyBv2LVM6|1||1|1|1760573931758|............. ++|4766|51|NEMA|zrR51V2ajQ9ZLygPKkEmPpkYDq38xOJolENBXGnv|1||1|1|1760573654852|............. ++|3593|54|NEMA|apKVJBwOyrP35m2lv7KzEKkYXbeWNd64En9GxRqg|1||1|1|1760574049100|............. ++|3755|82|NEMA|wvKJdZML6mXP4DzWBAXWx17jxNloa5g23Ve9Y1ry|1||1|1|1760573915778|............. ++|3697|96|NEMA|PLBJzmK1r3Gynd6OW0gGKo0e5wV4vx9bDEqNgYR8|1||1|1|1760573736032|............. ++|3712|5|NEMA|WlVJBygjDZMeKX3vnAMzGQ08NqdmG2x1Y69LQ4P5|1||1|1|1760573762576|............. ++|3724|4|NEMA|zdQO8GwxDqjRgP4137Y1xq7NyKlpem2nL65rvVJY|1||1|1|1760573913125|............. ++|4370|29|NEMA|gRoJEyXVx4qD9er287LPwm7wBzGldaPjLWQKm3Mv|1||1|1|1760573974777|............. ++|4372|70|NEMA|PjLblDgRBO6WQqnxmkJ5150Jv3ewZN4p5a89yKdY|1||1|1|1760573638552|............. ++|4373|33|NEMA|aw4eELG2DlPMdn1JW0B1zbAqQXOZRN3xB5yp8VKr|1||1|1|1760573638696|............. ++|3594|53|NEMA|DbQY6zyveZRwK5drV0Z9lLAjoE4XJM83N9xl2nWq|1||1|1|1760574093302|............. ++|3603|50|NEMA|5dBNwRp9graYJxZn409wRV7lVov1b2QLPDqGm6XK|1||1|1|1760574097105|............. ++|3605|49|NEMA|WlVJBygjDZMeKX3vnAMzWQ08NqdmG2x1Y69LQ4P5|1||1|1|1760573706900|............. ++|3963|25|NEMA|1JMYvnx2RzKEo4aWQ7Dm9GAL8yZV3m9NBePXbrdj|1||1|1|1760573588007|............. ++|3608|16A|NEMA|m6EYyZoJ4gWexdjVPARNzEARDOq9wv2N5XzKGplr|1||1|1|1760574106821|............. ++|3609|24|NEMA|Z5KyJe9nEg1QNbWlX0wWmm0oDjBLdqzR83VGv624|1||1|1|1760573708275|............. ++|3610|18|NEMA|g9OxBZ5KRwNznlY6pAp64dkWXvjdEL4eGQobMDy2|1||1|1|1760574107380|............. ++|3614|31|NEMA|d9x2V5LGYBzXp4mMRAOBPq7PloaqJwnQj6DgrNe3|1||1|1|1760574129401|............. ++|4768|23|NEMA|3JjOWdylwgNLzxVab7NEPBkZ2vG64rq8PEB5QmDo|1||1|1|1760573661963|............. ++|3618|20|NEMA|JX1ObgmqGZ54DMyYL7a95d7EVdve38WKRzwjNrQ9|1||1|1|1760574136560|............. ++|2736|21|NEMA|RvmwNz8QPblKp41GD7lDmV7JrLVYoBO92dMegn6W|1||1|1|1760574193434|............. ++|3620|34|NEMA|ZmRwd93QL4gaezxEbAxW1O71prn2XjlPvGyqJ6BO|1||1|1|1760574136720|............. ++|3623|32|NEMA|B5EoxeMVp4zwr8nqW0GjexARjvD1PNamOGbLg63Z|1||1|1|1760574113964|............. ++|3624|26|NEMA|PjLblDgRBO6WQqnxmkJ5w50Jv3ewZN4p5a89yKdY|1||1|1|1760574116313|............. ++|3626|19|NEMA|OzNMgZ9n43qPbjXmy7zWGdA2DKdYvW5e6pxGRrVa|1||1|1|1760574116489|............. ++|3627|27|NEMA|dz4ojlpP85JMgDLZWkQO1zAaKYqQexEr62GXRV1y|1||1|1|1760574119286|............. ++|3732|22|NEMA|RO8rjaBDy21qPQJzW7oDK9ApK3xmNleVZg9Ed4Gw|1||1|1|1760573632480|............. ++|3631|118|NEMA|g9OxBZ5KRwNznlY6pAp66EkWXvjdEL4eGQobMDy2|1||1|1|1760574120900|............. ++|3637|122|NEMA|RO8rjaBDy21qPQJzW7oDDOApK3xmNleVZg9Ed4Gw|1||1|1|1760574121251|............. ++|3638|121|NEMA|RvmwNz8QPblKp41GD7lDDZ7JrLVYoBO92dMegn6W|1||1|1|1760573706692|............. ++|4117|120|NEMA|JX1ObgmqGZ54DMyYL7a99m7EVdve38WKRzwjNrQ9|1||1|1|1760573759587|............. ++|3685|35|NEMA|eod9aRWLVl34Gx1Dn7VoYMA2rz6qjgmpEXwQJN5Z|1||1|1|1760574134003|............. ++|3686|37|NEMA|EjgWGnXaLy9opPOz20n6gV086BlYM3w1deVQvbKr|1||1|1|1760573851554|............. ++|3688|38|NEMA|wvKJdZML6mXP4DzWBAXWO17jxNloa5g23Ve9Y1ry|1||1|1|1760574134323|............. ++|3692|30|NEMA|K94XLav1glVRnyQ6r01BVakme3YJwBxM5oOzdP2j|1||1|1|1760574134483|............. ++|3694|79|NEMA|eod9aRWLVl34Gx1Dn7VoNMA2rz6qjgmpEXwQJN5Z|1||1|1|1760573856587|............. ++|3696|85|NEMA|52dD6ZlV1QaOpRBmbAqKGQkKnGzWMLj4eJq38Pgo|1||1|1|1760573856763|............. ++|3698|59|NEMA|6lQGaY9RDywdVzObj0P1ZykPg4NBn3exEK51LWZq|1||1|1|1760573863475|............. ++|3699|58|NEMA|pE5X8NQPaow6vlOZxk6gYy7q42ezGBMyWgDVjR3L|1||1|1|1760574138941|............. ++|3700|63|NEMA|OzNMgZ9n43qPbjXmy7zWOdA2DKdYvW5e6pxGRrVa|1||1|1|1760573866735|............. ++|3701|64|NEMA|JX1ObgmqGZ54DMyYL7a9Jd7EVdve38WKRzwjNrQ9|1||1|1|1760573868940|............. ++|2647|86|NEMA|rDbQ84xzwgdqEoPm3kbJEdk9anOZY1RXyBv2LVM6|1||1|1|1760574072000|............. ++|3703|62|NEMA|g9OxBZ5KRwNznlY6pAp6bdkWXvjdEL4eGQobMDy2|1||1|1|1760573872455|............. ++|2613|65|NEMA|RvmwNz8QPblKp41GD7lD4V7JrLVYoBO92dMegn6W|1||1|1|1760574079990|............. ++|3706|87|NEMA|E6Kg9oDnLWyzPRMva7vr5x7Jxp4VG58qO2w1lZYe|1||1|1|1760573880525|............. ++|3707|66|NEMA|RO8rjaBDy21qPQJzW7oDm9ApK3xmNleVZg9Ed4Gw|1||1|1|1760573880717|............. ++|3708|61|NEMA|JzwxZXOvDj1bVrN4nkWweKk8qdyBl3MRKLpGPgaQ|1||1|1|1760573759987|............. ++|3709|60|NEMA|m6EYyZoJ4gWexdjVPARNaEARDOq9wv2N5XzKGplr|1||1|1|1760574157351|............. ++|3713|12|NEMA|gP1eOZVj3Q9lv5aDEk4E1Q7rdpqW8yLm2BbKzJxM|1||1|1|1760573902514|............. ++|3716|84|NEMA|PLBJzmK1r3Gynd6OW0gGKP0e5wV4vx9bDEqNgYR8|1||1|1|1760573907500|............. ++|3719|95|NEMA|Nzp2OoJlqn6r1ZgvdA3GBjAabBwP5G4eE3RQmyxD|1||1|1|1760573908347|............. ++|3723|92|NEMA|3a5oqJN1bgnx4Ol9dk869wAByE6jQ8mKDWMpGrLV|1||1|1|1760573912550|............. ++|3725|83|NEMA|Nzp2OoJlqn6r1ZgvdA3GBKAabBwP5G4eE3RQmyxD|1||1|1|1760574201249|............. ++|3727|9|NEMA|DbQY6zyveZRwK5drV0Z9ZLAjoE4XJM83N9xl2nWq|1||1|1|1760574222870|............. ++|3729|10|NEMA|apKVJBwOyrP35m2lv7KzWKkYXbeWNd64En9GxRqg|1||1|1|1760572741778|............. ++|3731|8|NEMA|BaY3Xpy1EbKGjLq2O7mGKo0rx8owgQz9P4dDJRmN|1||1|1|1760574222118|............. ++|3880|15|NEMA|6lQGaY9RDywdVzObj0P1oykPg4NBn3exEK51LWZq|1||1|1|1760573584220|............. ++|3219|14|NEMA|pE5X8NQPaow6vlOZxk6gMy7q42ezGBMyWgDVjR3L|1||1|1|1760574097712|............. ++|3735|94|NEMA|wvKJdZML6mXP4DzWBAXWxB7jxNloa5g23Ve9Y1ry|1||1|1|1760573638137|............. ++|3736|11|NEMA|o9vbeQlLMVg8j5dq4kegbRANxZpEmnXzwYKO1ar2|1||1|1|1760574229166|............. ++|3737|90|NEMA|ZmRwd93QL4gaezxEbAxW2X71prn2XjlPvGyqJ6BO|1||1|1|1760573882603|............. ++|3743|3|NEMA|gYbDLqlyZVoRerQpB72r8p7WJnwM5z24POKa8Exj|1||1|1|1760573901987|............. ++|3746|57|NEMA|2O14VBzl8aDmWdNw3A513bAGyZ5qLJoEMpj6R9ng|1||1|1|1760573907692|............. ++|3763|56|NEMA|gP1eOZVj3Q9lv5aDEk4EMQ7rdpqW8yLm2BbKzJxM|1||1|1|1760574243772|............. ++|3490|67|NEMA|3JjOWdylwgNLzxVab7NEaBkZ2vG64rq8PEB5QmDo|1||1|1|1760574044114|............. ++|3824|42|NEMA|rDbQ84xzwgdqEoPm3kbJPdk9anOZY1RXyBv2LVM6|1||1|1|1760574248038|............. ++|3825|40|NEMA|PLBJzmK1r3Gynd6OW0gG2P0e5wV4vx9bDEqNgYR8|1||1|1|1760574248230|............. ++|3830|75|NEMA|d9x2V5LGYBzXp4mMRAOBmq7PloaqJwnQj6DgrNe3|1||1|1|1760573952276|............. ++|3842|93|NEMA|EjgWGnXaLy9opPOz20n64m086BlYM3w1deVQvbKr|1||1|1|1760573953044|............. ++|3848|89|NEMA|nJL5lPMwBx23YpqRe0rlpv7damXvWVbOrD4gNzy8|1||1|1|1760573953251|............. ++|3850|88|NEMA|roKgWqY95V3mXMRzyAjmKz7bLjexpJPvaGDBw826|1||1|1|1760573953683|............. ++|3964|77|NEMA|aw4eELG2DlPMdn1JW0B1MbAqQXOZRN3xB5yp8VKr|1||1|1|1760573998763|............. ++|3862|45|NEMA|nJL5lPMwBx23YpqRe0rlqv7damXvWVbOrD4gNzy8|1||1|1|1760573553074|............. ++|3867|69|NEMA|1JMYvnx2RzKEo4aWQ7DmGGAL8yZV3m9NBePXbrdj|1||1|1|1760573559978|............. ++|3869|73|NEMA|gRoJEyXVx4qD9er287LP4m7wBzGldaPjLWQKm3Mv|1||1|1|1760573561560|............. ++|3871|43|NEMA|E6Kg9oDnLWyzPRMva7vrWx7Jxp4VG58qO2w1lZYe|1||1|1|1760573578435|............. ++|3876|46|NEMA|XMBbew5z4ELrZa2mRAd5ZW08vPN6gy3DdVYlpKjq|1||1|1|1760573578962|............. ++|3722|105|NEMA|WlVJBygjDZMeKX3vnAMzRj08NqdmG2x1Y69LQ4P5|1||1|1|1760573912374|............. ++|4090|110|NEMA|apKVJBwOyrP35m2lv7Kzz5kYXbeWNd64En9GxRqg|1||1|1|1760573588902|............. ++|4091|102|NEMA|XMBbew5z4ELrZa2mRAd53V08vPN6gy3DdVYlpKjq|1||1|1|1760574011691|............. ++|4092|117|NEMA|JzwxZXOvDj1bVrN4nkWwwNk8qdyBl3MRKLpGPgaQ|1||1|1|1760573592641|............. ++|4095|106|NEMA|5dBNwRp9graYJxZn409wNQ7lVov1b2QLPDqGm6XK|1||1|1|1760573597787|............. ++|4097|112|NEMA|gP1eOZVj3Q9lv5aDEk4EEM7rdpqW8yLm2BbKzJxM|1||1|1|1760574017667|............. ++|4099|113|NEMA|2O14VBzl8aDmWdNw3A5119AGyZ5qLJoEMpj6R9ng|1||1|1|1760573929265|............. ++|4102|107|NEMA|zrR51V2ajQ9ZLygPKkEmMxkYDq38xOJolENBXGnv|1||1|1|1760573609037|............. ++|4104|103|NEMA|gYbDLqlyZVoRerQpB72rML7WJnwM5z24POKa8Exj|1||1|1|1760573609261|............. ++|3115|108|NEMA|BaY3Xpy1EbKGjLq2O7mGa60rx8owgQz9P4dDJRmN|1||1|1|1760574074381|............. ++|4106|100|NEMA|roKgWqY95V3mXMRzyAjmKj7bLjexpJPvaGDBw826|1||1|1|1760573930336|............. ++|4110|111|NEMA|o9vbeQlLMVg8j5dq4keggbANxZpEmnXzwYKO1ar2|1||1|1|1760573755129|............. ++|4767|101|NEMA|nJL5lPMwBx23YpqRe0rlpw7damXvWVbOrD4gNzy8|1||1|1|1760573661772|............. ++|3702|99|NEMA|E6Kg9oDnLWyzPRMva7vr5j7Jxp4VG58qO2w1lZYe|1||1|1|1760573738525|............. ++|4139|125|NEMA|1JMYvnx2RzKEo4aWQ7DmmZAL8yZV3m9NBePXbrdj|1||1|1|1760573661372|............. ++|4142|123|NEMA|3JjOWdylwgNLzxVab7NEEKkZ2vG64rq8PEB5QmDo|1||1|1|1760573958972|............. ++|4147|124|NEMA|Z5KyJe9nEg1QNbWlX0wWWD0oDjBLdqzR83VGv624|1||1|1|1760573959532|............. ++|4151|16B|NEMA|PjLblDgRBO6WQqnxmkJ5560Jv3ewZN4p5a89yKdY|1||1|1|1760574072383|............. ++|4202|74|NEMA|K94XLav1glVRnyQ6r01BPakme3YJwBxM5oOzdP2j|1||1|1|1760574151726|............. ++|4204|72|NEMA|d5xjWYMwEJon6rLlK7yBEKAqgV4DaOeNB9ZX3Gzb|1||1|1|1760574157590|............. ++|4208|68|NEMA|Z5KyJe9nEg1QNbWlX0wW4m0oDjBLdqzR83VGv624|1||1|1|1760574157798|............. ++|4215|48|NEMA|zdQO8GwxDqjRgP4137Y15q7NyKlpem2nL65rvVJY|1||1|1|1760573631122|............. ++|3710|1|NEMA|nJL5lPMwBx23YpqRe0rlKv7damXvWVbOrD4gNzy8|1||1|1|1760573884153|............. ++|3711|97|NEMA|52dD6ZlV1QaOpRBmbAqKGMkKnGzWMLj4eJq38Pgo|1||1|1|1760573761425|............. ++|3726|2|NEMA|XMBbew5z4ELrZa2mRAd5dW08vPN6gy3DdVYlpKjq|1||1|1|1760573806537|............. ++|4094|104|NEMA|zdQO8GwxDqjRgP4137Y1V67NyKlpem2nL65rvVJY|1||1|1|1760573592913|............. ++|4765|81|NEMA|EjgWGnXaLy9opPOz20n64V086BlYM3w1deVQvbKr|1||1|1|1760573653766|............. ++|3607|28|NEMA|d5xjWYMwEJon6rLlK7yBlKAqgV4DaOeNB9ZX3Gzb|1||1|1|1760574104424|............. ++|4758|109|NEMA|DbQY6zyveZRwK5drV0Z98bAjoE4XJM83N9xl2nWq|1||1|1|1760573642819|............. ++|2715|52|NEMA|BaY3Xpy1EbKGjLq2O7mG9o0rx8owgQz9P4dDJRmN|1||1|1|1760574035453|............. ++|3881|71|NEMA|dz4ojlpP85JMgDLZWkQOJzAaKYqQexEr62GXRV1y|1||1|1|1760573584379|............. ++|3715|13|NEMA|2O14VBzl8aDmWdNw3A516bAGyZ5qLJoEMpj6R9ng|1||1|1|1760573902786|............. ++|3616|36|NEMA|3a5oqJN1bgnx4Ol9dk86BZAByE6jQ8mKDWMpGrLV|1||1|1|1760574129561|............. ++|3742|7|NEMA|zrR51V2ajQ9ZLygPKkEm1pkYDq38xOJolENBXGnv|1||1|1|1760573834071|............. ++|3717|80|NEMA|3a5oqJN1bgnx4Ol9dk869ZAByE6jQ8mKDWMpGrLV|1||1|1|1760573907867|............. ++|3705|91|NEMA|eod9aRWLVl34Gx1Dn7VoNbA2rz6qjgmpEXwQJN5Z|1||1|1|1760573742313|............. ++|3630|55|NEMA|o9vbeQlLMVg8j5dq4kegdRANxZpEmnXzwYKO1ar2|1||1|1|1760574119477|............. ++|3865|41|NEMA|52dD6ZlV1QaOpRBmbAqKvQkKnGzWMLj4eJq38Pgo|1||1|1|1760573559802|............. ++|3632|119|NEMA|OzNMgZ9n43qPbjXmy7zWWaA2DKdYvW5e6pxGRrVa|1||1|1|1760574121075|............. ++|3684|39|NEMA|Nzp2OoJlqn6r1ZgvdA3GRKAabBwP5G4eE3RQmyxD|1||1|1|1760574128250|............. ++|4096|114|NEMA|pE5X8NQPaow6vlOZxk6ggg7q42ezGBMyWgDVjR3L|1|{"intervals":[{"cct":3000,"value":0,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":10,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|1|1|1760573922713|............. ++|4764|116|NEMA|m6EYyZoJ4gWexdjVPARNNwARDOq9wv2N5XzKGplr|1|{"intervals":[{"cct":3000,"value":0,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":10,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|1|1|1760573653574|............. ++|4101|115|NEMA|6lQGaY9RDywdVzObj0P11OkPg4NBn3exEK51LWZq|1|{"intervals":[{"cct":3000,"value":0,"end_time":"16:20","start_time":"13:00"},{"cct":3000,"value":10,"end_time":"06:50","start_time":"16:20"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"06:50"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|1|1|1760573929473|............. diff --git a/RVO16/databases/nodes_original/nodes_original.table b/RVO16/databases/nodes_original/nodes_original.table new file mode 100755 index 0000000..33435e9 --- /dev/null +++ b/RVO16/databases/nodes_original/nodes_original.table @@ -0,0 +1 @@ +[{"3831": "JzwxZXOvDj1bVrN4nkWwJKk8qdyBl3MRKLpGPgaQ"}, {"3739": "5dBNwRp9graYJxZn409wGV7lVov1b2QLPDqGm6XK"}, {"3801": "roKgWqY95V3mXMRzyAjmrz7bLjexpJPvaGDBw826"}, {"3659": "ZmRwd93QL4gaezxEbAxW2O71prn2XjlPvGyqJ6BO"}, {"3861": "gYbDLqlyZVoRerQpB72rGp7WJnwM5z24POKa8Exj"}, {"3870": "B5EoxeMVp4zwr8nqW0GjBxARjvD1PNamOGbLg63Z"}, {"4107": "rDbQ84xzwgdqEoPm3kbJErk9anOZY1RXyBv2LVM6"}, {"4766": "zrR51V2ajQ9ZLygPKkEmPpkYDq38xOJolENBXGnv"}, {"3593": "apKVJBwOyrP35m2lv7KzEKkYXbeWNd64En9GxRqg"}, {"3755": "wvKJdZML6mXP4DzWBAXWx17jxNloa5g23Ve9Y1ry"}, {"3697": "PLBJzmK1r3Gynd6OW0gGKo0e5wV4vx9bDEqNgYR8"}, {"3712": "WlVJBygjDZMeKX3vnAMzGQ08NqdmG2x1Y69LQ4P5"}, {"3724": "zdQO8GwxDqjRgP4137Y1xq7NyKlpem2nL65rvVJY"}, {"4370": "gRoJEyXVx4qD9er287LPwm7wBzGldaPjLWQKm3Mv"}, {"4372": "PjLblDgRBO6WQqnxmkJ5150Jv3ewZN4p5a89yKdY"}, {"4373": "aw4eELG2DlPMdn1JW0B1zbAqQXOZRN3xB5yp8VKr"}, {"3594": "DbQY6zyveZRwK5drV0Z9lLAjoE4XJM83N9xl2nWq"}, {"3603": "5dBNwRp9graYJxZn409wRV7lVov1b2QLPDqGm6XK"}, {"3605": "WlVJBygjDZMeKX3vnAMzWQ08NqdmG2x1Y69LQ4P5"}, {"3963": "1JMYvnx2RzKEo4aWQ7Dm9GAL8yZV3m9NBePXbrdj"}, {"3608": "m6EYyZoJ4gWexdjVPARNzEARDOq9wv2N5XzKGplr"}, {"3609": "Z5KyJe9nEg1QNbWlX0wWmm0oDjBLdqzR83VGv624"}, {"3610": "g9OxBZ5KRwNznlY6pAp64dkWXvjdEL4eGQobMDy2"}, {"3614": "d9x2V5LGYBzXp4mMRAOBPq7PloaqJwnQj6DgrNe3"}, {"4768": "3JjOWdylwgNLzxVab7NEPBkZ2vG64rq8PEB5QmDo"}, {"3618": "JX1ObgmqGZ54DMyYL7a95d7EVdve38WKRzwjNrQ9"}, {"2736": "RvmwNz8QPblKp41GD7lDmV7JrLVYoBO92dMegn6W"}, {"3620": "ZmRwd93QL4gaezxEbAxW1O71prn2XjlPvGyqJ6BO"}, {"3623": "B5EoxeMVp4zwr8nqW0GjexARjvD1PNamOGbLg63Z"}, {"3624": "PjLblDgRBO6WQqnxmkJ5w50Jv3ewZN4p5a89yKdY"}, {"3626": "OzNMgZ9n43qPbjXmy7zWGdA2DKdYvW5e6pxGRrVa"}, {"3627": "dz4ojlpP85JMgDLZWkQO1zAaKYqQexEr62GXRV1y"}, {"3732": "RO8rjaBDy21qPQJzW7oDK9ApK3xmNleVZg9Ed4Gw"}, {"3631": "g9OxBZ5KRwNznlY6pAp66EkWXvjdEL4eGQobMDy2"}, {"3637": "RO8rjaBDy21qPQJzW7oDDOApK3xmNleVZg9Ed4Gw"}, {"3638": "RvmwNz8QPblKp41GD7lDDZ7JrLVYoBO92dMegn6W"}, {"4117": "JX1ObgmqGZ54DMyYL7a99m7EVdve38WKRzwjNrQ9"}, {"3685": "eod9aRWLVl34Gx1Dn7VoYMA2rz6qjgmpEXwQJN5Z"}, {"3686": "EjgWGnXaLy9opPOz20n6gV086BlYM3w1deVQvbKr"}, {"3688": "wvKJdZML6mXP4DzWBAXWO17jxNloa5g23Ve9Y1ry"}, {"3692": "K94XLav1glVRnyQ6r01BVakme3YJwBxM5oOzdP2j"}, {"3694": "eod9aRWLVl34Gx1Dn7VoNMA2rz6qjgmpEXwQJN5Z"}, {"3696": "52dD6ZlV1QaOpRBmbAqKGQkKnGzWMLj4eJq38Pgo"}, {"3698": "6lQGaY9RDywdVzObj0P1ZykPg4NBn3exEK51LWZq"}, {"3699": "pE5X8NQPaow6vlOZxk6gYy7q42ezGBMyWgDVjR3L"}, {"3700": "OzNMgZ9n43qPbjXmy7zWOdA2DKdYvW5e6pxGRrVa"}, {"3701": "JX1ObgmqGZ54DMyYL7a9Jd7EVdve38WKRzwjNrQ9"}, {"2647": "rDbQ84xzwgdqEoPm3kbJEdk9anOZY1RXyBv2LVM6"}, {"3703": "g9OxBZ5KRwNznlY6pAp6bdkWXvjdEL4eGQobMDy2"}, {"2613": "RvmwNz8QPblKp41GD7lD4V7JrLVYoBO92dMegn6W"}, {"3706": "E6Kg9oDnLWyzPRMva7vr5x7Jxp4VG58qO2w1lZYe"}, {"3707": "RO8rjaBDy21qPQJzW7oDm9ApK3xmNleVZg9Ed4Gw"}, {"3708": "JzwxZXOvDj1bVrN4nkWweKk8qdyBl3MRKLpGPgaQ"}, {"3709": "m6EYyZoJ4gWexdjVPARNaEARDOq9wv2N5XzKGplr"}, {"3713": "gP1eOZVj3Q9lv5aDEk4E1Q7rdpqW8yLm2BbKzJxM"}, {"3716": "PLBJzmK1r3Gynd6OW0gGKP0e5wV4vx9bDEqNgYR8"}, {"3719": "Nzp2OoJlqn6r1ZgvdA3GBjAabBwP5G4eE3RQmyxD"}, {"3723": "3a5oqJN1bgnx4Ol9dk869wAByE6jQ8mKDWMpGrLV"}, {"3725": "Nzp2OoJlqn6r1ZgvdA3GBKAabBwP5G4eE3RQmyxD"}, {"3727": "DbQY6zyveZRwK5drV0Z9ZLAjoE4XJM83N9xl2nWq"}, {"3729": "apKVJBwOyrP35m2lv7KzWKkYXbeWNd64En9GxRqg"}, {"3731": "BaY3Xpy1EbKGjLq2O7mGKo0rx8owgQz9P4dDJRmN"}, {"3880": "6lQGaY9RDywdVzObj0P1oykPg4NBn3exEK51LWZq"}, {"3219": "pE5X8NQPaow6vlOZxk6gMy7q42ezGBMyWgDVjR3L"}, {"3735": "wvKJdZML6mXP4DzWBAXWxB7jxNloa5g23Ve9Y1ry"}, {"3736": "o9vbeQlLMVg8j5dq4kegbRANxZpEmnXzwYKO1ar2"}, {"3737": "ZmRwd93QL4gaezxEbAxW2X71prn2XjlPvGyqJ6BO"}, {"3743": "gYbDLqlyZVoRerQpB72r8p7WJnwM5z24POKa8Exj"}, {"3746": "2O14VBzl8aDmWdNw3A513bAGyZ5qLJoEMpj6R9ng"}, {"3763": "gP1eOZVj3Q9lv5aDEk4EMQ7rdpqW8yLm2BbKzJxM"}, {"3490": "3JjOWdylwgNLzxVab7NEaBkZ2vG64rq8PEB5QmDo"}, {"3824": "rDbQ84xzwgdqEoPm3kbJPdk9anOZY1RXyBv2LVM6"}, {"3825": "PLBJzmK1r3Gynd6OW0gG2P0e5wV4vx9bDEqNgYR8"}, {"3830": "d9x2V5LGYBzXp4mMRAOBmq7PloaqJwnQj6DgrNe3"}, {"3842": "EjgWGnXaLy9opPOz20n64m086BlYM3w1deVQvbKr"}, {"3848": "nJL5lPMwBx23YpqRe0rlpv7damXvWVbOrD4gNzy8"}, {"3850": "roKgWqY95V3mXMRzyAjmKz7bLjexpJPvaGDBw826"}, {"3964": "aw4eELG2DlPMdn1JW0B1MbAqQXOZRN3xB5yp8VKr"}, {"3862": "nJL5lPMwBx23YpqRe0rlqv7damXvWVbOrD4gNzy8"}, {"3867": "1JMYvnx2RzKEo4aWQ7DmGGAL8yZV3m9NBePXbrdj"}, {"3869": "gRoJEyXVx4qD9er287LP4m7wBzGldaPjLWQKm3Mv"}, {"3871": "E6Kg9oDnLWyzPRMva7vrWx7Jxp4VG58qO2w1lZYe"}, {"3876": "XMBbew5z4ELrZa2mRAd5ZW08vPN6gy3DdVYlpKjq"}, {"3722": "WlVJBygjDZMeKX3vnAMzRj08NqdmG2x1Y69LQ4P5"}, {"4090": "apKVJBwOyrP35m2lv7Kzz5kYXbeWNd64En9GxRqg"}, {"4091": "XMBbew5z4ELrZa2mRAd53V08vPN6gy3DdVYlpKjq"}, {"4092": "JzwxZXOvDj1bVrN4nkWwwNk8qdyBl3MRKLpGPgaQ"}, {"4095": "5dBNwRp9graYJxZn409wNQ7lVov1b2QLPDqGm6XK"}, {"4097": "gP1eOZVj3Q9lv5aDEk4EEM7rdpqW8yLm2BbKzJxM"}, {"4099": "2O14VBzl8aDmWdNw3A5119AGyZ5qLJoEMpj6R9ng"}, {"4102": "zrR51V2ajQ9ZLygPKkEmMxkYDq38xOJolENBXGnv"}, {"4104": "gYbDLqlyZVoRerQpB72rML7WJnwM5z24POKa8Exj"}, {"3115": "BaY3Xpy1EbKGjLq2O7mGa60rx8owgQz9P4dDJRmN"}, {"4106": "roKgWqY95V3mXMRzyAjmKj7bLjexpJPvaGDBw826"}, {"4110": "o9vbeQlLMVg8j5dq4keggbANxZpEmnXzwYKO1ar2"}, {"4767": "nJL5lPMwBx23YpqRe0rlpw7damXvWVbOrD4gNzy8"}, {"3702": "E6Kg9oDnLWyzPRMva7vr5j7Jxp4VG58qO2w1lZYe"}, {"4139": "1JMYvnx2RzKEo4aWQ7DmmZAL8yZV3m9NBePXbrdj"}, {"4142": "3JjOWdylwgNLzxVab7NEEKkZ2vG64rq8PEB5QmDo"}, {"4147": "Z5KyJe9nEg1QNbWlX0wWWD0oDjBLdqzR83VGv624"}, {"4151": "PjLblDgRBO6WQqnxmkJ5560Jv3ewZN4p5a89yKdY"}, {"4202": "K94XLav1glVRnyQ6r01BPakme3YJwBxM5oOzdP2j"}, {"4204": "d5xjWYMwEJon6rLlK7yBEKAqgV4DaOeNB9ZX3Gzb"}, {"4208": "Z5KyJe9nEg1QNbWlX0wW4m0oDjBLdqzR83VGv624"}, {"4215": "zdQO8GwxDqjRgP4137Y15q7NyKlpem2nL65rvVJY"}, {"3710": "nJL5lPMwBx23YpqRe0rlKv7damXvWVbOrD4gNzy8"}, {"3711": "52dD6ZlV1QaOpRBmbAqKGMkKnGzWMLj4eJq38Pgo"}, {"3726": "XMBbew5z4ELrZa2mRAd5dW08vPN6gy3DdVYlpKjq"}, {"4094": "zdQO8GwxDqjRgP4137Y1V67NyKlpem2nL65rvVJY"}, {"4765": "EjgWGnXaLy9opPOz20n64V086BlYM3w1deVQvbKr"}, {"3607": "d5xjWYMwEJon6rLlK7yBlKAqgV4DaOeNB9ZX3Gzb"}, {"4758": "DbQY6zyveZRwK5drV0Z98bAjoE4XJM83N9xl2nWq"}, {"2715": "BaY3Xpy1EbKGjLq2O7mG9o0rx8owgQz9P4dDJRmN"}, {"3881": "dz4ojlpP85JMgDLZWkQOJzAaKYqQexEr62GXRV1y"}, {"3715": "2O14VBzl8aDmWdNw3A516bAGyZ5qLJoEMpj6R9ng"}, {"3616": "3a5oqJN1bgnx4Ol9dk86BZAByE6jQ8mKDWMpGrLV"}, {"3742": "zrR51V2ajQ9ZLygPKkEm1pkYDq38xOJolENBXGnv"}, {"3717": "3a5oqJN1bgnx4Ol9dk869ZAByE6jQ8mKDWMpGrLV"}, {"3705": "eod9aRWLVl34Gx1Dn7VoNbA2rz6qjgmpEXwQJN5Z"}, {"3630": "o9vbeQlLMVg8j5dq4kegdRANxZpEmnXzwYKO1ar2"}, {"3865": "52dD6ZlV1QaOpRBmbAqKvQkKnGzWMLj4eJq38Pgo"}, {"3632": "OzNMgZ9n43qPbjXmy7zWWaA2DKdYvW5e6pxGRrVa"}, {"3684": "Nzp2OoJlqn6r1ZgvdA3GRKAabBwP5G4eE3RQmyxD"}, {"4096": "pE5X8NQPaow6vlOZxk6ggg7q42ezGBMyWgDVjR3L"}, {"4764": "m6EYyZoJ4gWexdjVPARNNwARDOq9wv2N5XzKGplr"}, {"4101": "6lQGaY9RDywdVzObj0P11OkPg4NBn3exEK51LWZq"}] \ No newline at end of file diff --git a/RVO16/databases/notifications.table b/RVO16/databases/notifications.table new file mode 100755 index 0000000..f7c96cb --- /dev/null +++ b/RVO16/databases/notifications.table @@ -0,0 +1,41 @@ +key:string|weight:string|sk:string|en:string ++|switching_profile_point_applied_to_line|INFORMATIONAL|Aplikovaný bod spínacieho profilu na línií č. ${line} : ${value}|Switching profile point applied to line no. ${line} : ${value}|............... ++|dusk_has_occured|INFORMATIONAL|Nastal súmrak: ${value}|Dusk has occured: ${value}|............... ++|dawn_has_occured|INFORMATIONAL|Nastal úsvit: ${value}|Dawn has occured: ${value}|............... ++|dimming_profile_was_successfully_received_by_node|NOTICE|Stmievací profil bol úspešne prijatý nodom č. ${node}|Dimming profile was successfully received by node no. ${node}|............... ++|master_node_is_responding_again|NOTICE|Master node začal znovu odpovedať|Master node is responding again|............... ++|command_was_sent_from_terminal_interface|DEBUG|Z terminálu bol odoslaný príkaz|A command was sent from terminal interface|............... ++|master_node_is_not_responding|ALERT|Master node neodpovedá|Master node is not responding|............... ++|configuration_of_dimming_profile_to_node_failed|ALERT|Konfigurácia stmievacieho profilu pre node č. ${node} zlyhala|Configuration of dimming profile to node no. ${node} has failed|............... ++|circuit_breaker_was_turned_on_line|NOTICE|Zapnutie ističa na línii č. ${line}|Circuit breaker was turned on - line no. ${line}|............... ++|circuit_breaker_was_turned_off_line|ERROR|Vypnutie ističa na línií č. ${line}|Circuit breaker was turned off - line no. ${line}|............... ++|dimming_profile_was_processed_for_node|INFORMATIONAL|Stmievací profil bol spracovaný pre node č. ${node}|Dimming profile was processed for node no. ${node}|............... ++|switching_profile_was_processed_for_line|INFORMATIONAL|Spínací profil bol spracovaný pre líniu č. ${line}|Switching profile was processed for line no. ${line}|............... ++|thermometer_is_not_responding|WARNING|Teplomer neodpovedá|Thermometer is not responding|............... ++|thermometer_is_responding_again|NOTICE|Teplomer znovu odpovedá|Thermometer is responding again|............... ++|thermometer_sends_invalid_data|WARNING|Teplomer posiela neplatné hodnoty|Thermometer sends invalid data|............... ++|main_switch_has_been_turned_off|CRITICAL|Hlavný vypínač bol vypnutý|Main switch has been turned off|............... ++|main_switch_has_been_turned_on|NOTICE|Hlavný vypínač bol zapnutý|Main switch has been turned on|............... ++|power_supply_has_disconnected_input|ALERT|Napájací zdroj nemá napätie na vstupe|Power supply has disconnected input|............... ++|power_supply_works_correctly|NOTICE|Napájací zdroj pracuje správne|Power supply works correctly|............... ++|battery_level_is_low|ERROR|Batéria má nízku úroveň napätia|Battery level is low|............... ++|battery_level_is_ok|NOTICE|Batéria má správnu úroveň napätia|Battery level is OK|............... ++|door_main_open|NOTICE|Hlavné dvere boli otvorené|Main door has been opened|............... ++|door_em_open|NOTICE|Dvere silovej časti boli otvorené|Power door has been opened|............... ++|door_main_open_without_permission|WARNING|Hlavné dvere boli otvorené bez povolenia - zapnutá siréna|Main door has been opened without permission - alarm is on|............... ++|door_em_open_without_permission|WARNING|Dvere silovej časti boli otvorené bez povolenia|Power door has been opened without permission|............... ++|door_main_close|NOTICE|Hlavné dvere boli zatvorené|Main door has been closed|............... ++|door_em_close|NOTICE|Dvere silovej časti boli zatvorené|Power door has been closed|............... ++|state_of_contactor_for_line|INFORMATIONAL|Stav stýkača pre líniu č. ${line} je ${value}|State of contactor for line no. ${line} is ${value}|............... ++|local_database_is_corrupted|CRITICAL|||............... ++|electrometer_nok|ERROR|Elektromer neodpovedá|Electrometer is not responding|............... ++|electrometer_ok|NOTICE|Elektromer znovu odpovedá|Electrometer is responding again|............... ++|no_voltage_on_phase|CRITICAL|Na fáze č. ${phase} nie je napätie|No voltage detected on phase no. ${phase}|............... ++|voltage_on_phase_restored|NOTICE|Napätie na fáze č. ${phase} bolo obnovené|Voltage on phase no. ${phase} has been restored|............... ++|flow_start|NOTICE|FLOW bol spustený|FLOW has been started |............... ++|twilight_sensor_nok|ERROR|Sensor súmraku neodpovedá|Twilight sensor is not responding|............... ++|twilight_sensor_ok|NOTICE|Sensor súmraku znovu odpovedá|Twilight sensor is responding again|............... ++|lamps_have_turned_on|NOTICE|Lampy sa zapli|Lamps have turned on|............... ++|lamps_have_turned_off|NOTICE|Lampy sa vypli|Lamps have turned off|............... ++|flow_restart|NOTICE|FLOW bol reštartovaný|FLOW has been restarted|............... ++|nodes_db_changed|NOTICE|Zmena v node databáze|Node db has changed|............... diff --git a/RVO16/databases/pins.table b/RVO16/databases/pins.table new file mode 100755 index 0000000..0eb3d05 --- /dev/null +++ b/RVO16/databases/pins.table @@ -0,0 +1,14 @@ +pin:string|type:string|line:number +*|input1_01|door_condition|0|........... +*|input1_02|rotary_switch_state|0|........... +*|input1_03|rotary_switch_state|0|........... +*|input1_04|power_supply|0|........... +*|input1_05|state_of_main_switch|0|........... +*|input1_06|state_of_breaker|1|........... +*|input1_07|state_of_breaker|2|........... +*|input1_08|state_of_breaker|3|........... +*|relay1_02|state_of_contactor|1|........... +*|relay1_03|state_of_contactor|2|........... +*|relay1_04|state_of_contactor|3|........... +*|28F46E9D0E00008B|temperature|0|........... +*|twilight_sensor|twilight_sensor|0|........... diff --git a/RVO16/databases/relays.table b/RVO16/databases/relays.table new file mode 100755 index 0000000..8e8acf1 --- /dev/null +++ b/RVO16/databases/relays.table @@ -0,0 +1,5 @@ +line:number|tbname:string|contactor:number|profile:string ++|0|PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8|1||........... ++|1|5dBNwRp9graYJxZn409wv37lVov1b2QLPDqGm6XK|9|{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"08:00","start_time":"20:00"},{"value":0,"end_time":"13:00","start_time":"08:00"}],"astro_clock":true,"dawn_lux_sensor":true,"dusk_lux_sensor":true,"dawn_lux_sensor_value":15,"dusk_lux_sensor_value":15,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|........... ++|2|zrR51V2ajQ9ZLygPKkEmGJkYDq38xOJolENBXGnv|9|{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"08:00","start_time":"20:00"},{"value":0,"end_time":"13:00","start_time":"08:00"}],"astro_clock":true,"dawn_lux_sensor":true,"dusk_lux_sensor":true,"dawn_lux_sensor_value":15,"dusk_lux_sensor_value":15,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|........... ++|3|BaY3Xpy1EbKGjLq2O7mG3p0rx8owgQz9P4dDJRmN|9|{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"08:00","start_time":"20:00"},{"value":0,"end_time":"13:00","start_time":"08:00"}],"astro_clock":true,"dawn_lux_sensor":true,"dusk_lux_sensor":true,"dawn_lux_sensor_value":15,"dusk_lux_sensor_value":15,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|........... diff --git a/RVO16/databases/settings.table b/RVO16/databases/settings.table new file mode 100755 index 0000000..0c03756 --- /dev/null +++ b/RVO16/databases/settings.table @@ -0,0 +1,2 @@ +rvo_name:string|lang:string|temperature_address:string|latitude:number|longitude:number|mqtt_host:string|mqtt_clientid:string|mqtt_username:string|mqtt_port:number|maintanace_mode:boolean|project_id:number|controller_type:string|serial_port:string|backup_on_failure:boolean|restore_from_backup:number|restore_backup_wait:number|node_status_nok_time:number|phases:number|cloud_topic:string|has_main_switch:boolean|daily_report:boolean|send_changed_node_numbers:boolean ++|rvo_senica_16_10.0.0.131|en|28.569E9C0E0000|48.70826502|17.28455203|192.168.252.1|rvo_senica_16_10.0.0.131|6EANzPOaNVolqCTE4iXN|1883|0|67|unipi|ttyUSB0|1|20|5|6|3|u131|0|1|1|................................................... diff --git a/RVO16/databases/tbdata.nosql b/RVO16/databases/tbdata.nosql new file mode 100755 index 0000000..e69de29 diff --git a/RVO16/databases/tbdatacloud.nosql b/RVO16/databases/tbdatacloud.nosql new file mode 100755 index 0000000..e69de29 diff --git a/RVO16/databases/total_energy.js b/RVO16/databases/total_energy.js new file mode 100755 index 0000000..dde340e --- /dev/null +++ b/RVO16/databases/total_energy.js @@ -0,0 +1,38 @@ +//key is rvo_number, value is max energy when lamps are on +const total_energy = { + 1: 580, + 2: 1100, + 3: 3700, + 4: 4100, + 7: 360, + 12: 1700, + 13: 5400, + 14: 440, + 15: 6100, + 16: 4800, + 20: 1600, + 21: 1000, + 22: 2600, + 23: 1000, + 25: 2600, + 33: 240, + 34: 4000, + 35: 2700, + 36: 820, + 37: 1400, + 35: 3500, + 39: 1170, + 41: 740, + 42: 660, + 43: 4900, + 45: 930, + 46: 700, + 47: 1100, + 48: 1500, + 50: 3200, + 53: 1250, + 55: 1000, + 56: 5500 +} + +module.exports = total_energy; diff --git a/RVO16/debug.js b/RVO16/debug.js new file mode 100755 index 0000000..9818194 --- /dev/null +++ b/RVO16/debug.js @@ -0,0 +1,16 @@ +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.watch = ['private']; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/RVO16/err.txt b/RVO16/err.txt new file mode 100755 index 0000000..1e36701 --- /dev/null +++ b/RVO16/err.txt @@ -0,0 +1,33 @@ +[2025-09-23T13:44:13.406] [ERROR] errLogs - uncaughtException: Cannot read property 'getHours' of undefined +[2025-09-23T13:44:13.407] [ERROR] errLogs - TypeError: Cannot read property 'getHours' of undefined + at Timeout.emptyReportToSend [as _onTimeout] (/home/unipi/flowserver/flow/cmd_manager.js:1419:14) + at listOnTimeout (internal/timers.js:557:17) + at processTimers (internal/timers.js:500:7) +[2025-09-23T13:44:13.408] [ERROR] errLogs - uncaughtException: Cannot read property 'getHours' of undefined +[2025-09-23T13:44:13.408] [ERROR] errLogs - TypeError: Cannot read property 'getHours' of undefined + at Timeout.emptyReportToSend [as _onTimeout] (/home/unipi/flowserver/flow/cmd_manager.js:1419:14) + at listOnTimeout (internal/timers.js:557:17) + at processTimers (internal/timers.js:500:7) +[2025-09-23T13:44:13.418] [ERROR] errLogs - uncaughtException: Cannot read property 'getHours' of undefined +[2025-09-23T13:44:13.418] [ERROR] errLogs - TypeError: Cannot read property 'getHours' of undefined + at Timeout.emptyReportToSend [as _onTimeout] (/home/unipi/flowserver/flow/cmd_manager.js:1419:14) + at listOnTimeout (internal/timers.js:557:17) + at processTimers (internal/timers.js:500:7) +[2025-09-23T13:44:19.196] [ERROR] errLogs - uncaughtException: date.getHours is not a function +[2025-09-23T13:44:19.197] [ERROR] errLogs - TypeError: date.getHours is not a function + at emptyReportToSend (/home/unipi/flowserver/flow/cmd_manager.js:1419:14) + at Timeout.dailyReportCheck [as _onTimeout] (/home/unipi/flowserver/flow/cmd_manager.js:1351:5) + at listOnTimeout (internal/timers.js:557:17) + at processTimers (internal/timers.js:500:7) +[2025-09-23T13:44:19.197] [ERROR] errLogs - uncaughtException: date.getHours is not a function +[2025-09-23T13:44:19.198] [ERROR] errLogs - TypeError: date.getHours is not a function + at emptyReportToSend (/home/unipi/flowserver/flow/cmd_manager.js:1419:14) + at Timeout.dailyReportCheck [as _onTimeout] (/home/unipi/flowserver/flow/cmd_manager.js:1351:5) + at listOnTimeout (internal/timers.js:557:17) + at processTimers (internal/timers.js:500:7) +[2025-09-23T13:44:19.201] [ERROR] errLogs - uncaughtException: date.getHours is not a function +[2025-09-23T13:44:19.202] [ERROR] errLogs - TypeError: date.getHours is not a function + at emptyReportToSend (/home/unipi/flowserver/flow/cmd_manager.js:1419:14) + at Timeout.dailyReportCheck [as _onTimeout] (/home/unipi/flowserver/flow/cmd_manager.js:1351:5) + at listOnTimeout (internal/timers.js:557:17) + at processTimers (internal/timers.js:500:7) diff --git a/RVO16/flow/cloudmqttconnect.js b/RVO16/flow/cloudmqttconnect.js new file mode 100755 index 0000000..b03491f --- /dev/null +++ b/RVO16/flow/cloudmqttconnect.js @@ -0,0 +1,357 @@ +exports.id = 'cloudmqttconnect'; +exports.title = 'Cloud connect mqtt'; +exports.group = 'MQTT'; +exports.color = '#888600'; +exports.version = '1.0.2'; +exports.icon = 'sign-out'; +exports.input = 2; +exports.output = 2; +exports.options = { host: 'tb-stage.worksys.io', port: 1883, clientid: "", username: "" }; + +exports.html = `
+
+
+
Hostname or IP address (if not empty - setting will override db setting)
+
+
+
Port
+
+
+
+
+
@(Client id)
+
+
+
topic
+
+
+
`; + + + +const { promisifyBuilder } = require('./helper/db_helper'); +const fs = require('fs'); +const mqtt = require('mqtt'); +const nosql = NOSQL('tbdatacloud'); + +const SEND_TO = { + debug: 0, + rpcCall: 1, +} + +//CONFIG +let saveTelemetryOnError = true;//backup_on_failure overrides this value +//------------------------ + +const noSqlFileSizeLimit = 4194304;//use 5MB - 4194304 +let insertNoSqlCounter = 0; +let insertBackupNoSqlCounter = 0; +let processingData = false; + +let backup_on_failure = true;//== saveTelemetryOnError - create backup client send failure +let restore_from_backup = 50; //how many rows process at once? +let restore_backup_wait = 3;//wait seconds +let lastRestoreTime = 0; + +// if there is an error in client connection, flow logs to monitor.txt. Not to log messages every second, we use sendClientError variable +let sendClientError = true; + + +exports.install = function(instance) { + + var client; + var opts; + var clientReady = false; + + let o = {}; //options + + function main() { + loadSettings(); + } + + //set opts according to db settings + function loadSettings() { + + o = instance.options; + if (!o.topic) o.topic = FLOW.GLOBALS.settings.cloud_topic; + + opts = { + host: o.host, + port: o.port, + clientId: o.clientid, + username: o.username, + rejectUnauthorized: false, + resubscribe: false + }; + + console.log("wsmqttpublich -> loadSettings from instance.options", o); + + if (!o.topic) { + instance.status("Not configured", "white"); + console.log("Cloud mqtt connect: no topic selected"); + return; + } + + connectToTbServer(); + } + + function connectToTbServer() { + var url = "mqtt://" + opts.host + ":" + opts.port; + console.log("MQTT URL: ", url); + + client = mqtt.connect(url, opts); + + client.on('connect', function() { + client.subscribe(`${o.topic}_backward`, (err) => { + if (!err) { + console.log("MQTT subscribed"); + } + }); + instance.status("Connected", "green"); + clientReady = true; + sendClientError = true; + }); + + client.on('reconnect', function() { + instance.status("Reconnecting", "yellow"); + clientReady = false; + }); + + client.on('message', function(topic, message) { + // message is type of buffer + message = message.toString(); + if (message[0] === '{') { + TRY(function() { + + message = JSON.parse(message); + if (message.hasOwnProperty("device") && message.hasOwnProperty("data") && message.data.hasOwnProperty("id")) { + client.publish(`${o.topic}_forward`, `{"device": "${message.device}", "id": ${message.data.id}, "data": {"success": true}}`, { qos: 1 }); + instance.send(SEND_TO.rpcCall, { "device": message.device, "id": message.data.id, "RPC response": { "success": true } }); + } + + }, () => instance.debug('MQTT: Error parsing data', message)); + } + + instance.send(SEND_TO.rpcCall, { "topic": o.topic, "content": message }); + }); + + client.on('close', function() { + clientReady = false; + + instance.status("Disconnected", "red"); + instance.send(SEND_TO.debug, { "message": "Client CLOSE signal received !" }); + }); + + client.on('error', function(err) { + instance.status("Err: " + err.code, "red"); + instance.send(SEND_TO.debug, { "message": "Client ERROR signal received !", "error": err, "opt": opts }); + if (sendClientError) { + console.log('MQTT client error', err); + sendClientError = false; + } + clientReady = false; + }); + + } + + + instance.on('0', function(data) { + + if (clientReady) { + //do we have some data in backup file? if any, process data from database + if (saveTelemetryOnError) { + //read telemetry data and send back to server + if (!processingData) processDataFromDatabase(); + } + + let stringifiedJson = JSON.stringify(data.data) + client.publish(`${o.topic}_forward`, stringifiedJson, { qos: 1 }); + } + else { + //logger.debug("Client unavailable. Data not sent !", JSON.stringify(data.data)); + instance.send(SEND_TO.debug, { "message": "Client unavailable. Data not sent !", "data": data.data }); + + if (saveTelemetryOnError && o.topic) { + //create new file from tbdata.nosql, if file size exceeds given limit, and clear tbdata.nosql + makeBackupFromDbFile(); + + //write to tb + data.data.id = UID(); + nosql.insert(data.data); + } + } + }); + + instance.on("1", _ => { + main(); + }) + + instance.close = function(done) { + if (clientReady) { + client.end(); + } + }; + + + function getDbBackupFileCounter(type) { + var files = fs.readdirSync(__dirname + "/../databases"); + + let counter = 0; + for (var i = 0; i < files.length; i++) { + + if (files[i] == "tbdatacloud.nosql") continue; + + if (files[i].endsWith(".nosql")) { + + let pos = files[i].indexOf("."); + if (pos > -1) { + + let fileCounter = counter; + let firstDigit = files[i].slice(0, pos); + + fileCounter = parseInt(firstDigit); + if (isNaN(fileCounter)) fileCounter = 0; + //console.log("getDbBackupFileCounter digit:", files[i], firstDigit, fileCounter, isNaN(fileCounter), type); + + if (type == "max") { + if (fileCounter > counter) { + counter = fileCounter; + } + } + else if (type == "min") { + if (counter == 0) counter = fileCounter; + + if (fileCounter < counter) { + counter = fileCounter; + } + } + } + } + + } + + if (type == "max") counter++; + + return counter; + } + + const makeBackupFromDbFile = async () => { + + if (!saveTelemetryOnError) return; + + //to avoid large file: tbdata.nosql + + //init value is 0! + if (insertNoSqlCounter > 0) { + --insertNoSqlCounter; + return; + } + + insertNoSqlCounter = 100; + + let source = __dirname + "/../databases/tbdatacloud.nosql"; + + var stats = fs.statSync(source); + var fileSizeInBytes = stats.size; + + if (fileSizeInBytes > noSqlFileSizeLimit) { + + let counter = 1; + counter = getDbBackupFileCounter("max"); + + let destination = __dirname + "/../databases/" + counter + "." + "tbdatacloud.nosql"; + + //make backup file + fs.copyFileSync(source, destination); + //fs.renameSync(p, p + "." + counter); + + //clear tbdata.nosql + fs.writeFileSync(source, ""); + fs.truncateSync(source, 0); + + } + } + + const processDataFromDatabase = async () => { + + if (restore_from_backup <= 0) return; + + //calculate diff + const now = new Date(); + let currentTime = now.getTime(); + let diff = currentTime - lastRestoreTime; + + if ((diff / 1000) < restore_backup_wait) { + //console.log("*********restore_backup_wait", diff, restore_backup_wait); + return; + } + + processingData = true; + + //get filename to process + let counter = getDbBackupFileCounter("min"); + + //we have some backup files + let dataBase = 'tbdata'; + + var nosql; + if (counter == 0) dataBase = 'tbdatacloud'; + else dataBase = counter + "." + 'tbdatacloud'; + + nosql = NOSQL(dataBase); + + //select all data - use limit restore_from_backup + let records = await promisifyBuilder(nosql.find().take(restore_from_backup)); + + for (let i = 0; i < records.length; i++) { + if (clientReady) { + + let item = records[i]; + let id = item.id; + + if (id !== undefined) { + //console.log("------------processDataFromDatabase - remove", id, dataBase, i); + + try { + + let message = JSON.parse(JSON.stringify(item)); + delete message.id; + client.publish(`${o.topic}_forward`, JSON.stringify(message), { qos: 1 }); + + //remove from database + await promisifyBuilder(nosql.remove().where("id", id)); + + } catch (error) { + //process error + console.log("processDataFromDatabase", error); + } + + } + + } + else { + processingData = false; + return; + } + } + + if (records.length > 0) { + //clean backup file + if (counter > 0) nosql.clean(); + } + + //no data in db, remove + if (records.length == 0) { + if (counter > 0) nosql.drop(); + } + + const d = new Date(); + lastRestoreTime = d.getTime(); + + processingData = false; + + } + + instance.on('options', main); + +}; diff --git a/RVO16/flow/cmd_manager.js b/RVO16/flow/cmd_manager.js new file mode 100755 index 0000000..ba4fc47 --- /dev/null +++ b/RVO16/flow/cmd_manager.js @@ -0,0 +1,3071 @@ +exports.id = 'cmd_manager'; +exports.title = 'CMD Manager'; +exports.group = 'Worksys'; +exports.color = '#5D9CEC'; +exports.version = '0.0.3'; +exports.output = ['red', 'blue', 'yellow', 'blue', 'white', 'green']; +exports.input = 3; +exports.icon = 'cloud-upload'; + +exports.html = ` +
+
+
+
RPC - run RPC calls

+
+
+
@(User)
+
+
+
@(Password)
+
+
+
@(My edge)
+
+
+
+`; +exports.readme = `Manager for CMD calls`; + + +exports.install = function(instance) { + + const SerialPort = require('serialport'); + const { exec } = require('child_process'); + const { crc16 } = require('easy-crc'); + const { runSyncExec, writeData } = require('./helper/serialport_helper'); + const { bytesToInt, longToByteArray, addZeroBefore, isEmptyObject, emptyJsObject, writeToFile, addToArrayIfUnique } = require('./helper/utils'); + const bitwise = require('bitwise'); + + var SunCalc = require('./helper/suncalc'); + const DataToTbHandler = require('./helper/DataToTbHandler'); + const errorHandler = require('./helper/ErrorToServiceHandler'); + const { sendNotification } = require('./helper/notification_reporter'); + const process = require('process'); + const { errLogger, logger, monitor } = require('./helper/logger'); + + //for accelerometer purposes + const { naklony } = require("../databases/accelerometer_db"); + + const dbNodes = TABLE("nodes"); + const dbRelays = TABLE("relays"); + + let GLOBALS; + let SETTINGS; + let rsPort; + let tbHandler; + + // runTasks intervals + const SHORT_INTERVAL = 30; + const LONG_INTERVAL = 300; + + //send data to following instances: + const SEND_TO = { + debug: 0, + tb: 1, + http_response: 2, + dido_controller: 3, + infoSender: 4, + dailyReport: 5 + } + + const PRIORITY_TYPES = { + terminal: 0, + fw_detection: 1,//reserved only for FW detection - SETTINGS.masterNodeIsResponding + high_priority: 2,//reserverd only for: read dimming / brightness (after set dimming from platform) + relay_profile: 3, + node_broadcast: 4, + node_profile: 5, + node_cmd: 6 + } + + const TIME_AFTER_WE_UPDATE_LAST_NODE_COMMUNICATION = 600000; // 10 minutes + + //list of command calls to process. Processing in runTasks function + let tasks = []; + + let interval = null;//timeout for procesing tasks + let customTasksInterval = null; // interval for reportEdgeDateTimeAndNumberOfLuminaires(); + let setCorrectTime = null; // interval for setting a correct edgeTime + let sendNodeReadout = null; // interval for sending agregate data from node + + let refFlowdataObj = {}; + + //load from settings + let latitude = 48.70826502;//48.682255758; + let longitude = 17.28455203;//17.278910807; + + const gmtOffset = 0; + + //ak nie je nastaveny + //https://www.tecmint.com/set-time-timezone-and-synchronize-time-using-timedatectl-command/ + //https://stackoverflow.com/questions/16086962/how-to-get-a-time-zone-from-a-location-using-latitude-and-longitude-coordinates + + //priorities for registers + let priorities = []; + + let minutes = 1; + priorities["1"] = minutes; // dimming + priorities["76"] = minutes; // power + + minutes = 5; + priorities["75"] = minutes; // current + priorities["79"] = minutes; // energy + priorities["87"] = minutes; // aktualny cas + //priorities["84"] = minutes; //accelerometer + + minutes = 10; + priorities["74"] = minutes; // voltage + priorities["77"] = minutes; // power factor + priorities["78"] = minutes; // frequency + + minutes = 60; + priorities["0"] = minutes; // statecode + priorities["6"] = minutes; // dusk + priorities["7"] = minutes; // dawn + priorities["8"] = minutes; // profile + + minutes = 60 * 24; + priorities["89"] = minutes; // verzia fw + priorities["80"] = minutes; // lifetime + + //prikazy kt sa budu spustat na dany node - see config.js in terminal-oms.app. (1 - dimming) + let listOfCommands = [0, 1, 6, 7, 8, 74, 75, 76, 77, 78, 79, 80, 87, 89]; + + let rotary_switch_state; + let lux_sensor; + let state_of_breaker = {};//key is line, value is On/Off + let disconnectedReport = {};//key is tbname, value true/false + + let relaysData; + let nodesData; + + // holds dusk, dawn (and more) values + let sunCalcResult; + + //helper container for counting resolved group of commands (commands related to set profile) + let cmdCounter = {};//key is node, value is counter + + //TODO: is this set working?? According to previous checks, sets do not work + //if sending of profile to node fails, we send notification and push node into set, so we do not send notification twice + const nodeProfileSendFail = new Set(); + + //we expect to get current temperature in Senica from senica-prod01 + let temperatureInSenica = null; + let accelerometerInterval = null; + + //NOTE: daily reports senica: + //rvo_is_on status, we monitor all nodes - if true, power and dimming should be not 0, if false, 24/7 nodes should be 0, other rvo should not respond + let rvo_is_on; + let previous_rvo_is_on_value; + let handleDailyReport; //setInterval for dailyReportHandler function + let dailyReport = {}; //data needed for daily report + let reportToSend = {}; //final report which we send to cloud + let breakerCounter = null; // status of breakers after flow starts is not in report + let rvoPeriod; // interval of checking dusk dawn and if rvo_is_on + let initialReportStatus = false; + + const DAILY_REPORT_HANDLER_TIME = 3_600_000; + const SET_SUNCALC_RESULT_TIME = 3_600_000; + const SET_RVO_PERIOD_TIME = 300_000; + const ADD_NODE_TO_REPORT_TIME = 3_600_000; + + //END OF VARIABLE SETTINGS + //-------------------------------- + + + function main() { + GLOBALS = FLOW.GLOBALS; + SETTINGS = FLOW.GLOBALS.settings; + relaysData = GLOBALS.relaysData; + nodesData = GLOBALS.nodesData; + latitude = GLOBALS.settings.latitude; + longitude = GLOBALS.settings.longitude; + + tbHandler = new DataToTbHandler(SEND_TO.tb); + tbHandler.setSender(exports.title); + + let now = new Date(); + console.log("Cmd-mngr installed", now.toLocaleString("sk-SK")); + + sunCalcResult = calculateDuskDawn(); + + handleRsPort(); + + customTasksInterval = setInterval(reportEdgeDateTimeAndNumberOfLuminaires, 120_000); + setTimeout(reportEdgeDateTimeAndNumberOfLuminaires, 4000); + + //dailyReport related + emptyReportToSend(); + breakerCounter = Object.keys(relaysData).length - 1; // we get number of lines (breakers) except of line 0 + rvoPeriod = setInterval(setRvoPeriod, SET_RVO_PERIOD_TIME); + setTimeout(setRvoPeriod, 3000); + setInterval(setSunCalcResult, SET_SUNCALC_RESULT_TIME); + handleDailyReport = setInterval(dailyReportHandler, DAILY_REPORT_HANDLER_TIME); + + + setCorrectTime = setInterval(setCorrectPlcTimeOnceADay, 60000 * 60); // 1 hour + setCorrectPlcTimeOnceADay(); + + sendNodeReadout = setInterval(sendNodesData, 150_000); + accelerometerInterval = setInterval(accelerometerData, 60000 * 30); //30 min + } + + + function cmdCounterResolve(address) { + if (cmdCounter.hasOwnProperty(address)) { + cmdCounter[address] = cmdCounter[address] - 1; + + let result = cmdCounter[address]; + if (result == 0) delete cmdCounter[address]; + return result; + } + return -1; + } + + + function getParams(priority) { + let params = {}; + + //core rpc values + params.address = 0;//if(recipient === 0) address = 0; + params.byte1 = 0;//msb, podla dokumentacie data3 + params.byte2 = 0;//podla dokumentacie data2 + params.byte3 = 0;//podla dokumentacie data1 + params.byte4 = 0;//lsb, podla dokumentacie data0 + params.recipient = 0;//0: Master, 1: Slave, 2: Broadcast + params.register = -1;//register number + params.rw = 0;//0: read, 1: write + + //other values + //params.type = "cmd"; "relay" "cmd-terminal" "set_node_profile" "process_profiles" + //params.tbname = tbname; + params.priority = PRIORITY_TYPES.node_cmd; //default priority - if more tasks with the same timestamp, we sort them based on priority + params.timestamp = 0; //execution time - if timestamp < Date.now(), the task is processed + if (priority != undefined) { + params.timestamp = priority; + params.priority = priority; + } + + params.addMinutesToTimestamp = 0;//repeat task if value is > 0 + // if node regular readout does not respond, we repeat request + params.repeatCounter = 0; + //params.timePointName = "luxOff" // "luxOn", "dusk", "dawn", "profileTimepoint" + //params.info = ""; + //params.debug = true; // will console.log params in writeData response + + return params; + } + + + //nastav profil nodu + function processNodeProfile(node) { + if (rotary_switch_state != "Automatic") { + logger.debug("unable to process profile for node", node, "rotary_switch_state != Automatic"); + return; + } + + let nodeObj = nodesData[node]; + let line = nodeObj.line; + + if (relaysData[line].contactor == 0) { + logger.debug("line line is off", line, node); + return; + } + + if (nodeObj.processed == 1) { + //logger.debug("node was already processed", node); + return; + } + + let nodeProfile = nodeObj.profile; + logger.debug("processNodeProfile: start - set profile for ", node, nodeProfile); + if (nodeProfile) { + + try { + nodeProfile = JSON.parse(nodeProfile); + } catch (error) { + logger.debug("Cmd-mngr: Error parsing node profile", error); + } + + } + + logger.debug("processNodeProfile", node, line, nodeObj, nodeProfile); + + let timestamp = PRIORITY_TYPES.node_cmd; + + removeTask({ type: "set_node_profile", address: node }); + + if (nodeProfile === "") { + //vypneme profil nodu, posleme cmd + //Pokiaľ je hodnota rovná 1 – Profil sa zapne, ostatné bity sa nezmenia. + //Pokiaľ sa hodnota rovná 2 – profil sa vypne, ostatné bity sa nezmenia + + logger.debug("turn off profile"); + + let params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte4 = 96; + params.recipient = 1; + params.register = 8; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = 'turn off/reset node profile'; + + cmdCounter[node] = 1; + + tasks.push(params); + } + else { + let tasksProfile = []; + + //vypneme profil - Zapísať hodnotu 32 do registra Time Schedule Settings – reset profilu + let params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte4 = 96; + params.recipient = 1; + params.register = 8; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = 'turn off node profile'; + + tasksProfile.push(params); + + timestamp++; + + logger.debug("processNodeProfile: TS1 Time point a TS1 Time Point Levels ", node); + + //TS1 Time point a TS1 Time Point Levels + let register = 9; + for (let i = 0; i < nodeProfile.intervals.length; i++) { + let obj = nodeProfile.intervals[i]; + //let timePoint = obj.time_point; + let dim_value = obj.value; + + + //Reg 9 až Reg 40 + + /* + Samotný profil sa zapisuje do max. 16 párov – časový bod a úroveň. + Prázdny profil je vtedy keď časový bod obsahuje hodnotu 0xFFFFFFFF (táto hodnota sa zapíše do registrov keď sa aktivuje reset profilu do registru 8). + Páry sa prechádzajú časovo zoradené takže teoreticky je jedno v akom poradí sa zapisujú ale je lepšie ich zapisovať v chronologickom poradí od 13:00. + Časový bod má formát: + Byte 3: hodiny Byte 2: minúty Byte 1: sekundy Byte 0 – rezervované + Register úrovne má rovnaký formát ako dimming register (Reg 1). + */ + + let start_time = obj.start_time; + let t = start_time.split(":"); + //if(timePoint != undefined) t = timePoint.split(":"); + //else t = [0,0]; + + logger.debug("processNodeProfile: TS1 Time point ", (i + 1), node); + + params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte1 = parseInt(t[0]);//hh + params.byte2 = parseInt(t[1]);//mm + params.recipient = 1; + params.register = register; + params.rw = 1;//write + params.timestamp = timestamp; + params.addMinutesToTimestamp = 0; + params.info = 'TS1 Time point ' + (i + 1); + + tasksProfile.push(params); + + register++; + timestamp++; + + params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte4 = parseInt(dim_value) + 128;// + params.recipient = 1; + params.register = register; + params.rw = 1;//write + params.timestamp = timestamp; + params.addMinutesToTimestamp = 0; + params.info = 'TS1 Time point Levels ' + (i + 1); + + tasksProfile.push(params); + + register++; + timestamp++; + } + + //Threshold lux level for DUSK/DAWN + { + + logger.debug("processNodeProfile: Threshold lux level for DUSK/DAWN", node); + + let params = getParams(); + params.type = "set_node_profile"; + params.address = node; + params.register = 96; + params.recipient = 1; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = "Threshold lux level for DUSK/DAWN"; + + if (nodeProfile.dusk_lux_sensor) { + let v = nodeProfile.dusk_lux_sensor_value; + let ba = longToByteArray(v); + + params.byte1 = ba[1];//msb + params.byte2 = ba[0]; + } + + if (nodeProfile.dawn_lux_sensor) { + let v = nodeProfile.dawn_lux_sensor_value; + let ba = longToByteArray(v); + + params.byte3 = ba[1];//msb + params.byte4 = ba[0]; + } + + tasksProfile.push(params); + timestamp++; + + } + + //DUSK/DAWN max. adjust period + { + + logger.debug("processNodeProfile: DUSK/DAWN max. adjust period", node); + + let params = getParams(); + params.type = "set_node_profile"; + params.address = node; + params.register = 97; + params.recipient = 1; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = "DUSK/DAWN max. adjust period"; + + if (nodeProfile.astro_clock) { + let v = nodeProfile.dusk_lux_sensor_time_window; + let ba = longToByteArray(v); + + params.byte1 = ba[1];//msb + params.byte2 = ba[0]; + } + + if (nodeProfile.astro_clock) { + let v = nodeProfile.dawn_lux_sensor_time_window; + let ba = longToByteArray(v); + + params.byte3 = ba[1];//msb + params.byte4 = ba[0]; + } + + tasksProfile.push(params); + timestamp++; + + } + + //Static offset + { + + //Statický offset pre časy úsvitu a súmraku. Byte 1 je pre DUSK, Byte 0 je pre DAWN. Formát: + //Bity 0 – 6: hodnota v minútach + //Bit 7: znamienko (1 – mínus) + + logger.debug("processNodeProfile: Static offset", node); + + let params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.register = 98; + params.recipient = 1; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = "Static offset"; + + if (nodeProfile.astro_clock) { + let dusk_astro_clock_offset = parseInt(nodeProfile.dusk_astro_clock_offset); + let dawn_astro_clock_offset = parseInt(nodeProfile.dawn_astro_clock_offset); + + if (dusk_astro_clock_offset < 0) { + params.byte3 = (dusk_astro_clock_offset * -1) + 128; + } + else { + params.byte3 = dusk_astro_clock_offset; + } + + if (dawn_astro_clock_offset < 0) { + params.byte4 = (dawn_astro_clock_offset * -1) + 128; + } + else { + params.byte4 = dawn_astro_clock_offset; + } + } + + tasksProfile.push(params); + timestamp++; + } + + logger.debug("Time schedule settings - turn on", node); + + params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.register = 8; + params.recipient = 1; + params.rw = 1;//write + + //Time schedule settings + let bits = []; + + //Byte 0 (LSB): + //Bit 0 (LSB) – zapnutie/vypnutie profilov ako takých (1 – zapnuté). + bits.push(1); + //Bit 1 – 3 - zatiaľ nepoužité (zapisovať 0) + bits.push(0); + bits.push(0); + bits.push(0); + if (nodeProfile.astro_clock == true) { + //Bit 4 – ak je nastavený profil sa riadi podľa astrohodín, a je 0 tak profil je jednoduchý + bits.push(1); + } + else bits.push(0); + + //Bit 5 – zápis 1 spôsobí reset nastavení profilu (nastavenie prázdneho profilu) + bits.push(0); + + //Bity 6-7 - zatiaľ nepoužité + bits.push(0); + bits.push(0); + + params.byte4 = bitwise.byte.write(bits.reverse()); + + //Byte 2 – nastavenie pre lux senzor: + bits = []; + + //Bit 0 (LSB) – riadenie súmraku podľa lux senzoru (1 – zapnuté). Súmrak sa môže posúvať v rámci času v registri 97 podľa intenzity osvetlenia + if (nodeProfile.dusk_lux_sensor == true)//sumrak + { + bits.push(1); + } + else bits.push(0); + + //Bit 1 - riadenie úsvitu podľa lux senzoru (1 – zapnuté). Úsvit sa môže posúvať v rámci času v registri 97 podľa intenzity osvetlenia + if (nodeProfile.dawn_lux_sensor == true)//usvit + { + bits.push(1); + } + else bits.push(0); + + //Bit 2 – zdroj pre hodnotu luxov – 0 – RVO posiela hodnoty zo svojho luxmetra, 1 – node má pripojený svoj vlastný lux meter. + bits.push(0);//zatial neimplementovane + + //Bit 3 – 7 - nepoužité + bits.push(0); + bits.push(0); + bits.push(0); + bits.push(0); + bits.push(0); + + params.byte2 = bitwise.byte.write(bits.reverse()); + params.timestamp = timestamp; + params.info = "Time schedule settings - turn on"; + + tasksProfile.push(params); + + //zaver + cmdCounter[node] = tasksProfile.length; + + //tasks.push(tasksProfile); + tasks = tasks.concat(tasksProfile); + + } + + logger.debug("finished set profile for ", node); + + console.log("proces profile finished *********************") + } + + + function cleanUpRefFlowdataObj() { + let now = new Date(); + let timestamp = now.getTime(); + + //clear old refFlowdata references + let keys = Object.keys(refFlowdataObj); + for (let i = 0; i < keys.length; i++) { + let timestampKey = keys[i]; + + if ((timestamp - timestampKey) > 60 * 1000) { + console.log("cleanUpRefFlowdataObj delete", timestampKey); + delete refFlowdataObj[timestampKey]; + } + } + } + + + function removeTask(obj) { + let keys = Object.keys(obj); + tasks = tasks.filter((task) => { + + let counter = 0; + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + if (task.hasOwnProperty(key) && obj.hasOwnProperty(key)) { + if (task[key] == obj[key]) counter++; + } + } + + if (counter == keys.length) return false; + return true; + }); + } + + + process.on('uncaughtException', function(err) { + //TODO send to service + + errLogger.error('uncaughtException:', err.message) + errLogger.error(err.stack); + + errorHandler.sendMessageToService(err.message + "\n" + err.stack, 0, "js_error"); + //process.exit(1); + }) + + //te();//force error + + + function processAllNodeProfilesOnLine(line) { + for (let k in nodesData) { + if (line == nodesData[k].line) { + let node = nodesData[k].node; + let processed = nodesData[k].processed; + + if (!processed) processNodeProfile(node); + //else logger.debug( `Node ${node} profile for line ${nodesData[k].line} was already processed`); + } + } + } + + + function loadRelaysData(line) { + for (const [key, value] of Object.entries(relaysData)) { + if (key == "0") continue; + if (line != undefined) { + //ak sa jedna o update profilu linie - pozor dido_controller posiela command pre loadRelaysData + if (line != value.line) continue; + } + + if (value.contactor == 1) processAllNodeProfilesOnLine(value.line); + } + } + + + function reportOnlineNodeStatus(line) { + //Po zapnutí línie broadcastovo aktualizovať predtým čas a o 3 sek neskor - status, brightness + + logger.debug("Cmd-mngr: ----->reportOnlineNodeStatus for line", line); + + const d = new Date(); + + // broadcast actual time + let params = getParams(); + params.address = 0xffffffff;//Broadcast + params.byte1 = d.getHours(); + params.byte2 = d.getMinutes(); + params.recipient = 2;//2 broadcast, address = 0 + params.register = 87;//Actual time + params.rw = 1;//write + params.type = "node-onetime-write"; + params.timestamp = d.getTime() + 30000; + params.info = "run broadcast: Actual time"; + //params.debug = true; + + tasks.push(params); + + let sec = 3; + setTimeout(function() { + //Po zapnutí línie - spraviť hromadný refresh stavu práve zapnutých svietidiel + + let time = Date.now(); + + for (let k in nodesData) { + + //potrebujem nody k danej linii + if (line == nodesData[k].line || line == undefined) { + + let tbname = nodesData[k].tbname; + let node = nodesData[k].node; + let status = "NOK"; + + // if status of node was "OK" before switching it off, we set the node's time_of_last_communication on time, it was switched on again and send OK status to tb. + if (nodesData[k].node_status_before_offline === true || nodesData[k].status === true) { + status = "OK"; + nodesData[k].time_of_last_communication = time; + } + + nodesData[k].readout.status = status; + + updateNodeStatus(k, status === "OK" ? true : false); + if (nodesData[k].hasOwnProperty("node_status_before_offline")) delete nodesData[k].node_status_before_offline; + sendTelemetry({ status: status }, tbname, time); + + //vyreportovanie dimming, current, input power pre liniu pre vsetky nody + //Prud + { + let params = getParams(); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 75;//prud + params.recipient = 1;//slave + params.rw = 0;//read + params.timestamp = time + 4000; + params.info = 'read current'; + //params.debug = true; + tasks.push(params); + } + + //vykon + { + let params = getParams(); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 76;//výkon + params.recipient = 1;//slave + params.rw = 0;//read + params.timestamp = time + 4100; + params.info = 'read power'; + //params.debug = true; + + tasks.push(params); + } + //dimming + { + let params = getParams(); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 1;//dimming + params.recipient = 1;//slave + params.rw = 0;//read + params.timestamp = time + 4200; + params.info = 'read dimming'; + //params.debug = true; + + tasks.push(params); + } + + } + } + + }, sec * 1000); + } + + + function reportOfflineNodeStatus(line) { + + logger.info("Cmd-mngr: ------>reportOffLineNodeStatus for line ", line); + + values = {}; + values["dimming"] = 0;//brightness + values["power"] = 0;//výkon + values["current"] = 0;//prúd + values["status"] = "OFFLINE"; + + const date = Date.now(); + + Object.keys(nodesData).forEach(node => { + + //potrebujem nody k danej linii + if (line == nodesData[node].line || line == undefined) { + + let tbname = nodesData[node].tbname; + let nodeStatus = nodesData[node].status; + + //in case we have reported offline node status, we return (continue with next node) + if (nodeStatus === "OFFLINE") return; + + nodesData[node].node_status_before_offline = nodeStatus; + nodesData[node].status = "OFFLINE"; + nodesData[node].readout = {}; + + sendTelemetry({ ...values }, tbname, date); + } + }); + + } + + + function turnLine(onOrOff, line, info) { + let obj = { + line: line, + command: onOrOff, + info: info + }; + + //to assure, handleDailyReportFunction do not run before rvo_is_on variable changes. So after every line switch we reset the timer + clearInterval(handleDailyReport); + handleDailyReport = setInterval(dailyReportHandler, DAILY_REPORT_HANDLER_TIME); + + //logger.debug("linia", line, obj); + instance.send(SEND_TO.dido_controller, obj); + } + + + function detectIfResponseIsValid(bytes) { + //ak sa odpoved zacina 0 - je to v poriadku, inak je NOK + let type = "RESPONSE"; + if (bytes.length == 1) type = "BROADCAST"; // odpoved z rsPortu na broadcast command: ["broadcast"] + else if (bytes[4] == 0) type = "RESPONSE"; + else if (bytes[4] == 1) type = "ERROR"; + else if (bytes[4] == 2) type = "EVENT"; + else type = "UNKNOWN"; + + let message = "OK"; + let error = ""; + if (type == "BROADCAST") return { message, type, error }; + + let crc = crc16('ARC', bytes.slice(0, 9)); + let c1 = (crc >> 8) & 0xFF; + let c2 = crc & 0xFF; + + if (c1 != bytes[9]) { + //CRC_ERROR + message = "NOK"; + error = "CRC_ERROR c1"; + instance.send(SEND_TO.debug, "CRC_ERROR c1"); + } + + if (c2 != bytes[10]) { + //CRC_ERROR + message = "NOK"; + error = "CRC_ERROR c2"; + instance.send(SEND_TO.debug, "CRC_ERROR c2"); + } + + //crc error + if (type != "RESPONSE") { + instance.send(SEND_TO.debug, bytes); + instance.send(SEND_TO.debug, "RESPONSE " + type + " - " + bytes[4]); + + //logger.debug(SEND_TO.debug, "RESPONSE " + type + " - " + bytes[4], bytes); + + error = "type is: " + type; + + message = "NOK"; + } + + return { message, type, error }; + } + + + //BUILD TASKS// + function buildTasks(params) { + + //return; + console.log("buidTAaasks start ****************", params); + monitor.info("buildTasks - params", params); + + let processLine; //defined line + let init = false; + let processLineProfiles = true; + let processBroadcast = true; + let processNodes = true; + + if (params == undefined) { + init = true; + tasks = []; + logger.debug("-->buildTasks clear tasks"); + } + else { + processLineProfiles = params.processLineProfiles; + processBroadcast = false; + processNodes = false; + + processLine = params.line; + } + + let now = new Date(); + + //process line profiles + if (processLineProfiles) { + + let keys = Object.keys(relaysData); + + for (let i = 0; i < keys.length; i++) { + + let line = parseInt(keys[i]); + let profilestr = relaysData[line].profile; + + if (processLine != undefined) { + if (processLine != line) continue; + } + + try { + + /** + * we process line profiles: timepoints, astro clock, lux_sensor, offsets ... + */ + if (profilestr === "") throw ("Profile is not defined"); + let profile = JSON.parse(profilestr); + if (Object.keys(profile).length === 0) throw ("Profile is empty"); + + monitor.info("buildTasks: profile for line", line); + monitor.info("profile:", profile); + + let time_points = profile.intervals; + + // add name to regular profile timepoint and delete unused end_time key: + time_points.forEach(point => { + point.name = "profileTimepoint" + delete point.end_time; + }); + + //monitor.info("buildTasks: time_points", time_points); + + + /** + * if astro_clock is true, we create timepoints, that switch on/off relays accordingly. + * we need to manage, astro clock timepoints has the greatest priority - normal timepoints will not switch off/on lines before dusk or dawn + * if dawn/dusk_lux_sensor is true, it has higher priority than astro_clock switching + */ + if (profile.astro_clock == true) { + + // if astro clock true, we remove all regular profile points + time_points = []; + + //TODO: when astro clock == true, is offset calculated ??? + //let duskAstroClockOffset = profile.dusk_astro_clock_offset; + //let dawnAstroClockOffset = profile.dawn_astro_clock_offset; + //console.log("line astro clock offsets dusk a dawn: ", duskAstroClockOffset, dawnAstroClockOffset); + // maybe add dusk dawn offset to calculateDuskDawn ?? what dusk dawn will be if dawn_lux_sensor == true?? + //let sunCalcResult = calculateDuskDawn(new Date(), line, duskAstroClockOffset, dawnAstroClockOffset); + + let sunCalcResult = calculateDuskDawn(new Date(), line); + + // adding dusk dawn to timpoints + if (profile.dawn_lux_sensor == false) time_points.push({ "start_time": sunCalcResult["dawn"], "value": 0, "name": "dawn" }); + if (profile.dusk_lux_sensor == false) time_points.push({ "start_time": sunCalcResult["dusk"], "value": 1, "name": "dusk" }); + + //if dusk/dawn is true, lines will switch on/off according to lux_sensor value. In case it fails, we create lux_timepoints, to make sure lines will switch on/off (aby nam to nezostalo svietit) + //force to turn off after timestamp: dawn + dawn_lux_sensor_time_window + if (profile.dawn_lux_sensor == true) { + let [ahours, aminutes] = sunCalcResult["dawn"].split(':'); + let ad = new Date(); + ad.setHours(parseInt(ahours), parseInt(aminutes) + profile.dawn_lux_sensor_time_window, 0); + + let strDate = ad.getHours() + ":" + ad.getMinutes(); + time_points.push({ "value": 0, "start_time": strDate, "name": "luxOff" }); + } + + if (profile.dusk_lux_sensor == true) { + let [ahours, aminutes] = sunCalcResult["dusk"].split(':'); + let ad = new Date(); + ad.setHours(parseInt(ahours), parseInt(aminutes) + profile.dusk_lux_sensor_time_window, 0); + + let strDate = ad.getHours() + ":" + ad.getMinutes(); + time_points.push({ "value": 1, "start_time": strDate, "name": "luxOn" }); + //time_points.push({"value": 1, "start_time": "15:19", "name": "luxOn"}); //testing + } + } + + //sort time_points + time_points.sort(function(a, b) { + + let [ahours, aminutes] = a.start_time.split(':'); + let [bhours, bminutes] = b.start_time.split(':'); + + let ad = new Date(); + ad.setHours(parseInt(ahours), parseInt(aminutes), 0); + + let bd = new Date(); + bd.setHours(parseInt(bhours), parseInt(bminutes), 0); + + return ad.getTime() - bd.getTime(); + }); + + console.log("line timepoints ........", time_points); + + let currentValue = 0; + if (time_points.length > 0) currentValue = time_points[time_points.length - 1].value; + + monitor.info("-->comming events turn on/off lines:"); + for (let t = 0; t < time_points.length; t++) { + + let start_time = new Date(); + let [hours, minutes] = time_points[t].start_time.split(':'); + start_time.setHours(parseInt(hours), parseInt(minutes), 0); + + //task is in the past + if (now.getTime() > start_time.getTime()) { + currentValue = time_points[t].value; + + //timepoint is in past, we add 24 hours + start_time.setDate(start_time.getDate() + 1); + } + + let params = getParams(); + params.type = "relay"; + params.line = parseInt(line); + params.value = time_points[t].value; + params.tbname = relaysData[line].tbname; + params.timestamp = start_time.getTime(); + + // it timepoints are not calculated (dawn, dusk, lux_timepoint), but static points in line profile, we just repeat the task every day + if (time_points[t].name == "profileTimepoint") params.addMinutesToTimestamp = 24 * 60; + + //astro timepoints will be recalculated dynamically: + params.timePointName = time_points[t].name; + + // if astro timepoint, we save time window: + if (['luxOn', 'luxOff', 'dusk', 'dawn'].includes(params.timePointName)) { + params.dawn_lux_sensor_time_window = profile.dawn_lux_sensor_time_window; + params.dusk_lux_sensor_time_window = profile.dusk_lux_sensor_time_window; + } + + if (params.value == 0) params.info = `${params.timePointName}: turn off line: ` + line; + else if (params.value == 1) params.info = `${params.timePointName}: turn on line: ` + line; + + params.debug = true; + + //turn on/off line + tasks.push(params); + monitor.info("TimePoint params: ", params.info, start_time); + } + + monitor.info("-->time_points final", line, time_points); + + //ensure to turn on/off according to calculated currentValue + let params = getParams(); + params.type = "relay"; + params.line = parseInt(line); + params.tbname = relaysData[line].tbname; + params.value = currentValue; + params.timestamp = i; + params.debug = true; + + //logger.debug(now.toLocaleString("sk-SK")); + monitor.info("-->currentValue for relay", line, currentValue); + + //turn on/off line + if (params.value == 0) params.info = "turn off line on startup: " + line; + else if (params.value == 1) params.info = "turn on line on startup: " + line; + + tasks.push(params); + + } catch (error) { + if (profilestr !== "") { + //errLogger.error(profilestr, error); + console.log(`Cmd_mngr: Unable to process line profile ${line}. Error: `, error); + errorHandler.sendMessageToService(profilestr + "-" + error, 0, "js_error"); + } else { + turnLine("off", line, "No line profile. Switching it off on startup"); + } + } + + } + //logger.debug("tasks:"); + //logger.debug(tasks); + } + + + //NOTE: PROCESS DEFAULT BROADCASTS - Time of dusk, Time of dawn, Actual Time + if (processBroadcast) { + + let d = new Date(); + let time = d.getTime(); + //let sunCalcResult = calculateDuskDawn(); + + { + let params = getParams(); + + params.address = 0xffffffff;//broadcast + params.byte1 = sunCalcResult["dusk_hours"]; + params.byte2 = sunCalcResult["dusk_minutes"]; + params.recipient = 2;//2 broadcast, + params.register = 6;//Time of dusk + params.rw = 1;//write + params.type = "node-regular-write"; + params.timestamp = time + 60000; + params.addMinutesToTimestamp = 60 * 3; //kazde 3 hodiny zisti novy dusk + params.info = "Broadcast-duskTime"; + + tasks.push(params); + } + + { + let params = getParams(); + + params.address = 0xffffffff;//broadcast + params.byte1 = sunCalcResult["dawn_hours"]; + params.byte2 = sunCalcResult["dawn_minutes"]; + params.recipient = 2; //2 broadcast + params.register = 7;//Time of dawn + params.rw = 1;//write + params.type = "node-regular-write"; + params.timestamp = time + 60001; + params.addMinutesToTimestamp = 60 * 3; //kazde 3 hodiny zisti novy dawn + params.info = "Broadcast-dawnTime"; + + tasks.push(params); + } + + { + let params = getParams(); + + params.address = 0xffffffff;//broadcast + params.byte1 = d.getHours(); + params.byte2 = d.getMinutes(); + params.recipient = 2; //2 broadcast + params.register = 87;//Actual time + params.rw = 1;//write + params.type = "node-regular-write"; + params.timestamp = time + 60002; + params.addMinutesToTimestamp = 5; + params.info = "run broadcast: Actual time"; + + tasks.push(params); + } + + } + + //process nodes & tasks - read node's data + if (processNodes) { + + let time = Date.now(); + + for (let k in nodesData) { + let address = parseInt(k); + let tbname = nodesData[k].tbname; + let register = 0; + + for (let i = 0; i < listOfCommands.length; i++) { + + register = listOfCommands[i]; + let addMinutesToTimestamp = priorities[register]; + + let params = getParams(); + + params.address = address; + params.recipient = 1; + params.register = register; + params.type = register == 1 ? "node-dimming-read" : "node-regular-read"; + params.tbname = tbname; + params.timestamp = time + 5000 + i * 500 + addMinutesToTimestamp * 1000; //to make slight time difference + params.addMinutesToTimestamp = addMinutesToTimestamp; + params.info = "Node regular read command"; + + tasks.push(params); + } + + } + } + + + //niektore ulohy sa vygeneruju iba 1x pri starte!!! + if (!init) return; + + + //Master node FW version - modifies SETTINGS.masterNodeIsResponding + { + let params = getParams(); + params.type = "cmd-master"; + params.register = 4; + params.address = 0; + params.timestamp = 0; + params.addMinutesToTimestamp = 5; + params.tbname = SETTINGS.rvoTbName; + params.info = "Master node FW verzia"; + //params.debug = true; + + tasks.push(params); + } + + //kazdu hodinu skontrolovat nastavenie profilov + { + let params = getParams(); + params.type = "process_profiles"; + params.timestamp = Date.now() + 60001; + params.addMinutesToTimestamp = 60;//60 = every hour + params.info = "detekcia nespracovaných profilov linie a nodov"; + //params.debug = true; + + tasks.push(params); + } + + monitor.info("tasks created:", tasks.length); + } + + + /** + * We process line profile, where "astro_clock": true + * example profile: + * + "dawn_lux_sensor": true, + "dusk_lux_sensor": true, + "dawn_lux_sensor_value": 5, + "dusk_lux_sensor_value": 5, + "dawn_astro_clock_offset": 0, + "dusk_astro_clock_offset": 10, + "dawn_lux_sensor_time_window": 30, + "dusk_lux_sensor_time_window": 30, + "dawn_astro_clock_time_window": 60, + "dusk_astro_clock_time_window": 60 + + * if dawn: if currentTimestamp is in timewindow "dawnTime + and - dawn_lux_sensor_time_window" and lux value >= lux_sensor_value, we switch off the line. + * if dusk: we do oposite + * + * dawn: usvit - lux je nad hranicou - vypnem + * dusk: sumrak - lux je pod hranicou - zapnem + */ + function turnOnOffLinesAccordingToLuxSensor(lux_sensor_value) { + + let now = new Date(); + let currentTimestamp = now.getTime(); + let keys = Object.keys(relaysData); + + for (let i = 0; i < keys.length; i++) { + + let line = keys[i]; //line is turned off by default + let profilestr = relaysData[line].profile; + const contactor = relaysData[line].contactor; + + try { + + let profile = JSON.parse(profilestr); + if (Object.keys(profile).length === 0) throw ("turnOnOffLinesAccordingToLuxSensor - profile is not defined"); + + if (profile.astro_clock == true) { + let sunCalcResult = calculateDuskDawn(now, line); + + //usvit + if (profile.dawn_lux_sensor == true) { + let lux_sensor_time_window1 = sunCalcResult.dawn_time - (parseInt(profile.dawn_lux_sensor_time_window) * 1000 * 60); // LUX_SENSOR_TIME_WINDOW x 1000 x 60 --> dostaneme odpocet/pripocitanie minut + let lux_sensor_time_window2 = sunCalcResult.dawn_time + (parseInt(profile.dawn_lux_sensor_time_window) * 1000 * 60); + + if (currentTimestamp >= lux_sensor_time_window1 && currentTimestamp <= lux_sensor_time_window2) { + if (lux_sensor_value > profile.dawn_lux_sensor_value) { + if (contactor) turnLine("off", line, "Profile: dawn - turnOff line according to lux sensor"); + } + } + } + + //sumrak + if (profile.dusk_lux_sensor == true) { + let lux_sensor_time_window1 = sunCalcResult.dusk_time - (parseInt(profile.dusk_lux_sensor_time_window) * 1000 * 60); + let lux_sensor_time_window2 = sunCalcResult.dusk_time + (parseInt(profile.dusk_lux_sensor_time_window) * 1000 * 60); + + if (currentTimestamp >= lux_sensor_time_window1 && currentTimestamp <= lux_sensor_time_window2) { + if (lux_sensor_value < profile.dusk_lux_sensor_value) { + if (!contactor) turnLine("on", line, "Profile: dusk - turnOn line according to lux sensor"); + } + } + } + + } + + } catch (error) { + if (profilestr !== "") monitor.info('Error parsing profile in turnOnOffLinesAccordingToLuxSensor', error); + } + + } + + } + + /** + * function updates status and time_of_last_communication of node in the dbNodes + * it only updates if conditions are met + * it only updates time_of_last_communication of node, if the last written time was more than 10 minutes ago (600000 miliseconds) + * if newStatus of node is always receiving false, and it is already for more than SETTINGS.node_status_nok_time value, we update status to "NOK" in tb + * function returns true, if status of node needs to be updated in TB (newStatus attribute is false in this case). + */ + function updateNodeStatus(node, newStatus) { + //MASTER + if (node == 0) return; + + let nodeObj = nodesData[node]; + if (nodeObj == undefined) return; + + let nodeCurrentStatus = nodeObj.status; + const now = Date.now(); + + let data = null; + + if (nodeCurrentStatus === "OFFLINE") { + data = { status: newStatus }; + nodeDbStatusModify(node, data); + return; + } + else if (newStatus == true && nodeCurrentStatus == true && nodeObj.time_of_last_communication > now - TIME_AFTER_WE_UPDATE_LAST_NODE_COMMUNICATION) return; + else if (newStatus == true && nodeCurrentStatus == true && nodeObj.time_of_last_communication < now - TIME_AFTER_WE_UPDATE_LAST_NODE_COMMUNICATION) { + data = { time_of_last_communication: now }; + nodeDbStatusModify(node, data); + return; + } + else if (newStatus == false && nodeCurrentStatus == false) return true; + else if (newStatus == false && nodeCurrentStatus == true) { + if (nodeObj.time_of_last_communication + SETTINGS.node_status_nok_time > now) return; + else { + data = { status: newStatus }; + nodeDbStatusModify(node, data); + return true; + } + } + else if (newStatus == true && nodeCurrentStatus == false) { + data = { status: newStatus, time_of_last_communication: now }; + nodeDbStatusModify(node, data); + return; + } + + } + + + function nodeDbStatusModify(node, data) { + dbNodes.modify(data).where("node", node).make(function(builder) { + builder.callback(function(err, response) { + if (!err) { + nodesData[node] = { ...nodesData[node], ...data }; + } + }); + }); + } + + + function processDailyReport() { + + const now = Date.now(); + + for (const [key, value] of Object.entries(dailyReport)) { + + if (["name", "time", "dusk_and_dawn"].includes(key)) continue; + + let poleNumber = nodesData[key]["pole_number"]; + let line = dailyReport[key].line; + let nodeType = nodesData[key]["node_type"]; + let fullNodeName = key + + if (poleNumber && nodeType && line) { + fullNodeName = SETTINGS.rvo_number + "/" + poleNumber + "_" + line + "L_" + key + "_" + nodeType; + } else { + fullNodeName = key; + } + + if (rvo_is_on) { + + if (value.initialTs) { + if (value.initialTs + ADD_NODE_TO_REPORT_TIME < now) { + addToArrayIfUnique(reportToSend["night_no_data"], fullNodeName); + console.log('report nedostava ziadne data uz hodinu', fullNodeName); + value.initialTs = now; + } + } + if (value.dimmingIsZeroTime) { + if (value.dimmingIsZeroTime + ADD_NODE_TO_REPORT_TIME < now) { + addToArrayIfUnique(reportToSend["night_dimming=0"], fullNodeName); + console.log("report node dimming je 0 ale ma svietit", fullNodeName); + value.dimmingIsZeroTime = now; + } + } + if (value.powerIsZeroTime) { + if (value.powerIsZeroTime + ADD_NODE_TO_REPORT_TIME < now) { + addToArrayIfUnique(reportToSend["night_power=0"], fullNodeName); + console.log("report node power je 0 ale ma svietit", fullNodeName); + value.powerIsZeroTime = now; + } + } + + } else { + + let contactorStatus = relaysData[line].contactor; + if (contactorStatus === 1) { + + if (value.initialTs) { + if (value.initialTs + ADD_NODE_TO_REPORT_TIME < now) { + addToArrayIfUnique(reportToSend["day_24/7_no_data"], fullNodeName); + console.log('node je na 24/7 ale nedostava ziadne data uz hodinu', fullNodeName); + value.initialTs = now; + } + } + if (value.dimmingIsOnButShouldBeOffTime) { + if (value.dimmingIsOnButShouldBeOffTime + ADD_NODE_TO_REPORT_TIME < now) { + addToArrayIfUnique(reportToSend["day_24/7_dimming>0"], fullNodeName); + console.log("report dimming je > 0 ale nema svietit", fullNodeName); + value.dimmingIsOnButShouldBeOffTime = now; + } + } + if (value.powerIsOnButShouldBeOffTime) { + if (value.powerIsOnButShouldBeOffTime + ADD_NODE_TO_REPORT_TIME < now) { + addToArrayIfUnique(reportToSend["day_24/7_power>0"], fullNodeName); + console.log("report power je > 0 ale nema svietit", fullNodeName); + value.powerIsOnButShouldBeOffTime = now; + } + } + + } + + } + + } + + let report = {}; + report["name"] = SETTINGS.rvo_name; + report["time"] = new Date(); + report["report"] = reportToSend; + + writeToFile(F.path.root("report_data.log"), report, true); + instance.send(SEND_TO.dailyReport, report); + } + + + function dailyReportHandler() { + + if (!SETTINGS.daily_report) return; + + // after dawn we empty reportToSend and start to get data for a new day + const date = new Date(); + const hour = date.getHours(); + const minute = date.getMinutes(); + + console.log("now: ", hour, minute, "suncalc: ", sunCalcResult.dawn_hours, sunCalcResult.dawn_minutes); + + if (hour === sunCalcResult.dawn_hours) { + + //NOTE: ak je este pred usvitom, spracujeme report a posleme na cloud, ak uz je po usvite, resetujeme report plnime data noveho dna + if (minute >= sunCalcResult.dawn_minutes - 2) { + emptyReportToSend(); + emptyDailyReport(); + console.log("Podmienka 1 v dailyReport handler"); + } else { + processDailyReport(); + emptyReportToSend(); + emptyDailyReport(); + console.log("Podmienka 2 v dailyReport handler"); + } + + initialReportStatus = true; + + // ak sa funkcia spusti o hodinu alebo 2 neskor, ako je usvit (moze sa to stat, kedze kazde zapnutie/vypnutie linii odznova spusti casovac. + } else if (hour === sunCalcResult.dawn_hours + 1 || hour === sunCalcResult.dawn_hours + 2) { + if (!initialReportStatus) { + emptyReportToSend(); + emptyDailyReport(); + initialReportStatus = true; + console.log("Podmienka 3 v dailyReport handler"); + } else { + processDailyReport(); + initialReportStatus = true; + console.log("Podmienka 4 v dailyReport handler"); + } + } else { + processDailyReport(); + initialReportStatus = false; + console.log("Podmienka 5 v dailyReport handler"); + } + + console.log("initialReportStatus: ", initialReportStatus); + + } + + function emptyReportToSend() { + emptyJsObject(reportToSend); + reportToSend["contactor"] = { off: [], on: [] }; + reportToSend["night_no_data"] = []; + reportToSend["night_dimming=0"] = []; + reportToSend["night_power=0"] = []; + reportToSend["day_24/7_no_data"] = []; + reportToSend["day_24/7_dimming>0"] = []; + reportToSend["day_24/7_power>0"] = []; + console.log(`resetuje sa reportToSend`); + } + + + //NOTE: ked je initialTs stale rovnaky a zistime ze linie su vypnute (relaysData.line.contactor) - zistim, ci je node na tej linii. Vieme, ze ak je linia vypnuta je to v poriadku lebo nie je na 24/7 linii + //ak je na 24/7 linii, reportujeme, ze neprijima data + function emptyDailyReport() { + const ts = Date.now(); + emptyJsObject(dailyReport); + + //NOTE: do dailyReport dame vsetky nody a pravidelne kontrolujeme ci maju data + //ked nastane sumrak/usvit a svetla maju zacat/prestat svietit, dailyReport spravime nanovo: + for (const [key, value] of Object.entries(nodesData)) { + dailyReport[value.node] = { line: value.line, initialTs: ts }; + } + + console.log("dailyReport: ", dailyReport); + } + + + async function runTasks() { + + clearInterval(interval); + + let currentTimestamp = Date.now(); + + //sort tasks based on timestamp + tasks.sort(function(a, b) { + if (a.timestamp <= currentTimestamp && b.timestamp <= currentTimestamp) { + return a.priority - b.priority; + } + return a.timestamp - b.timestamp; + }); + + if (tasks.length == 0) { + instance.send(SEND_TO.debug, "no tasks created"); + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + if (!rsPort.isOpen) { + instance.send(SEND_TO.debug, "!rsPort.isOpen"); + //await rsPort.open(); + //console.log("Cmd-mngr: !rsPort.isOpen"); + } + + let currentTask = tasks[0]; + + if (currentTask.debug) { + //logger.debug("--->task to process", currentTask); + } + + if (currentTask.timestamp <= currentTimestamp) { + let params = { ...tasks[0] }; + + //allow terminal commands + if (SETTINGS.maintenance_mode && params.type !== "cmd-terminal") { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + let type = params.type; + let tbname = params.tbname; + let node = params.address; + let register = params.register; + let line = null; + let itIsNodeCommand; + + if (nodesData[node] !== undefined) { + line = nodesData[node].line; + itIsNodeCommand = true; + } + + if (params.line !== undefined) line = params.line; + + if (params.addMinutesToTimestamp > 0 || params.timePointName) { + tasks[0].timestamp = currentTimestamp + tasks[0].addMinutesToTimestamp * 60000; + } else { + tasks.shift(); + } + + //kontrola nespracovanych profilov nodov + //TODO: co ked niektore nody neprijimaju profily? kazdu hodinu zahltuju "tasks" array + if (type == "process_profiles") { + //na vsetky zapnutych liniach sa spracuju nespracovane profily nodov + loadRelaysData(); + interval = setInterval(runTasks, SHORT_INTERVAL); + return; + } + + //relay + if (type == "relay") { + + const timePointName = params.timePointName; + const value = params.value; + + let date = new Date(); + date.setDate(date.getDate() + 1);//next day + + let sunCalcResult; + if (timePointName) sunCalcResult = calculateDuskDawn(date, params.line); + + + if (timePointName == "dawn") { + tasks[0].timestamp = sunCalcResult.dawn_time; + } + else if (timePointName == "dusk") { + tasks[0].timestamp = sunCalcResult.dusk_time; + } + else if (timePointName == "luxOn") { + tasks[0].timestamp = sunCalcResult.dusk_time + params.dusk_lux_sensor_time_window * 60000; + } + else if (timePointName == "luxOff") { + tasks[0].timestamp = sunCalcResult.dawn_time + params.dawn_lux_sensor_time_window * 60000; + } + else if (timePointName == "profileTimepoint") { + tasks[0].timestamp = currentTimestamp + tasks[0].addMinutesToTimestamp * 60000; + } + + let info = "aplikovany bod profilu"; + let onOrOff = ""; + value == 1 ? onOrOff = "on" : onOrOff = "off"; + + turnLine(onOrOff, params.line, info); + + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + if (!SETTINGS.masterNodeIsResponding) { + //ak neodpoveda, nebudeme vykonavat ziadne commands, okrem cmd-terminal cmd-master + errorHandler.sendMessageToService("Master node is not responding"); + + let stop = true; + + if (type === "cmd-terminal" || type === "cmd-master") stop = false; + if (stop) { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + } + + let contactorStatus = 1; + if (relaysData[line] != undefined) contactorStatus = relaysData[line].contactor; + + if (line === 0 || contactorStatus === 0 || FLOW.deviceStatus.state_of_breaker[line] === "Off") { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + // TODO: -> status offline for rvo if rotary_switch_state is OFF, this is source of errors + // check if rotary_switch_state == "Off" + // state_of_braker: disconnected = true? + + if (!rsPort.isOpen) { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + //RE-CALCULATE VALUES + //set actual time for broadcast + if (register == 87 && params.recipient === 2) { + var d = new Date(); + params.byte1 = d.getHours();//h + params.byte2 = d.getMinutes();//m + } + + //SET DUSK/DAWN FOR BROADCAST + //Time of dusk + if (register == 6 && params.recipient === 2) { + + if (type != "cmd-terminal") { + params.byte1 = sunCalcResult["dusk_hours"];//h + params.byte2 = sunCalcResult["dusk_minutes"];//m + } + } + + //Time of dawn + if (register == 7 && params.recipient === 2) { + if (type != "cmd-terminal") { + params.byte1 = sunCalcResult["dawn_hours"];//h + params.byte2 = sunCalcResult["dawn_minutes"];//m + } + } + //----------------------- + + instance.send(SEND_TO.debug, "address: " + node + " register:" + register + "type: " + type); + + var startTime, endTime; + startTime = new Date(); + + let saveToTb = true; + if (!tbname) saveToTb = false; + + let resp = com_generic(node, params.recipient, params.rw, register, params.name, params.byte1, params.byte2, params.byte3, params.byte4); + let readBytes = 11; + let timeout = 4000; + + + // await keyword is important, otherwise incorrect data is returned! + await writeData(rsPort, resp, readBytes, timeout).then(function(data) { + + //sometimes happens, that status of node changes to OK, NOK even if line was turned off and should be status OFFLINE. To prevent this, we return if line contactor is 0: + if (itIsNodeCommand && line && relaysData[line].contactor !== 1) return; + + endTime = new Date(); + var timeDiff = endTime - startTime; + + //data je array z 11 bytov: 1-4 adresa, 5 status ak je status 0 - ok, nasleduju 4 byty data a 2 byty CRC + let dataBytes = data.slice(5, 9); + let result = detectIfResponseIsValid(data); + + //ak sa odpoved zacina 0 - je to v poriadku, inak je NOK + let message = result.message; // OK, NOK + let message_type = result.type; + + if (params.hasOwnProperty("debug")) { + if (params.debug) { + console.log("detected response:", result); + logger.debug("Cmd-mngr: writeData done " + message_type + " duration: " + timeDiff + " type: " + params.debug, params, result); + } + } + + let values = {}; + + //CMD FINISHED + if (message == "OK") { + + updateNodeStatus(node, true); + + //write + if (type == "set_node_profile") { + let result = cmdCounterResolve(node); + if (result == 0) { + dbNodes.modify({ processed: true }).where("node", node).make(function(builder) { + builder.callback(function(err, response) { + + sendNotification("Cmd-mngr: process cmd", SETTINGS.rvoTbName, "dimming_profile_was_successfully_received_by_node", { node: node }, "", SEND_TO.tb, instance); + + logger.debug("--> profil úspešne odoslaný na node č. " + node); + nodesData[node].processed = true; + nodeProfileSendFail.delete(node); + }); + }); + } + } + + //parse read response + if (params.rw == 0) { + values = processResponse(register, dataBytes); //read + } + + if (itIsNodeCommand) { + values.comm_status = "OK"; + values.status = "OK"; + nodesData[node].readout = { ...nodesData[node].readout, ...values }; + + + if (SETTINGS.daily_report) { + //TODO: co ak nedostavame odpovede z nodu ? Musime vyreportovat!! + //v dailyReport teda musi byt kompletny zoznam nodov a neustale kontrolovat, ci maju data, ak nie report node - neodpoveda + if (register === 1) { + + let now = Date.now(); + + if (rvo_is_on === true) { + + if ("dimmingIsOnButShouldBeOffTime" in dailyReport[node]) delete dailyReport[node].dimmingIsOnButShouldBeOffTime; + + if (values.dimming > 0) { + if ("dimmingIsZeroTime" in dailyReport[node]) delete dailyReport[node].dimmingIsZeroTime; + dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } else { + if (!("dimmingIsZeroTime" in dailyReport[node])) dailyReport[node] = { ...dailyReport[node], dimmingIsZeroTime: now, initialTs: now }; + else dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } + + } else { + + if ("dimmingIsZeroTime" in dailyReport[node]) delete dailyReport[node].dimmingIsZeroTime; + + if (values.dimming > 0) { + if (!("dimmingIsOnButShouldBeOffTime" in dailyReport[node])) dailyReport[node] = { ...dailyReport[node], dimmingIsOnButShouldBeOffTime: now, initialTs: now }; + else dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } else { + if ("dimmingIsOnButShouldBeOffTime" in dailyReport[node]) delete dailyReport[node].dimmingIsOnButShouldBeOffTime; + dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } + + } + } + + if (register === 76) { + + let now = Date.now(); + + if (rvo_is_on === true) { + + if ("powerIsOnButShouldBeOffTime" in dailyReport[node]) delete dailyReport[node].powerIsOnButShouldBeOffTime; + + if (values.power > 1) { + if ("powerIsZeroTime" in dailyReport[node]) delete dailyReport[node].powerIsZeroTime; + dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } else { + if (!("powerIsZeroTime" in dailyReport[node])) dailyReport[node] = { ...dailyReport[node], powerIsZeroTime: now, initialTs: now }; + else dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } + + } else { + + if ("powerIsZeroTime" in dailyReport[node]) delete dailyReport[node].powerIsZeroTime; + + if (values.power > 1) { + if (!("powerIsOnButShouldBeOffTime" in dailyReport[node])) dailyReport[node] = { ...dailyReport[node], powerIsOnButShouldBeOffTime: now, initialTs: now }; + else dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } else { + if ("powerIsOnButShouldBeOffTime" in dailyReport[node]) delete dailyReport[node].powerIsOnButShouldBeOffTime; + dailyReport[node] = { ...dailyReport[node], initialTs: now }; + } + + } + } + } + + } + + //master node + if (node == 0) { + sendNotification("Cmd-mngr: process cmd", SETTINGS.rvoTbName, "master_node_is_responding_again", {}, "", SEND_TO.tb, instance, "rvo_status"); + SETTINGS.masterNodeIsResponding = true; + if (register == 4) values["edge_fw_version"] = SETTINGS.edge_fw_version; + } + + if (params.debug) { + //logger.debug("saveToTb", saveToTb, tbname, values); + } + + if (saveToTb && type != "node-regular-read") { + sendTelemetry(values, tbname); + } + else { + if (type == "cmd-terminal") { + terminalCommandResponse(params, "SUCCESS", data); + } + } + + } + else { + terminalCommandResponse(params, "ERROR", data); + handleNokResponseOnRsPort("handleNOK else block", params, itIsNodeCommand, saveToTb); + + if (params.hasOwnProperty("debug")) { + if (params.debug) { + //logger.debug("writeData err: ", error, result, params); + logger.debug("writeData err: ", tbname, node, register, values); + } + } + + //logger.debug(error, result, params); + } + }).catch(function(reason) { + + //console.log("writeData catch exception", reason); + instance.send(SEND_TO.debug, reason); + + terminalCommandResponse(params, "FAILURE", null, reason); + handleNokResponseOnRsPort("handleNOK catch block", params, itIsNodeCommand, saveToTb); + + if (params.hasOwnProperty("debug")) { + if (params.debug) { + logger.debug("-->WRITE FAILED: " + reason, params.debug, params); + } + } + + }); + + } + else { + if (currentTask.debug) { + // currentTask.timestamp <= currentTimestamp && logger.debug("currentTask is not processed - task is in the future", currentTask); + } + + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + //console.log("----->runTasks - setInterval", new Date()); + interval = setInterval(runTasks, SHORT_INTERVAL); + } + + + // if node does not respond to request, we repeat request 3 times: + function repeatCommand(params) { + params.repeatCounter++; + if (params.repeatCounter < 4) { + params.timestamp = 0; + params.addMinutesToTimestamp = 0; + tasks.push(params); + } + } + + function handleNokResponseOnRsPort(message, params, itIsNodeCommand, saveToTb) { + + let node = params.address; + let register = params.register; + let type = params.type; + let tbName = params.tbname; + if (!tbName) return; + + let values = {}; + + let updateStatus = updateNodeStatus(node, false); + + if (itIsNodeCommand) { + values.comm_status = "NOK"; + nodesData[node].readout.comm_status = "NOK"; + repeatCommand(params); + } + + if (updateStatus) { + values.status = "NOK"; + nodesData[node].readout.status = "NOK"; + } + + if (type === "node-regular-read") return; + + //master node + if (node == 0) { + sendNotification("Cmd-mngr: process cmd", SETTINGS.rvoTbName, "master_node_is_not_responding", {}, "", SEND_TO.tb, instance, "rvo_status"); + logger.debug("master_node_is_not_responding", params); + SETTINGS.masterNodeIsResponding = false; + + if (register == 4) values["master_node_version"] = "NOK"; + } + + if (type == "set_node_profile") { + delete cmdCounter[node]; + logger.debug("profil nebol úspešne odoslaný na node č. ", params); + + if (!nodeProfileSendFail.has(node)) { + sendNotification("Cmd-mngr: process cmd", tbName, "configuration_of_dimming_profile_to_node_failed", { node: node }, "", SEND_TO.tb, instance); + nodeProfileSendFail.add(node); + } + } + + // console.log("------",node, register, type, itIsNodeCommand, updateStatus, saveToTb, values); + if (saveToTb) { + sendTelemetry(values, tbName); + } + + } + + + function sendNodesData() { + Object.keys(nodesData).forEach(node => { + if (nodesData[node]["status"] !== "OFFLINE") { + sendTelemetry(nodesData[node].readout, nodesData[node].tbname); + nodesData[node].readout = {}; + } + }) + } + + + /** + * function handles requests from terminal + * responseType can be "SUCCESS", "ERROR" or "FAILURE", depending on rsPort data. + * FAILURE means, that we got into catch block of writeData function. + */ + function terminalCommandResponse(params, responseType, data = null, reason = "") { //success, error, failure + + if (params.refFlowdataKey === undefined) { + //console.log("params.refFlowdataKey is undefined", params); + return; + } + + let message = null; + let type = null; + + switch (responseType) { + case "SUCCESS": + message = "cmd-terminal SUCCESS"; + type = "SUCCESS"; + break; + case "ERROR": + message = "cmd-terminal FAILED"; + type = "ERROR"; + break; + case "FAILURE": + message = "ERROR WRITE FAILED: " + reason; + type = "ERROR"; + break; + default: + type = undefined; + } + + logger.debug(message); + + //make http response + let responseObj = {} + responseObj["type"] = type; + + if (responseType == "FAILURE") responseObj["message"] = "ERROR WRITE FAILED: " + reason; + else responseObj["bytes"] = data; + + let refFlowdata = refFlowdataObj[params.refFlowdataKey]; //holds reference to httprequest flowdata + if (refFlowdata) { + refFlowdata.data = responseObj; + instance.send(SEND_TO.http_response, refFlowdata); + } + } + + + /** + * function handles tasks, that are not needed to run through masterNode. To make them run smooth without waiting for other tasks to be completed, we moved them in separate function + */ + function reportEdgeDateTimeAndNumberOfLuminaires() { + + //Number of ok and nok nodes on platform does not equals to total number of nodes. + //possible error is, that nodesData object is changing all the time. To make a proper calculation of ok,nok luminaires, we make a copy of it: + let nodesData_clone = JSON.parse(JSON.stringify(nodesData)); + + const ts = Date.now(); + const keys = Object.keys(nodesData_clone); + + const number_of_luminaires = keys.length; + let number_of_ok_luminaires = 0; + let number_of_nok_luminaires = 0; + + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let nodeObj = nodesData_clone[key]; + if (nodeObj.tbname == undefined) continue; + + if (nodeObj.status === "OFFLINE") { + nodeObj.node_status_before_offline === true ? number_of_ok_luminaires++ : number_of_nok_luminaires++; + } + else if (nodeObj.status == true) number_of_ok_luminaires++; + else number_of_nok_luminaires++; + + } + + const values = { + "number_of_luminaires": number_of_luminaires, + "number_of_ok_luminaires": number_of_ok_luminaires, + "number_of_nok_luminaires": number_of_nok_luminaires, + "edge_date_time": ts - ts % 60000 //round to full minute + }; + + sendTelemetry(values, SETTINGS.rvoTbName, ts); + } + + + function setSunCalcResult() { + //if next day, we get new dusk and dawn. To make sure, in local timezone 2:00 means 00:00 in utc (it means next day) + if (new Date().getHours() === 2) { + sunCalcResult = calculateDuskDawn(); + console.log("Novy suncalc: ", sunCalcResult); + } + } + + + function setRvoPeriod() { + + if (!SETTINGS.daily_report) return; + + const ts = Date.now(); + + previous_rvo_is_on_value = rvo_is_on; + + if (ts < sunCalcResult.dawn_time - 1_800_000) { // nodes should be on (00:00 -> 06:00 ( - pol hodina, lebo rvo vypina skor) + rvo_is_on = true; + } else if (sunCalcResult.dawn_time - 1_800_000 < ts && ts < sunCalcResult.dusk_time + 1_800_000) { // nodes should be off 06:00 -> 21:00 + rvo_is_on = false; + } else if (sunCalcResult.dusk_time + 1_800_000 < ts) { // nodes should be on 21:00 -> 00:00 + rvo_is_on = true; + } + + if (previous_rvo_is_on_value !== rvo_is_on) { + emptyDailyReport(); + console.log("rvo_is: ", rvo_is_on, previous_rvo_is_on_value); + } + } + + + function handleRsPort() { + + if (rsPort) { + rsPort.removeAllListeners(); + rsPort = null; + } + + //! rsPort LM = "/dev/ttymxc4", rsPort UNIPI = "/dev/ttyUSB0" + // const rsPort = new SerialPort("/dev/ttymxc4", { autoOpen: false }); //LM + // const rsPort = new SerialPort("/dev/ttyUSB0", { autoOpen: false }); // UNIPI + + if (SETTINGS.serial_port == "" || SETTINGS.serial_port == undefined || SETTINGS.serial_port.length === 1) SETTINGS.serial_port = "ttymxc4"; + rsPort = new SerialPort(`/dev/${SETTINGS.serial_port}`, { autoOpen: false }); + //(node:16372) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 13 data listeners added to [SerialPort]. Use emitter.setMaxListeners() to increase limit + //rsPort.setMaxListeners(0); + + rsPort.on('open', async function() { + + logger.debug("Cmd-mngr: rsPort opened success"); + + await runSyncExec(`stty -F /dev/${SETTINGS.serial_port} 115200 min 1 time 5 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke`).then(function(status) { + instance.send(SEND_TO.debug, "RPC runSyncExec - Promise Resolved:" + status); + + logger.debug(0, "RPC runSyncExec - Promise Resolved:" + status); + + }).catch(function(reason) { + instance.send(SEND_TO.debug, "Cmd-mngr: RPC runSyncExec - promise rejected:" + reason); + }); + }); + + rsPort.on('error', function(err) { + errorHandler.sendMessageToService([exports.title, "unable to open port", SETTINGS.serial_port, err.message], 0); + monitor.info("Cmd-mngr: Error on rsPort", err.message); + }); + + rsPort.on("close", () => { + monitor.info("Cmd-mngr: rsPort closed, reconnecting..."); + setTimeout(handleRsPort, 1000); + }); + + rsPort.open(); + } + + + instance.on("close", () => { + clearInterval(interval); + clearInterval(customTasksInterval); + clearInterval(setCorrectTime); + clearInterval(sendNodeReadout); + clearInterval(accelerometerInterval); + rsPort.close(); + }); + + instance.on("0", _ => { + main(); + }) + + + instance.on("2", _ => { + console.log("dailyReport, reportToSend, rvo_is_on", dailyReport, reportToSend, rvo_is_on, previous_rvo_is_on_value); + }) + + instance.on("1", async function(flowdata) { + + //instance.send(SEND_TO.debug, "on Data"); + //instance.send(SEND_TO.debug, flowdata); + + //logger.debug(flowdata.data); + + //just testing functions + if (flowdata.data == "open") { + if (!rsPort.isOpen) rsPort.open(); + return; + } + else if (flowdata.data == "close") { + rsPort.close(); + return; + } + else if (flowdata.data == "clean") { + tasks = []; + return; + } + else if (flowdata.data == "buildtasks") { + //build & run + return; + } + else if (flowdata.data == "run") { + //durations = []; + + if (tasks.length == 0) { + + buildTasks(); + + if (rsPort.isOpen) { + interval = setInterval(runTasks, 100); + } + else { + instance.send(SEND_TO.debug, "port is not opened!!!"); + } + } + } + else { + //terminal data - object + //logger.debug("flowdata", flowdata.data); + + if (typeof flowdata.data === 'object') { + //logger.debug("dido", flowdata.data); + if (flowdata.data.hasOwnProperty("sender")) { + //data from dido_controller + if (flowdata.data.sender == "dido_controller") { + + if (flowdata.data.hasOwnProperty("cmd")) { + let cmd = flowdata.data.cmd; + + if (cmd == "buildTasks") { + clearInterval(interval); + + logger.debug("-->Cmd-mngr: BUILD TASKS"); + buildTasks(); + + //logger.debug("tasks:"); + //logger.debug(tasks); + + logger.debug("-->Cmd-mngr: RUN TASKS"); + interval = setInterval(runTasks, 5000); + } + else if (cmd == "reload_relays") { + loadRelaysData(flowdata.data.line); + + if (flowdata.data.dataChanged) { + if (!flowdata.data.value) { + reportOfflineNodeStatus(flowdata.data.line); + } + else { + reportOnlineNodeStatus(flowdata.data.line); + } + } + + } + else if (cmd == "rotary_switch_state") { + let value = flowdata.data.value; + + //state was changed + if (rotary_switch_state != value) { + if (value == "Off") { + //vyreportovat vsetky svietdla + reportOfflineNodeStatus(); + } + + rotary_switch_state = value; + } + } + else if (cmd == "lux_sensor") { + lux_sensor = parseInt(flowdata.data.value); + + // POSSIBLE SOURCE OF PROBLEMS, IF USER SETS LUX TRESHOLD LEVEL GREATER THAN 100 - WE SHOULD BE CHECKING "DUSK/DAWN_LUX_SENSOR_VALUE" IN PROFILE MAYBE ?? + if (lux_sensor < 100) { + + // we send lux_sensor value to all nodes: + let params = getParams(PRIORITY_TYPES.node_broadcast); + + params.recipient = 2;//2 broadcast, address = 0 + params.address = 0xffffffff;//Broadcast + + let ba = longToByteArray(lux_sensor); + + params.byte3 = ba[1];//msb + params.byte4 = ba[0]; + params.timestamp = PRIORITY_TYPES.node_broadcast; + params.info = "run broadcast: Actual Lux level from cabinet"; + params.register = 95;//Actual Lux level from cabinet + params.rw = 1;//write + + tasks.push(params); + + //process profiles + turnOnOffLinesAccordingToLuxSensor(lux_sensor); + } + } + else if (cmd == "state_of_breaker") { + //istic linie + + breakerCounter--; + + let value = flowdata.data.value; + let line = parseInt(flowdata.data.line); + + let dataChanged = false; + if (state_of_breaker[line] != value) dataChanged = true; + + state_of_breaker[line] = value; + + let status = "OK"; + if (value == "Off") status = "NOK"; + + if (dataChanged) { + + if (relaysData.hasOwnProperty(line)) { + let tbname = relaysData[line].tbname; + + if (value == "Off") { + sendNotification("Cmd-mngr: onData", tbname, "circuit_breaker_was_turned_off_line", { line: line }, "", SEND_TO.tb, instance, "circuit_breaker"); + if (breakerCounter < 0) reportToSend["contactor"]["off"].push({ [line]: Date.now(), maintenance_mode: SETTINGS.maintenance_mode }); + } + else { + sendNotification("Cmd-mngr: onData", tbname, "circuit_breaker_was_turned_on_line", { line: line }, "", SEND_TO.tb, instance, "circuit_breaker"); + if (breakerCounter < 0) reportToSend["contactor"]["on"].push({ [line]: Date.now(), maintenance_mode: SETTINGS.maintenance_mode }); + } + + //report status liniu + sendTelemetry({ status: status }, tbname) + + //current value + if (value == "Off") reportOfflineNodeStatus(line); //vyreportovat vsetky svietidla na linii + } + + } + } + else { + logger.debug("undefined cmd", cmd); + } + } + } + + return; + } + + //data from worksys + if (flowdata.data.hasOwnProperty("topic")) { + + let data = getNested(flowdata.data, "content", "data"); + + //if we get temperature in senica from senica-prod01 + let temperature = getNested(flowdata.data, "content", "senica_temperature"); + + if (temperature !== undefined) { + temperatureInSenica = temperature; + return; + } + + if (data === undefined) { + console.log("Invalid rpc command came from platform"); + return; + } + + let command = data.params.command; + let method = data.method; + let profile = data.params.payload; + if (profile == undefined) profile = ""; + let entity = data.params.entities[0]; + let entity_type = entity.entity_type; + let tbname = entity.tb_name; + + instance.send(SEND_TO.debug, flowdata.data); + logger.debug("--->worksys", flowdata.data, data.params, entity, entity_type, command, method); + logger.debug("----------------------------"); + + if (entity_type == "street_luminaire" || entity_type === "street_luminaire_v4_1" || entity_type === "street_luminaire_v4_1cez" || entity_type === "street_luminaire_v4") { + if (method == "set_command") { + + //let command = data.params.command; + let value = data.params.payload.value; + + if (command == "dimming") { + + let nodeWasFound = false; + let keys = Object.keys(nodesData); + + //logger.debug("-----", keys); + + for (let i = 0; i < keys.length; i++) { + let node = keys[i]; + //logger.debug( node, nodesData[node], tbname); + + if (tbname == nodesData[node].tbname) { + let params = getParams(PRIORITY_TYPES.high_priority); + + value = parseInt(value); + if (value > 0) value = value + 128; + + params.type = "node-onetime-write"; + params.tbname = tbname; + params.address = node; + params.register = 1; + params.recipient = 1; + params.byte4 = value; + params.rw = 1; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'set dimming from platform'; + //params.debug = true; + + //debug(params); + logger.debug("dimming", params); + + tasks.push(params); + + setTimeout(function() { + + //spustime o 4 sekundy neskor, s prioritou PRIORITY_TYPES.high_priority + //a pridame aj vyreportovanie dimmingu + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 1; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read dimming (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + //pridame aj vyreportovanie - vykon + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 76; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read Input Power (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + //pridame aj vyreportovanie - prud svietidla + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 75; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read Input Current (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + //pridame aj vyreportovanie - power faktor - ucinnik + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 77; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read power factor (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + }, 4000); + + nodeWasFound = true; + break; + } + } + + if (!nodeWasFound) { + logger.debug("set dimming from platform", "unable to find tbname", tbname); + } + } + else { + instance.send(SEND_TO.debug, "undefined command " + command); + logger.debug("undefined command", command); + } + + return; + } + else if (method == "set_profile") { + //nastav profil nodu + logger.debug("-->set_profile for node", data.params); + logger.debug("------profile data", profile); + //instance.send(SEND_TO.debug, "set_profile" + command); + + let keys = Object.keys(nodesData); + for (let i = 0; i < keys.length; i++) { + let node = keys[i]; + if (tbname == nodesData[node].tbname) { + + if (profile != "") profile = JSON.stringify(profile); + dbNodes.modify({ processed: false, profile: profile }).where("node", node).make(function(builder) { + + builder.callback(function(err, response) { + + logger.debug("worksys - update node profile done", profile); + if (profile === "") logger.debug("worksys - update node profile done - profile is empty"); + + //profil úspešne prijatý pre node č. xx + sendNotification("Cmd-mngr", tbname, "dimming_profile_was_processed_for_node", { node: node }, profile, SEND_TO.tb, instance); + + nodesData[node].processed = false; + nodesData[node].profile = profile; + + processNodeProfile(node); + }); + }); + } + } + } + else { + + instance.send(SEND_TO.debug, "unknown method " + method); + logger.debug("unknown method", method); + + return; + } + } + + //nastav profil linie z platformy + else if (entity_type == "edb_line" || entity_type == "edb" || entity_type == "edb_line_ver4" || entity_type == "edb_ver4_se") { + //profil linie + //relays.table line:number|tbname:string|contactor:number|profile:string + //najdeme line relaysData + + if (method == "set_profile") { + + logger.debug("-->set_profile for line", data.params); + logger.debug("profile data:", profile); + + let keys = Object.keys(relaysData); + for (let i = 0; i < keys.length; i++) { + let line = keys[i]; + if (tbname == relaysData[line].tbname) { + //zmazeme tasky + removeTask({ type: "relay", line: line }); + + if (profile != "") profile = JSON.stringify(profile); + dbRelays.modify({ profile: profile }).where("line", line).make(function(builder) { + + builder.callback(function(err, response) { + + //update profile + logger.debug("worksys - update relay profile done:", profile); + instance.send(SEND_TO.debug, "worksys - update relay profile done"); + + relaysData[line].profile = profile; + + loadRelaysData(line) + logger.debug("loadRelaysData DONE for line", line); + + buildTasks({ processLineProfiles: true, line: line }); + + sendNotification("Cmd-mngr: set profile from worksys", tbname, "switching_profile_was_processed_for_line", { line: line }, profile, SEND_TO.tb, instance); + }); + }); + break; + } + } + } + else if (method == "set_command") { + let value = data.params.payload.value; + + if (command === "switch") { + + // if we receive rpc from platform, to switch maintenance mode, we set SETTINGS.maintenance_mode flow variable to value; + if (entity_type === "edb" || entity_type === "edb_ver4_se") SETTINGS.maintenance_mode = value; + + const relayObject = getObjectByTbValue(relaysData, tbname); + let line = 0; + if (isObject(relayObject)) line = relayObject.line; + + // v relaysData je contactor bud 0 alebo 1, ale z platformy prichadza true, false; + if (value == false) { + turnLine("off", line, "command received from platform"); + if(line !== 0) reportToSend["contactor"]["off"].push({ [line]: Date.now(), maintenance_mode: SETTINGS.maintenance_mode }); + } + else { + turnLine("on", line, "command received from platform"); + if(line !== 0) reportToSend["contactor"]["on"].push({ [line]: Date.now(), maintenance_mode: SETTINGS.maintenance_mode }); + } + } + } + else { + instance.send(SEND_TO.debug, "undefined method " + method); + logger.debug("undefined method", method); + } + + return; + } + else { + instance.send(SEND_TO.debug, "UNKNOW entity_type " + entity_type); + logger.debug("UNKNOW entity_type", entity_type); + } + return; + } + + //terminal + if (!rsPort.isOpen) await rsPort.open(); + + let params = flowdata.data.body; + if (params == undefined) { + //logger.debug("Cmd-mngr: flowdata.data.body is undefined"); + return; + } + + params.priority = PRIORITY_TYPES.terminal; + params.type = "cmd-terminal"; + params.tbname = ""; + params.timestamp = PRIORITY_TYPES.terminal; + params.addMinutesToTimestamp = 0;// do not repeat task!!! + params.debug = true; + + let timestamp = Date.now(); + params.refFlowdataKey = timestamp; + //params.refFlowdata = flowdata; + //refFlowdata = flowdata; + + //console.log("flowdata", flowdata); + + cleanUpRefFlowdataObj(); + + refFlowdataObj[timestamp] = flowdata; + + //fix + //params.address = params.adress; + logger.debug("received from terminal", params); + logger.debug("date/time:", new Date()); + logger.debug("tasks length:", tasks.length); + + //tasks = []; + + //add to tasks + tasks.push(params); + + } + } + }) + + + //function gets value of a nested property in an object and returns undefined if it does not exists: + function getNested(obj, ...args) { + return args.reduce((obj, level) => obj && obj[level], obj) + } + + + /** + * setCorrectTime function runs once per hour + * If it is 3 o'clock, it sets actual time, which is got from services + * https://service-prod01.worksys.io/gettime + * If also detects Read Only Filesystem once a day + */ + function setCorrectPlcTimeOnceADay() { + + const currentTime = new Date(); + if (currentTime.getHours() != 3) return; + + RESTBuilder.make(function(builder) { + + if (!builder) return; + + builder.method('GET'); + builder.url('http://192.168.252.2:8004/gettime?projects_id=1'); + + builder.callback(function(err, response, output) { + + if (err) { + console.log(err); + return; + } + + const res = output.response; + + try { + + const obj = JSON.parse(res); + let d = new Date(obj.date); + + const now = new Date(); + + let diffInMinutes = now.getTimezoneOffset(); + console.log("---->TimezoneOffset", diffInMinutes); + + if (d instanceof Date) { + + // monitor.info("----------->setCorrectPlcTimeOnceADay() current js date:", d, d.getHours()); + + let year = d.getFullYear(); + let month = addZeroBefore(d.getMonth() + 1); + let day = addZeroBefore(d.getDate()); + + let hours = addZeroBefore(d.getHours()); + let minutes = addZeroBefore(d.getMinutes()); + let seconds = addZeroBefore(d.getSeconds()); + + let dateStr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + + exec(`sudo timedatectl set-time "${dateStr}"`, (err, stdout, stderr) => { + if (err || stderr) { + console.error(err); + console.log(stderr); + console.log(dateStr); + + monitor.info("failed timedatectl set-time", err, stderr); + } + else { + monitor.info("setCorrectPlcTimeOnceADay() --> Nastaveny cas na: ", dateStr); + } + + }); + } + + } catch (error) { + logger.debug("setCorrectPlcTimeOnceADay - function error", error, res); + monitor.info("setCorrectPlcTimeOnceADay - function error", error, res); + } + + // we detect readOnlyFileSystem once an hour as well + detectReadOnlyFilesystem(); + + }); + }); + + } + + + function detectReadOnlyFilesystem() { + exec(`sudo egrep " ro,|,ro " /proc/mounts`, (err, stdout, stderr) => { + if (err || stderr) { + console.error(err); + console.log(stderr); + + } else { + //console.log("Read-only", stdout); + + let lines = stdout + ""; + lines = lines.split("\n"); + + let readOnlyDetected = ""; + for (let i = 0; i < lines.length; i++) { + if (lines[i].startsWith("/dev/mmcblk0p2")) { + readOnlyDetected = lines[i]; + } + } + + if (readOnlyDetected !== "") { + errorHandler.sendMessageToService("Detected: Read-only file system: " + readOnlyDetected); + monitor.info("Read only filesystem detected"); + } + + } + }); + } + + + + + + + + + ///helper functions + function sendTelemetry(values, tbname, date = Date.now()) { + const dataToTb = { + [tbname]: [ + { + "ts": date, + "values": values + } + ] + } + + tbHandler.sendToTb(dataToTb, instance); + } + + + function calculateDuskDawn(date, line, duskOffset = 0, dawnOffset = 0) { + + if (date === undefined) date = new Date(); + + let profilestr = ""; + if (relaysData[line] != undefined) profilestr = relaysData[line].profile; + + let result = {}; + + var times = SunCalc.getTimes(date, latitude, longitude); + let dawn = new Date(times.sunrise);//usvit + let dusk = new Date(times.sunset);//sumrak + + + //http://suncalc.net/#/48.5598,18.169,11/2021.04.07/11:06 + //https://mapa.zoznam.sk/zisti-gps-suradnice-m6 + + let dusk_astro_clock_offset = duskOffset;//minutes + let dawn_astro_clock_offset = dawnOffset;//minutes + + try { + + let profile = JSON.parse(profilestr); + if (Object.keys(profile).length === 0) throw ("profile is not defined"); + + //Jednoduchý režim + if (profile.astro_clock == false && profile.dusk_lux_sensor == false && profile.dawn_lux_sensor == false) { + + } + + //Režim astrohodín + if (profile.astro_clock == true) { + //if(profile.dusk_lux_sensor == false) + { + if (profile.hasOwnProperty("dusk_astro_clock_offset")) dusk_astro_clock_offset = parseInt(profile.dusk_astro_clock_offset); + } + + //if(profile.dawn_lux_sensor == false) + { + if (profile.hasOwnProperty("dawn_astro_clock_offset")) dawn_astro_clock_offset = parseInt(profile.dawn_astro_clock_offset); + } + + } + + } catch (error) { + if (profilestr != "") { + logger.debug(profilestr); + logger.debug(error); + } + } + + result.dusk_no_offset = addZeroBefore(dusk.getHours()) + ":" + addZeroBefore(dusk.getMinutes()); + result.dawn_no_offset = addZeroBefore(dawn.getHours()) + ":" + addZeroBefore(dawn.getMinutes()); + + dusk = new Date(dusk.getTime() + gmtOffset + dusk_astro_clock_offset * 60000); + dawn = new Date(dawn.getTime() + gmtOffset + dawn_astro_clock_offset * 60000); + + result.dusk = addZeroBefore(dusk.getHours()) + ":" + addZeroBefore(dusk.getMinutes()); + result.dusk_hours = dusk.getHours(); + result.dusk_minutes = dusk.getMinutes(); + + result.dawn = addZeroBefore(dawn.getHours()) + ":" + addZeroBefore(dawn.getMinutes()); + result.dawn_hours = dawn.getHours(); + result.dawn_minutes = dawn.getMinutes(); + + result.dusk_time = dusk.getTime(); + result.dawn_time = dawn.getTime(); + + result.dusk_astro_clock_offset = dusk_astro_clock_offset; + result.dawn_astro_clock_offset = dawn_astro_clock_offset; + + return result; + } + + + function processResponse(register, bytes) { + + let values = {}; + + let byte3 = bytes[0]; + let byte2 = bytes[1]; + let byte1 = bytes[2]; + let byte0 = bytes[3]; + + //status + if (register == 0) { + let statecode = bytesToInt(bytes); + values = { "statecode": statecode }; + return values; + } + + //Dimming, CCT + else if (register == 1) { + let brightness = 0; + let dimming = byte0; + if (dimming > 128) { + //dimming = -128; + brightness = dimming - 128; + } + + //cct + //Ak Byte3 == 1: CCT = (Byte2*256)+Byte1 + let cct; + if (byte3 == 1) cct = byte2 * 256 + byte1; + else cct = bytesToInt(bytes.slice(0, 3)); + + //cct podla auditu + + values["dimming"] = brightness; + return values; + } + + // + else if (register == 4) { + values["master_node_version"] = bytes[1] + "." + bytes[2]; + //logger.debug("FW Version", register, bytes); + } + + //Napätie + else if (register == 74) { + let voltage = (bytesToInt(bytes) * 0.1).toFixed(1); + values["voltage"] = Number(voltage); + } + + //Prúd + else if (register == 75) { + let current = bytesToInt(bytes); + values["current"] = current; + } + + //výkon + else if (register == 76) { + let power = (bytesToInt(bytes) * 0.1).toFixed(2); + values["power"] = Number(power); + } + + //účinník + else if (register == 77) { + let power_factor = Math.cos(bytesToInt(bytes) * 0.1 * (Math.PI / 180)).toFixed(2); + values["power_factor"] = Number(power_factor); + } + + //frekvencia + else if (register == 78) { + let frequency = (bytesToInt(bytes) * 0.1).toFixed(2); + values["frequency"] = Number(frequency); + } + + //energia + else if (register == 79) { + let energy = bytesToInt(bytes); + values["energy"] = energy / 1000; //energia v kWh -> delit 1000 + } + + //doba života + else if (register == 80) { + let lifetime = (bytesToInt(bytes) / 60).toFixed(2); + values["lifetime"] = Number(lifetime); + } + + //nastavenie profilu + else if (register == 8) { + let time_schedule_settings = bytesToInt(bytes); + values["time_schedule_settings"] = time_schedule_settings; + } + + //naklon - nateraz sa z nodu nevycitava! kvoli problemom s accelerometrom a vracanymi hodnotami, posielame temp a x y z vo funkcii accelerometerData() + else if (register == 84) { + values["temperature"] = byte3 >= 128 ? (byte3 - 128) * (-1) : byte3; + values["inclination_x"] = byte2 >= 128 ? (byte2 - 128) * (-1) : byte2; + values["inclination_y"] = byte1 >= 128 ? (byte1 - 128) * (-1) : byte1; + values["inclination_z"] = byte0 >= 128 ? (byte0 - 128) * (-1) : byte0; + } + + //FW verzia nodu + else if (register == 89) { + //formát: "Byte3: Byte2.Byte1 (Byte0)" + values["fw_version"] = byte3 + ":" + byte2 + "." + byte1 + "(" + byte0 + ")"; + } + + else if (register == 87 || register == 6 || register == 7) { + var d = new Date(); + d.setHours(byte3, byte2, 0, 0); + let timestamp = d.getTime(); + + //aktuálny čas + if (register == 87) values["actual_time"] = timestamp; + //čas súmraku + else if (register == 6) values["dusk_time"] = timestamp; + //čas úsvitu + else if (register == 7) values["dawn_time"] = timestamp; + } + + return values; + } + + + //byte1 MSB = data3, byte2 = data2, byte3 = data1, byte4 = data0 LSB + function com_generic(adresa, rec, rw, register, name, byte1, byte2, byte3, byte4) { + let resp = []; + + let cmd = register; + + if (typeof adresa === 'string') adresa = parseInt(adresa); + if (typeof byte1 === 'string') byte1 = parseInt(byte1); + if (typeof byte2 === 'string') byte2 = parseInt(byte2); + if (typeof byte3 === 'string') byte3 = parseInt(byte3); + if (typeof byte4 === 'string') byte4 = parseInt(byte4); + + if (rw === 0) { + cmd = cmd + 0x8000; + } + + //master + if (rec === 0) adresa = 0; + + if (rec === 2) { + adresa = 0xffffffff;//Broadcast + } + + //recipient + if (rec === 3) { + resp.push(0xFF); + resp.push(0xFF); + resp.push(0xFF); + resp.push(0xFF); + resp.push(adresa & 0xFF);//band + } + else { + resp.push((adresa >> 24) & 0xFF);//rshift + resp.push((adresa >> 16) & 0xFF); + resp.push((adresa >> 8) & 0xFF); + resp.push(adresa & 0xFF); + + if (rec === 2) { + resp.push(0xFF); + } + else resp.push(0); + } + + resp.push((cmd >> 8) & 0xFF);//rshift + resp.push(cmd & 0xFF);//band + resp.push(byte1 & 0xFF);//band + resp.push(byte2 & 0xFF);//band + resp.push(byte3 & 0xFF);//band + resp.push(byte4 & 0xFF);//band + + //let data = '12345'; + let crc = crc16('ARC', resp); + let c1 = (crc >> 8) & 0xFF; + let c2 = crc & 0xFF; + + resp.push(c1); + resp.push(c2); + + //logger.debug("checksum", crc); + //logger.debug("resp", resp); + + return resp; + + } + + + function getObjectByTbValue(object, tbname) { + return object[Object.keys(object).find(key => object[key].tbname === tbname)]; + } + + + function isObject(item) { + return (typeof item === "object" && !Array.isArray(item) && item !== null); + } + + + // we fake data, that should be received from accelerometer, as they are a bit unreliable. (temperature, x,y,z) + function accelerometerData() { + + if (temperatureInSenica === null) return; + + //clone nodesData and relaysData objects + let nodesData_clone = JSON.parse(JSON.stringify(nodesData)); + let relaysData_clone = JSON.parse(JSON.stringify(relaysData)); + + for (const key in relaysData_clone) { + + const lineData = relaysData_clone[key]; + const lineNumber = lineData.line; + const contactor = lineData.contactor; + + if (lineNumber === 0) continue; + + if (contactor === 1) { + + let date = Date.now(); + + Object.keys(nodesData_clone).forEach((node, index) => { + + setTimeout(function() { + + if (nodesData_clone[node].line === lineNumber) { + + // NOTE: if status of luminaire is NOK or OFFLINE, we do not send data; + let status = nodesData_clone[node].status; + if (status === "OFFLINE" || !status) return; + + let x = null; + if (naklony.hasOwnProperty(node)) x = naklony[node].naklon; + if (x === null) x = 0; + + sendTelemetry({ temperature: Math.round(temperatureInSenica + 10 + Math.floor(Math.random() * 3)), inclination_x: x, inclination_y: 0, inclination_z: 0 }, nodesData_clone[node].tbname, date); + } + + }, (index + 1) * 500); + }) + + } + } + } + + +} // end of instance.export + diff --git a/RVO16/flow/cmd_manager_orig.txt b/RVO16/flow/cmd_manager_orig.txt new file mode 100755 index 0000000..e92d48f --- /dev/null +++ b/RVO16/flow/cmd_manager_orig.txt @@ -0,0 +1,2800 @@ +exports.id = 'cmd_manager'; +exports.title = 'CMD Manager'; +exports.group = 'Worksys'; +exports.color = '#5D9CEC'; +exports.version = '0.0.3'; +exports.output = ['red', 'blue', 'yellow', 'blue', 'white']; +exports.input = 3; +exports.icon = 'cloud-upload'; + +exports.html = ` +
+
+
+
RPC - run RPC calls

+
+
+
@(User)
+
+
+
@(Password)
+
+
+
@(My edge)
+
+
+
+`; +exports.readme = `Manager for CMD calls`; + + +exports.install = function(instance) { + + const SerialPort = require('serialport'); + const { exec } = require('child_process'); + const { crc16 } = require('easy-crc'); + const { runSyncExec, writeData } = require('./helper/serialport_helper'); + const { bytesToInt, longToByteArray, addZeroBefore } = require('./helper/utils'); + const bitwise = require('bitwise'); + + var SunCalc = require('./helper/suncalc'); + const DataToTbHandler = require('./helper/DataToTbHandler'); + const errorHandler = require('./helper/ErrorToServiceHandler'); + const { sendNotification } = require('./helper/notification_reporter'); + const process = require('process'); + const { errLogger, logger, monitor } = require('./helper/logger'); + + //for accelerometer purposes + const { naklony } = require("../databases/accelerometer_db"); + + const dbNodes = TABLE("nodes"); + const dbRelays = TABLE("relays"); + + let GLOBALS; + let SETTINGS; + let rsPort; + let tbHandler; + + // runTasks intervals + const SHORT_INTERVAL = 30; + const LONG_INTERVAL = 300; + + //send data to following instances: + const SEND_TO = { + debug: 0, + tb: 1, + http_response: 2, + dido_controller: 3, + infoSender: 4 + } + + const PRIORITY_TYPES = { + terminal: 0, + fw_detection: 1,//reserved only for FW detection - SETTINGS.masterNodeIsResponding + high_priority: 2,//reserverd only for: read dimming / brightness (after set dimming from platform) + relay_profile: 3, + node_broadcast: 4, + node_profile: 5, + node_cmd: 6 + } + + const TIME_AFTER_WE_UPDATE_LAST_NODE_COMMUNICATION = 600000; // 10 minutes + + //list of command calls to process. Processing in runTasks function + let tasks = []; + + let interval = null;//timeout for procesing tasks + let customTasksInterval = null; // interval for reportEdgeDateTimeAndNumberOfLuminaires(); + let setCorrectTime = null; // interval for setting a correct edgeTime + let sendNodeReadout = null; // interval for sending agregate data from node + + let refFlowdataObj = {}; + + //load from settings + let latitude = 48.70826502;//48.682255758; + let longitude = 17.28455203;//17.278910807; + + const gmtOffset = 0; + + //ak nie je nastaveny + //https://www.tecmint.com/set-time-timezone-and-synchronize-time-using-timedatectl-command/ + //https://stackoverflow.com/questions/16086962/how-to-get-a-time-zone-from-a-location-using-latitude-and-longitude-coordinates + + //priorities for registers + let priorities = []; + + let minutes = 1; + priorities["1"] = minutes; // dimming + priorities["76"] = minutes; // power + + minutes = 5; + priorities["75"] = minutes; // current + priorities["79"] = minutes; // energy + priorities["87"] = minutes; // aktualny cas + //priorities["84"] = minutes; + + minutes = 10; + priorities["74"] = minutes; // voltage + priorities["77"] = minutes; // power factor + priorities["78"] = minutes; // frequency + + minutes = 60; + priorities["0"] = minutes; // statecode + priorities["6"] = minutes; // dusk + priorities["7"] = minutes; // dawn + priorities["8"] = minutes; // profile + + minutes = 60 * 24; + priorities["89"] = minutes; // verzia fw + priorities["80"] = minutes; // lifetime + + //prikazy kt sa budu spustat na dany node - see config.js in terminal-oms.app. (1 - dimming) + let listOfCommands = [0, 1, 6, 7, 8, 74, 75, 76, 77, 78, 79, 80, 87, 89]; + + let rotary_switch_state; + let lux_sensor; + let state_of_breaker = {};//key is line, value is On/Off + let disconnectedReport = {};//key is tbname, value true/false + + let relaysData; + let nodesData; + + let sunCalcResult; + let reportDuskDawn; + + //helper container for counting resolved group of commands (commands related to set profile) + let cmdCounter = {};//key is node, value is counter + + //if sending of profile to node fails, we send notification and push node into set, so we do not send notification twice + const nodeProfileSendFail = new Set(); + + //we expect to get current temperature in Senica from senica-prod01 + let temperatureInSenica = null; + let accelerometerInterval = null; + + //END OF VARIABLE SETTINGS + //-------------------------------- + + + function main() { + GLOBALS = FLOW.GLOBALS; + SETTINGS = FLOW.GLOBALS.settings; + relaysData = GLOBALS.relaysData; + nodesData = GLOBALS.nodesData; + latitude = GLOBALS.settings.latitude; + longitude = GLOBALS.settings.longitude; + + tbHandler = new DataToTbHandler(SEND_TO.tb); + tbHandler.setSender(exports.title); + + let now = new Date(); + console.log("Cmd-mngr installed", now.toLocaleString("sk-SK")); + + sunCalcResult = calculateDuskDawn(); + + reportDuskDawn = { + dusk_time: sunCalcResult.dusk_time, + dawn_time: sunCalcResult.dawn_time, + dusk_time_reported: undefined, + dawn_time_reported: undefined + }; + + handleRsPort(); + + customTasksInterval = setInterval(function() { + reportEdgeDateTimeAndNumberOfLuminaires(); + }, 120000); + reportEdgeDateTimeAndNumberOfLuminaires(); + + setCorrectTime = setInterval(setCorrectPlcTimeOnceADay, 60000 * 60); // 1 hour + setCorrectPlcTimeOnceADay(); + + sendNodeReadout = setInterval(sendNodesData, 150000); + accelerometerInterval = setInterval(accelerometerData, 60000 * 30); //30 min + } + + + function cmdCounterResolve(address) { + if (cmdCounter.hasOwnProperty(address)) { + cmdCounter[address] = cmdCounter[address] - 1; + + let result = cmdCounter[address]; + if (result == 0) delete cmdCounter[address]; + return result; + } + return -1; + } + + + function getParams(priority) { + let params = {}; + + //core rpc values + params.address = 0;//if(recipient === 0) address = 0; + params.byte1 = 0;//msb, podla dokumentacie data3 + params.byte2 = 0;//podla dokumentacie data2 + params.byte3 = 0;//podla dokumentacie data1 + params.byte4 = 0;//lsb, podla dokumentacie data0 + params.recipient = 0;//0: Master, 1: Slave, 2: Broadcast + params.register = -1;//register number + params.rw = 0;//0: read, 1: write + + //other values + //params.type = "cmd"; "relay" "cmd-terminal" "set_node_profile" "process_profiles" + //params.tbname = tbname; + params.priority = PRIORITY_TYPES.node_cmd; //default priority - if more tasks with the same timestamp, we sort them based on priority + params.timestamp = 0; //execution time - if timestamp < Date.now(), the task is processed + if (priority != undefined) { + params.timestamp = priority; + params.priority = priority; + } + + params.addMinutesToTimestamp = 0;//repeat task if value is > 0 + // if node regular readout does not respond, we repeat request + params.repeatCounter = 0; + //params.timePointName = "luxOff" // "luxOn", "dusk", "dawn", "profileTimepoint" + //params.info = ""; + //params.debug = true; // will console.log params in writeData response + + return params; + } + + + //nastav profil nodu + function processNodeProfile(node) { + if (rotary_switch_state != "Automatic") { + logger.debug("unable to process profile for node", node, "rotary_switch_state != Automatic"); + return; + } + + let nodeObj = nodesData[node]; + let line = nodeObj.line; + + if (relaysData[line].contactor == 0) { + logger.debug("line line is off", line, node); + return; + } + + if (nodeObj.processed == 1) { + //logger.debug("node was already processed", node); + return; + } + + let nodeProfile = nodeObj.profile; + logger.debug("processNodeProfile: start - set profile for ", node, nodeProfile); + if (nodeProfile) { + + try { + nodeProfile = JSON.parse(nodeProfile); + } catch (error) { + logger.debug("Cmd-mngr: Error parsing node profile", error); + } + + } + + logger.debug("processNodeProfile", node, line, nodeObj, nodeProfile); + + let timestamp = PRIORITY_TYPES.node_cmd; + + removeTask({ type: "set_node_profile", address: node }); + + if (nodeProfile === "") { + //vypneme profil nodu, posleme cmd + //Pokiaľ je hodnota rovná 1 – Profil sa zapne, ostatné bity sa nezmenia. + //Pokiaľ sa hodnota rovná 2 – profil sa vypne, ostatné bity sa nezmenia + + logger.debug("turn off profile"); + + let params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte4 = 96; + params.recipient = 1; + params.register = 8; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = 'turn off/reset node profile'; + + cmdCounter[node] = 1; + + tasks.push(params); + } + else { + let tasksProfile = []; + + //vypneme profil - Zapísať hodnotu 32 do registra Time Schedule Settings – reset profilu + let params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte4 = 96; + params.recipient = 1; + params.register = 8; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = 'turn off node profile'; + + tasksProfile.push(params); + + timestamp++; + + logger.debug("processNodeProfile: TS1 Time point a TS1 Time Point Levels ", node); + + //TS1 Time point a TS1 Time Point Levels + let register = 9; + for (let i = 0; i < nodeProfile.intervals.length; i++) { + let obj = nodeProfile.intervals[i]; + //let timePoint = obj.time_point; + let dim_value = obj.value; + + + //Reg 9 až Reg 40 + + /* + Samotný profil sa zapisuje do max. 16 párov – časový bod a úroveň. + Prázdny profil je vtedy keď časový bod obsahuje hodnotu 0xFFFFFFFF (táto hodnota sa zapíše do registrov keď sa aktivuje reset profilu do registru 8). + Páry sa prechádzajú časovo zoradené takže teoreticky je jedno v akom poradí sa zapisujú ale je lepšie ich zapisovať v chronologickom poradí od 13:00. + Časový bod má formát: + Byte 3: hodiny Byte 2: minúty Byte 1: sekundy Byte 0 – rezervované + Register úrovne má rovnaký formát ako dimming register (Reg 1). + */ + + let start_time = obj.start_time; + let t = start_time.split(":"); + //if(timePoint != undefined) t = timePoint.split(":"); + //else t = [0,0]; + + logger.debug("processNodeProfile: TS1 Time point ", (i + 1), node); + + params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte1 = parseInt(t[0]);//hh + params.byte2 = parseInt(t[1]);//mm + params.recipient = 1; + params.register = register; + params.rw = 1;//write + params.timestamp = timestamp; + params.addMinutesToTimestamp = 0; + params.info = 'TS1 Time point ' + (i + 1); + + tasksProfile.push(params); + + register++; + timestamp++; + + params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.byte4 = parseInt(dim_value) + 128;// + params.recipient = 1; + params.register = register; + params.rw = 1;//write + params.timestamp = timestamp; + params.addMinutesToTimestamp = 0; + params.info = 'TS1 Time point Levels ' + (i + 1); + + tasksProfile.push(params); + + register++; + timestamp++; + } + + //Threshold lux level for DUSK/DAWN + { + + logger.debug("processNodeProfile: Threshold lux level for DUSK/DAWN", node); + + let params = getParams(); + params.type = "set_node_profile"; + params.address = node; + params.register = 96; + params.recipient = 1; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = "Threshold lux level for DUSK/DAWN"; + + if (nodeProfile.dusk_lux_sensor) { + let v = nodeProfile.dusk_lux_sensor_value; + let ba = longToByteArray(v); + + params.byte1 = ba[1];//msb + params.byte2 = ba[0]; + } + + if (nodeProfile.dawn_lux_sensor) { + let v = nodeProfile.dawn_lux_sensor_value; + let ba = longToByteArray(v); + + params.byte3 = ba[1];//msb + params.byte4 = ba[0]; + } + + tasksProfile.push(params); + timestamp++; + + } + + //DUSK/DAWN max. adjust period + { + + logger.debug("processNodeProfile: DUSK/DAWN max. adjust period", node); + + let params = getParams(); + params.type = "set_node_profile"; + params.address = node; + params.register = 97; + params.recipient = 1; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = "DUSK/DAWN max. adjust period"; + + if (nodeProfile.astro_clock) { + let v = nodeProfile.dusk_lux_sensor_time_window; + let ba = longToByteArray(v); + + params.byte1 = ba[1];//msb + params.byte2 = ba[0]; + } + + if (nodeProfile.astro_clock) { + let v = nodeProfile.dawn_lux_sensor_time_window; + let ba = longToByteArray(v); + + params.byte3 = ba[1];//msb + params.byte4 = ba[0]; + } + + tasksProfile.push(params); + timestamp++; + + } + + //Static offset + { + + //Statický offset pre časy úsvitu a súmraku. Byte 1 je pre DUSK, Byte 0 je pre DAWN. Formát: + //Bity 0 – 6: hodnota v minútach + //Bit 7: znamienko (1 – mínus) + + logger.debug("processNodeProfile: Static offset", node); + + let params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.register = 98; + params.recipient = 1; + params.rw = 1;//write + params.timestamp = timestamp; + params.info = "Static offset"; + + if (nodeProfile.astro_clock) { + let dusk_astro_clock_offset = parseInt(nodeProfile.dusk_astro_clock_offset); + let dawn_astro_clock_offset = parseInt(nodeProfile.dawn_astro_clock_offset); + + if (dusk_astro_clock_offset < 0) { + params.byte3 = (dusk_astro_clock_offset * -1) + 128; + } + else { + params.byte3 = dusk_astro_clock_offset; + } + + if (dawn_astro_clock_offset < 0) { + params.byte4 = (dawn_astro_clock_offset * -1) + 128; + } + else { + params.byte4 = dawn_astro_clock_offset; + } + } + + tasksProfile.push(params); + timestamp++; + } + + logger.debug("Time schedule settings - turn on", node); + + params = getParams(PRIORITY_TYPES.node_cmd); + params.type = "set_node_profile"; + params.address = node; + params.register = 8; + params.recipient = 1; + params.rw = 1;//write + + //Time schedule settings + let bits = []; + + //Byte 0 (LSB): + //Bit 0 (LSB) – zapnutie/vypnutie profilov ako takých (1 – zapnuté). + bits.push(1); + //Bit 1 – 3 - zatiaľ nepoužité (zapisovať 0) + bits.push(0); + bits.push(0); + bits.push(0); + if (nodeProfile.astro_clock == true) { + //Bit 4 – ak je nastavený profil sa riadi podľa astrohodín, a je 0 tak profil je jednoduchý + bits.push(1); + } + else bits.push(0); + + //Bit 5 – zápis 1 spôsobí reset nastavení profilu (nastavenie prázdneho profilu) + bits.push(0); + + //Bity 6-7 - zatiaľ nepoužité + bits.push(0); + bits.push(0); + + params.byte4 = bitwise.byte.write(bits.reverse()); + + //Byte 2 – nastavenie pre lux senzor: + bits = []; + + //Bit 0 (LSB) – riadenie súmraku podľa lux senzoru (1 – zapnuté). Súmrak sa môže posúvať v rámci času v registri 97 podľa intenzity osvetlenia + if (nodeProfile.dusk_lux_sensor == true)//sumrak + { + bits.push(1); + } + else bits.push(0); + + //Bit 1 - riadenie úsvitu podľa lux senzoru (1 – zapnuté). Úsvit sa môže posúvať v rámci času v registri 97 podľa intenzity osvetlenia + if (nodeProfile.dawn_lux_sensor == true)//usvit + { + bits.push(1); + } + else bits.push(0); + + //Bit 2 – zdroj pre hodnotu luxov – 0 – RVO posiela hodnoty zo svojho luxmetra, 1 – node má pripojený svoj vlastný lux meter. + bits.push(0);//zatial neimplementovane + + //Bit 3 – 7 - nepoužité + bits.push(0); + bits.push(0); + bits.push(0); + bits.push(0); + bits.push(0); + + params.byte2 = bitwise.byte.write(bits.reverse()); + params.timestamp = timestamp; + params.info = "Time schedule settings - turn on"; + + tasksProfile.push(params); + + //zaver + cmdCounter[node] = tasksProfile.length; + + //tasks.push(tasksProfile); + tasks = tasks.concat(tasksProfile); + + } + + logger.debug("finished set profile for ", node); + + console.log("proces profile finished *********************") + } + + + function cleanUpRefFlowdataObj() { + let now = new Date(); + let timestamp = now.getTime(); + + //clear old refFlowdata references + let keys = Object.keys(refFlowdataObj); + for (let i = 0; i < keys.length; i++) { + let timestampKey = keys[i]; + + if ((timestamp - timestampKey) > 60 * 1000) { + console.log("cleanUpRefFlowdataObj delete", timestampKey); + delete refFlowdataObj[timestampKey]; + } + } + } + + + function removeTask(obj) { + let keys = Object.keys(obj); + tasks = tasks.filter((task) => { + + let counter = 0; + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + if (task.hasOwnProperty(key) && obj.hasOwnProperty(key)) { + if (task[key] == obj[key]) counter++; + } + } + + if (counter == keys.length) return false; + return true; + }); + } + + + process.on('uncaughtException', function(err) { + //TODO send to service + + errLogger.error('uncaughtException:', err.message) + errLogger.error(err.stack); + + errorHandler.sendMessageToService(err.message + "\n" + err.stack, 0, "js_error"); + //process.exit(1); + }) + + //te();//force error + + + function processAllNodeProfilesOnLine(line) { + for (let k in nodesData) { + if (line == nodesData[k].line) { + let node = nodesData[k].node; + let processed = nodesData[k].processed; + + if (!processed) processNodeProfile(node); + //else logger.debug( `Node ${node} profile for line ${nodesData[k].line} was already processed`); + } + } + } + + + function loadRelaysData(line) { + for (const [key, value] of Object.entries(relaysData)) { + if (key == "0") continue; + if (line != undefined) { + //ak sa jedna o update profilu linie - pozor dido_controller posiela command pre loadRelaysData + if (line != value.line) continue; + } + + if (value.contactor == 1) processAllNodeProfilesOnLine(value.line); + } + } + + + function reportOnlineNodeStatus(line) { + //Po zapnutí línie broadcastovo aktualizovať predtým čas a o 3 sek neskor - status, brightness + + logger.debug("Cmd-mngr: ----->reportOnlineNodeStatus for line", line); + + const d = new Date(); + + // broadcast actual time + let params = getParams(); + params.address = 0xffffffff;//Broadcast + params.byte1 = d.getHours(); + params.byte2 = d.getMinutes(); + params.recipient = 2;//2 broadcast, address = 0 + params.register = 87;//Actual time + params.rw = 1;//write + params.type = "node-onetime-write"; + params.timestamp = d.getTime() + 30000; + params.info = "run broadcast: Actual time"; + //params.debug = true; + + tasks.push(params); + + let sec = 3; + setTimeout(function() { + //Po zapnutí línie - spraviť hromadný refresh stavu práve zapnutých svietidiel + + let time = Date.now(); + + for (let k in nodesData) { + + //potrebujem nody k danej linii + if (line == nodesData[k].line || line == undefined) { + + let tbname = nodesData[k].tbname; + let node = nodesData[k].node; + let status = "NOK"; + + // if status of node was "OK" before switching it off, we set the node's time_of_last_communication on time, it was switched on again and send OK status to tb. + if (nodesData[k].node_status_before_offline === true || nodesData[k].status === true) { + status = "OK"; + nodesData[k].time_of_last_communication = time; + } + + nodesData[k].readout.status = status; + + updateNodeStatus(k, status === "OK" ? true : false); + if (nodesData[k].hasOwnProperty("node_status_before_offline")) delete nodesData[k].node_status_before_offline; + sendTelemetry({ status: status }, tbname, time); + + //vyreportovanie dimming, current, input power pre liniu pre vsetky nody + //Prud + { + let params = getParams(); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 75;//prud + params.recipient = 1;//slave + params.rw = 0;//read + params.timestamp = time + 4000; + params.info = 'read current'; + //params.debug = true; + tasks.push(params); + } + + //vykon + { + let params = getParams(); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 76;//výkon + params.recipient = 1;//slave + params.rw = 0;//read + params.timestamp = time + 4100; + params.info = 'read power'; + //params.debug = true; + + tasks.push(params); + } + //dimming + { + let params = getParams(); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 1;//dimming + params.recipient = 1;//slave + params.rw = 0;//read + params.timestamp = time + 4200; + params.info = 'read dimming'; + //params.debug = true; + + tasks.push(params); + } + + } + } + + }, sec * 1000); + } + + + function reportOfflineNodeStatus(line) { + + logger.info("Cmd-mngr: ------>reportOffLineNodeStatus for line ", line); + + values = {}; + values["dimming"] = 0;//brightness + values["power"] = 0;//výkon + values["current"] = 0;//prúd + values["status"] = "OFFLINE"; + + const date = Date.now(); + + Object.keys(nodesData).forEach(node => { + + //potrebujem nody k danej linii + if (line == nodesData[node].line || line == undefined) { + + let tbname = nodesData[node].tbname; + let nodeStatus = nodesData[node].status; + + //in case we have reported offline node status, we return (continue with next node) + if (nodeStatus === "OFFLINE") return; + + nodesData[node].node_status_before_offline = nodeStatus; + nodesData[node].status = "OFFLINE"; + nodesData[node].readout = {}; + + sendTelemetry({ ...values }, tbname, date); + } + }); + + } + + + function turnLine(onOrOff, line, info) { + let obj = { + line: line, + command: onOrOff, + info: info + }; + + //logger.debug("linia", line, obj); + instance.send(SEND_TO.dido_controller, obj); + } + + + function detectIfResponseIsValid(bytes) { + //ak sa odpoved zacina 0 - je to v poriadku, inak je NOK + let type = "RESPONSE"; + if (bytes.length == 1) type = "BROADCAST"; // odpoved z rsPortu na broadcast command: ["broadcast"] + else if (bytes[4] == 0) type = "RESPONSE"; + else if (bytes[4] == 1) type = "ERROR"; + else if (bytes[4] == 2) type = "EVENT"; + else type = "UNKNOWN"; + + let message = "OK"; + let error = ""; + if (type == "BROADCAST") return { message, type, error }; + + let crc = crc16('ARC', bytes.slice(0, 9)); + let c1 = (crc >> 8) & 0xFF; + let c2 = crc & 0xFF; + + if (c1 != bytes[9]) { + //CRC_ERROR + message = "NOK"; + error = "CRC_ERROR c1"; + instance.send(SEND_TO.debug, "CRC_ERROR c1"); + } + + if (c2 != bytes[10]) { + //CRC_ERROR + message = "NOK"; + error = "CRC_ERROR c2"; + instance.send(SEND_TO.debug, "CRC_ERROR c2"); + } + + //crc error + if (type != "RESPONSE") { + instance.send(SEND_TO.debug, bytes); + instance.send(SEND_TO.debug, "RESPONSE " + type + " - " + bytes[4]); + + //logger.debug(SEND_TO.debug, "RESPONSE " + type + " - " + bytes[4], bytes); + + error = "type is: " + type; + + message = "NOK"; + } + + return { message, type, error }; + } + + + //BUILD TASKS// + function buildTasks(params) { + + //return; + console.log("buidTAaasks start ****************", params); + monitor.info("buildTasks - params", params); + + let processLine; //defined line + let init = false; + let processLineProfiles = true; + let processBroadcast = true; + let processNodes = true; + + if (params == undefined) { + init = true; + tasks = []; + logger.debug("-->buildTasks clear tasks"); + } + else { + processLineProfiles = false; + processBroadcast = false; + processNodes = false; + + processLineProfiles = params.processLineProfiles; + processLine = params.line; + } + + let now = new Date(); + + //process line profiles + if (processLineProfiles) { + + let keys = Object.keys(relaysData); + + for (let i = 0; i < keys.length; i++) { + + let line = parseInt(keys[i]); + let profilestr = relaysData[line].profile; + + if (processLine != undefined) { + if (processLine != line) continue; + } + + try { + + /** + * we process line profiles: timepoints, astro clock, lux_sensor, offsets ... + */ + if (profilestr === "") throw ("Profile is not defined"); + let profile = JSON.parse(profilestr); + if (Object.keys(profile).length === 0) throw ("Profile is empty"); + + monitor.info("buildTasks: profile for line", line); + monitor.info("profile:", profile); + + let time_points = profile.intervals; + + // add name to regular profile timepoint and delete unused end_time key: + time_points.forEach(point => { + point.name = "profileTimepoint" + delete point.end_time; + }); + + //monitor.info("buildTasks: time_points", time_points); + + + /** + * if astro_clock is true, we create timepoints, that switch on/off relays accordingly. + * we need to manage, astro clock timepoints has the greatest priority - normal timepoints will not switch off/on lines before dusk or dawn + * if dawn/dusk_lux_sensor is true, it has higher priority than astro_clock switching + */ + if (profile.astro_clock == true) { + + // if astro clock true, we remove all regular profile points + time_points = []; + + let sunCalcResult = calculateDuskDawn(new Date(), line); + + // adding dusk dawn to timpoints + if (profile.dawn_lux_sensor == false) time_points.push({ "start_time": sunCalcResult["dawn"], "value": 0, "name": "dawn" }); + if (profile.dusk_lux_sensor == false) time_points.push({ "start_time": sunCalcResult["dusk"], "value": 1, "name": "dusk" }); + + //if dusk/dawn is true, lines will switch on/off according to lux_sensor value. In case it fails, we create lux_timepoints, to make sure lines will switch on/off (aby nam to nezostalo svietit) + //force to turn off after timestamp: dawn + dawn_lux_sensor_time_window + if (profile.dawn_lux_sensor == true) { + let [ahours, aminutes] = sunCalcResult["dawn"].split(':'); + let ad = new Date(); + ad.setHours(parseInt(ahours), parseInt(aminutes) + profile.dawn_lux_sensor_time_window, 0); + + let strDate = ad.getHours() + ":" + ad.getMinutes(); + time_points.push({ "value": 0, "start_time": strDate, "name": "luxOff" }); + } + + if (profile.dusk_lux_sensor == true) { + let [ahours, aminutes] = sunCalcResult["dusk"].split(':'); + let ad = new Date(); + ad.setHours(parseInt(ahours), parseInt(aminutes) + profile.dusk_lux_sensor_time_window, 0); + + let strDate = ad.getHours() + ":" + ad.getMinutes(); + time_points.push({ "value": 1, "start_time": strDate, "name": "luxOn" }); + //time_points.push({"value": 1, "start_time": "15:19", "name": "luxOn"}); //testing + } + } + + //sort time_points + time_points.sort(function(a, b) { + + let [ahours, aminutes] = a.start_time.split(':'); + let [bhours, bminutes] = b.start_time.split(':'); + + let ad = new Date(); + ad.setHours(parseInt(ahours), parseInt(aminutes), 0); + + let bd = new Date(); + bd.setHours(parseInt(bhours), parseInt(bminutes), 0); + + return ad.getTime() - bd.getTime(); + }); + + console.log("line timepoints ........", time_points); + + let currentValue = 0; + if (time_points.length > 0) currentValue = time_points[time_points.length - 1].value; + + monitor.info("-->comming events turn on/off lines:"); + for (let t = 0; t < time_points.length; t++) { + + let start_time = new Date(); + let [hours, minutes] = time_points[t].start_time.split(':'); + start_time.setHours(parseInt(hours), parseInt(minutes), 0); + + //task is in the past + if (now.getTime() > start_time.getTime()) { + currentValue = time_points[t].value; + + //timepoint is in past, we add 24 hours + start_time.setDate(start_time.getDate() + 1); + } + + let params = getParams(); + params.type = "relay"; + params.line = parseInt(line); + params.value = time_points[t].value; + params.tbname = relaysData[line].tbname; + params.timestamp = start_time.getTime(); + + // it timepoints are not calculated (dawn, dusk, lux_timepoint), but static points in line profile, we just repeat the task every day + if (time_points[t].name == "profileTimepoint") params.addMinutesToTimestamp = 24 * 60; + + //astro timepoints will be recalculated dynamically: + params.timePointName = time_points[t].name; + + // if astro timepoint, we save time window: + if (['luxOn', 'luxOff', 'dusk', 'dawn'].includes(params.timePointName)) { + params.dawn_lux_sensor_time_window = profile.dawn_lux_sensor_time_window; + params.dusk_lux_sensor_time_window = profile.dusk_lux_sensor_time_window; + } + + if (params.value == 0) params.info = `${params.timePointName}: turn off line: ` + line; + else if (params.value == 1) params.info = `${params.timePointName}: turn on line: ` + line; + + params.debug = true; + + //turn on/off line + tasks.push(params); + monitor.info("TimePoint params: ", params.info, start_time); + } + + monitor.info("-->time_points final", line, time_points); + + //ensure to turn on/off according to calculated currentValue + let params = getParams(); + params.type = "relay"; + params.line = parseInt(line); + params.tbname = relaysData[line].tbname; + params.value = currentValue; + params.timestamp = i; + params.debug = true; + + //logger.debug(now.toLocaleString("sk-SK")); + monitor.info("-->currentValue for relay", line, currentValue); + + //turn on/off line + if (params.value == 0) params.info = "turn off line on startup: " + line; + else if (params.value == 1) params.info = "turn on line on startup: " + line; + + tasks.push(params); + + } catch (error) { + if (profilestr !== "") { + //errLogger.error(profilestr, error); + console.log(`Cmd_mngr: Unable to process line profile ${line}. Error: `, error); + errorHandler.sendMessageToService(profilestr + "-" + error, 0, "js_error"); + } else { + turnLine("off", line, "No line profile. Switching it off on startup"); + } + } + + } + //logger.debug("tasks:"); + //logger.debug(tasks); + } + + + //NOTE: PROCESS DEFAULT BROADCASTS - Time of dusk, Time of dawn, Actual Time + if (processBroadcast) { + + let d = new Date(); + let time = d.getTime(); + let sunCalcResult = calculateDuskDawn(); + + { + let params = getParams(); + + params.address = 0xffffffff;//broadcast + params.byte1 = sunCalcResult["dusk_hours"]; + params.byte2 = sunCalcResult["dusk_minutes"]; + params.recipient = 2;//2 broadcast, + params.register = 6;//Time of dusk + params.rw = 1;//write + params.type = "node-regular-write"; + params.timestamp = time + 60000; + params.addMinutesToTimestamp = 60 * 3; //kazde 3 hodiny zisti novy dusk + params.info = "Broadcast-duskTime"; + + tasks.push(params); + } + + { + let params = getParams(); + + params.address = 0xffffffff;//broadcast + params.byte1 = sunCalcResult["dawn_hours"]; + params.byte2 = sunCalcResult["dawn_minutes"]; + params.recipient = 2; //2 broadcast + params.register = 7;//Time of dawn + params.rw = 1;//write + params.type = "node-regular-write"; + params.timestamp = time + 60001; + params.addMinutesToTimestamp = 60 * 3; //kazde 3 hodiny zisti novy dawn + params.info = "Broadcast-dawnTime"; + + tasks.push(params); + } + + { + let params = getParams(); + + params.address = 0xffffffff;//broadcast + params.byte1 = d.getHours(); + params.byte2 = d.getMinutes(); + params.recipient = 2; //2 broadcast + params.register = 87;//Actual time + params.rw = 1;//write + params.type = "node-regular-write"; + params.timestamp = time + 60002; + params.addMinutesToTimestamp = 5; + params.info = "run broadcast: Actual time"; + + tasks.push(params); + } + + } + + //process nodes & tasks - read node's data + if (processNodes) { + + let time = Date.now(); + + for (let k in nodesData) { + let address = parseInt(k); + let tbname = nodesData[k].tbname; + let register = 0; + + for (let i = 0; i < listOfCommands.length; i++) { + + register = listOfCommands[i]; + let addMinutesToTimestamp = priorities[register]; + + let params = getParams(); + + params.address = address; + params.recipient = 1; + params.register = register; + params.type = register == 1 ? "node-dimming-read" : "node-regular-read"; + params.tbname = tbname; + params.timestamp = time + 5000 + i * 500 + addMinutesToTimestamp * 1000; //to make slight time difference + params.addMinutesToTimestamp = addMinutesToTimestamp; + params.info = "Node regular read command"; + + tasks.push(params); + } + + } + } + + + //niektore ulohy sa vygeneruju iba 1x pri starte!!! + if (!init) return; + + + //Master node FW version - modifies SETTINGS.masterNodeIsResponding + { + let params = getParams(); + params.type = "cmd-master"; + params.register = 4; + params.address = 0; + params.timestamp = 0; + params.addMinutesToTimestamp = 5; + params.tbname = SETTINGS.rvoTbName; + params.info = "Master node FW verzia"; + //params.debug = true; + + tasks.push(params); + } + + //kazdu hodinu skontrolovat nastavenie profilov + { + let params = getParams(); + params.type = "process_profiles"; + params.timestamp = Date.now() + 60001; + params.addMinutesToTimestamp = 60;//60 = every hour + params.info = "detekcia nespracovaných profilov linie a nodov"; + //params.debug = true; + + tasks.push(params); + } + + monitor.info("tasks created:", tasks.length); + } + + + /** + * We process line profile, where "astro_clock": true + * example profile: + * + "dawn_lux_sensor": true, + "dusk_lux_sensor": true, + "dawn_lux_sensor_value": 5, + "dusk_lux_sensor_value": 5, + "dawn_astro_clock_offset": 0, + "dusk_astro_clock_offset": 10, + "dawn_lux_sensor_time_window": 30, + "dusk_lux_sensor_time_window": 30, + "dawn_astro_clock_time_window": 60, + "dusk_astro_clock_time_window": 60 + + * if dawn: if currentTimestamp is in timewindow "dawnTime + and - dawn_lux_sensor_time_window" and lux value >= lux_sensor_value, we switch off the line. + * if dusk: we do oposite + * + * dawn: usvit - lux je nad hranicou - vypnem + * dusk: sumrak - lux je pod hranicou - zapnem + */ + function turnOnOffLinesAccordingToLuxSensor(lux_sensor_value) { + + let now = new Date(); + let currentTimestamp = now.getTime(); + let keys = Object.keys(relaysData); + + for (let i = 0; i < keys.length; i++) { + + let line = keys[i]; //line is turned off by default + let profilestr = relaysData[line].profile; + const contactor = relaysData[line].contactor; + + try { + + let profile = JSON.parse(profilestr); + if (Object.keys(profile).length === 0) throw ("turnOnOffLinesAccordingToLuxSensor - profile is not defined"); + + if (profile.astro_clock == true) { + let sunCalcResult = calculateDuskDawn(now, line); + + //usvit + if (profile.dawn_lux_sensor == true) { + let lux_sensor_time_window1 = sunCalcResult.dawn_time - (parseInt(profile.dawn_lux_sensor_time_window) * 1000 * 60); // LUX_SENSOR_TIME_WINDOW x 1000 x 60 --> dostaneme odpocet/pripocitanie minut + let lux_sensor_time_window2 = sunCalcResult.dawn_time + (parseInt(profile.dawn_lux_sensor_time_window) * 1000 * 60); + + if (currentTimestamp >= lux_sensor_time_window1 && currentTimestamp <= lux_sensor_time_window2) { + if (lux_sensor_value > profile.dawn_lux_sensor_value) { + if (contactor) turnLine("off", line, "Profile: dawn - turnOff line according to lux sensor"); + } + } + } + + //sumrak + if (profile.dusk_lux_sensor == true) { + let lux_sensor_time_window1 = sunCalcResult.dusk_time - (parseInt(profile.dusk_lux_sensor_time_window) * 1000 * 60); + let lux_sensor_time_window2 = sunCalcResult.dusk_time + (parseInt(profile.dusk_lux_sensor_time_window) * 1000 * 60); + + if (currentTimestamp >= lux_sensor_time_window1 && currentTimestamp <= lux_sensor_time_window2) { + if (lux_sensor_value < profile.dusk_lux_sensor_value) { + if (!contactor) turnLine("on", line, "Profile: dusk - turnOn line according to lux sensor"); + } + } + } + + } + + } catch (error) { + if (profilestr !== "") monitor.info('Error parsing profile in turnOnOffLinesAccordingToLuxSensor', error); + } + + } + + } + + /** + * function updates status and time_of_last_communication of node in the dbNodes + * it only updates if conditions are met + * it only updates time_of_last_communication of node, if the last written time was more than 10 minutes ago (600000 miliseconds) + * if newStatus of node is always receiving false, and it is already for more than SETTINGS.node_status_nok_time value, we update status to "NOK" in tb + * function returns true, if status of node needs to be updated in TB (newStatus attribute is false in this case). + */ + function updateNodeStatus(node, newStatus) { + //MASTER + if (node == 0) return; + + let nodeObj = nodesData[node]; + if (nodeObj == undefined) return; + + let nodeCurrentStatus = nodeObj.status; + const now = Date.now(); + + let data = null; + + if (nodeCurrentStatus === "OFFLINE") { + data = { status: newStatus }; + nodeDbStatusModify(node, data); + return; + } + else if (newStatus == true && nodeCurrentStatus == true && nodeObj.time_of_last_communication > now - TIME_AFTER_WE_UPDATE_LAST_NODE_COMMUNICATION) return; + else if (newStatus == true && nodeCurrentStatus == true && nodeObj.time_of_last_communication < now - TIME_AFTER_WE_UPDATE_LAST_NODE_COMMUNICATION) { + data = { time_of_last_communication: now }; + nodeDbStatusModify(node, data); + return; + } + else if (newStatus == false && nodeCurrentStatus == false) return true; + else if (newStatus == false && nodeCurrentStatus == true) { + if (nodeObj.time_of_last_communication + SETTINGS.node_status_nok_time > now) return; + else { + data = { status: newStatus }; + nodeDbStatusModify(node, data); + return true; + } + } + else if (newStatus == true && nodeCurrentStatus == false) { + data = { status: newStatus, time_of_last_communication: now }; + nodeDbStatusModify(node, data); + return; + } + + } + + + function nodeDbStatusModify(node, data) { + dbNodes.modify(data).where("node", node).make(function(builder) { + builder.callback(function(err, response) { + if (!err) { + nodesData[node] = { ...nodesData[node], ...data }; + } + }); + }); + } + + + async function runTasks() { + + clearInterval(interval); + + let currentTimestamp = Date.now(); + + //report dusk, dawn--------------------------------- + if (reportDuskDawn.dusk_time < currentTimestamp) { + //vyreportuj iba ak nie je velky rozdiel napr. 60 sekund + if ((currentTimestamp - reportDuskDawn.dusk_time) < 60 * 1000) { + //reportovali sme? + if (reportDuskDawn.dusk_time_reported != sunCalcResult.dusk_time) { + //sendNotification("Cmd-mngr: calculated Time of dusk", SETTINGS.rvoTbName, "dusk_has_occured", { value: sunCalcResult["dusk"] }, "", SEND_TO.tb, instance); + reportDuskDawn.dusk_time_reported = sunCalcResult.dusk_time; + } + } + + var nextDay = new Date(); + nextDay.setDate(nextDay.getDate() + 1); + + sunCalcResult = calculateDuskDawn(nextDay); + reportDuskDawn.dusk_time = sunCalcResult.dusk_time; + } + + if (reportDuskDawn.dawn_time < currentTimestamp) { + //vyreportuj iba ak nie je velky rozdiel napr. 60 sekund + if ((currentTimestamp - reportDuskDawn.dawn_time) < 60 * 1000) { + //reportovali sme? + if (reportDuskDawn.dawn_time_reported != sunCalcResult.dawn_time) { + //sendNotification(": calculated Time of dawn", SETTINGS.rvoTbName, "dawn_has_occured", { value: sunCalcResult["dawn"] }, "", SEND_TO.tb, instance); + reportDuskDawn.dawn_time_reported = sunCalcResult.dawn_time; + } + } + + var nextDay = new Date(); + nextDay.setDate(nextDay.getDate() + 1); + + sunCalcResult = calculateDuskDawn(nextDay); + reportDuskDawn.dawn_time = sunCalcResult.dawn_time; + + } + //-------------------------------------------------------- + + //sort tasks based on timestamp + tasks.sort(function(a, b) { + if (a.timestamp <= currentTimestamp && b.timestamp <= currentTimestamp) { + return a.priority - b.priority; + } + return a.timestamp - b.timestamp; + }); + + if (tasks.length == 0) { + instance.send(SEND_TO.debug, "no tasks created"); + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + if (!rsPort.isOpen) { + instance.send(SEND_TO.debug, "!rsPort.isOpen"); + //await rsPort.open(); + //console.log("Cmd-mngr: !rsPort.isOpen"); + } + + let currentTask = tasks[0]; + + if (currentTask.debug) { + //logger.debug("--->task to process", currentTask); + } + + if (currentTask.timestamp <= currentTimestamp) { + let params = { ...tasks[0] }; + + //allow terminal commands + if (SETTINGS.maintenance_mode && params.type !== "cmd-terminal") { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + let type = params.type; + let tbname = params.tbname; + let node = params.address; + let register = params.register; + let line = null; + let itIsNodeCommand; + + if (nodesData[node] !== undefined) { + line = nodesData[node].line; + itIsNodeCommand = true; + } + + if (params.line !== undefined) line = params.line; + + if (params.addMinutesToTimestamp > 0 || params.timePointName) { + tasks[0].timestamp = currentTimestamp + tasks[0].addMinutesToTimestamp * 60000; + } else { + tasks.shift(); + } + + //kontrola nespracovanych profilov nodov + if (type == "process_profiles") { + //na vsetky zapnutych liniach sa spracuju nespracovane profily nodov + loadRelaysData(); + interval = setInterval(runTasks, SHORT_INTERVAL); + return; + } + + //relay + if (type == "relay") { + + const timePointName = params.timePointName; + const value = params.value; + + let date = new Date(); + date.setDate(date.getDate() + 1);//next day + + let sunCalcResult; + if (timePointName) sunCalcResult = calculateDuskDawn(date, params.line); + + if (timePointName == "dawn") { + tasks[0].timestamp = sunCalcResult.dawn_time; + } + else if (timePointName == "dusk") { + tasks[0].timestamp = sunCalcResult.dusk_time; + } + else if (timePointName == "luxOn") { + tasks[0].timestamp = sunCalcResult.dusk_time + params.dusk_lux_sensor_time_window * 60000; + } + else if (timePointName == "luxOff") { + tasks[0].timestamp = sunCalcResult.dawn_time + params.dawn_lux_sensor_time_window * 60000; + } + else if (timePointName == "profileTimepoint") { + tasks[0].timestamp = currentTimestamp + tasks[0].addMinutesToTimestamp * 60000; + } + + let info = "aplikovany bod profilu"; + let onOrOff = ""; + value == 1 ? onOrOff = "on" : onOrOff = "off"; + + turnLine(onOrOff, params.line, info); + + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + if (!SETTINGS.masterNodeIsResponding) { + //ak neodpoveda, nebudeme vykonavat ziadne commands, okrem cmd-terminal cmd-master + errorHandler.sendMessageToService("Master node is not responding"); + + let stop = true; + + if (type === "cmd-terminal" || type === "cmd-master") stop = false; + if (stop) { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + } + + let contactorStatus = 1; + if (relaysData[line] != undefined) contactorStatus = relaysData[line].contactor; + + if (line === 0 || contactorStatus === 0 || FLOW.deviceStatus.state_of_breaker[line] === "Off") { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + // TODO: -> status offline for rvo if rotary_switch_state is OFF, this is source of errors + // check if rotary_switch_state == "Off" + // state_of_braker: disconnected = true? + + if (!rsPort.isOpen) { + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + //RE-CALCULATE VALUES + //set actual time for broadcast + if (register == 87 && params.recipient === 2) { + var d = new Date(); + params.byte1 = d.getHours();//h + params.byte2 = d.getMinutes();//m + } + + //SET DUSK/DAWN FOR BROADCAST + //Time of dusk + if (register == 6 && params.recipient === 2) { + + if (type != "cmd-terminal") { + let sunCalcResult = calculateDuskDawn(); + params.byte1 = sunCalcResult["dusk_hours"];//h + params.byte2 = sunCalcResult["dusk_minutes"];//m + } + } + + //Time of dawn + if (register == 7 && params.recipient === 2) { + if (type != "cmd-terminal") { + let sunCalcResult = calculateDuskDawn(); + params.byte1 = sunCalcResult["dawn_hours"];//h + params.byte2 = sunCalcResult["dawn_minutes"];//m + } + } + //----------------------- + + instance.send(SEND_TO.debug, "address: " + node + " register:" + register + "type: " + type); + + var startTime, endTime; + startTime = new Date(); + + let saveToTb = true; + if (!tbname) saveToTb = false; + + let resp = com_generic(node, params.recipient, params.rw, register, params.name, params.byte1, params.byte2, params.byte3, params.byte4); + let readBytes = 11; + let timeout = 4000; + + + // await keyword is important, otherwise incorrect data is returned! + await writeData(rsPort, resp, readBytes, timeout).then(function(data) { + + //sometimes happens, that status of node changes to OK, NOK even if line was turned off and should be status OFFLINE. To prevent this, we return if line contactor is 0: + if (itIsNodeCommand && line && relaysData[line].contactor !== 1) return; + + endTime = new Date(); + var timeDiff = endTime - startTime; + + //data je array z 11 bytov: 1-4 adresa, 5 status ak je status 0 - ok, nasleduju 4 byty data a 2 byty CRC + let dataBytes = data.slice(5, 9); + let result = detectIfResponseIsValid(data); + + //ak sa odpoved zacina 0 - je to v poriadku, inak je NOK + let message = result.message; // OK, NOK + let message_type = result.type; + + if (params.hasOwnProperty("debug")) { + if (params.debug) { + console.log("detected response:", result); + logger.debug("Cmd-mngr: writeData done " + message_type + " duration: " + timeDiff + " type: " + params.debug, params, result); + } + } + + let values = {}; + + //CMD FINISHED + if (message == "OK") { + + updateNodeStatus(node, true); + + //write + if (type == "set_node_profile") { + let result = cmdCounterResolve(node); + if (result == 0) { + dbNodes.modify({ processed: true }).where("node", node).make(function(builder) { + builder.callback(function(err, response) { + + sendNotification("Cmd-mngr: process cmd", SETTINGS.rvoTbName, "dimming_profile_was_successfully_received_by_node", { node: node }, "", SEND_TO.tb, instance); + + logger.debug("--> profil úspešne odoslaný na node č. " + node); + nodesData[node].processed = true; + nodeProfileSendFail.delete(node); + }); + }); + } + } + + //parse read response + if (params.rw == 0) { + values = processResponse(register, dataBytes); //read + } + + if (itIsNodeCommand) { + values.comm_status = "OK"; + values.status = "OK"; + nodesData[node].readout = { ...nodesData[node].readout, ...values }; + } + + //master node + if (node == 0) { + sendNotification("Cmd-mngr: process cmd", SETTINGS.rvoTbName, "master_node_is_responding_again", {}, "", SEND_TO.tb, instance, "rvo_status"); + SETTINGS.masterNodeIsResponding = true; + if (register == 4) values["edge_fw_version"] = SETTINGS.edge_fw_version; + } + + if (params.debug) { + //logger.debug("saveToTb", saveToTb, tbname, values); + } + + if (saveToTb && type != "node-regular-read") { + sendTelemetry(values, tbname); + } + else { + if (type == "cmd-terminal") { + terminalCommandResponse(params, "SUCCESS", data); + } + } + + } + else { + terminalCommandResponse(params, "ERROR", data); + handleNokResponseOnRsPort("handleNOK else block", params, itIsNodeCommand, saveToTb); + + if (params.hasOwnProperty("debug")) { + if (params.debug) { + //logger.debug("writeData err: ", error, result, params); + logger.debug("writeData err: ", tbname, node, register, values); + } + } + + //logger.debug(error, result, params); + } + }).catch(function(reason) { + + //console.log("writeData catch exception", reason); + instance.send(SEND_TO.debug, reason); + + terminalCommandResponse(params, "FAILURE", null, reason); + handleNokResponseOnRsPort("handleNOK catch block", params, itIsNodeCommand, saveToTb); + + if (params.hasOwnProperty("debug")) { + if (params.debug) { + logger.debug("-->WRITE FAILED: " + reason, params.debug, params); + } + } + + }); + + } + else { + if (currentTask.debug) { + // currentTask.timestamp <= currentTimestamp && logger.debug("currentTask is not processed - task is in the future", currentTask); + } + + interval = setInterval(runTasks, LONG_INTERVAL); + return; + } + + //console.log("----->runTasks - setInterval", new Date()); + interval = setInterval(runTasks, SHORT_INTERVAL); + } + + + // if node does not respond to request, we repeat request 3 times: + function repeatCommand(params) { + params.repeatCounter++; + if (params.repeatCounter < 4) { + params.timestamp = 0; + params.addMinutesToTimestamp = 0; + tasks.push(params); + } + } + + function handleNokResponseOnRsPort(message, params, itIsNodeCommand, saveToTb) { + + let node = params.address; + let register = params.register; + let type = params.type; + let tbName = params.tbname; + if (!tbName) return; + + let values = {}; + + let updateStatus = updateNodeStatus(node, false); + + if (itIsNodeCommand) { + values.comm_status = "NOK"; + nodesData[node].readout.comm_status = "NOK"; + repeatCommand(params); + } + + if (updateStatus) { + values.status = "NOK"; + nodesData[node].readout.status = "NOK"; + } + + if (type === "node-regular-read") return; + + //master node + if (node == 0) { + sendNotification("Cmd-mngr: process cmd", SETTINGS.rvoTbName, "master_node_is_not_responding", {}, "", SEND_TO.tb, instance, "rvo_status"); + logger.debug("master_node_is_not_responding", params); + SETTINGS.masterNodeIsResponding = false; + + if (register == 4) values["master_node_version"] = "NOK"; + } + + if (type == "set_node_profile") { + delete cmdCounter[node]; + logger.debug("profil nebol úspešne odoslaný na node č. ", params); + + if (!nodeProfileSendFail.has(node)) { + sendNotification("Cmd-mngr: process cmd", tbName, "configuration_of_dimming_profile_to_node_failed", { node: node }, "", SEND_TO.tb, instance); + nodeProfileSendFail.add(node); + } + } + + // console.log("------",node, register, type, itIsNodeCommand, updateStatus, saveToTb, values); + if (saveToTb) { + sendTelemetry(values, tbName); + } + + } + + + function sendNodesData() { + Object.keys(nodesData).forEach(node => { + if (nodesData[node]["status"] !== "OFFLINE") { + sendTelemetry(nodesData[node].readout, nodesData[node].tbname); + nodesData[node].readout = {}; + } + }) + } + + + /** + * function handles requests from terminal + * responseType can be "SUCCESS", "ERROR" or "FAILURE", depending on rsPort data. + * FAILURE means, that we got into catch block of writeData function. + */ + function terminalCommandResponse(params, responseType, data = null, reason = "") { //success, error, failure + + if (params.refFlowdataKey === undefined) { + //console.log("params.refFlowdataKey is undefined", params); + return; + } + + let message = null; + let type = null; + + switch (responseType) { + case "SUCCESS": + message = "cmd-terminal SUCCESS"; + type = "SUCCESS"; + break; + case "ERROR": + message = "cmd-terminal FAILED"; + type = "ERROR"; + break; + case "FAILURE": + message = "ERROR WRITE FAILED: " + reason; + type = "ERROR"; + break; + default: + type = undefined; + } + + logger.debug(message); + + //make http response + let responseObj = {} + responseObj["type"] = type; + + if (responseType == "FAILURE") responseObj["message"] = "ERROR WRITE FAILED: " + reason; + else responseObj["bytes"] = data; + + let refFlowdata = refFlowdataObj[params.refFlowdataKey]; //holds reference to httprequest flowdata + if (refFlowdata) { + refFlowdata.data = responseObj; + instance.send(SEND_TO.http_response, refFlowdata); + } + } + + + /** + * function handles tasks, that are not needed to run through masterNode. To make them run smooth without waiting for other tasks to be completed, we moved them in separate function + */ + function reportEdgeDateTimeAndNumberOfLuminaires() { + + //Number of ok and nok nodes on platform does not equals to total number of nodes. + //possible error is, that nodesData object is changing all the time. To make a proper calculation of ok,nok luminaires, we make a copy of it: + let nodesData_clone = JSON.parse(JSON.stringify(nodesData)); + + const ts = Date.now(); + const keys = Object.keys(nodesData_clone); + + const number_of_luminaires = keys.length; + let number_of_ok_luminaires = 0; + let number_of_nok_luminaires = 0; + + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let nodeObj = nodesData_clone[key]; + if (nodeObj.tbname == undefined) continue; + + if (nodeObj.status === "OFFLINE") { + nodeObj.node_status_before_offline === true ? number_of_ok_luminaires++ : number_of_nok_luminaires++; + } + else if (nodeObj.status == true) number_of_ok_luminaires++; + else number_of_nok_luminaires++; + + } + + const values = { + "number_of_luminaires": number_of_luminaires, + "number_of_ok_luminaires": number_of_ok_luminaires, + "number_of_nok_luminaires": number_of_nok_luminaires, + "edge_date_time": ts - ts % 60000 //round to full minute + }; + + sendTelemetry(values, SETTINGS.rvoTbName, ts); + } + + + function handleRsPort() { + + if (rsPort) { + rsPort.removeAllListeners(); + rsPort = null; + } + + //! rsPort LM = "/dev/ttymxc4", rsPort UNIPI = "/dev/ttyUSB0" + // const rsPort = new SerialPort("/dev/ttymxc4", { autoOpen: false }); //LM + // const rsPort = new SerialPort("/dev/ttyUSB0", { autoOpen: false }); // UNIPI + + if (SETTINGS.serial_port == "" || SETTINGS.serial_port == undefined || SETTINGS.serial_port.length === 1) SETTINGS.serial_port = "ttymxc4"; + rsPort = new SerialPort(`/dev/${SETTINGS.serial_port}`, { autoOpen: false }); + //(node:16372) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 13 data listeners added to [SerialPort]. Use emitter.setMaxListeners() to increase limit + //rsPort.setMaxListeners(0); + + rsPort.on('open', async function() { + + logger.debug("Cmd-mngr: rsPort opened success"); + + await runSyncExec(`stty -F /dev/${SETTINGS.serial_port} 115200 min 1 time 5 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke`).then(function(status) { + instance.send(SEND_TO.debug, "RPC runSyncExec - Promise Resolved:" + status); + + logger.debug(0, "RPC runSyncExec - Promise Resolved:" + status); + + }).catch(function(reason) { + instance.send(SEND_TO.debug, "Cmd-mngr: RPC runSyncExec - promise rejected:" + reason); + }); + }); + + rsPort.on('error', function(err) { + errorHandler.sendMessageToService([exports.title, "unable to open port", SETTINGS.serial_port, err.message], 0); + monitor.info("Cmd-mngr: Error on rsPort", err.message); + }); + + rsPort.on("close", () => { + monitor.info("Cmd-mngr: rsPort closed, reconnecting..."); + setTimeout(handleRsPort, 1000); + }); + + rsPort.open(); + } + + + instance.on("close", () => { + clearInterval(interval); + clearInterval(customTasksInterval); + clearInterval(setCorrectTime); + clearInterval(sendNodeReadout); + clearInterval(accelerometerInterval); + rsPort.close(); + }); + + instance.on("0", _ => { + main(); + }) + + instance.on("1", async function(flowdata) { + + //instance.send(SEND_TO.debug, "on Data"); + //instance.send(SEND_TO.debug, flowdata); + + //logger.debug(flowdata.data); + + //just testing functions + if (flowdata.data == "open") { + if (!rsPort.isOpen) rsPort.open(); + return; + } + else if (flowdata.data == "close") { + rsPort.close(); + return; + } + else if (flowdata.data == "clean") { + tasks = []; + return; + } + else if (flowdata.data == "buildtasks") { + //build & run + return; + } + else if (flowdata.data == "run") { + //durations = []; + + if (tasks.length == 0) { + + buildTasks(); + + if (rsPort.isOpen) { + interval = setInterval(runTasks, 100); + } + else { + instance.send(SEND_TO.debug, "port is not opened!!!"); + } + } + } + else { + //terminal data - object + //logger.debug("flowdata", flowdata.data); + + if (typeof flowdata.data === 'object') { + //logger.debug("dido", flowdata.data); + if (flowdata.data.hasOwnProperty("sender")) { + //data from dido_controller + if (flowdata.data.sender == "dido_controller") { + + if (flowdata.data.hasOwnProperty("cmd")) { + let cmd = flowdata.data.cmd; + + if (cmd == "buildTasks") { + clearInterval(interval); + + logger.debug("-->Cmd-mngr: BUILD TASKS"); + buildTasks(); + + //logger.debug("tasks:"); + //logger.debug(tasks); + + logger.debug("-->Cmd-mngr: RUN TASKS"); + interval = setInterval(runTasks, 5000); + } + else if (cmd == "reload_relays") { + loadRelaysData(flowdata.data.line); + + if (flowdata.data.dataChanged) { + if (!flowdata.data.value) { + reportOfflineNodeStatus(flowdata.data.line); + } + else { + reportOnlineNodeStatus(flowdata.data.line); + } + } + + } + else if (cmd == "rotary_switch_state") { + let value = flowdata.data.value; + + //state was changed + if (rotary_switch_state != value) { + if (value == "Off") { + //vyreportovat vsetky svietdla + reportOfflineNodeStatus(); + } + + rotary_switch_state = value; + } + } + else if (cmd == "lux_sensor") { + lux_sensor = parseInt(flowdata.data.value); + + // POSSIBLE SOURCE OF PROBLEMS, IF USER SETS LUX TRESHOLD LEVEL GREATER THAN 100 - WE SHOULD BE CHECKING "DUSK/DAWN_LUX_SENSOR_VALUE" IN PROFILE MAYBE ?? + if (lux_sensor < 100) { + + // we send lux_sensor value to all nodes: + let params = getParams(PRIORITY_TYPES.node_broadcast); + + params.recipient = 2;//2 broadcast, address = 0 + params.address = 0xffffffff;//Broadcast + + let ba = longToByteArray(lux_sensor); + + params.byte3 = ba[1];//msb + params.byte4 = ba[0]; + params.timestamp = PRIORITY_TYPES.node_broadcast; + params.info = "run broadcast: Actual Lux level from cabinet"; + params.register = 95;//Actual Lux level from cabinet + params.rw = 1;//write + + tasks.push(params); + + //process profiles + turnOnOffLinesAccordingToLuxSensor(lux_sensor); + } + } + else if (cmd == "state_of_breaker") { + //istic linie + let value = flowdata.data.value; + let line = parseInt(flowdata.data.line); + + let dataChanged = false; + if (state_of_breaker[line] != value) dataChanged = true; + + state_of_breaker[line] = value; + + let status = "OK"; + if (value == "Off") status = "NOK"; + + if (dataChanged) { + + if (relaysData.hasOwnProperty(line)) { + let tbname = relaysData[line].tbname; + + if (value == "Off") sendNotification("Cmd-mngr: onData", tbname, "circuit_breaker_was_turned_off_line", { line: line }, "", SEND_TO.tb, instance, "circuit_breaker"); + else sendNotification("Cmd-mngr: onData", tbname, "circuit_breaker_was_turned_on_line", { line: line }, "", SEND_TO.tb, instance, "circuit_breaker"); + + //report status liniu + sendTelemetry({ status: status }, tbname) + + //current value + if (value == "Off") reportOfflineNodeStatus(line); //vyreportovat vsetky svietidla na linii + } + + } + } + else { + logger.debug("undefined cmd", cmd); + } + } + } + + return; + } + + //data from worksys + if (flowdata.data.hasOwnProperty("topic")) { + + let data = getNested(flowdata.data, "content", "data"); + + //if we get temperature in senica from senica-prod01 + let temperature = getNested(flowdata.data, "content", "senica_temperature"); + + if (temperature !== undefined) { + temperatureInSenica = temperature; + return; + } + + if (data === undefined) { + console.log("Invalid rpc command came from platform"); + return; + } + + let command = data.params.command; + let method = data.method; + let profile = data.params.payload; + if (profile == undefined) profile = ""; + let entity = data.params.entities[0]; + let entity_type = entity.entity_type; + let tbname = entity.tb_name; + + instance.send(SEND_TO.debug, flowdata.data); + logger.debug("--->worksys", flowdata.data, data.params, entity, entity_type, command, method); + logger.debug("----------------------------"); + + if (entity_type == "street_luminaire" || entity_type === "street_luminaire_v4_1" || entity_type === "street_luminaire_v4_1cez" || entity_type === "street_luminaire_v4") { + if (method == "set_command") { + + //let command = data.params.command; + let value = data.params.payload.value; + + if (command == "dimming") { + + let nodeWasFound = false; + let keys = Object.keys(nodesData); + + //logger.debug("-----", keys); + + for (let i = 0; i < keys.length; i++) { + let node = keys[i]; + //logger.debug( node, nodesData[node], tbname); + + if (tbname == nodesData[node].tbname) { + let params = getParams(PRIORITY_TYPES.high_priority); + + value = parseInt(value); + if (value > 0) value = value + 128; + + params.type = "node-onetime-write"; + params.tbname = tbname; + params.address = node; + params.register = 1; + params.recipient = 1; + params.byte4 = value; + params.rw = 1; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'set dimming from platform'; + //params.debug = true; + + //debug(params); + logger.debug("dimming", params); + + tasks.push(params); + + setTimeout(function() { + + //spustime o 4 sekundy neskor, s prioritou PRIORITY_TYPES.high_priority + //a pridame aj vyreportovanie dimmingu + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 1; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read dimming (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + //pridame aj vyreportovanie - vykon + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 76; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read Input Power (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + //pridame aj vyreportovanie - prud svietidla + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 75; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read Input Current (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + //pridame aj vyreportovanie - power faktor - ucinnik + { + let params = getParams(PRIORITY_TYPES.high_priority); + + params.type = "node-onetime-read"; + params.tbname = tbname; + params.address = node; + params.register = 77; + params.recipient = 1; + params.rw = 0; + params.timestamp = PRIORITY_TYPES.high_priority; + params.info = 'read power factor (after set dimming from platform)'; + //params.debug = true; + + tasks.push(params); + } + + }, 4000); + + nodeWasFound = true; + break; + } + } + + if (!nodeWasFound) { + logger.debug("set dimming from platform", "unable to find tbname", tbname); + } + } + else { + instance.send(SEND_TO.debug, "undefined command " + command); + logger.debug("undefined command", command); + } + + return; + } + else if (method == "set_profile") { + //nastav profil nodu + logger.debug("-->set_profile for node", data.params); + logger.debug("------profile data", profile); + //instance.send(SEND_TO.debug, "set_profile" + command); + + let keys = Object.keys(nodesData); + for (let i = 0; i < keys.length; i++) { + let node = keys[i]; + if (tbname == nodesData[node].tbname) { + + if (profile != "") profile = JSON.stringify(profile); + dbNodes.modify({ processed: false, profile: profile }).where("node", node).make(function(builder) { + + builder.callback(function(err, response) { + + logger.debug("worksys - update node profile done", profile); + if (profile === "") logger.debug("worksys - update node profile done - profile is empty"); + + //profil úspešne prijatý pre node č. xx + sendNotification("Cmd-mngr", tbname, "dimming_profile_was_processed_for_node", { node: node }, profile, SEND_TO.tb, instance); + + nodesData[node].processed = false; + nodesData[node].profile = profile; + + processNodeProfile(node); + }); + }); + } + } + } + else { + + instance.send(SEND_TO.debug, "unknown method " + method); + logger.debug("unknown method", method); + + return; + } + } + + //nastav profil linie z platformy + else if (entity_type == "edb_line" || entity_type == "edb" || entity_type == "edb_line_ver4" || entity_type == "edb_ver4_se") { + //profil linie + //relays.table line:number|tbname:string|contactor:number|profile:string + //najdeme line relaysData + + if (method == "set_profile") { + + logger.debug("-->set_profile for line", data.params); + logger.debug("profile data:", profile); + + let keys = Object.keys(relaysData); + for (let i = 0; i < keys.length; i++) { + let line = keys[i]; + if (tbname == relaysData[line].tbname) { + //zmazeme tasky + removeTask({ type: "relay", line: line }); + + if (profile != "") profile = JSON.stringify(profile); + dbRelays.modify({ profile: profile }).where("line", line).make(function(builder) { + + builder.callback(function(err, response) { + + //update profile + logger.debug("worksys - update relay profile done:", profile); + instance.send(SEND_TO.debug, "worksys - update relay profile done"); + + relaysData[line].profile = profile; + + loadRelaysData(line) + logger.debug("loadRelaysData DONE for line", line); + + buildTasks({ processLineProfiles: true, line: line }); + + sendNotification("Cmd-mngr: set profile from worksys", tbname, "switching_profile_was_processed_for_line", { line: line }, profile, SEND_TO.tb, instance); + }); + }); + break; + } + } + } + else if (method == "set_command") { + let value = data.params.payload.value; + + if (command === "switch") { + + // if we receive rpc from platform, to switch maintenance mode, we set SETTINGS.maintenance_mode flow variable to value; + if (entity_type === "edb" || entity_type === "edb_ver4_se") SETTINGS.maintenance_mode = value; + + const relayObject = getObjectByTbValue(relaysData, tbname); + let line = 0; + if (isObject(relayObject)) line = relayObject.line; + + // v relaysData je contactor bud 0 alebo 1, ale z platformy prichadza true, false; + if (value == false) turnLine("off", line, "command received from platform"); + else turnLine("on", line, "command received from platform"); + } + } + else { + instance.send(SEND_TO.debug, "undefined method " + method); + logger.debug("undefined method", method); + } + + return; + } + else { + instance.send(SEND_TO.debug, "UNKNOW entity_type " + entity_type); + logger.debug("UNKNOW entity_type", entity_type); + } + return; + } + + //terminal + if (!rsPort.isOpen) await rsPort.open(); + + let params = flowdata.data.body; + if (params == undefined) { + //logger.debug("Cmd-mngr: flowdata.data.body is undefined"); + return; + } + + params.priority = PRIORITY_TYPES.terminal; + params.type = "cmd-terminal"; + params.tbname = ""; + params.timestamp = PRIORITY_TYPES.terminal; + params.addMinutesToTimestamp = 0;// do not repeat task!!! + params.debug = true; + + let timestamp = Date.now(); + params.refFlowdataKey = timestamp; + //params.refFlowdata = flowdata; + //refFlowdata = flowdata; + + //console.log("flowdata", flowdata); + + cleanUpRefFlowdataObj(); + + refFlowdataObj[timestamp] = flowdata; + + //fix + //params.address = params.adress; + logger.debug("received from terminal", params); + logger.debug("date/time:", new Date()); + logger.debug("tasks length:", tasks.length); + + //tasks = []; + + //add to tasks + tasks.push(params); + + } + } + }) + + + //function gets value of a nested property in an object and returns undefined if it does not exists: + function getNested(obj, ...args) { + return args.reduce((obj, level) => obj && obj[level], obj) + } + + + /** + * setCorrectTime function runs once per hour + * If it is 3 o'clock, it sets actual time, which is got from services + * https://service-prod01.worksys.io/gettime + * If also detects Read Only Filesystem once a day + */ + function setCorrectPlcTimeOnceADay() { + + const currentTime = new Date(); + if (currentTime.getHours() != 3) return; + + RESTBuilder.make(function(builder) { + + if (!builder) return; + + builder.method('GET'); + builder.url('http://192.168.252.2:8004/gettime?projects_id=1'); + + builder.callback(function(err, response, output) { + + if (err) { + console.log(err); + return; + } + + const res = output.response; + + try { + + const obj = JSON.parse(res); + let d = new Date(obj.date); + + const now = new Date(); + + let diffInMinutes = now.getTimezoneOffset(); + console.log("---->TimezoneOffset", diffInMinutes); + + if (d instanceof Date) { + + // monitor.info("----------->setCorrectPlcTimeOnceADay() current js date:", d, d.getHours()); + + let year = d.getFullYear(); + let month = addZeroBefore(d.getMonth() + 1); + let day = addZeroBefore(d.getDate()); + + let hours = addZeroBefore(d.getHours()); + let minutes = addZeroBefore(d.getMinutes()); + let seconds = addZeroBefore(d.getSeconds()); + + let dateStr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + + exec(`sudo timedatectl set-time "${dateStr}"`, (err, stdout, stderr) => { + if (err || stderr) { + console.error(err); + console.log(stderr); + console.log(dateStr); + + monitor.info("failed timedatectl set-time", err, stderr); + } + else { + monitor.info("setCorrectPlcTimeOnceADay() --> Nastaveny cas na: ", dateStr); + } + + }); + } + + } catch (error) { + logger.debug("setCorrectPlcTimeOnceADay - function error", error, res); + monitor.info("setCorrectPlcTimeOnceADay - function error", error, res); + } + + // we detect readOnlyFileSystem once an hour as well + detectReadOnlyFilesystem(); + + }); + }); + + } + + + function detectReadOnlyFilesystem() { + exec(`sudo egrep " ro,|,ro " /proc/mounts`, (err, stdout, stderr) => { + if (err || stderr) { + console.error(err); + console.log(stderr); + + } else { + //console.log("Read-only", stdout); + + let lines = stdout + ""; + lines = lines.split("\n"); + + let readOnlyDetected = ""; + for (let i = 0; i < lines.length; i++) { + if (lines[i].startsWith("/dev/mmcblk0p2")) { + readOnlyDetected = lines[i]; + } + } + + if (readOnlyDetected !== "") { + errorHandler.sendMessageToService("Detected: Read-only file system: " + readOnlyDetected); + monitor.info("Read only filesystem detected"); + } + + } + }); + } + + + + + + + + + ///helper functions + function sendTelemetry(values, tbname, date = Date.now()) { + const dataToTb = { + [tbname]: [ + { + "ts": date, + "values": values + } + ] + } + + tbHandler.sendToTb(dataToTb, instance); + } + + function calculateDuskDawn(date, line, duskOffset = 0, dawnOffset = 0) { + + if (date === undefined) date = new Date(); + //if(duskOffset === undefined) duskOffset = 0; + //if(dawnOffset === undefined) dawnOffset = 0; + + //let line = keys[i]; + let profilestr = ""; + if (relaysData[line] != undefined) profilestr = relaysData[line].profile; + + let result = {}; + + var times = SunCalc.getTimes(date, latitude, longitude); + let dawn = new Date(times.sunrise);//usvit + let dusk = new Date(times.sunset);//sumrak + + + //http://suncalc.net/#/48.5598,18.169,11/2021.04.07/11:06 + //https://mapa.zoznam.sk/zisti-gps-suradnice-m6 + + + let dusk_astro_clock_offset = duskOffset;//minutes + let dawn_astro_clock_offset = dawnOffset;//minutes + + try { + + let profile = JSON.parse(profilestr); + if (Object.keys(profile).length === 0) throw ("profile is not defined"); + + //Jednoduchý režim + if (profile.astro_clock == false && profile.dusk_lux_sensor == false && profile.dawn_lux_sensor == false) { + + } + + //Režim astrohodín + if (profile.astro_clock == true) { + //if(profile.dusk_lux_sensor == false) + { + if (profile.hasOwnProperty("dusk_astro_clock_offset")) dusk_astro_clock_offset = parseInt(profile.dusk_astro_clock_offset); + } + + //if(profile.dawn_lux_sensor == false) + { + if (profile.hasOwnProperty("dawn_astro_clock_offset")) dawn_astro_clock_offset = parseInt(profile.dawn_astro_clock_offset); + } + + } + + //dusk - súmrak + //down, sunrise - svitanie + + } catch (error) { + if (profilestr != "") { + logger.debug(profilestr); + logger.debug(error); + } + } + + result.dusk_no_offset = addZeroBefore(dusk.getHours()) + ":" + addZeroBefore(dusk.getMinutes()); + result.dawn_no_offset = addZeroBefore(dawn.getHours()) + ":" + addZeroBefore(dawn.getMinutes()); + + dusk = new Date(dusk.getTime() + gmtOffset + dusk_astro_clock_offset * 60000); + dawn = new Date(dawn.getTime() + gmtOffset + dawn_astro_clock_offset * 60000); + + result.dusk = addZeroBefore(dusk.getHours()) + ":" + addZeroBefore(dusk.getMinutes()); + result.dusk_hours = dusk.getHours(); + result.dusk_minutes = dusk.getMinutes(); + + result.dawn = addZeroBefore(dawn.getHours()) + ":" + addZeroBefore(dawn.getMinutes()); + result.dawn_hours = dawn.getHours(); + result.dawn_minutes = dawn.getMinutes(); + + result.dusk_time = dusk.getTime(); + result.dawn_time = dawn.getTime(); + + result.dusk_astro_clock_offset = dusk_astro_clock_offset; + result.dawn_astro_clock_offset = dawn_astro_clock_offset; + + return result; + } + + + function processResponse(register, bytes) { + + let values = {}; + + let byte3 = bytes[0]; + let byte2 = bytes[1]; + let byte1 = bytes[2]; + let byte0 = bytes[3]; + + //status + if (register == 0) { + let statecode = bytesToInt(bytes); + values = { "statecode": statecode }; + return values; + } + + //Dimming, CCT + else if (register == 1) { + let brightness = 0; + let dimming = byte0; + if (dimming > 128) { + //dimming = -128; + brightness = dimming - 128; + } + + //cct + //Ak Byte3 == 1: CCT = (Byte2*256)+Byte1 + let cct; + if (byte3 == 1) cct = byte2 * 256 + byte1; + else cct = bytesToInt(bytes.slice(0, 3)); + + //cct podla auditu + + values["dimming"] = brightness; + return values; + } + + // + else if (register == 4) { + values["master_node_version"] = bytes[1] + "." + bytes[2]; + //logger.debug("FW Version", register, bytes); + } + + //Napätie + else if (register == 74) { + let voltage = (bytesToInt(bytes) * 0.1).toFixed(1); + values["voltage"] = Number(voltage); + } + + //Prúd + else if (register == 75) { + let current = bytesToInt(bytes); + values["current"] = current; + } + + //výkon + else if (register == 76) { + let power = (bytesToInt(bytes) * 0.1).toFixed(2); + values["power"] = Number(power); + } + + //účinník + else if (register == 77) { + let power_factor = Math.cos(bytesToInt(bytes) * 0.1 * (Math.PI / 180)).toFixed(2); + values["power_factor"] = Number(power_factor); + } + + //frekvencia + else if (register == 78) { + let frequency = (bytesToInt(bytes) * 0.1).toFixed(2); + values["frequency"] = Number(frequency); + } + + //energia + else if (register == 79) { + let energy = bytesToInt(bytes); + values["energy"] = energy / 1000; //energia v kWh -> delit 1000 + } + + //doba života + else if (register == 80) { + let lifetime = (bytesToInt(bytes) / 60).toFixed(2); + values["lifetime"] = Number(lifetime); + } + + //nastavenie profilu + else if (register == 8) { + let time_schedule_settings = bytesToInt(bytes); + values["time_schedule_settings"] = time_schedule_settings; + } + + //naklon - nateraz sa z nodu nevycitava! kvoli problemom s accelerometrom a vracanymi hodnotami, posielame temp a x y z vo funkcii accelerometerData() + else if (register == 84) { + values["temperature"] = byte3 >= 128 ? (byte3 - 128) * (-1) : byte3; + values["inclination_x"] = byte2 >= 128 ? (byte2 - 128) * (-1) : byte2; + values["inclination_y"] = byte1 >= 128 ? (byte1 - 128) * (-1) : byte1; + values["inclination_z"] = byte0 >= 128 ? (byte0 - 128) * (-1) : byte0; + } + + //FW verzia nodu + else if (register == 89) { + //formát: "Byte3: Byte2.Byte1 (Byte0)" + values["fw_version"] = byte3 + ":" + byte2 + "." + byte1 + "(" + byte0 + ")"; + } + + else if (register == 87 || register == 6 || register == 7) { + var d = new Date(); + d.setHours(byte3, byte2, 0, 0); + let timestamp = d.getTime(); + + //aktuálny čas + if (register == 87) values["actual_time"] = timestamp; + //čas súmraku + else if (register == 6) values["dusk_time"] = timestamp; + //čas úsvitu + else if (register == 7) values["dawn_time"] = timestamp; + } + + return values; + } + + + //byte1 MSB = data3, byte2 = data2, byte3 = data1, byte4 = data0 LSB + function com_generic(adresa, rec, rw, register, name, byte1, byte2, byte3, byte4) { + let resp = []; + + let cmd = register; + + if (typeof adresa === 'string') adresa = parseInt(adresa); + if (typeof byte1 === 'string') byte1 = parseInt(byte1); + if (typeof byte2 === 'string') byte2 = parseInt(byte2); + if (typeof byte3 === 'string') byte3 = parseInt(byte3); + if (typeof byte4 === 'string') byte4 = parseInt(byte4); + + if (rw === 0) { + cmd = cmd + 0x8000; + } + + //master + if (rec === 0) adresa = 0; + + if (rec === 2) { + adresa = 0xffffffff;//Broadcast + } + + //recipient + if (rec === 3) { + resp.push(0xFF); + resp.push(0xFF); + resp.push(0xFF); + resp.push(0xFF); + resp.push(adresa & 0xFF);//band + } + else { + resp.push((adresa >> 24) & 0xFF);//rshift + resp.push((adresa >> 16) & 0xFF); + resp.push((adresa >> 8) & 0xFF); + resp.push(adresa & 0xFF); + + if (rec === 2) { + resp.push(0xFF); + } + else resp.push(0); + } + + resp.push((cmd >> 8) & 0xFF);//rshift + resp.push(cmd & 0xFF);//band + resp.push(byte1 & 0xFF);//band + resp.push(byte2 & 0xFF);//band + resp.push(byte3 & 0xFF);//band + resp.push(byte4 & 0xFF);//band + + //let data = '12345'; + let crc = crc16('ARC', resp); + let c1 = (crc >> 8) & 0xFF; + let c2 = crc & 0xFF; + + resp.push(c1); + resp.push(c2); + + //logger.debug("checksum", crc); + //logger.debug("resp", resp); + + return resp; + + } + + function getObjectByTbValue(object, tbname) { + return object[Object.keys(object).find(key => object[key].tbname === tbname)]; + } + + function isObject(item) { + return (typeof item === "object" && !Array.isArray(item) && item !== null); + } + + + // we fake data, that should be received from accelerometer, as they are a bit unreliable. (temperature, x,y,z) + function accelerometerData() { + + if (temperatureInSenica === null) return; + + //clone nodesData and relaysData objects + let nodesData_clone = JSON.parse(JSON.stringify(nodesData)); + let relaysData_clone = JSON.parse(JSON.stringify(relaysData)); + + for (const key in relaysData_clone) { + + const lineData = relaysData_clone[key]; + const lineNumber = lineData.line; + const contactor = lineData.contactor; + + if (lineNumber === 0) continue; + + if (contactor === 1) { + + let date = Date.now(); + + Object.keys(nodesData_clone).forEach((node, index) => { + + setTimeout(function() { + + if (nodesData_clone[node].line === lineNumber) { + + // NOTE: if status of luminaire is NOK or OFFLINE, we do not send data; + let status = nodesData_clone[node].status; + if (status === "OFFLINE" || !status) return; + + let x = null; + if (naklony.hasOwnProperty(node)) x = naklony[node].naklon; + if (x === null) x = 0; + + sendTelemetry({ temperature: Math.round(temperatureInSenica + 10 + Math.floor(Math.random() * 3)), inclination_x: x, inclination_y: 0, inclination_z: 0 }, nodesData_clone[node].tbname, date); + } + + }, (index + 1) * 500); + }) + + } + } + } + + +} // end of instance.export + diff --git a/RVO16/flow/code.js b/RVO16/flow/code.js new file mode 100755 index 0000000..63b31bf --- /dev/null +++ b/RVO16/flow/code.js @@ -0,0 +1,90 @@ +exports.id = 'code'; +exports.title = 'Code'; +exports.group = 'Common'; +exports.color = '#656D78'; +exports.input = true; +exports.output = 1; +exports.author = 'Peter Širka'; +exports.icon = 'code'; +exports.version = '1.2.0'; +exports.options = { outputs: 1, code: 'send(0, value);', keepmessage: true }; + +exports.html = `
+
+
+
@(Number of outputs)
+
@(Minimum is 1)
+
+
+
@(Code)
+
@(Keep message instance)
+
+`; + +exports.readme = `# Code + +This component executes custom JavaScript code as it is and it doesn't contain any secure scope. + +\`\`\`javascript +// value {Object} contains received data +// send(outputIndex, newValue) sends a new value +// error(value) sends an error +// instance {Object} a current component instance +// flowdata {Object} a current flowdata +// repository {Object} a current repository of flowdata +// Example: + +// send() can be execute multiple times +send(0, value); +\`\`\``; + +exports.install = function(instance) { + + var fn; + + instance.on('data', function(response) { + if (fn) { + try { + fn(response.data, instance, response, instance.options, response.repository, require); + } catch (e) { + response.data = e; + instance.throw(response); + } + } + }); + + instance.reconfigure = function() { + try { + if (instance.options.code) { + instance.status(''); + var code = 'var send = function(index, value) { if (options.keepmessage) { flowdata.data = value; instance.send2(index, flowdata); } else instance.send2(index, value);}; var error = function(err) { instance.throw(err); }; ' + instance.options.code; + fn = new Function('value', 'instance', 'flowdata', 'options', 'repository', 'require', code); + } else { + instance.status('Not configured', 'red'); + fn = null; + } + } catch (e) { + fn = null; + instance.error('Code: ' + e.message); + } + }; + + instance.on('options', instance.reconfigure); + instance.reconfigure(); +}; \ No newline at end of file diff --git a/RVO16/flow/comment.js b/RVO16/flow/comment.js new file mode 100755 index 0000000..1e0cd13 --- /dev/null +++ b/RVO16/flow/comment.js @@ -0,0 +1,11 @@ +exports.id = 'comment'; +exports.title = 'Comment'; +exports.group = 'Common'; +exports.color = '#704cff'; +exports.author = 'Martin Smola'; +exports.icon = 'comment'; +exports.traffic = false; +exports.version = '1.0.0'; +exports.readme = '# Comment'; + +exports.install = function() {}; diff --git a/RVO16/flow/count.js b/RVO16/flow/count.js new file mode 100755 index 0000000..fa92ee9 --- /dev/null +++ b/RVO16/flow/count.js @@ -0,0 +1,60 @@ +exports.id = 'count'; +exports.title = 'Count'; +exports.version = '1.0.1'; +exports.author = 'John Graves'; +exports.color = '#656D78'; +exports.icon = 'plus-square'; +exports.input = 2; +exports.output = 1; +exports.options = { increment: 1, initialvalue: 1 }; +exports.readme = `# Counter + +Counter Number of times called.`; + +exports.html = `
+
@(Initial Value)
+
@(Increment)
+

Example Video

+
`; + +exports.readme = `# Count + +This component counts the number of messages received. + +__Response:__ + +Integer value based on the initial value and increment settings. + +__Arguments:__ +- Initial Value: What number should be output on the receipt of the first message. +- Increment: What should the increment be for each following message received.`; + +exports.install = function(instance) { + + var count = 0; + var initialCall = true; + + instance.on('data', function(flowdata) { + var index = flowdata.index; + if (index) { + instance.debug('Reset Count.'); + count = instance.options.initialvalue; + initialCall = true; + } else { + // If this is the first time, set the value to 'initial value' + if(initialCall) { + initialCall = false; + count = instance.options.initialvalue; + } else + count = count+instance.options.increment; + instance.status('Count:' + count); + instance.send2(count); + } + }); + + instance.on('options', function() { + count = instance.options.initialvalue; + initialCall = true; + }); + +}; diff --git a/RVO16/flow/db_connector.js b/RVO16/flow/db_connector.js new file mode 100755 index 0000000..65ee94b --- /dev/null +++ b/RVO16/flow/db_connector.js @@ -0,0 +1,286 @@ +exports.id = 'db_connector'; +exports.title = 'DbConnector'; +exports.version = '1.0.0'; +exports.group = 'Worksys'; +exports.color = '#2134B0'; +exports.input = 1; +exports.output = ["red", "white"]; +exports.click = false; +exports.author = 'Daniel Segeš'; +exports.icon = 'bolt'; +exports.options = { edge: "undefined" }; + +exports.html = `
+
+
+
DbConnector
+
+
+
`; + +exports.readme = `# read/write data to tables`; + +const instanceSendTo = { + debug: 0, + http_response: 1, +} + +const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper.js'); + +function extractWhereParams(params) +{ + let name = params[0]; + let operator = '='; + let value = params[1]; + + if(params.length == 3) + { + operator = params[1]; + value = params[2]; + } + + return {name: name, operator: operator, value: value}; +} + +exports.install = function(instance) { + + let refFlowdata = null;//holds reference to httprequest flowdata + + instance.on("close", () => { + + }) + + + instance.on("data", async function(flowdata) { + + let params = flowdata.data.body; + console.log("DbConnector", params); + + refFlowdata = flowdata; + + if(refFlowdata != undefined) + { + //make http response + let responseObj = {}; + responseObj["type"] = "SUCESS"; + + try{ + + let table = params.table; + let action = params.action; + + + if(params.data != undefined) + { + let className = params.data.className; + + if(className == "SqlQueryBuilder") + { + let type = params.data.type; + + console.log("SqlQueryBuilder---->", params.data); + + if(type == "SELECT") + { + let table = params.data.queryData.tables[0].table; + + const db = TABLE(table); + var builder = db.find(); + + let result = await promisifyBuilder(builder); + + let response = {}; + response["result"] = result; + response["success"] = true; + + responseObj["data"] = response; + + //console.log(responseObj); + + refFlowdata.data = responseObj; + instance.send(instanceSendTo.http_response, refFlowdata); + } + + return; + } + } + + + console.log("db_connector---->", table, action); + + //actions: read, replace, insert, delete, update... + + if(action == "read") + { + const db = TABLE(params.table); + + //where builder.where('age', '<', 15); + //builder.where('id', 3403); + + var builder = db.find(); + + //https://docs.totaljs.com/latest/en.html#api~DatabaseBuilder~builder.where + if(params.hasOwnProperty("where")) + { + //optionalCan contain "=", "<=", "<", ">=", ">". + //Default value: '=' + + //1.["production_line", 1] + //2. ["or", ["production_line", 1], ["production_line", 2], "end"] + + if (Array.isArray(params.where)) { + + let multipleConditions = false; + + if(params.where[0] == "or") multipleConditions = true; + if (Array.isArray(params.where[0])) multipleConditions = true; + + if(multipleConditions) + { + + for(var i = 0; i < params.where.length; i++) + { + const item = params.where[i]; + + if(item === "or") builder.or(); + + if (Array.isArray(item)) + { + const { name, operator, value } = extractWhereParams(item); + builder.where(name, operator, value); + } + + if(item === "end") builder.end(); + + } + + } + else + { + const { name, operator, value } = extractWhereParams(params.where); + builder.where(name, operator, value); + } + + } + + /* + if(params.where.length >=2 ) + { + let name = params.where[0]; + let operator = '='; + let value = params.where[1]; + + if(params.where.length == 3) + { + operator = params.where[1]; + value = params.where[2]; + } + + builder.where(name, operator, value); + } + */ + } + + if(params.hasOwnProperty("between")) + { + builder.between(params.between[0], params.between[1], params.between[2]); + } + + let response = await promisifyBuilder(builder); + responseObj["data"] = response; + + //console.log(responseObj); + + refFlowdata.data = responseObj; + instance.send(instanceSendTo.http_response, refFlowdata); + + return; + } + + if(action == "delete") + { + + } + + + if(action == "update") + { + //! data receiving from terminal (params) + // { + // hostname: 'localhost', + // table: 'settings', + // action: 'update', + // body: { + // rvo_name: 'terrrr', + // lang: 'en', + // temperature_adress: '28.427B45920702', + // latitude: 48.70826502, + // longitude: 17.28455203, + // mqtt_host: '192.168.252.4', + // mqtt_clientid: 'showroom_test_panel_led', + // mqtt_username: 'xmRd6RJxW53WZe4vMFLU', + // mqtt_port: 1883, + // maintanace_mode: false + // } + // } + const tableToModify = TABLE(params.table); + const newValues = params.body; + + tableToModify.modify(newValues).make(function(builder) { + + builder.callback(function(err, response) { + + if(!err) + { + responseObj["data"] = response; + responseObj["tableUpdated"] = true; + refFlowdata.data = responseObj; + instance.send(instanceSendTo.http_response, refFlowdata); + } + }); + }); + + } + + if(action == "replace") + { + //truncate table + const db = TABLE(params.table); + var builder = db.remove(); + db.clean(); + + //insert data + let data = params.data; + + for(let i = 0; i < data.length; i++) + { + //console.log(data[i]); + db.insert(data[i]); + } + + console.log("insert done"); + + let responseObj = {}; + responseObj["type"] = "SUCESS"; + + refFlowdata.data = responseObj; + instance.send(instanceSendTo.http_response, refFlowdata); + + + } + + + + } catch (error) { + //console.log(error); + responseObj["type"] = "ERROR"; + responseObj["message"] = error; + + refFlowdata.data = responseObj; + instance.send(instanceSendTo.http_response, refFlowdata); + } + } + }) +} + + diff --git a/RVO16/flow/db_init.js b/RVO16/flow/db_init.js new file mode 100755 index 0000000..b399878 --- /dev/null +++ b/RVO16/flow/db_init.js @@ -0,0 +1,113 @@ +exports.id = 'db_init'; +exports.title = 'DB Initialization'; +exports.group = 'Worksys'; +exports.color = '#888600'; +exports.version = '1.0.2'; +exports.icon = 'sign-out'; +exports.output = 2; + +exports.readme = ` + # DB initialization +`; + +const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper.js'); +const { initNotification } = require('./helper/notification_reporter'); +const errorHandler = require('./helper/ErrorToServiceHandler'); +const total_energy = require('../databases/total_energy'); + +const SEND_TO = { + db_init: 0, + infoSender: 1 +}; + + +exports.install = async function(instance) { + const dbNodes = TABLE("nodes"); + const dbRelays = TABLE("relays"); + const dbSettings = TABLE("settings"); + const dbPins = TABLE("pins"); + const dbNotifications = TABLE("notifications"); + + FLOW.GLOBALS = {}; + const dbs = FLOW.GLOBALS; + + const responseSettings = await promisifyBuilder(dbSettings.find()); + const responseNodes = await promisifyBuilder(dbNodes.find()); + const responsePins = await promisifyBuilder(dbPins.find()); + const responseRelays = await promisifyBuilder(dbRelays.find()); + const response = await promisifyBuilder(dbNotifications.find()); + + dbs.pinsData = makeMapFromDbResult(responsePins, "pin"); + dbs.relaysData = makeMapFromDbResult(responseRelays, "line"); + dbs.nodesData = makeMapFromDbResult(responseNodes, "node"); + dbs.notificationsData = makeMapFromDbResult(response, "key"); + + //+|354|nodesdata.....+|482|nodesdata.... + //for some reason, if last line in nodes.table is not empty, flow wrote more nodes data in one row, + //so we have to add empty line at the bottom of nodes table to avoid this. + //now, remove empty lines from nodesData database: + if (dbs.nodesData.hasOwnProperty("0")) delete dbs.nodesData["0"]; + Object.keys(dbs.nodesData).forEach(node => dbs.nodesData[node].readout = {}) + + let rvo_number = responseSettings[0]["rvo_name"].match(/\D+(\d{1,2})_/)[1]; + + dbs.settings = { + edge_fw_version: "2025-10-08", //rok-mesiac-den + language: responseSettings[0]["lang"], + rvo_name: responseSettings[0]["rvo_name"], + project_id: responseSettings[0]["project_id"], + rvoTbName: dbs.relaysData[0]["tbname"], + temperature_address: responseSettings[0]["temperature_address"], + controller_type: responseSettings[0]["controller_type"], + serial_port: responseSettings[0]["serial_port"], + node_status_nok_time: responseSettings[0]["node_status_nok_time"] * 60 * 60 * 1000,// hour * minutes * + latitude: responseSettings[0]["latitude"], + longitude: responseSettings[0]["longitude"], + no_voltage: new Set(),//modbus_citysys - elektromer + backup_on_failure: responseSettings[0]["backup_on_failure"], + restore_from_backup: responseSettings[0]["restore_from_backup"], + restore_backup_wait: responseSettings[0]["restore_backup_wait"], + mqtt_host: responseSettings[0]["mqtt_host"], + mqtt_clientid: responseSettings[0]["mqtt_clientid"], + mqtt_username: responseSettings[0]["mqtt_username"], + mqtt_port: responseSettings[0]["mqtt_port"], + phases: responseSettings[0]["phases"], + cloud_topic: responseSettings[0]["cloud_topic"], + has_main_switch: responseSettings[0]["has_main_switch"], + daily_report: responseSettings[0]["daily_report"], + send_changed_node_numbers: responseSettings[0]["send_changed_node_numbers"], + rvo_number: rvo_number, + + //dynamic values + masterNodeIsResponding: true, //cmd_manager + maintenance_mode: false, + } + + + dbs.settings.energy_to_switch_lamps = total_energy[rvo_number]; + if (dbs.settings.energy_to_switch_lamps === undefined) console.log('=============== db_init.js: energy_to_switch_lamps is undefined'); + + FLOW.dbLoaded = true; + errorHandler.setProjectId(dbs.settings.project_id); + initNotification(); + + //APP START - send to data services + const toService = { + id: dbs.settings.project_id, + name: dbs.settings.rvo_name, + fw_version: dbs.settings.edge_fw_version, + startdate: new Date().toISOString().slice(0, 19).replace('T', ' '), + js_error: "", + error_message: "" + }; + + instance.send(SEND_TO.infoSender, toService); + console.log("----------------> START - message send to service", toService); + + setTimeout(() => { + console.log("DB_INIT - data loaded"); + instance.send(SEND_TO.db_init, "_") + }, 5000) + +}; + diff --git a/RVO16/flow/debug.js b/RVO16/flow/debug.js new file mode 100755 index 0000000..00cb259 --- /dev/null +++ b/RVO16/flow/debug.js @@ -0,0 +1,100 @@ +exports.id = 'debug'; +exports.title = 'Debug'; +exports.author = 'Peter Širka'; +exports.color = '#967ADC'; +exports.click = true; +exports.input = true; +exports.icon = 'bug'; +exports.version = '2.0.4'; +exports.options = { enabled: true, repository: false, type: 'data' }; +exports.readme = `# Debug + +Prints data to the debug tab.`; + +exports.html = `
+
+
+
@(Output type)
+
@(Path to the property (leave empty to show the whole data object))
+
@(A group name)
+
@(Enabled)
+
+
+
`; + +exports.install = function(instance) { + + instance.on('data', function(response) { + if (instance.options.enabled) { + + var opt = instance.options; + var rep = response.repository; + var val = response.data; + var id = response.id; + + switch (instance.options.type){ + case 'both': + var data = {}; + data.repository = rep; + data.data = val instanceof Error ? { error: val.message, stack: val.stack } : val; + instance.debug(safeparse(opt.property ? U.get(data, opt.property) : data), undefined, opt.group, id); + break; + case 'repository': + instance.debug(safeparse(opt.property ? U.get(rep, opt.property) : rep), undefined, opt.group, id); + break; + case 'data': + default: + if (val instanceof Error) + instance.debug({ error: val.message, stack: val.stack }, undefined, opt.group, id); + else + instance.debug(safeparse(opt.property ? U.get(val, opt.property) : val), undefined, opt.group, id); + break; + } + } + }); + + instance.on('click', function() { + instance.options.enabled = !instance.options.enabled; + instance.custom.status(); + instance.save(); + }); + + instance.on('options', function() { + instance.custom.status(); + }); + + instance.custom.status = function() { + instance.status(instance.options.enabled ? 'Enabled' : 'Disabled'); + }; + + instance.custom.status(); + + function safeparse(o) { + + if (o instanceof Buffer) + return o; + + if (o === undefined) + return 'undefined'; + + if (o === null) + return 'null'; + + var cache = []; + var str = JSON.stringify(o, function(key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + try { + return JSON.parse(JSON.stringify(value)); + } catch (error) { + return; + } + } + cache.push(value); + } + return value; + }); + cache = null; + return JSON.parse(str); + } +}; diff --git a/RVO16/flow/designer.json b/RVO16/flow/designer.json new file mode 100755 index 0000000..4a54399 --- /dev/null +++ b/RVO16/flow/designer.json @@ -0,0 +1,3102 @@ +{ + "tabs": [ + { + "name": "MAIN PUSH", + "linker": "main-push", + "id": "1612772287426", + "index": 0 + }, + { + "name": "CMD manager", + "linker": "cmd-manager", + "id": "1615551125555", + "index": 1 + }, + { + "name": "Devices", + "linker": "devices", + "id": "1611921777196", + "index": 2 + } + ], + "components": [ + { + "id": "1611951142547", + "component": "debug", + "tab": "1611921777196", + "name": "ERROR", + "x": 598, + "y": 60, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#DA4453", + "notes": "" + }, + { + "id": "1612776786008", + "component": "wsmqttpublish", + "tab": "1612772287426", + "name": "WS MQTT publish", + "x": 281.75, + "y": 174, + "connections": { + "0": [ + { + "index": "0", + "id": "1615551060773" + } + ], + "1": [ + { + "index": "0", + "id": "1618300858252" + }, + { + "index": "0", + "id": "1618558465485" + } + ], + "2": [ + { + "index": "0", + "id": "1634303685503" + } + ], + "3": [ + { + "index": "0", + "id": "1731068754606" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Connected", + "color": "green" + }, + "options": { + "username": "", + "clientid": "", + "port": "1883", + "host": "" + }, + "color": "#888600", + "notes": "" + }, + { + "id": "1612778461252", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "tb-push", + "x": 72.75, + "y": 328, + "connections": { + "0": [ + { + "index": "0", + "id": "1612783322136" + }, + { + "index": "1", + "id": "1612776786008" + }, + { + "index": "0", + "id": "1731068754606" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "tb-push", + "color": "gray" + }, + "options": { + "wirename": "tb-push" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1612783322136", + "component": "debug", + "tab": "1612772287426", + "name": "to TB", + "x": 283.75, + "y": 324, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1615551060773", + "component": "debug", + "tab": "1612772287426", + "name": "errors from MQTT Broker", + "x": 594, + "y": 57, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#DA4453", + "notes": "" + }, + { + "id": "1615563373927", + "component": "debug", + "tab": "1615551125555", + "name": "Debug", + "x": 755, + "y": 155, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#DA4453", + "notes": "" + }, + { + "id": "1615566865233", + "component": "virtualwireout", + "tab": "1615551125555", + "name": "tb-push", + "x": 755, + "y": 248, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "tb-push", + "color": "gray" + }, + "options": { + "wirename": "tb-push" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1615798582262", + "component": "debug", + "tab": "1615551125555", + "name": "CMD_debug", + "x": 755, + "y": 346, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1615802995322", + "component": "debug", + "tab": "1611921777196", + "name": "Debug", + "x": 596.8833312988281, + "y": 566.3500061035156, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Disabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": false + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1615809128443", + "component": "debug", + "tab": "1611921777196", + "name": "tempToTb", + "x": 595.8833312988281, + "y": 658.3500061035156, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1615809595184", + "component": "virtualwireout", + "tab": "1611921777196", + "name": "tb-push", + "x": 597.8833312988281, + "y": 377.25, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "tb-push", + "color": "gray" + }, + "options": { + "wirename": "tb-push" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1616165795916", + "component": "httproute", + "tab": "1615551125555", + "name": "POST /terminal", + "x": 135, + "y": 547, + "connections": { + "0": [ + { + "index": "0", + "id": "1684060205000" + }, + { + "index": "1", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Listening", + "color": "green" + }, + "options": { + "timeout": 10, + "cachepolicy": 0, + "cacheexpire": "5 minutes", + "size": 5, + "url": "/terminal", + "method": "POST", + "name": "", + "flags": [ + "id:1616165795916", + "post", + 10000 + ], + "emptyresponse": false + }, + "color": "#5D9CEC", + "notes": "### Configuration\n\n- __POST /terminal__\n- flags: \n- maximum request data length: __5 kB__\n- empty response: __false__\n- cache policy: __no cache__\n- cache expire: __5 minutes__", + "cloning": false + }, + { + "id": "1616165824813", + "component": "httpresponse", + "tab": "1615551125555", + "name": "HTTP Response", + "x": 753, + "y": 423, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "datatype": "json" + }, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1617104731852", + "component": "debug", + "tab": "1615551125555", + "name": "DIDO_Debug", + "x": 669, + "y": 1040, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1617114651703", + "component": "trigger", + "tab": "1615551125555", + "name": "turnOff line", + "x": 133, + "y": 1161, + "connections": { + "0": [ + { + "index": "1", + "id": "1699963668903" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "data": "{line: 3, command: \"turnOff\", force: true}", + "datatype": "object" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1617115013095", + "component": "virtualwireout", + "tab": "1615551125555", + "name": "tb-push", + "x": 669, + "y": 1150, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "tb-push", + "color": "gray" + }, + "options": { + "wirename": "tb-push" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1617284749681", + "component": "trigger", + "tab": "1615551125555", + "name": "update profile / node", + "x": 112, + "y": 208, + "connections": { + "0": [ + { + "index": "1", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "datatype": "string", + "data": "profile_nodes" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1618235171399", + "component": "trigger", + "tab": "1615551125555", + "name": "tun tasks", + "x": 184, + "y": 279, + "connections": { + "0": [ + { + "index": "1", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "data": "run" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1618300858252", + "component": "debug", + "tab": "1612772287426", + "name": "wsmqtt-exit1", + "x": 597.8833312988281, + "y": 149, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1618393583970", + "component": "virtualwireout", + "tab": "1615551125555", + "name": "to-cmd-manager", + "x": 668.8833312988281, + "y": 1269, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "from-dido-controller", + "color": "gray" + }, + "options": { + "wirename": "from-dido-controller" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1618393674428", + "component": "virtualwirein", + "tab": "1615551125555", + "name": "platform-rpc-call", + "x": 132.88333129882812, + "y": 367, + "connections": { + "0": [ + { + "index": "1", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "platform-rpc-call", + "color": "gray" + }, + "options": { + "wirename": "platform-rpc-call" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1618393759854", + "component": "virtualwirein", + "tab": "1615551125555", + "name": "cmd_to_dido", + "x": 119.88333129882812, + "y": 1007, + "connections": { + "0": [ + { + "index": "0", + "id": "1683664161036" + }, + { + "index": "1", + "id": "1699963668903" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "cmd_to_dido", + "color": "gray" + }, + "options": { + "wirename": "cmd_to_dido" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1618393827655", + "component": "virtualwireout", + "tab": "1615551125555", + "name": "cmd_to_dido", + "x": 752.8833312988281, + "y": 527, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "cmd_to_dido", + "color": "gray" + }, + "options": { + "wirename": "cmd_to_dido" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1618558465485", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "platform-rpc-call", + "x": 597.8833312988281, + "y": 247, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "platform-rpc-call", + "color": "gray" + }, + "options": { + "wirename": "platform-rpc-call" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1618572059773", + "component": "trigger", + "tab": "1615551125555", + "name": "turnOn line", + "x": 132, + "y": 1085, + "connections": { + "0": [ + { + "index": "1", + "id": "1699963668903" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "datatype": "object", + "data": "{line: 1, command: \"turnOn\", force: true}" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1619515097737", + "component": "cmd_manager", + "tab": "1615551125555", + "name": "CMD Manager", + "x": 452.1091003417969, + "y": 341.05455017089844, + "connections": { + "0": [ + { + "index": "0", + "id": "1615563373927" + } + ], + "1": [ + { + "index": "0", + "id": "1615566865233" + }, + { + "index": "0", + "id": "1615798582262" + } + ], + "2": [ + { + "index": "0", + "id": "1616165824813" + } + ], + "3": [ + { + "index": "0", + "id": "1618393827655" + } + ], + "4": [ + { + "index": "0", + "id": "1635936391935" + } + ], + "5": [ + { + "index": "0", + "id": "1757006030239" + }, + { + "index": "0", + "id": "1757006060377" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1619605019281", + "component": "httproute", + "tab": "1615551125555", + "name": "GET db", + "x": 173, + "y": 653, + "connections": { + "0": [ + { + "index": "0", + "id": "1684060205000" + }, + { + "index": "1", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Listening", + "color": "green" + }, + "options": { + "timeout": 5, + "cachepolicy": 0, + "cacheexpire": "5 minutes", + "size": 5, + "url": "/db", + "method": "GET", + "name": "", + "flags": [ + "id:1619605019281", + "get", + 5000 + ] + }, + "color": "#5D9CEC", + "notes": "### Configuration\n\n- __GET /db__\n- flags: undefined\n- maximum request data length: __5 kB__\n- empty response: __undefined__\n- cache policy: __no cache__\n- cache expire: __5 minutes__", + "cloning": false + }, + { + "id": "1619784672383", + "component": "trigger", + "tab": "1615551125555", + "name": "turnOnAlarm", + "x": 120, + "y": 1234, + "connections": { + "0": [ + { + "index": "1", + "id": "1699963668903" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "data": "{command: \"turnOnAlarm\"}", + "datatype": "object" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1619784812964", + "component": "trigger", + "tab": "1615551125555", + "name": "turnOffAlarm", + "x": 118, + "y": 1307, + "connections": { + "0": [ + { + "index": "1", + "id": "1699963668903" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "data": "{command: \"turnOffAlarm\"}", + "datatype": "object" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1621340721628", + "component": "virtualwireout", + "tab": "1611921777196", + "name": "modbus_to_dido", + "x": 599, + "y": 471, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "modbus_to_dido", + "color": "gray" + }, + "options": { + "wirename": "modbus_to_dido" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1622640022885", + "component": "httproute", + "tab": "1615551125555", + "name": "POST /db_connector", + "x": 98, + "y": 1586, + "connections": { + "0": [ + { + "index": "0", + "id": "1622640073521" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Listening", + "color": "green" + }, + "options": { + "timeout": 5, + "cachepolicy": 0, + "cacheexpire": "5 minutes", + "size": 5, + "url": "/db_connector", + "method": "POST", + "flags": [ + "id:1622640022885", + "post", + 5000 + ] + }, + "color": "#5D9CEC", + "notes": "### Configuration\n\n- __POST /db_connector__\n- flags: \n- maximum request data length: __5 kB__\n- empty response: __undefined__\n- cache policy: __no cache__\n- cache expire: __5 minutes__", + "cloning": false + }, + { + "id": "1622640073521", + "component": "db_connector", + "tab": "1615551125555", + "name": "DbConnector", + "x": 372, + "y": 1572, + "connections": { + "1": [ + { + "index": "0", + "id": "1622641420685" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "edge": "undefined" + }, + "color": "#2134B0", + "notes": "" + }, + { + "id": "1622641420685", + "component": "httpresponse", + "tab": "1615551125555", + "name": "HTTP Response", + "x": 596, + "y": 1586, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1634303504177", + "component": "monitormemory", + "tab": "1612772287426", + "name": "RAM", + "x": 69.88333129882812, + "y": 888.5, + "connections": { + "0": [ + { + "index": "0", + "id": "1634465281992" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "825.84 MB / 985.68 MB", + "color": "gray" + }, + "options": { + "enabled": true, + "interval": 30000 + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1634303533779", + "component": "monitordisk", + "tab": "1612772287426", + "name": "disk", + "x": 70.88333129882812, + "y": 982.5, + "connections": { + "0": [ + { + "index": "0", + "id": "1634465821120" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "5.78 GB / 7.26 GB", + "color": "gray" + }, + "options": { + "enabled": true, + "path": "/", + "interval": 30000 + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1634303595494", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "send-to-services", + "x": 51.883331298828125, + "y": 1400.5, + "connections": { + "0": [ + { + "index": "0", + "id": "1634463186563" + }, + { + "index": "1", + "id": "1634488120710" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "send-to-services", + "color": "gray" + }, + "options": { + "wirename": "send-to-services" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1634303602169", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "send-to-services", + "x": 426.8833312988281, + "y": 878.5, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "send-to-services", + "color": "gray" + }, + "options": { + "wirename": "send-to-services" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1634303685503", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "send-to-services", + "x": 600.8833312988281, + "y": 341.5, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "send-to-services", + "color": "gray" + }, + "options": { + "wirename": "send-to-services" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1634303743260", + "component": "httprequest", + "tab": "1612772287426", + "name": "192.168.252.2:8004/sentmessage", + "reference": "", + "x": 506.8833312988281, + "y": 1331.7333374023438, + "connections": { + "0": [ + { + "index": "0", + "id": "1635327431236" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "stringify": "json", + "method": "POST", + "url": "http://192.168.252.2:8004/sentmessage" + }, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1634463186563", + "component": "debug", + "tab": "1612772287426", + "name": "Debug", + "x": 305.75, + "y": 1442, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1634464580289", + "component": "code", + "tab": "1612772287426", + "name": "Code", + "x": 245, + "y": 787, + "connections": { + "0": [ + { + "index": "0", + "id": "1634465243324" + }, + { + "index": "0", + "id": "1634303602169" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "keepmessage": true, + "code": "let response = {};\nresponse.cpu = value.cpu;\nresponse.uptime = value.uptime;\n\nsend(0, response);", + "outputs": 1 + }, + "color": "#656D78", + "notes": "" + }, + { + "id": "1634465243324", + "component": "debug", + "tab": "1612772287426", + "name": "Debug", + "x": 428, + "y": 784, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1634465281992", + "component": "code", + "tab": "1612772287426", + "name": "Code", + "x": 245, + "y": 884, + "connections": { + "0": [ + { + "index": "0", + "id": "1634465338103" + }, + { + "index": "0", + "id": "1634303602169" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "keepmessage": true, + "code": "value.sender = \"ram\";\n\nlet response = {};\n\nresponse.memory_total = Math.round(value.total / (1024 ** 2));\nresponse.memory_free = Math.round(value.free / (1024 ** 2));\nresponse.memory_used = Math.round(value.used / (1024 ** 2));\n\nsend(0, response);", + "outputs": 1 + }, + "color": "#656D78", + "notes": "" + }, + { + "id": "1634465338103", + "component": "debug", + "tab": "1612772287426", + "name": "Debug", + "x": 429, + "y": 976, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1634465821120", + "component": "code", + "tab": "1612772287426", + "name": "Code", + "x": 245, + "y": 978, + "connections": { + "0": [ + { + "index": "0", + "id": "1634465892500" + }, + { + "index": "0", + "id": "1634303602169" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "keepmessage": true, + "code": "value.sender = \"hdd\";\n\nlet response = {};\n\nresponse.hdd_total = Math.round(value.total / (1024 ** 2));\nresponse.hdd_free = Math.round(value.free / (1024 ** 2));\nresponse.hdd_used = Math.round(value.used / (1024 ** 2));\n\nsend(0, response);", + "outputs": 1 + }, + "color": "#656D78", + "notes": "" + }, + { + "id": "1634465892500", + "component": "debug", + "tab": "1612772287426", + "name": "Debug", + "x": 432, + "y": 1068, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1634484067516", + "component": "debug", + "tab": "1612772287426", + "name": "Send info", + "x": 513, + "y": 1441, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1634488120710", + "component": "infosender", + "tab": "1612772287426", + "name": "Info sender", + "x": 301, + "y": 1336, + "connections": { + "0": [ + { + "index": "0", + "id": "1634484067516" + }, + { + "index": "0", + "id": "1634303743260" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "edge": "undefined" + }, + "color": "#2134B0", + "notes": "" + }, + { + "id": "1635327431236", + "component": "debug", + "tab": "1612772287426", + "name": "Debug", + "x": 837.8833312988281, + "y": 1325.5, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1635936391935", + "component": "virtualwireout", + "tab": "1615551125555", + "name": "send-to-services", + "x": 753, + "y": 623, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "send-to-services", + "color": "gray" + }, + "options": { + "wirename": "send-to-services" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1637069803394", + "component": "monitorconsumption", + "tab": "1612772287426", + "name": "CPU", + "x": 69, + "y": 791, + "connections": { + "0": [ + { + "index": "0", + "id": "1634464580289" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "1.1% / 88.25 MB", + "color": "gray" + }, + "options": { + "monitorfiles": true, + "monitorconnections": true, + "monitorsize": true, + "monitorconsumption": true, + "enabled": true, + "interval": 30000 + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1683664161036", + "component": "debug", + "tab": "1615551125555", + "name": "CMDtoDIDO", + "x": 392, + "y": 1012, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1683981346282", + "component": "virtualwirein", + "tab": "1615551125555", + "name": "from-dido-controller", + "x": 112, + "y": 459, + "connections": { + "0": [ + { + "index": "0", + "id": "1684055037116" + }, + { + "index": "1", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "from-dido-controller", + "color": "gray" + }, + "options": { + "wirename": "from-dido-controller" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1684055037116", + "component": "debug", + "tab": "1615551125555", + "name": "from dido to cmd", + "x": 451, + "y": 532, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1684060205000", + "component": "debug", + "tab": "1615551125555", + "name": "HTTP routes", + "x": 450, + "y": 639, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1684179110403", + "component": "debug", + "tab": "1611921777196", + "name": "MDBToDido", + "x": 598, + "y": 147, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1699963668903", + "component": "dido_controller", + "tab": "1615551125555", + "name": "DIDO_Controller", + "x": 397, + "y": 1131, + "connections": { + "0": [ + { + "index": "0", + "id": "1617104731852" + } + ], + "1": [ + { + "index": "0", + "id": "1617104731852" + }, + { + "index": "0", + "id": "1617115013095" + } + ], + "2": [ + { + "index": "0", + "id": "1618393583970" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "edge": "undefined" + }, + "color": "#2134B0", + "notes": "" + }, + { + "id": "1699964678894", + "component": "virtualwirein", + "tab": "1615551125555", + "name": "modbus_to_dido", + "x": 96, + "y": 924, + "connections": { + "0": [ + { + "index": "0", + "id": "1699963668903" + }, + { + "index": "0", + "id": "1699964793925" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "modbus_to_dido", + "color": "gray" + }, + "options": { + "wirename": "modbus_to_dido" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1699964793925", + "component": "debug", + "tab": "1615551125555", + "name": "modbusToDido", + "x": 388, + "y": 920, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1699965957410", + "component": "modbus_reader", + "tab": "1611921777196", + "name": "Modbus reader", + "x": 232, + "y": 175, + "connections": { + "0": [ + { + "index": "0", + "id": "1611951142547" + } + ], + "1": [ + { + "index": "0", + "id": "1621340721628" + }, + { + "index": "0", + "id": "1684179110403" + }, + { + "index": "0", + "id": "1717441414646" + } + ], + "2": [ + { + "index": "0", + "id": "1615809595184" + }, + { + "index": "0", + "id": "1714752862828" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#2134B0", + "notes": "" + }, + { + "id": "1700411878636", + "component": "thermometer", + "tab": "1611921777196", + "name": "Thermometer", + "x": 234.75, + "y": 444, + "connections": { + "0": [ + { + "index": "0", + "id": "1615802995322" + } + ], + "1": [ + { + "index": "0", + "id": "1615809595184" + }, + { + "index": "0", + "id": "1615809128443" + } + ], + "2": [ + { + "index": "0", + "id": "1621340721628" + }, + { + "index": "0", + "id": "1732889185927" + }, + { + "index": "0", + "id": "1717441414646" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#5CB36D", + "notes": "" + }, + { + "id": "1714752862828", + "component": "debug", + "tab": "1611921777196", + "name": "MDBToTb", + "x": 766, + "y": 324, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1717441414646", + "component": "code", + "tab": "1611921777196", + "name": "device-status", + "x": 764.0833282470703, + "y": 222, + "connections": { + "0": [ + { + "index": "0", + "id": "1717442627834" + }, + { + "index": "0", + "id": "1717442631338" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "keepmessage": true, + "code": "if(value.hasOwnProperty(\"status\"))\n{\n\tif(value.status.includes(\"-em\"))\n\t{\n\t\tsend(0, {\"em_status\": \"NOK\"});\n\t}\n\telse if(value.status.includes(\"twilight\"))\n\t{\n\t\tsend(0, {\"lux_sensor\": \"NOK\"});\n\t}\n\telse if(value.status === \"NOK-thermometer\")\n\t{\n\t\tsend(0, {\"thermometer\": \"NOK\"});\n\t}\n}\n\nif(value.hasOwnProperty(\"values\"))\n{\n\tif(value.values.hasOwnProperty(\"twilight_sensor\"))\n\t{\n\t\tsend(0, {\"lux_sensor\": \"OK\"});\n\t}\n\telse if(value.values.hasOwnProperty(\"Phase_1_power\") ||\n\t\t\tvalue.values.hasOwnProperty(\"Phase_1_voltage\") ||\n\t\t\tvalue.values.hasOwnProperty(\"Total_power\") ||\n\t\t\tvalue.values.hasOwnProperty(\"Phase_1_current\"))\n\t{\n\t\tsend(0, {\"em_status\": \"OK\"});\n\t}\n\telse if(value.values.hasOwnProperty(\"temperature\"))\n\t{\n\t\tsend(0, {\"thermometer\": \"OK\"});\n\t}\n}", + "outputs": 1 + }, + "color": "#656D78", + "notes": "" + }, + { + "id": "1717442627834", + "component": "debug", + "tab": "1611921777196", + "name": "modbus service", + "x": 966.0833282470703, + "y": 165, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1717442631338", + "component": "virtualwireout", + "tab": "1611921777196", + "name": "send-to-services", + "x": 968.0833282470703, + "y": 268, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "send-to-services", + "color": "gray" + }, + "options": { + "wirename": "send-to-services" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1718016045116", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "tb-push", + "x": 88.75, + "y": 1685, + "connections": { + "0": [ + { + "index": "0", + "id": "1718016052341" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "tb-push", + "color": "gray" + }, + "options": { + "wirename": "tb-push" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1718016052341", + "component": "slack_filter", + "tab": "1612772287426", + "name": "Slack Filter", + "x": 296, + "y": 1671, + "connections": { + "0": [ + { + "index": "0", + "id": "1718016086212" + }, + { + "index": "0", + "id": "1718016073501" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Running", + "color": "gray" + }, + "options": { + "slack_channel": "C071KN2Q8SK", + "tag_on_include": "[{\"user_id\":\"U072JE5JUQG\", \"includes\":[\"Electrometer\", \"Twilight sensor\"]}]", + "message_includes": "[\"is responding again\", \"Flow has been restarted\", \"Node db has changed\"]", + "types": "[\"emergency\", \"critical\", \"error\", \"alert\"]", + "name": "rvo_senica_16_10.0.0.131" + }, + "color": "#30E193", + "notes": "" + }, + { + "id": "1718016073501", + "component": "httprequest", + "tab": "1612772287426", + "name": "http://192.168.252.2:8004/slack", + "x": 495, + "y": 1753, + "connections": { + "0": [ + { + "index": "0", + "id": "1718016086212" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "stringify": "json", + "method": "POST", + "url": "http://192.168.252.2:8004/slack" + }, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1718016086212", + "component": "debug", + "tab": "1612772287426", + "name": "Debug", + "x": 832, + "y": 1664, + "connections": {}, + "disabledio": { + "input": [ + 0 + ], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1718016094070", + "component": "trigger", + "tab": "1612772287426", + "name": "Trigger", + "x": 87, + "y": 1591, + "connections": { + "0": [ + { + "index": "0", + "id": "1718016052341" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "datatype": "object", + "data": "{ \"g9OxBZ5KRwNznlY6pAppqEAWXvjdEL4eGQobMDy2\": [ { \"ts\": 1716289039281, \"values\": { \"_event\": { \"type\": \"alert\", \"status\": \"new\", \"source\": { \"func\": \"CMD Manager: process cmd\", \"component\": \"1619515097737\", \"component_name\": \"CMD Manager\", \"edge\": \"g9OxBZ5KRwNznlY6pAppqEAWXvjdEL4eGQobMDy2\" }, \"message\": \"NOW CONNECTED TO SLACK !\", \"message_data\": \"\" } } } ] }" + }, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1729855334955", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "platform-rpc-call", + "x": 599.9333343505859, + "y": 541.3500061035156, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "platform-rpc-call", + "color": "gray" + }, + "options": { + "wirename": "platform-rpc-call" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1729855371093", + "component": "debug", + "tab": "1612772287426", + "name": "rpc cloud", + "x": 601.9333343505859, + "y": 440.3500061035156, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1731068658334", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "db-init", + "x": 75.75, + "y": 184, + "connections": { + "0": [ + { + "index": "0", + "id": "1612776786008" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731068754606", + "component": "cloudmqttconnect", + "tab": "1612772287426", + "name": "MQTT to senica-prod01", + "x": 284.75, + "y": 452, + "connections": { + "1": [ + { + "index": "0", + "id": "1729855371093" + }, + { + "index": "0", + "id": "1729855334955" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Connected", + "color": "green" + }, + "options": { + "username": "", + "clientid": "", + "port": "2764", + "host": "192.168.252.2", + "topic": "u131" + }, + "color": "#888600", + "notes": "" + }, + { + "id": "1731069001548", + "component": "db_init", + "tab": "1612772287426", + "name": "DB Initialization", + "x": 1003.75, + "y": 240.25, + "connections": { + "0": [ + { + "index": "0", + "id": "1731069033416" + } + ], + "1": [ + { + "index": "0", + "id": "1747561603739" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#888600", + "notes": "" + }, + { + "id": "1731069033416", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "db-init", + "x": 1244.75, + "y": 233.25, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731069059135", + "component": "showdb", + "tab": "1612772287426", + "name": "Show db data", + "x": 1186.75, + "y": 821.25, + "connections": { + "0": [ + { + "index": "0", + "id": "1731069079243" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#888600", + "notes": "" + }, + { + "id": "1731069079243", + "component": "debug", + "tab": "1612772287426", + "name": "dbData", + "x": 1390.75, + "y": 870.25, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1731069116691", + "component": "trigger", + "tab": "1612772287426", + "name": "settings", + "x": 934.75, + "y": 669.75, + "connections": { + "0": [ + { + "index": "0", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1731069131637", + "component": "trigger", + "tab": "1612772287426", + "name": "relaysData", + "x": 876.75, + "y": 733.75, + "connections": { + "0": [ + { + "index": "1", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1731069137374", + "component": "trigger", + "tab": "1612772287426", + "name": "nodesData", + "x": 852.75, + "y": 794.75, + "connections": { + "0": [ + { + "index": "2", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1731069179846", + "component": "trigger", + "tab": "1612772287426", + "name": "pinsData", + "x": 850.75, + "y": 861.75, + "connections": { + "0": [ + { + "index": "3", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1731069192937", + "component": "trigger", + "tab": "1612772287426", + "name": "sample data", + "x": 857.75, + "y": 928.75, + "connections": { + "0": [ + { + "index": "4", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1731069264443", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "db-init", + "x": 63.75, + "y": 1279, + "connections": { + "0": [ + { + "index": "0", + "id": "1634488120710" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731069334626", + "component": "virtualwirein", + "tab": "1615551125555", + "name": "db-init", + "x": 172.88333129882812, + "y": 129, + "connections": { + "0": [ + { + "index": "0", + "id": "1619515097737" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731069548145", + "component": "virtualwirein", + "tab": "1611921777196", + "name": "db-init", + "x": 46.75, + "y": 192, + "connections": { + "0": [ + { + "index": "0", + "id": "1699965957410" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731069567152", + "component": "virtualwirein", + "tab": "1611921777196", + "name": "db-init", + "x": 44.75, + "y": 465, + "connections": { + "0": [ + { + "index": "0", + "id": "1700411878636" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731070156936", + "component": "virtualwirein", + "tab": "1615551125555", + "name": "db-init", + "x": 126.88333129882812, + "y": 1377, + "connections": { + "0": [ + { + "index": "2", + "id": "1699963668903" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1731234189516", + "component": "trigger", + "tab": "1612772287426", + "name": "monitor.txt", + "x": 882.75, + "y": 991.75, + "connections": { + "0": [ + { + "index": "5", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1731234189551", + "component": "trigger", + "tab": "1612772287426", + "name": "err.txt", + "x": 904.75, + "y": 1053.75, + "connections": { + "0": [ + { + "index": "6", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1732700042559", + "component": "nodesdb_change_check", + "tab": "1612772287426", + "name": "Nodes DB change check", + "x": 266.8833312988281, + "y": 1980.2333984375, + "connections": { + "0": [ + { + "index": "0", + "id": "1732700071298" + }, + { + "index": "0", + "id": "1732700642917" + } + ], + "1": [ + { + "index": "0", + "id": "1759958914348" + }, + { + "index": "0", + "id": "1759959003114" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#888600", + "notes": "" + }, + { + "id": "1732700057052", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "db-init", + "x": 76.75, + "y": 1988, + "connections": { + "0": [ + { + "index": "0", + "id": "1732700042559" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1732700071298", + "component": "debug", + "tab": "1612772287426", + "name": "nodesChange", + "x": 571.8833312988281, + "y": 2018.2333984375, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1732700642917", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "tb-push", + "x": 567.8833312988281, + "y": 1933, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "tb-push", + "color": "gray" + }, + "options": { + "wirename": "tb-push" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1732889185927", + "component": "debug", + "tab": "1611921777196", + "name": "tempToDido", + "x": 594.8833312988281, + "y": 753, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1733574412965", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "db-init", + "x": 72.75, + "y": 474, + "connections": { + "0": [ + { + "index": "1", + "id": "1731068754606" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1747561603739", + "component": "virtualwireout", + "tab": "1612772287426", + "name": "send-to-services", + "x": 1243.8833312988281, + "y": 334.5, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "send-to-services", + "color": "gray" + }, + "options": { + "wirename": "send-to-services" + }, + "color": "#303E4D", + "notes": "" + }, + { + "id": "1747562867845", + "component": "comment", + "tab": "1612772287426", + "name": "FLOW STARTING POINT", + "x": 1003.5666656494141, + "y": 178, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#704cff", + "notes": "" + }, + { + "id": "1749211698385", + "component": "trigger", + "tab": "1612772287426", + "name": "deviceStatus", + "x": 911.75, + "y": 1116.75, + "connections": { + "0": [ + { + "index": "7", + "id": "1731069059135" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": {}, + "color": "#F6BB42", + "notes": "" + }, + { + "id": "1757006030239", + "component": "httprequest", + "tab": "1615551125555", + "name": "192.168.252.2:8015/daily_report", + "x": 756.5666656494141, + "y": 715.4499969482422, + "connections": { + "0": [ + { + "index": "0", + "id": "1757006045804" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "url": "http://192.168.252.2:8015/daily_report", + "method": "POST", + "stringify": "json" + }, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1757006045804", + "component": "debug", + "tab": "1615551125555", + "name": "ddd", + "x": 1091.566665649414, + "y": 711.4499969482422, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1757006060377", + "component": "debug", + "tab": "1615551125555", + "name": "reportDebug", + "x": 749.5666656494141, + "y": 799.4499969482422, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1759958914348", + "component": "httprequest", + "tab": "1612772287426", + "name": "http://192.168.252.2:8015/node_numbers", + "x": 571, + "y": 2111, + "connections": { + "0": [ + { + "index": "0", + "id": "1759958927094" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "", + "color": "gray" + }, + "options": { + "url": "http://192.168.252.2:8015/node_numbers", + "method": "POST", + "stringify": "json" + }, + "color": "#5D9CEC", + "notes": "" + }, + { + "id": "1759958927094", + "component": "debug", + "tab": "1612772287426", + "name": "nodesChangeCloud", + "x": 951.8833312988281, + "y": 2109.2333984375, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1759959003114", + "component": "debug", + "tab": "1612772287426", + "name": "nodeChangeCloud1", + "x": 574, + "y": 2218, + "connections": {}, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "Enabled", + "color": "gray" + }, + "options": { + "type": "data", + "repository": false, + "enabled": true + }, + "color": "#967ADC", + "notes": "" + }, + { + "id": "1760020290879", + "component": "virtualwirein", + "tab": "1612772287426", + "name": "db-init", + "x": 84.75, + "y": 1787, + "connections": { + "0": [ + { + "index": "1", + "id": "1718016052341" + } + ] + }, + "disabledio": { + "input": [], + "output": [] + }, + "state": { + "text": "db-init", + "color": "gray" + }, + "options": { + "wirename": "db-init" + }, + "color": "#303E4D", + "notes": "" + } + ], + "version": 615 +} \ No newline at end of file diff --git a/RVO16/flow/dido_controller.js b/RVO16/flow/dido_controller.js new file mode 100755 index 0000000..d16fb19 --- /dev/null +++ b/RVO16/flow/dido_controller.js @@ -0,0 +1,1486 @@ +exports.id = 'dido_controller'; +exports.title = 'DIDO_Controller'; +exports.version = '2.0.0'; +exports.group = 'Worksys'; +exports.color = '#2134B0'; +exports.input = 3; +exports.output = ["red", "white", "yellow", "green"]; +exports.click = false; +exports.icon = 'bolt'; +exports.options = { edge: "undefined" }; + +exports.html = `
+
+
+
Edge TB Name
+
+
+
`; + +exports.readme = `# Sets RS232 port and all digital pins on device. Then it starts to receive data from sensors. +It receives: + +rotary_switch_state, +rotary_switch_state, +door_condition, +state_of_breaker, +state_of_contactor, +twilight_sensor +`; + +/* +we open rsPort "/dev/ttymxc0" and set digital input and output pins with "setRSPortData" +Currently we are interested in pins no. 1,2,3,6,8,9,10,16 +pins number 11, 12, 13 (we receive 10,11,12 in rsPortReceivedData) are "stykace" +When port receives data, it must be exactly 4 bytes long. Second byte is pin, that changed its value, fourth byte is value itself. +After that, we set this value to "previousValues[allPins[whichpin]]" variable + +state_of_main_switch - reportovat stav hlaveho istica : 0-> off 1-> on +rotary_switch_state - sem by sa mal reportovat stav vstupov manual a auto pola nasledovnej logiky: Manual = 1 a Auto = 0 -> Manu +Manual = 0 a Auto = 0 -> Off, Manual = 0 a Auto = 1 -> Automatic + +door_condition - pin 6, dverový kontakt -> 1 -> vyreportuje Closed, 0 -> vyreportuje Ope +twilight_sensor - hodnotu, ktoru vracia ten analogovy vstup (17) treba poslat sem ako float number. Zrejme tu potom pridame nejaky koeficient prevodu na luxy + +Na kazdu liniu +state_of_breaker - podla indexu istica sa reportuje jeho stav, teda istic na liniu 1: 0-> off, 1-> on +state_of_contactor - podla indexu stkaca sa reportuje jeho stav, teda stykac 1 na liniu 1: 0-> off, 1-> on +*/ + +const { errLogger, logger, monitor } = require('./helper/logger'); +const SerialPort = require('serialport'); +const WebSocket = require('ws'); +const { runSyncExec } = require('./helper/serialport_helper'); +const { bytesToInt, resizeArray } = require('./helper/utils'); +const { sendNotification } = require('./helper/notification_reporter'); +const bitwise = require('bitwise'); + +const DataToTbHandler = require('./helper/DataToTbHandler'); +let tbHandler; + +const errorHandler = require('./helper/ErrorToServiceHandler'); + +let ws = null; +let rsPort = null; + +let pinsData; +let relaysData; +let rvoTbName; +let GLOBALS; //FLOW global GLOBALS +let SETTINGS; // GLOBALS.settings +let controller_type; +let hasMainSwitch; + +let alarmStatus = "OFF"; + +const SEND_TO = { + debug: 0, + tb: 1, + cmd_manager: 2 +} + + +exports.install = function(instance) { + + process.on('uncaughtException', function(err) { + + //TODO send to service + + errLogger.error('uncaughtException:', err.message) + errLogger.error(err.stack); + + errorHandler.sendMessageToService(err.message + "\n" + err.stack, 0, "js_error"); + + //process.exit(1); + }) + + let previousValues = {}; + let rsPortReceivedData = []; + + //to be able to get proper twilight values + let twilight_sensor_interval = 5;//minutes + let twilight_sensor = []; + const twilight_sensor_array = []; + let twilightError = false; + + monitor.info("DIDO_Relay_Controller installed"); + + //key is PIN number , line: 0 = RVO + /* + let conversionTable = { + "1": {tbname: "", type: "state_of_main_switch", "line": 0}, //state_of_main_switch pin1 + "2": {tbname: "", type: "rotary_switch_state", "line": 0}, //rotary_switch_state - poloha manual = pin2 + "3": {tbname: "", type: "rotary_switch_state", "line": 0}, //rotary_switch_state - poloha auto = pin3 + "4": {tbname: "", type: "power_supply", "line": 0}, + "5": {tbname: "", type: "battery", "line": 0}, + "6": {tbname: "", type: "door_condition", "line": 0}, // door_condition = pin6, 1 -> vyreportuje Closed, 0 -> vyreportuje Open + "8": {tbname: "", type: "state_of_breaker", "line": 1}, // state_of_breaker linia 1 0=off, 1=on + "9": {tbname: "", type: "state_of_breaker", "line": 2}, // state_of_breaker linia 2 0=off, 1=on + "10": {tbname: "", type: "state_of_breaker", "line": 3}, // state_of_breaker linia 3 0=off, 1=on + "11": {tbname: "", type: "state_of_contactor", "line": 1}, // state_of_contactor linia 1 0=off, 1=on + "12": {tbname: "", type: "state_of_contactor", "line": 2}, // state_of_contactor linia 2 0=off, 1=on + "13": {tbname: "", type: "state_of_contactor", "line": 3}, // state_of_contactor linia 3 0=off, 1=on + "16": {tbname: "", type: "twilight_sensor", "line": 0}, // twilight_sensor = pin16 + }; + */ + + //status for calculating Statecodes-we make it global to see it from outside + FLOW.deviceStatus = { //key is device name: temperature,.... + "state_of_main_switch": "Off", //Hlavny istic (alebo druhy dverovy kontakt) + "rotary_switch_state": "Off", //Prevadzkovy + "door_condition": "closed", //Dverový kontakt + "em": "OK", //elektromer rvo + "temperature": "OK", //templomer + "battery": "OK", //Bateria + "power_supply": "OK", //Zdroj + "master_node": "OK", //MN - GLOBALS.settings.masterNodeIsResponding + "no_voltage": "OK", //GLOBALS.settings.no_voltage - vypadok napatia na faze + "state_of_breaker": {}, //"Off",//Istic + "state_of_contactor": {}, //"Off",//Stykac + "twilight_sensor": "OK" //lux sensor + }; + let deviceStatus = FLOW.deviceStatus; + + + function main() { + + GLOBALS = FLOW.GLOBALS; + SETTINGS = FLOW.GLOBALS.settings; + rvoTbName = SETTINGS.rvoTbName; + pinsData = GLOBALS.pinsData; + relaysData = GLOBALS.relaysData; + + tbHandler = new DataToTbHandler(SEND_TO.tb); + tbHandler.setSender(exports.title); + + controller_type = SETTINGS.controller_type; //"lm" or "unipi" + hasMainSwitch = SETTINGS.has_main_switch; + + if (controller_type == "") controller_type = "lm"; + + console.log(exports.title, "controller type: ", controller_type); + + if (controller_type === "lm") { + handleRsPort(); + } + else if (controller_type === "unipi") { + handleWebSocket(); + } + else { + errLogger.debug("UNKNOWN controller_type:", controller_type); + } + } + + + function initialSetting() { + //force turn off relays + + let keys = Object.keys(pinsData); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let line = pinsData[key].line; + + if (line != undefined) { + if (relaysData[line] != undefined) { + pinsData[key].tbname = relaysData[line].tbname; + //relaysData[line].contactor = 0; + } + else { + errLogger.error("CRITICAL!!! undefined relay", relaysData[line], line); + sendNotification("set port ", rvoTbName, "local_database_is_corrupted", {}, "", SEND_TO.tb, instance); + } + } + + if (pinsData[key].type == "state_of_contactor") { + let pin = key - 1; + if (controller_type === "unipi") pin = key; + } + } + + //report RVO version relaysData[0].tbname; + let values = {}; + values["edge_fw_version"] = SETTINGS.edge_fw_version; + values["maintenance_mode"] = SETTINGS.maintenance_mode; + + sendTelemetry(values, rvoTbName); + + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "buildTasks" }); + + sendNotification("rsPort.open()", rvoTbName, "flow_start", {}, "", SEND_TO.tb, instance); + monitor.info("-->FLOW bol spustený", rvoTbName, SETTINGS.edge_fw_version); + } + + + function handleRsPort() { + + if (rsPort) { + rsPort.removeAllListeners(); + rsPort = null; + } + + //TODO build according to pins!!! + //! rsPort to open are the same for lm and unipi and electromer ("/dev/ttymxc0") + const setRSPortData = [0xAA, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 1, 1, 1, 1, 0, 0, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0]; + rsPort = new SerialPort("/dev/ttymxc0", { autoOpen: false }); + + rsPort.on('open', async function() { + + await runSyncExec("stty -F /dev/ttymxc0 115200 min 1 time 5 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke").then(function(status) { + + //set port + rsPort.write(Buffer.from(setRSPortData), function(err) { + if (!err) { + monitor.info(exports.title + "--->Digital in_out has been set (runSyncExec was sucessfull)"); + + turnAlarm("off"); + initialSetting(); + } + }) + + }).catch(function(reason) { + errLogger.error(exports.title + " runSyncExec - promise rejected:" + reason); + errorHandler.sendMessageToService(exports.title + " runSyncExec - promise rejected:" + reason); + }); + + }); + + + rsPort.on('data', function(data) { + + rsPortReceivedData = [...rsPortReceivedData, ...data]; + + if (rsPortReceivedData[0] != 85) { + rsPortReceivedData = []; + return; + } + + let l = rsPortReceivedData.length; + + if (l < 4) return; + + if (l > 4) { + + // if array length is greater than 4, we take first 4 byte and do the logic, second 4 bytes, do the logic and so on + let i, j, temparray, chunk = 4; + for (i = 0, j = l; i < j; i += chunk) { + temparray = rsPortReceivedData.slice(i, i + chunk); + + if (temparray.length < 4) { + rsPortReceivedData = [...temparray]; + return; + } + + switchLogic(temparray); + } + + rsPortReceivedData = []; + return; + } + + switchLogic(rsPortReceivedData); + + rsPortReceivedData = []; + + }); + + rsPort.on('error', err => { + let message = "Dido: rsPort error: " + err.message; + logger.debug(message); + monitor.info(message); + errorHandler.sendMessageToService(message); + }) + + rsPort.on("close", () => { + let message = "Dido: rsPort closed - reconnecting ..."; + logger.debug(message); + monitor.info(message); + setTimeout(handleRsPort, 1000); + }) + + rsPort.open(); + } + + + function handleWebSocket() { + + if (ws) { + ws.removeAllListeners(); + ws = null; + } + + //to keep websocket opened, we send request every 150 seconds + let startRequests = null; + + console.log("handleWebSocket function called"); + ws = new WebSocket('ws:/0.0.0.0:1234/ws'); + + ws.onopen = function open() { + + instance.send(0, exports.title + " running"); + turnAlarm("off"); + + initialSetting(); + + setTimeout(function() { ws.send(JSON.stringify({ cmd: "all" })) }, 5000); + // we request dev info about neuron device from evok to keep websocket connection alive + // for some reason this request returns no data, but connection keeps alive + startRequests = setInterval(() => { + ws.send(JSON.stringify({ "cmd": "filter", "dev": ["neuron"] })); + }, 150000) + }; + + + // SAMPLE DATA FROM WEBSOCKET + // { + // glob_dev_id: 1, + // modes: [ 'Simple' ], + // value: 0, + // circuit: '1_07', + // pending: false, + // relay_type: 'physical', + // dev: 'relay', + // mode: 'Simple' + // }, + // { + // counter_modes: [ 'Enabled', 'Disabled' ], + // glob_dev_id: 1, + // modes: [ 'Simple', 'DirectSwitch' ], + // value: 0, + // circuit: '1_08', + // debounce: 50, + // counter: 0, + // counter_mode: 'Enabled', + // dev: 'input', + // mode: 'Simple' + // }, + ws.onmessage = async function(data) { + + data = JSON.parse(data.data); + + // data comes in array except of "temperature" ==> it comes as an object + // we do not handle temperature from evok any more => we return, if temperature comes: + if (isObject(data)) return; + + data.map(item => { + + let value = item['value']; + let pin = item["dev"] + item["circuit"]; // for example "relay1_03" or "input1_01" + + if (pin == undefined) return; + switchLogic(pin, value); + }) + } + + ws.on('error', err => { + logger.debug('Dido: websocket error', err); + }) + + ws.onclose = function() { + logger.debug('Dido: websocket onclose, reconnecting...') + clearInterval(startRequests); + setTimeout(handleWebSocket, 1000); + } + } + + instance.on("close", () => { + if (rsPort) rsPort.close(); + if (ws) ws.close(); + }) + + function getPin(line) { + //conversionTable + let keys = Object.keys(pinsData); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + + if (pinsData[key].type == "state_of_contactor" && pinsData[key].line == line) { + if (rsPort) return key - 1; + if (ws) return key; + } + } + + logger.debug("no pin detected"); + + return null; + } + + + function turnAlarm(onOrOff) { + let value = 0; + if (onOrOff == "on") value = 1; + + if (value == 1 && SETTINGS.maintenance_mode) return; + + alarmStatus = "OFF"; + if (value == 1) alarmStatus = "ON"; + + if (rsPort) { + let arr = [0x55]; + arr.push(13); + arr.push(0); + arr.push(value); + + rsPort.write(Buffer.from(arr), function(err) { + logger.debug(`sirena - ${onOrOff}`); + }); + } + else if (ws) { + let cmd = { "cmd": "set", "dev": "relay", "circuit": "1_01", "value": value }; + ws.send(JSON.stringify(cmd)); + logger.debug(`sirena - ${onOrOff}`); + } + } + + + function reportLineStatus(line) { + //Tá hodnota by mala fungovať tak že LSB bit číslo je stav ističa (1 - On, 0 - Off) a druhý bit je stav stýkača (1 - true, 0 - false). + let tbname = relaysData[line].tbname; + let bits = []; + + if (deviceStatus["state_of_breaker"][line] == "On") { + bits.push(0); + } + else bits.push(1); + + if (deviceStatus["state_of_contactor"][line] == "On") { + bits.push(0); + } + else bits.push(1); + + resizeArray(bits, 8, 0); + + let byte = bitwise.byte.write(bits.reverse()); + + //console.log("line", line, bits, byte); + sendTelemetry({ statecode: byte }, tbname); + } + + + // turn line on or off + function turnLine(onOrOff, line, pin, force, info) { + //onOrOff => "on" or "off" + let value = 0; + if (onOrOff == "on") value = 1; + + if (force == undefined) force = false; + + if (line == 0) { + if (value == 1 && alarmStatus == "ON") turnAlarm("off"); + SETTINGS.maintenance_mode = value ? true : false; + + let values = {}; + values["statecode"] = calculateStateCode(); + values["power_mode"] = value ? "maintenance" : "Automatic"; + sendTelemetry(values, rvoTbName); + + monitor.info(`turnLine ${onOrOff} - (line, SETTINGS.maintenance_mode)`, line, SETTINGS.maintenance_mode, info); + return; + } + + if (pin === undefined) pin = getPin(line); + + if (pin === undefined) { + errLogger.error("pin is undefined!", line); + return; + } + + if (!force) { + if (relaysData[line].contactor == value) { + instance.send(SEND_TO.debug, `line is already ${onOrOff} ` + line); + logger.debug(`Dido: turnLine: line is already ${onOrOff} `, line); + return; + } + } + + // if(!rsPort.isOpen && !ws) + if (!rsPort && !ws) { + errLogger.error("Dido - port or websocket is not opened"); + return; + } + + if (rsPort) { + let arr = [0x55]; + arr.push(pin); + arr.push(0); + arr.push(value); + + rsPort.write(Buffer.from(arr), function(err) { + if (err === undefined) { + monitor.info(`Dido: turnLine ${onOrOff} zapisal do rsPort-u`, line, pin, arr, info); + switchLogic(arr); + } + else { + monitor.info(`Dido: turnLine ${onOrOff} WRITE error`, err); + } + }); + + } + else if (ws) { + //pin = "relay1_03" or "input1_01" ... we must make just "1_01" with slice method + monitor.info(`Dido: turnLine ${onOrOff} - (line, pin, force)`, line, pin, force, info); + let cmd = { "cmd": "set", "dev": "relay", "circuit": pin.slice(5), "value": value }; + ws.send(JSON.stringify(cmd)); + } + + //if rvo is 24/7, it has just one switching profile point at 13:00. we do not want to send notification as it repeats every day. + //const d = new Date(); + //if(d.getHours() != 13) sendNotification("Dido_controller: ", SETTINGS.rvoTbName, "switching_profile_point_applied_to_line", { line: line, value: onOrOff }, "", SEND_TO.tb, instance); + } + + + // main opening + instance.on("2", _ => { + main(); + }) + + + //data from modbus_reader or temperature sensor or twilight sensor or other modbus device + instance.on("0", flowdata => { + + if (!isObject(flowdata.data)) return; + + // console.log('***********************', flowdata.data) + instance.send(SEND_TO.debug, flowdata.data); + + // we handle nok status from modbus_reader component and thermometer + if ("status" in flowdata.data) { + const status = flowdata.data.status; + if (status == "NOK-twilight_sensor") { + deviceStatus["twilight_sensor"] = "NOK"; + } + else if (status == "NOK-em340" || status == "NOK-em111") { + deviceStatus["em"] = "NOK"; + } + else if (status == "NOK-thermometer") { + deviceStatus["temperature"] = "NOK"; + } + } + else if ("values" in flowdata.data) { + const values = flowdata.data.values; + if (values.hasOwnProperty("twilight_sensor")) { + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "lux_sensor", value: values["twilight_sensor"] }); + deviceStatus["twilight_sensor"] = "OK" + } + else if (values.hasOwnProperty("temperature")) { + deviceStatus["temperature"] = "OK"; + } + // EM + else if (values.hasOwnProperty("total_power") || values.hasOwnProperty("total_energy") || values.hasOwnProperty("power_factor") || values.hasOwnProperty("Phase_1_voltage") || values.hasOwnProperty("Phase_1_current")) { + deviceStatus["em"] = "OK"; + SETTINGS.no_voltage.size > 0 ? deviceStatus["no_voltage"] = "NOK" : deviceStatus["no_voltage"] = "OK"; + } + + sendTelemetry(values, rvoTbName); + } + + sendRvoStatus(); + }) + + + + + // we expect array as flowdata.data + instance.on("1", flowdata => { + + //console.log(flowdata.data); + + if (!flowdata.data instanceof Object) return; + + let obj = flowdata.data; + let line = obj.line; + let force = obj.force; + let info = obj.info; + + if (obj.command == "on") turnLine("on", line, undefined, force, info); + else if (obj.command == "off") turnLine("off", line, undefined, force, info); + else if (obj.command == "turnOnAlarm") turnAlarm("on"); + else if (obj.command == "turnOffAlarm") turnAlarm("off"); + }) + + + function calculateStateCode() { + + let bits = []; + + //Hlavny istic - state_of_main_switch => v rvo senica je to druhy door pre silovu cast (EM) + if (deviceStatus["state_of_main_switch"] === "closed" || deviceStatus["state_of_main_switch"] === "Off") { + bits.push(0); + } + else { + bits.push(1); + } + + //Prevadzkovy mod - Manual, Off, Automatic, maintenance_mode = true/false // DAVA 2 BITY + if (!SETTINGS.maintenance_mode) { + if (deviceStatus["rotary_switch_state"] === "Manual") { + bits.push(0); + bits.push(1); + } + + if (deviceStatus["rotary_switch_state"] === "Automatic") { + bits.push(0); + bits.push(0); + } + + if (deviceStatus["rotary_switch_state"] === "Off") { + bits.push(1); + bits.push(0); + } + } + else { + bits.push(1); + bits.push(1); + } + + //Dverovy kontakt + if (deviceStatus["door_condition"] === "closed") { + bits.push(0); + } + else { + bits.push(1); + } + + //EM + if (deviceStatus["em"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //Teplomer + if (deviceStatus["temperature"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //Batéria + if (deviceStatus["battery"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //Zdroj + if (deviceStatus["power_supply"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //MN + if (deviceStatus["master_node"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //výpadok napätia na fáze + if (deviceStatus["no_voltage"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + if (deviceStatus["twilight_sensor"] === "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + // doplnime do 16 bitov (2 byty) + for (let i = bits.length; i < 16; i++) { + bits.push(0); + } + + // console.log("calculateStateCode - deviceStatus", deviceStatus); + // console.log("calculateStateCode", bits); + + let byte0 = bitwise.byte.write(bits.slice(0, 8).reverse()); + let byte1 = bitwise.byte.write(bits.slice(8).reverse()); + + let byte = bytesToInt([byte1, byte0]); + + //console.log("calculateStateCode -------------------", byte); + + return byte; + } + + + async function sendRvoStatus() { + + if (SETTINGS === undefined) return; + SETTINGS.masterNodeIsResponding ? deviceStatus["master_node"] = "OK" : deviceStatus["master_node"] = "NOK"; + + const table = { + "OK": 1, + "NOK": 0 + }; + + const dataToTb = { + "electrometer_status": table[deviceStatus["em"]], + "twilight_sensor_status": table[deviceStatus["twilight_sensor"]], + "thermometer_status": table[deviceStatus["temperature"]], + "phase_1_status": 1, + "phase_2_status": 1, + "phase_3_status": 1, + "master_node_status": table[deviceStatus["master_node"]] + }; + + for (const phase of SETTINGS.no_voltage) dataToTb[`phase_${phase}_status`] = 0; + + dataToTb["status"] = checkRvoStatus(); + dataToTb["statecode"] = calculateStateCode(); + + //console.log(dataToTb); + sendTelemetry(dataToTb, rvoTbName); + } + + + function pinsForRvoStatus(controllerType, hasMainSwitch) { + + let pins = []; + + if (controllerType === "lm") { + pins = [1, 4, 6]; + if (hasMainSwitch === 1) { + pins = [4, 6]; + } + } else if (controllerType === "unipi") { + pins = ["input1_01", "input1_04", "input1_05"]; + if (hasMainSwitch === 1) { + pins = ["input1_01", "input1_04"]; + } + } + + return pins; + } + + + function checkRvoStatus() { + + // we check if any of these pins values are 0 --> it means status RVO is "NOK" + // pinIndex 6 is door_condition - if it is opened in maintenance mode - status = OK + //set RVO state + let status = "OK"; + + for (const [key, value] of Object.entries(deviceStatus)) { + if (["em", "twilight_sensor", "temperature", "master_node"].includes(key) && value === "NOK") status = "NOK"; + } + + if (status === "OK") { + + let pinIndexes = pinsForRvoStatus(controller_type, hasMainSwitch); + + for (const pinIndex of pinIndexes) { + if (previousValues[pinIndex] === 0) { + if ((pinIndex === 6 || pinIndex === 'input1_01' || pinIndex === 'input1_05') && SETTINGS.maintenance_mode) continue; + status = "NOK"; + break; + } + } + } + + // battery status. If value is 1 - battery is NOK + if (previousValues[5] === 1) status = "NOK"; + if (SETTINGS.no_voltage.size > 0) status = "NOK"; + + // console.log("rvo status",status) + return status; + } + + + // we pass array to function in case of rsPort ==> switchLogic([55,3,0,1]) ==> [[55,3,0,1]] + // we pass two values in case of websocket ==> switchLogic("relay1_03",1) ==> ["relay1_03",1] + const switchLogic = (...args) => { + + let values = {}; + let pinIndex, newPinValue, twilight; + + //data from rsPort + if (args.length == 1) { + pinIndex = args[0][1] + 1; + if (pinIndex === 17) pinIndex--; + newPinValue = args[0][3]; + twilight = args[0][2]; + } + //data from websocket + else { + pinIndex = args[0]; + newPinValue = args[1]; + } + + let obj = pinsData[pinIndex]; + if (obj == undefined) { + previousValues[pinIndex] = newPinValue; + //logger.debug("dido-switchLogic ==> no pinIndex", pinIndex); + return; + } + + //tbname is added to pinsData in initialSettings function + let type = obj.type; + let line = obj.line; + let tbname = obj.tbname; + + //default value + let value = "On"; + if (newPinValue === 0) value = "Off"; + + //Hlavny istic + if (type === "state_of_main_switch" && hasMainSwitch) { + if (newPinValue === 0 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "main_switch_has_been_turned_off", {}, "", SEND_TO.tb, instance, "state_of_main_switch"); + deviceStatus["state_of_main_switch"] = "Off"; + } + else if (newPinValue === 1 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "main_switch_has_been_turned_on", {}, "", SEND_TO.tb, instance, "state_of_main_switch"); + deviceStatus["state_of_main_switch"] = "On"; + } + } + + //Prevadzkovy mod + else if (type == "rotary_switch_state") { + // combination of these two pins required to get result + let pin2, pin3; + if (pinIndex == 2 || pinIndex == "input1_02") { + pin2 = newPinValue; + pin3 = previousValues[3] || previousValues["input1_03"]; + + if (pin3 == undefined) { + previousValues[pinIndex] = newPinValue; + return; + } + } + else if (pinIndex == 3 || pinIndex == "input1_03") { + pin3 = newPinValue; + pin2 = previousValues[2] || previousValues["input1_02"]; + + if (pin2 == undefined) { + previousValues[pinIndex] = newPinValue; + return; + } + } + + //console.log('***********************', pin2, pin3) + if (pin2 == 1 && pin3 == 0) value = "Manual"; + if (pin2 == 0 && pin3 == 0) value = "Off"; + if (pin2 == 0 && pin3 == 1) value = "Automatic"; + + deviceStatus["rotary_switch_state"] = value; + + //automatic - profilu pre nody sa vykonavaju + //ak je spracovany, a automatic - tak ho zapnem + //ak nie je spracovany, iba profil zapisem + + if (pin2 != undefined && pin3 != undefined) instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "rotary_switch_state", value: value }); + + //console.log("rotary_switch_state pin", pin2, pin3, value); + } + + //Zdroj - pin 4 + else if (type === "power_supply") { + if (newPinValue === 0 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "power_supply_has_disconnected_input", {}, "", SEND_TO.tb, instance, "power_supply"); + + deviceStatus["power_supply"] = "NOK"; + } + else if (newPinValue === 1 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "power_supply_works_correctly", {}, "", SEND_TO.tb, instance, "power_supply"); + + deviceStatus["power_supply"] = "OK"; + } + } + + //Bateria - pin 5 + else if (type === "battery") { + if (newPinValue === 1 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "battery_level_is_low", {}, "", SEND_TO.tb, instance, "battery_level"); + + deviceStatus["battery"] = "NOK"; + } + else if (newPinValue === 0 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "battery_level_is_ok", {}, "", SEND_TO.tb, instance, "battery_level"); + + deviceStatus["battery"] = "OK"; + } + } + + //Dverovy kontakt - pin 6 + //! Ak je rvo s dvoma dverovymi kontaktami, ked pride z evoku signal z input1_05, co bol predytm "state_of_main switch" handlujeme ho teraz ako 'door_condition' + else if (type == "door_condition" || type === "state_of_main_switch") { + newPinValue === 0 ? value = "open" : value = "closed"; + + let door = "door_main"; + if (type === "state_of_main_switch") door = "door_em"; + + if (value === "open") { + if (SETTINGS.maintenance_mode) { + sendNotification("switchLogic", rvoTbName, door + "_open", {}, "", SEND_TO.tb, instance, door); + } else { + sendNotification("switchLogic", rvoTbName, door + "_open_without_permission", {}, "", SEND_TO.tb, instance, door); + + // zapneme sirenu + // ak sa otvoria dvere len na elektromeri (type === "state_of_main_switch") alarm sa nema spustit. alarm sa spusti len ked sa otvoria hlavne dvere (type === "door_condition") + if (type === "door_condition") turnAlarm("on"); + } + } + + + if (value === "closed") { + if (alarmStatus == "ON") turnAlarm("off"); + sendNotification("switchLogic", rvoTbName, door + "_close", {}, "", SEND_TO.tb, instance, door); + } + + deviceStatus[type] = value; + } + + //lux sensor + else if (type == "twilight_sensor") { + //! TODO - to show nok status, if lux value is not changing more then 10 times. + //Daylight is far more than 1000. So most of the day, when it is sunshine comes just value 1000. But lux sensor is not NOK. + //This is not the case in LM. If value from LM is the same 10x, there is 99% possibility, that sensor is NOK. + value = newPinValue; + + if (controller_type === 'lm') { + value = parseFloat(newPinValue + (256 * twilight)); + + let now = new Date(); + //new Date(dusk.getTime() + + let obj = { timestamp: now.getTime(), value: value }; + + //test + //twilight_sensor_interval = 1; + + twilight_sensor.push(obj); + //twilight_sensor_array.push(value); + + //check if we receive just 1 constant value from lux sensor ==> error + if (twilight_sensor_array.length > 10) { + + let set = new Set(twilight_sensor_array); + if (set.size === 1 && !twilightError) { + twilightError = true; + let value = twilight_sensor_array.shift(); + + newPinValue = 0; + } + else if (set.size !== 1 && twilightError) { + //sendNotification("switchLogic", rvoTbName, ERRWEIGHT.NOTICE, "Lux sensor is working again", "", SEND_TO.tb, instance ); + twilightError = false; + twilight_sensor_array.shift(); + + newPinValue = value; + } + else if (set.size === 1 && twilightError) { + twilight_sensor_array.shift(); + newPinValue = 0; + } + } + + let diff = twilight_sensor[twilight_sensor.length - 1].timestamp - twilight_sensor[0].timestamp; + if (diff >= twilight_sensor_interval * 60 * 1000) { + const average = twilight_sensor.reduce((acc, c) => acc + c.value, 0) / twilight_sensor.length; + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "lux_sensor", value: average }); + + twilight_sensor = []; + + //console.log("lux_sensor send", average); + } + //else console.log("lux_sensor", value, diff); + } + } + + else if (type == "state_of_contactor") { + if (!(deviceStatus["state_of_contactor"][line] == value)) { + sendNotification("switchLogic", rvoTbName, "state_of_contactor_for_line", { line: line, value: value }, "", SEND_TO.tb, instance); + } + + deviceStatus["state_of_contactor"][line] = value; + + //true, false + if (value === "On") value = true; + else if (value === "Off") value = false; + + //TODO do we need to modify relays table with contactor value, if we do not use it on startup ?? + let dataChanged = false; + if (relaysData[line].contactor !== newPinValue) { + dataChanged = true; + relaysData[line].contactor = newPinValue; + } + + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "reload_relays", line: line, value: value, dataChanged: dataChanged }); + reportLineStatus(line); + } + + else if (type === "state_of_breaker") { + + let valueChanged = false; + if (newPinValue != previousValues[pinIndex]) valueChanged = true; + + if (valueChanged) { + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "state_of_breaker", value: value, line: line }); + + //mame iba 3 istice. vyreportujeme a ohandlujeme liniu na tom istom istici ako paralelna linia (napr linia 1, paralelna s nou je linia 4, key je string "4") + // ak je 7 linii, na 1 istici je linia 1,4,7 + + if (line == 1) { + + const lineOnSameBraker = [4, 7]; + + for (var i = 0; i < lineOnSameBraker.length; i++) { + if (!relaysData.hasOwnProperty(lineOnSameBraker[i])) continue; + + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "state_of_breaker", value: value, line: lineOnSameBraker[i] }); + + deviceStatus["state_of_breaker"][lineOnSameBraker[i]] = value; + reportLineStatus(lineOnSameBraker[i]); + + values[type] = value; + const tbname = relaysData[lineOnSameBraker[i]].tbname; + sendTelemetry(values, tbname); + + delete values[type]; + } + + } + else { + const lineOnSameBraker = line + 3 + ""; + + if (relaysData.hasOwnProperty(lineOnSameBraker)) { + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "state_of_breaker", value: value, line: line + 3 }); + + deviceStatus["state_of_breaker"][line + 3] = value; + reportLineStatus(line + 3); + + values[type] = value; + const tbname = relaysData[lineOnSameBraker].tbname; + sendTelemetry(values, tbname); + + delete values[type]; + } + } + + } + + if (value == "Off") values["status"] = "NOK"; + deviceStatus["state_of_breaker"][line] = value; + + reportLineStatus(line); + } + else return; + + values[type] = value; + + if (type == "rotary_switch_state") { + if (SETTINGS.maintenance_mode) value = "maintenance"; + value = value.toLowerCase(); + values["power_mode"] = value; + } + + if (newPinValue != previousValues[pinIndex]) previousValues[pinIndex] = newPinValue; + if (Object.keys(values).length > 0 && tbname) sendTelemetry(values, tbname); + } + + + function sendTelemetry(values, tbname, date = Date.now()) { + let dataToTb = { + [tbname]: [ + { + "ts": date, + "values": values + } + ] + }; + + tbHandler.sendToTb(dataToTb, instance); + } + + + function isObject(item) { + return (typeof item === "object" && !Array.isArray(item) && item !== null); + } + +} //end of instance + + + + +//! incomming data to websocket +// [ +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_08', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_01', +// alias: 'al_lights_kitchen', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_02', +// alias: 'al_lights_bedroom', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_03', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_04', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_05', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_06', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_07', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_08', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_mode: 'Enabled', +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// dev: 'input', +// modes: [ 'Simple', 'DirectSwitch' ], +// debounce: 50, +// counter: 1, +// value: 1, +// alias: 'al_main_switch', +// mode: 'Simple', +// circuit: '1_01' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 1, +// circuit: '1_02', +// debounce: 50, +// counter: 2, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 1, +// circuit: '1_03', +// debounce: 50, +// counter: 2, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_04', +// debounce: 50, +// counter: 1, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_05', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_06', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_07', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// interval: 3, +// value: 24.5, +// circuit: '28744F7791180257', +// address: '28744F7791180257', +// time: 1631873896.48797, +// typ: 'DS18B20', +// lost: false, +// dev: 'temp' +// }, +// { +// bus: '/dev/i2c-2', +// interval: 3, +// dev: 'owbus', +// scan_interval: 300, +// circuit: '1', +// do_scan: false, +// do_reset: false +// }, +// { +// glob_dev_id: 1, +// last_comm: 0.014672994613647461, +// ver2: '0.1', +// sn: 42, +// circuit: '1', +// model: 'S207', +// dev: 'neuron', +// board_count: 1 +// }, +// { +// circuit: '1_01', +// value: 0, +// glob_dev_id: 1, +// dev: 'wd', +// timeout: 5000, +// was_wd_reset: 0, +// nv_save: 0 +// } +// ] + +//! loaded pins_data --> from LM +// { +// '1': { pin: 1, type: 'state_of_main_switch', line: 0 }, +// '2': { pin: 2, type: 'rotary_switch_state', line: 0 }, +// '3': { pin: 3, type: 'rotary_switch_state', line: 0 }, +// '4': { pin: 4, type: 'power_supply', line: 0 }, +// '5': { pin: 5, type: 'battery', line: 0 }, +// '6': { pin: 6, type: 'door_condition', line: 0 }, +// '8': { pin: 8, type: 'state_of_breaker', line: 1 }, +// '9': { pin: 9, type: 'state_of_breaker', line: 2 }, +// '10': { pin: 10, type: 'state_of_breaker', line: 3 }, +// '11': { pin: 11, type: 'state_of_contactor', line: 1 }, +// '12': { pin: 12, type: 'state_of_contactor', line: 2 }, +// '13': { pin: 13, type: 'state_of_contactor', line: 3 }, +// '16': { pin: 16, type: 'twilight_sensor', line: 0 } +// } + +//! pins.table --> from LM +// pin:number|type:string|line:number +// *|1|state_of_main_switch|0|........... +// *|2|rotary_switch_state|0|........... +// *|3|rotary_switch_state|0|........... +// *|4|power_supply|0|........... +// *|5|battery|0|........... +// *|6|door_condition|0|........... +// *|8|state_of_breaker|1|........... +// *|9|state_of_breaker|2|........... +// *|10|state_of_breaker|3|........... +// *|11|state_of_contactor|1|........... +// *|12|state_of_contactor|2|........... +// *|13|state_of_contactor|3|........... +// *|16|twilight_sensor|0|........... + +//! pins.table --> from UNIPI +// pin:string|type:string|line:number +// *|input1_01|state_of_main_switch|0|........... +// *|input1_02|rotary_switch_state|0|........... +// *|input1_03|rotary_switch_state|0|........... +// *|intut1_04|power_supply|0|........... +// *|input1_05|door_condition|0|........... +// *|input1_06|state_of_breaker|1|........... +// *|input1_07|state_of_breaker|2|........... +// *|input1_08|state_of_breaker|3|........... +// *|relay1_02|state_of_contactor|1|........... +// *|relay1_03|state_of_contactor|2|........... +// *|relay1_04|state_of_contactor|3|........... +// *|287D8776E0013CE9|temperature|0|........... + + +//! pins_data --> from UNIPI +// { +// input1_01: { +// pin: 'input1_01', +// type: 'door_condition', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_02: { +// pin: 'input1_02', +// type: 'rotary_switch_state', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_03: { +// pin: 'input1_03', +// type: 'rotary_switch_state', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_04: { +// pin: 'input1_04', +// type: 'power_supply', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_05: { +// pin: 'input1_05', +// type: 'state_of_main_switch', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_06: { +// pin: 'input1_06', +// type: 'state_of_breaker', +// line: 1, +// tbname: '52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo' +// }, +// relay1_02: { +// pin: 'relay1_02', +// type: 'state_of_contactor', +// line: 1, +// tbname: '52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo' +// }, +// '28F46E9D0E00008B': { pin: '28F46E9D0E00008B', type: 'temperature', line: 0 }, +// twilight_sensor: { pin: 'twilight_sensor', type: 'twilight_sensor', line: 0 } +// } + +//! relays_data +// { +// '0': { +// line: 0, +// tbname: 'KjbN4q7JPZmexgdnz2yKQ98YAWwO0Q3BMX6ERLoV', +// contactor: 1, +// profile: '' +// }, +// '1': { +// line: 1, +// tbname: 'RMgnK93rkoAazbqdQ4yBG95Z1YXGx6pmwBeVEP2O', +// contactor: 0, +// profile: '{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"10:00","start_time":"20:00"},{"value":0,"end_time":"10:20","start_time":"10:00"},{"value":1,"end_time":"10:40","start_time":"10:20"},{"value":0,"end_time":"11:00","start_time":"10:40"},{"value":1,"end_time":"11:30","start_time":"11:00"},{"value":0,"end_time":"11:50","start_time":"11:30"},{"value":1,"end_time":"13:00","start_time":"11:50"}],"astro_clock":false,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}' +// }, +// '2': { +// line: 2, +// tbname: 'dlE1VQjYrNx9gZRmb38gG08oLBO4qaAk2M6JPnG7', +// contactor: 0, +// profile: '{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"10:00","start_time":"20:00"},{"value":0,"end_time":"10:20","start_time":"10:00"},{"value":1,"end_time":"10:40","start_time":"10:20"},{"value":0,"end_time":"11:00","start_time":"10:40"},{"value":1,"end_time":"11:30","start_time":"11:00"},{"value":0,"end_time":"11:50","start_time":"11:30"},{"value":1,"end_time":"13:00","start_time":"11:50"}],"astro_clock":false,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}' +// }, +// '3': { +// line: 3, +// tbname: 'vnmG4kJxaXWNBgMQq0D7Aj5e9oZzOAlr6LdR3w2V', +// contactor: 0, +// profile: '{"intervals":[{"value":0,"end_time":"20:30","start_time":"13:00"},{"value":1,"end_time":"00:10","start_time":"20:30"},{"value":0,"end_time":"13:00","start_time":"05:40"},{"value":1,"end_time":"05:40","start_time":"00:10"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}' +// } +// } + + + + + +// { +// "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV": [ +// { +// "ts": 1700409326353, +// "values": { +// "_event": { +// "type": "notice", +// "status": "new", +// "source": { +// "func": "rsPort.open()", +// "component": "1700343402190", +// "component_name": "DIDO_Controller", +// "edge": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV" +// }, +// "message": "al_shariff_10.0.0.38: FLOW has been started ", +// "message_data": "" +// } +// } +// } +// ] +// } diff --git a/RVO16/flow/dido_controller_orig.txt b/RVO16/flow/dido_controller_orig.txt new file mode 100755 index 0000000..523d39b --- /dev/null +++ b/RVO16/flow/dido_controller_orig.txt @@ -0,0 +1,1473 @@ +exports.id = 'dido_controller'; +exports.title = 'DIDO_Controller'; +exports.version = '2.0.0'; +exports.group = 'Worksys'; +exports.color = '#2134B0'; +exports.input = 3; +exports.output = ["red", "white", "yellow", "green"]; +exports.click = false; +exports.icon = 'bolt'; +exports.options = { edge: "undefined" }; + +exports.html = `
+
+
+
Edge TB Name
+
+
+
`; + +exports.readme = `# Sets RS232 port and all digital pins on device. Then it starts to receive data from sensors. +It receives: + +rotary_switch_state, +rotary_switch_state, +door_condition, +state_of_breaker, +state_of_contactor, +twilight_sensor +`; + +/* +we open rsPort "/dev/ttymxc0" and set digital input and output pins with "setRSPortData" +Currently we are interested in pins no. 1,2,3,6,8,9,10,16 +pins number 11, 12, 13 (we receive 10,11,12 in rsPortReceivedData) are "stykace" +When port receives data, it must be exactly 4 bytes long. Second byte is pin, that changed its value, fourth byte is value itself. +After that, we set this value to "previousValues[allPins[whichpin]]" variable + +state_of_main_switch - reportovať stav hlavného ističa : 0-> off 1-> on +rotary_switch_state - sem by sa mal reportovať stav vstupov manual a auto podľa nasledovnej logiky: Manual = 1 a Auto = 0 -> Manual, +Manual = 0 a Auto = 0 -> Off, Manual = 0 a Auto = 1 -> Automatic + +door_condition - pin 6, dverový kontakt -> 1 -> vyreportuje Closed, 0 -> vyreportuje Open +twilight_sensor - hodnotu, ktorú vracia ten analógový vstup (17) treba poslať sem ako float number. Zrejme tu potom pridáme nejaký koeficient prevodu na luxy + +Na každú líniu: +state_of_breaker - podľa indexu ističa sa reportuje jeho stav, teda istič 1 na líniu 1: 0-> off, 1-> on +state_of_contactor - podľa indexu stykača sa reportuje jeho stav, teda stykač 1 na líniu 1: 0-> off, 1-> on +*/ + +const { errLogger, logger, monitor } = require('./helper/logger'); +const SerialPort = require('serialport'); +const WebSocket = require('ws'); +const { runSyncExec } = require('./helper/serialport_helper'); +const { bytesToInt, resizeArray } = require('./helper/utils'); +const { sendNotification } = require('./helper/notification_reporter'); +const bitwise = require('bitwise'); + +const DataToTbHandler = require('./helper/DataToTbHandler'); +let tbHandler; + +const ErrorToServiceHandler = require('./helper/ErrorToServiceHandler'); +const errorHandler = new ErrorToServiceHandler(); + +let ws = null; +let rsPort = null; + +let pinsData; +let relaysData; +let rvoTbName; +let GLOBALS; //FLOW global GLOBALS +let SETTINGS; // GLOBALS.settings +let controller_type; + +let alarmStatus = "OFF"; + +const SEND_TO = { + debug: 0, + tb: 1, + cmd_manager: 2 +} + + +exports.install = function(instance) { + + process.on('uncaughtException', function(err) { + + //TODO send to service + + errLogger.error('uncaughtException:', err.message) + errLogger.error(err.stack); + + errorHandler.sendMessageToService(err.message + "\n" + err.stack, 0, "js_error"); + + //process.exit(1); + }) + + let previousValues = {}; + let rsPortReceivedData = []; + + //to be able to get proper twilight values + let twilight_sensor_interval = 5;//minutes + let twilight_sensor = []; + const twilight_sensor_array = []; + let twilightError = false; + + monitor.info("DIDO_Relay_Controller installed"); + + //key is PIN number , line: 0 = RVO + /* + let conversionTable = { + "1": {tbname: "", type: "state_of_main_switch", "line": 0}, //state_of_main_switch pin1 + "2": {tbname: "", type: "rotary_switch_state", "line": 0}, //rotary_switch_state - poloha manual = pin2 + "3": {tbname: "", type: "rotary_switch_state", "line": 0}, //rotary_switch_state - poloha auto = pin3 + "4": {tbname: "", type: "power_supply", "line": 0}, + "5": {tbname: "", type: "battery", "line": 0}, + "6": {tbname: "", type: "door_condition", "line": 0}, // door_condition = pin6, 1 -> vyreportuje Closed, 0 -> vyreportuje Open + "8": {tbname: "", type: "state_of_breaker", "line": 1}, // state_of_breaker linia 1 0=off, 1=on + "9": {tbname: "", type: "state_of_breaker", "line": 2}, // state_of_breaker linia 2 0=off, 1=on + "10": {tbname: "", type: "state_of_breaker", "line": 3}, // state_of_breaker linia 3 0=off, 1=on + "11": {tbname: "", type: "state_of_contactor", "line": 1}, // state_of_contactor linia 1 0=off, 1=on + "12": {tbname: "", type: "state_of_contactor", "line": 2}, // state_of_contactor linia 2 0=off, 1=on + "13": {tbname: "", type: "state_of_contactor", "line": 3}, // state_of_contactor linia 3 0=off, 1=on + "16": {tbname: "", type: "twilight_sensor", "line": 0}, // twilight_sensor = pin16 + }; + */ + + //status for calculating Statecodes + let deviceStatus = { //key is device name: temperature,.... + "state_of_main_switch": "Off", //Hlavný istič (po novom druhy dverovy kontakt) + "rotary_switch_state": "Off", //Prevádzkový mód + "door_condition": "closed", //Dverový kontakt + "em": "OK", //elektromer rvo + "temperature": "OK", //templomer + "battery": "OK", //Batéria + "power_supply": "OK", //Zdroj + "master_node": "OK", //MN - GLOBALS.settings.masterNodeIsResponding + "no_voltage": "OK", //GLOBALS.settings.no_voltage - výpadok napätia na fáze + "state_of_breaker": {}, //"Off",//Istič + "state_of_contactor": {}, //"Off",//Stykač + "twilight_sensor": "OK" //lux sensor + }; + + + function main() { + + GLOBALS = FLOW.GLOBALS; + SETTINGS = FLOW.GLOBALS.settings; + rvoTbName = SETTINGS.rvoTbName; + pinsData = GLOBALS.pinsData; + relaysData = GLOBALS.relaysData; + + tbHandler = new DataToTbHandler(SEND_TO.tb) + tbHandler.setSender(exports.title); + + controller_type = SETTINGS.controller_type //"lm" or "unipi" //logicMachine + if (controller_type == "") controller_type = "lm"; + + console.log(exports.title, "controller type: ", controller_type); + + if (controller_type === "lm") { + handleRsPort(); + } + else if (controller_type === "unipi") { + handleWebSocket(); + } + else { + errLogger.debug("UNKNOWN controller_type:", controller_type); + } + } + + + function initialSetting() { + //force turn off relays + + let keys = Object.keys(pinsData); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let line = pinsData[key].line; + + if (line != undefined) { + if (relaysData[line] != undefined) { + pinsData[key].tbname = relaysData[line].tbname; + //relaysData[line].contactor = 0; + } + else { + errLogger.error("CRITICAL!!! undefined relay", relaysData[line], line); + sendNotification("set port ", rvoTbName, "local_database_is_corrupted", {}, "", SEND_TO.tb, instance); + } + } + + if (pinsData[key].type == "state_of_contactor") { + let pin = key - 1; + if (controller_type === "unipi") pin = key; + } + } + + //report RVO version relaysData[0].tbname; + let values = {}; + values["edge_fw_version"] = SETTINGS.edge_fw_version; + values["maintenance_mode"] = SETTINGS.maintenance_mode; + + sendTelemetry(values, rvoTbName); + + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "buildTasks" }); + + sendNotification("rsPort.open()", rvoTbName, "flow_start", {}, "", SEND_TO.tb, instance); + monitor.info("-->FLOW bol spustený", rvoTbName, SETTINGS.edge_fw_version); + } + + + function handleRsPort() { + //TODO build according to pins!!! + //! rsPort to open are the same for lm and unipi and electromer ("/dev/ttymxc0") + const setRSPortData = [0xAA, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 1, 1, 1, 1, 0, 0, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0]; + rsPort = new SerialPort("/dev/ttymxc0", { autoOpen: false }); + + rsPort.on('error', function(err) { + logger.debug("rsPort opened error - failed", err.message); + instance.send(SEND_TO.debug, err.message); + + errorHandler.sendMessageToService(exports.title + " rsPort opened error - failed: " + err.message); + }) + + rsPort.on('open', async function() { + + await runSyncExec("stty -F /dev/ttymxc0 115200 min 1 time 5 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke").then(function(status) { + + //set port + rsPort.write(Buffer.from(setRSPortData), function(err) { + if (!err) { + monitor.info(exports.title + "--->Digital in_out has been set (runSyncExec was sucessfull)"); + + turnAlarm("off"); + initialSetting(); + } + }) + + }).catch(function(reason) { + errLogger.error(exports.title + " runSyncExec - promise rejected:" + reason); + errorHandler.sendMessageToService(exports.title + " runSyncExec - promise rejected:" + reason); + }); + + }); + + + rsPort.on('data', function(data) { + + rsPortReceivedData = [...rsPortReceivedData, ...data]; + + if (rsPortReceivedData[0] != 85) { + rsPortReceivedData = []; + return; + } + + let l = rsPortReceivedData.length; + + if (l < 4) return; + + if (l > 4) { + + // if array length is greater than 4, we take first 4 byte and do the logic, second 4 bytes, do the logic and so on + let i, j, temparray, chunk = 4; + for (i = 0, j = l; i < j; i += chunk) { + temparray = rsPortReceivedData.slice(i, i + chunk); + + if (temparray.length < 4) { + rsPortReceivedData = [...temparray]; + return; + } + + switchLogic(temparray); + } + + rsPortReceivedData = []; + return; + } + + switchLogic(rsPortReceivedData); + + rsPortReceivedData = []; + + }); + + rsPort.on("close", () => { + rsPort.close(); + }) + + rsPort.open(); + } + + + function handleWebSocket() { + + //to keep websocket opened, we send request every 150 seconds + let startRequests = null; + + console.log("handleWebSocket function called"); + ws = new WebSocket('ws:/0.0.0.0:1234/ws'); + + ws.onopen = function open() { + + instance.send(0, exports.title + " running"); + turnAlarm("off"); + + initialSetting(); + + setTimeout(function() { ws.send(JSON.stringify({ cmd: "all" })) }, 5000); + // we request dev info about neuron device from evok to keep websocket connection alive + // for some reason this request returns no data, but connection keeps alive + startRequests = setInterval(() => { + ws.send(JSON.stringify({ "cmd": "filter", "dev": ["neuron"] })); + }, 150000) + }; + + + // SAMPLE DATA FROM WEBSOCKET + // { + // glob_dev_id: 1, + // modes: [ 'Simple' ], + // value: 0, + // circuit: '1_07', + // pending: false, + // relay_type: 'physical', + // dev: 'relay', + // mode: 'Simple' + // }, + // { + // counter_modes: [ 'Enabled', 'Disabled' ], + // glob_dev_id: 1, + // modes: [ 'Simple', 'DirectSwitch' ], + // value: 0, + // circuit: '1_08', + // debounce: 50, + // counter: 0, + // counter_mode: 'Enabled', + // dev: 'input', + // mode: 'Simple' + // }, + ws.onmessage = async function(data) { + + data = JSON.parse(data.data); + + // data comes in array except of "temperature" ==> it comes as an object + // we do not handle temperature from evok any more => we return, if temperature comes: + if (isObject(data)) return; + + data.map(item => { + + let value = item['value']; + let pin = item["dev"] + item["circuit"]; // for example "relay1_03" or "input1_01" + + if (pin == undefined) return; + switchLogic(pin, value); + }) + } + + + ws.on('error', (err) => { + monitor.info('websocket error, reconnect') + instance.send(SEND_TO.debug, err.message); + clearInterval(startRequests); + ws = null; + setTimeout(handleWebSocket, 1000); + }) + + + ws.onclose = function() { + // connection closed, discard old websocket and create a new one in 5s + // stopRequests(); + monitor.info('websocket onclose, reconnect') + clearInterval(startRequests); + ws = null; + console.log("ws is null now, reconnecting..."); + setTimeout(handleWebSocket, 1000); + } + } + + instance.on("close", () => { + if (rsPort) rsPort.close(); + if (ws) ws.close(); + }) + + + function getPin(line) { + //conversionTable + let keys = Object.keys(pinsData); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + + if (pinsData[key].type == "state_of_contactor" && pinsData[key].line == line) { + if (rsPort) return key - 1; + if (ws) return key; + } + } + + logger.debug("no pin detected"); + + return null; + } + + + function turnAlarm(onOrOff) { + let value = 0; + if (onOrOff == "on") value = 1; + + if (value == 1 && SETTINGS.maintenance_mode) return; + + alarmStatus = "OFF"; + if (value == 1) alarmStatus = "ON"; + + if (rsPort) { + let arr = [0x55]; + arr.push(13); + arr.push(0); + arr.push(value); + + rsPort.write(Buffer.from(arr), function(err) { + logger.debug(`sirena - ${onOrOff}`); + }); + } + else if (ws) { + let cmd = { "cmd": "set", "dev": "relay", "circuit": "1_01", "value": value }; + ws.send(JSON.stringify(cmd)); + logger.debug(`sirena - ${onOrOff}`); + } + } + + + function reportLineStatus(line) { + //Tá hodnota by mala fungovať tak že LSB bit číslo je stav ističa (1 - On, 0 - Off) a druhý bit je stav stýkača (1 - true, 0 - false). + let tbname = relaysData[line].tbname; + let bits = []; + + if (deviceStatus["state_of_breaker"][line] == "On") { + bits.push(0); + } + else bits.push(1); + + if (deviceStatus["state_of_contactor"][line] == "On") { + bits.push(0); + } + else bits.push(1); + + resizeArray(bits, 8, 0); + + let byte = bitwise.byte.write(bits.reverse()); + + //console.log("line", line, bits, byte); + sendTelemetry({ statecode: byte }, tbname); + } + + + // turn line on or off + function turnLine(onOrOff, line, pin, force, info) { + //onOrOff => "on" or "off" + let value = 0; + if (onOrOff == "on") value = 1; + + if (force == undefined) force = false; + + if (line == 0) { + if (value == 1 && alarmStatus == "ON") turnAlarm("off"); + SETTINGS.maintenance_mode = value ? true : false; + + let values = {}; + values["statecode"] = calculateStateCode(); + values["power_mode"] = value ? "maintenance" : "Automatic"; + sendTelemetry(values, rvoTbName); + + monitor.info(`turnLine ${onOrOff} - (line, SETTINGS.maintenance_mode)`, line, SETTINGS.maintenance_mode, info); + return; + } + + if (pin === undefined) pin = getPin(line); + + if (pin === undefined) { + errLogger.error("pin is undefined!", line); + return; + } + + if (!force) { + if (relaysData[line].contactor == value) { + instance.send(SEND_TO.debug, `line is already ${onOrOff} ` + line); + logger.debug(`turnLine: line is already ${onOrOff} `, line); + return; + } + } + + // if(!rsPort.isOpen && !ws) + if (!rsPort && !ws) { + errLogger.error("dido controller - port or websocket is not opened"); + return; + } + + if (rsPort) { + let arr = [0x55]; + arr.push(pin); + arr.push(0); + arr.push(value); + + rsPort.write(Buffer.from(arr), function(err) { + if (err === undefined) { + monitor.info(`turnLine ${onOrOff} zapisal do rsPort-u`, line, pin, arr, info); + switchLogic(arr); + } + else { + monitor.info(`turnLine ${onOrOff} WRITE error`, err); + } + }); + + } + else if (ws) { + //pin = "relay1_03" or "input1_01" ... we must make just "1_01" with slice method + monitor.info(`turnLine ${onOrOff} - (line, pin, force)`, line, pin, force, info); + let cmd = { "cmd": "set", "dev": "relay", "circuit": pin.slice(5), "value": value }; + ws.send(JSON.stringify(cmd)); + } + + //if rvo is 24/7, it has just one switching profile point at 13:00. we do not want to send notification as it repeats every day. + //const d = new Date(); + //if(d.getHours() != 13) sendNotification("Dido_controller: ", SETTINGS.rvoTbName, "switching_profile_point_applied_to_line", { line: line, value: onOrOff }, "", SEND_TO.tb, instance); + } + + + // main opening + instance.on("2", _ => { + main(); + }) + + + //data from modbus_reader or temperature sensor or twilight sensor or other modbus device + instance.on("0", flowdata => { + + if (!isObject(flowdata.data)) return; + + // console.log('***********************', flowdata.data) + instance.send(SEND_TO.debug, flowdata.data); + + // we handle nok status from modbus_reader component and thermometer + if ("status" in flowdata.data) { + const status = flowdata.data.status; + if (status == "NOK-twilight_sensor") { + deviceStatus["twilight_sensor"] = "NOK"; + } + else if (status == "NOK-em340" || status == "NOK-em111") { + deviceStatus["em"] = "NOK"; + } + else if (status == "NOK-thermometer") { + deviceStatus["temperature"] = "NOK"; + } + } + else if ("values" in flowdata.data) { + const values = flowdata.data.values; + if (values.hasOwnProperty("twilight_sensor")) { + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "lux_sensor", value: values["twilight_sensor"] }); + deviceStatus["twilight_sensor"] = "OK" + } + else if (values.hasOwnProperty("temperature")) { + deviceStatus["temperature"] = "OK"; + } + // EM + else if (values.hasOwnProperty("total_power") || values.hasOwnProperty("total_energy") || values.hasOwnProperty("power_factor") || values.hasOwnProperty("Phase_1_voltage") || values.hasOwnProperty("Phase_1_current")) { + deviceStatus["em"] = "OK"; + SETTINGS.no_voltage.size > 0 ? deviceStatus["no_voltage"] = "NOK" : deviceStatus["no_voltage"] = "OK"; + } + + sendTelemetry(values, rvoTbName); + } + + sendRvoStatus(); + }) + + + + + // we expect array as flowdata.data + instance.on("1", flowdata => { + + //console.log(flowdata.data); + + if (!flowdata.data instanceof Object) return; + + let obj = flowdata.data; + let line = obj.line; + let force = obj.force; + let info = obj.info; + + if (obj.command == "on") turnLine("on", line, undefined, force, info); + else if (obj.command == "off") turnLine("off", line, undefined, force, info); + else if (obj.command == "turnOnAlarm") turnAlarm("on"); + else if (obj.command == "turnOffAlarm") turnAlarm("off"); + }) + + + function calculateStateCode() { + + let bits = []; + + //Hlavný istič - state_of_main_switch => v rvo senica je to druhy door pre silovu cast (EM) + if (deviceStatus["state_of_main_switch"] == "closed") { + bits.push(0); + } + else { + bits.push(1); + } + + //Prevádzkový mód - Manual, Off, Automatic, maintenance_mode = true/false // DAVA 2 BITY + if (!SETTINGS.maintenance_mode) { + if (deviceStatus["rotary_switch_state"] == "Manual") { + bits.push(0); + bits.push(1); + } + + if (deviceStatus["rotary_switch_state"] == "Automatic") { + bits.push(0); + bits.push(0); + } + + if (deviceStatus["rotary_switch_state"] == "Off") { + bits.push(1); + bits.push(0); + } + } + else { + bits.push(1); + bits.push(1); + } + + //Dverový kontakt + if (deviceStatus["door_condition"] == "closed") { + bits.push(0); + } + else { + bits.push(1); + } + + //EM + if (deviceStatus["em"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //Teplomer + if (deviceStatus["temperature"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //Batéria + if (deviceStatus["battery"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //Zdroj + if (deviceStatus["power_supply"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //MN + if (deviceStatus["master_node"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + //výpadok napätia na fáze + if (deviceStatus["no_voltage"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + if (deviceStatus["twilight_sensor"] == "NOK") { + bits.push(1); + } + else { + bits.push(0); + } + + // doplnime do 16 bitov (2 byty) + for (let i = bits.length; i < 16; i++) { + bits.push(0); + } + + // console.log("calculateStateCode - deviceStatus", deviceStatus); + // console.log("calculateStateCode", bits); + + let byte0 = bitwise.byte.write(bits.slice(0, 8).reverse()); + let byte1 = bitwise.byte.write(bits.slice(8).reverse()); + + let byte = bytesToInt([byte1, byte0]); + + //console.log("calculateStateCode -------------------", byte); + + return byte; + } + + + async function sendRvoStatus() { + + if (SETTINGS === undefined) return; + SETTINGS.masterNodeIsResponding ? deviceStatus["master_node"] = "OK" : deviceStatus["master_node"] = "NOK"; + + const table = { + "OK": 1, + "NOK": 0 + }; + + const dataToTb = { + "electrometer_status": table[deviceStatus["em"]], + "twilight_sensor_status": table[deviceStatus["twilight_sensor"]], + "thermometer_status": table[deviceStatus["temperature"]], + "phase_1_status": 1, + "phase_2_status": 1, + "phase_3_status": 1, + "master_node_status": table[deviceStatus["master_node"]] + }; + + for (const phase of SETTINGS.no_voltage) dataToTb[`phase_${phase}_status`] = 0; + + dataToTb["status"] = checkRvoStatus(); + dataToTb["statecode"] = calculateStateCode(); + + //console.log(dataToTb); + sendTelemetry(dataToTb, rvoTbName); + } + + + function checkRvoStatus() { + + // we check if any of these pins values are 0 --> it means status RVO is "NOK" + // pinIndex 6 is door_condition - if it is opened in maintenance mode - status = OK + //set RVO state + let status = "OK"; + + for (const [key, value] of Object.entries(deviceStatus)) { + if (["em", "twilight_sensor", "temperature", "master_node"].includes(key) && value == "NOK") status = "NOK"; + } + + if (status == "OK") { + let pinIndexes = [1, 4, 6]; + if (controller_type == 'unipi') pinIndexes = ['input1_01', 'input1_04', 'input1_05']; + + for (const pinIndex of pinIndexes) { + if (previousValues[pinIndex] === 0) { + if ((pinIndex === 6 || pinIndex === 'input1_01' || pinIndex === 'input1_05') && SETTINGS.maintenance_mode) continue; + status = "NOK"; + break; + } + } + } + + // battery status. If value is 1 - battery is NOK + if (previousValues[5] === 1) status = "NOK"; + if (SETTINGS.no_voltage.size > 0) status = "NOK"; + + // console.log("rvo status",status) + return status; + } + + + // we pass array to function in case of rsPort ==> switchLogic([55,3,0,1]) ==> [[55,3,0,1]] + // we pass two values in case of websocket ==> switchLogic("relay1_03",1) ==> ["relay1_03",1] + const switchLogic = (...args) => { + + let values = {}; + let pinIndex, newPinValue, twilight; + + //data from rsPort + if (args.length == 1) { + pinIndex = args[0][1] + 1; + if (pinIndex === 17) pinIndex--; + newPinValue = args[0][3]; + twilight = args[0][2]; + } + //data from websocket + else { + pinIndex = args[0]; + newPinValue = args[1]; + } + + let obj = pinsData[pinIndex]; + if (obj == undefined) { + previousValues[pinIndex] = newPinValue; + //logger.debug("dido-switchLogic ==> no pinIndex", pinIndex); + return; + } + + //tbname is added to pinsData in initialSettings function + let type = obj.type; + let line = obj.line; + let tbname = obj.tbname; + + //default value + let value = "On"; + if (newPinValue === 0) value = "Off"; + + //Prevádzkový mód + if (type == "rotary_switch_state") { + // combination of these two pins required to get result + let pin2, pin3; + if (pinIndex == 2 || pinIndex == "input1_02") { + pin2 = newPinValue; + pin3 = previousValues[3] || previousValues["input1_03"]; + + if (pin3 == undefined) { + previousValues[pinIndex] = newPinValue; + return; + } + } + else if (pinIndex == 3 || pinIndex == "input1_03") { + pin3 = newPinValue; + pin2 = previousValues[2] || previousValues["input1_02"]; + + if (pin2 == undefined) { + previousValues[pinIndex] = newPinValue; + return; + } + } + + //console.log('***********************', pin2, pin3) + if (pin2 == 1 && pin3 == 0) value = "Manual"; + if (pin2 == 0 && pin3 == 0) value = "Off"; + if (pin2 == 0 && pin3 == 1) value = "Automatic"; + + deviceStatus["rotary_switch_state"] = value; + + //automatic - profilu pre nody sa vykonavaju + //ak je spracovany, a automatic - tak ho zapnem + //ak nie je spracovany, iba profil zapisem + + if (pin2 != undefined && pin3 != undefined) instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "rotary_switch_state", value: value }); + + //console.log("rotary_switch_state pin", pin2, pin3, value); + } + + //Zdroj - pin 4 + else if (type === "power_supply") { + if (newPinValue === 0 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "power_supply_has_disconnected_input", {}, "", SEND_TO.tb, instance, "power_supply"); + + deviceStatus["power_supply"] = "NOK"; + } + else if (newPinValue === 1 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "power_supply_works_correctly", {}, "", SEND_TO.tb, instance, "power_supply"); + + deviceStatus["power_supply"] = "OK"; + } + } + + //Batéria - pin 5 + else if (type === "battery") { + if (newPinValue === 1 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "battery_level_is_low", {}, "", SEND_TO.tb, instance, "battery_level"); + + deviceStatus["battery"] = "NOK"; + } + else if (newPinValue === 0 && newPinValue !== previousValues[pinIndex]) { + sendNotification("switchLogic", rvoTbName, "battery_level_is_ok", {}, "", SEND_TO.tb, instance, "battery_level"); + + deviceStatus["battery"] = "OK"; + } + } + + //Dverový kontakt - pin 6 + //! Po novom mame dva dverove kontakty, nie jeden. Druhy je teraz tam, kde bol digital input "state_of_main_switch" + //! preto ked pride z evoku signal z input1_05, co bol predytm "main switch" handlujeme ho teraz ako 'door_condition' + else if (type == "door_condition" || type === "state_of_main_switch") { + newPinValue === 0 ? value = "open" : value = "closed"; + + if (value === "open" && SETTINGS.maintenance_mode) { + sendNotification("switchLogic", rvoTbName, "door_opened", {}, "", SEND_TO.tb, instance, "rvo_door"); + } + + if (value === "open" && !SETTINGS.maintenance_mode) { + sendNotification("switchLogic", rvoTbName, "door_opened_without_permission", {}, "", SEND_TO.tb, instance, "rvo_door"); + + // zapneme sirenu + // ak sa otvoria dvere len na elektromeri (type === "state_of_main_switch") alarm sa nema spustit. alarm sa spusti len ked sa otvoria hlavne dvere (type === "door_condition") + if (type === "door_condition") turnAlarm("on"); + } + + if (value === "closed") { + if (alarmStatus == "ON") turnAlarm("off"); + sendNotification("switchLogic", rvoTbName, "door_closed", {}, "", SEND_TO.tb, instance, "rvo_door"); + } + + deviceStatus[type] = value; + } + + //lux sensor + else if (type == "twilight_sensor") { + //! TODO - to show nok status, if lux value is not changing more then 10 times. + //Daylight is far more than 1000. So most of the day, when it is sunshine comes just value 1000. But lux sensor is not NOK. + //This is not the case in LM. If value from LM is the same 10x, there is 99% possibility, that sensor is NOK. + value = newPinValue; + + if (controller_type === 'lm') { + value = parseFloat(newPinValue + (256 * twilight)); + + let now = new Date(); + //new Date(dusk.getTime() + + let obj = { timestamp: now.getTime(), value: value }; + + //test + //twilight_sensor_interval = 1; + + twilight_sensor.push(obj); + //twilight_sensor_array.push(value); + + //check if we receive just 1 constant value from lux sensor ==> error + if (twilight_sensor_array.length > 10) { + + let set = new Set(twilight_sensor_array); + if (set.size === 1 && !twilightError) { + twilightError = true; + let value = twilight_sensor_array.shift(); + + newPinValue = 0; + } + else if (set.size !== 1 && twilightError) { + //sendNotification("switchLogic", rvoTbName, ERRWEIGHT.NOTICE, "Lux sensor is working again", "", SEND_TO.tb, instance ); + twilightError = false; + twilight_sensor_array.shift(); + + newPinValue = value; + } + else if (set.size === 1 && twilightError) { + twilight_sensor_array.shift(); + newPinValue = 0; + } + } + + let diff = twilight_sensor[twilight_sensor.length - 1].timestamp - twilight_sensor[0].timestamp; + if (diff >= twilight_sensor_interval * 60 * 1000) { + const average = twilight_sensor.reduce((acc, c) => acc + c.value, 0) / twilight_sensor.length; + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "lux_sensor", value: average }); + + twilight_sensor = []; + + //console.log("lux_sensor send", average); + } + //else console.log("lux_sensor", value, diff); + } + } + + else if (type == "state_of_contactor") { + if (!(deviceStatus["state_of_contactor"][line] == value)) { + sendNotification("switchLogic", rvoTbName, "state_of_contactor_for_line", { line: line, value: value }, "", SEND_TO.tb, instance); + } + + deviceStatus["state_of_contactor"][line] = value; + + //true, false + if (value === "On") value = true; + else if (value === "Off") value = false; + + //TODO do we need to modify relays table with contactor value, if we do not use it on startup ?? + let dataChanged = false; + if (relaysData[line].contactor !== newPinValue) { + dataChanged = true; + relaysData[line].contactor = newPinValue; + } + + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "reload_relays", line: line, value: value, dataChanged: dataChanged }); + reportLineStatus(line); + + //modify table relays + // dbRelays.modify({ contactor: newPinValue }).where("line", line).make(function(builder) { + // builder.callback(function(err, response) { + // if(!err) + // { + // let time = 0; + // if(value) time = 1000 * 10;//10 sekund + + // let dataChanged = false; + // if(relaysData[line].contactor != newPinValue) dataChanged = true; + // relaysData[line].contactor = newPinValue; // 0,1 + + // //ak bola predchadzajuci stav off a novy stav je on, budu sa nastavovat nespracovane node profiles + // //a budu sa odosielat commandy, tie vsak mozu zlyhat, a preto potrebujeme ich spusti trochu neskor + // setTimeout(function(){ + // instance.send(SEND_TO.cmd_manager, {sender: "dido_controller", cmd: "reload_relays", line: line, time: time, value: value, dataChanged: dataChanged}); + // }, time); + + // reportLineStatus(line); + // } + // else + // { + // errLogger.error("modify table relays failed", err); + // } + + // }); + // }); + } + + else if (type === "state_of_breaker") { + + let valueChanged = false; + if (newPinValue != previousValues[pinIndex]) valueChanged = true; + + if (valueChanged) { + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "state_of_breaker", value: value, line: line }); + + //mame iba 3 istice. vyreportujeme a ohandlujeme liniu na tom istom istici ako paralelna linia (napr linia 1, paralelna s nou je linia 4, key je string "4") + // ak je 7 linii, na 1 istici je linia 1,4,7 + + if (line == 1) { + + const lineOnSameBraker = [4, 7]; + + for (var i = 0; i < lineOnSameBraker.length; i++) { + if (!relaysData.hasOwnProperty(lineOnSameBraker[i])) continue; + + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "state_of_breaker", value: value, line: lineOnSameBraker[i] }); + + deviceStatus["state_of_breaker"][lineOnSameBraker[i]] = value; + reportLineStatus(lineOnSameBraker[i]); + + values[type] = value; + const tbname = relaysData[lineOnSameBraker[i]].tbname; + sendTelemetry(values, tbname); + + delete values[type]; + } + + } + else { + const lineOnSameBraker = line + 3 + ""; + + if (relaysData.hasOwnProperty(lineOnSameBraker)) { + instance.send(SEND_TO.cmd_manager, { sender: "dido_controller", cmd: "state_of_breaker", value: value, line: line + 3 }); + + deviceStatus["state_of_breaker"][line + 3] = value; + reportLineStatus(line + 3); + + values[type] = value; + const tbname = relaysData[lineOnSameBraker].tbname; + sendTelemetry(values, tbname); + + delete values[type]; + } + } + + } + + if (value == "Off") values["status"] = "NOK"; + deviceStatus["state_of_breaker"][line] = value; + + reportLineStatus(line); + } + else return; + + values[type] = value; + + if (type == "rotary_switch_state") { + if (SETTINGS.maintenance_mode) value = "maintenance"; + value = value.toLowerCase(); + values["power_mode"] = value; + } + + if (newPinValue != previousValues[pinIndex]) previousValues[pinIndex] = newPinValue; + if (Object.keys(values).length > 0 && tbname) sendTelemetry(values, tbname); + } + + + function sendTelemetry(values, tbname, date = Date.now()) { + let dataToTb = { + [tbname]: [ + { + "ts": date, + "values": values + } + ] + }; + + tbHandler.sendToTb(dataToTb, instance); + } + + + function isObject(item) { + return (typeof item === "object" && !Array.isArray(item) && item !== null); + } + +} //end of instance + + + + +//! incomming data to websocket +// [ +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_08', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_01', +// alias: 'al_lights_kitchen', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_02', +// alias: 'al_lights_bedroom', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_03', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_04', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_05', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_06', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// glob_dev_id: 1, +// modes: [ 'Simple' ], +// value: 0, +// circuit: '1_07', +// pending: false, +// relay_type: 'physical', +// dev: 'relay', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_08', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_mode: 'Enabled', +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// dev: 'input', +// modes: [ 'Simple', 'DirectSwitch' ], +// debounce: 50, +// counter: 1, +// value: 1, +// alias: 'al_main_switch', +// mode: 'Simple', +// circuit: '1_01' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 1, +// circuit: '1_02', +// debounce: 50, +// counter: 2, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 1, +// circuit: '1_03', +// debounce: 50, +// counter: 2, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_04', +// debounce: 50, +// counter: 1, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_05', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_06', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// counter_modes: [ 'Enabled', 'Disabled' ], +// glob_dev_id: 1, +// modes: [ 'Simple', 'DirectSwitch' ], +// value: 0, +// circuit: '1_07', +// debounce: 50, +// counter: 0, +// counter_mode: 'Enabled', +// dev: 'input', +// mode: 'Simple' +// }, +// { +// interval: 3, +// value: 24.5, +// circuit: '28744F7791180257', +// address: '28744F7791180257', +// time: 1631873896.48797, +// typ: 'DS18B20', +// lost: false, +// dev: 'temp' +// }, +// { +// bus: '/dev/i2c-2', +// interval: 3, +// dev: 'owbus', +// scan_interval: 300, +// circuit: '1', +// do_scan: false, +// do_reset: false +// }, +// { +// glob_dev_id: 1, +// last_comm: 0.014672994613647461, +// ver2: '0.1', +// sn: 42, +// circuit: '1', +// model: 'S207', +// dev: 'neuron', +// board_count: 1 +// }, +// { +// circuit: '1_01', +// value: 0, +// glob_dev_id: 1, +// dev: 'wd', +// timeout: 5000, +// was_wd_reset: 0, +// nv_save: 0 +// } +// ] + +//! loaded pins_data --> from LM +// { +// '1': { pin: 1, type: 'state_of_main_switch', line: 0 }, +// '2': { pin: 2, type: 'rotary_switch_state', line: 0 }, +// '3': { pin: 3, type: 'rotary_switch_state', line: 0 }, +// '4': { pin: 4, type: 'power_supply', line: 0 }, +// '5': { pin: 5, type: 'battery', line: 0 }, +// '6': { pin: 6, type: 'door_condition', line: 0 }, +// '8': { pin: 8, type: 'state_of_breaker', line: 1 }, +// '9': { pin: 9, type: 'state_of_breaker', line: 2 }, +// '10': { pin: 10, type: 'state_of_breaker', line: 3 }, +// '11': { pin: 11, type: 'state_of_contactor', line: 1 }, +// '12': { pin: 12, type: 'state_of_contactor', line: 2 }, +// '13': { pin: 13, type: 'state_of_contactor', line: 3 }, +// '16': { pin: 16, type: 'twilight_sensor', line: 0 } +// } + +//! pins.table --> from LM +// pin:number|type:string|line:number +// *|1|state_of_main_switch|0|........... +// *|2|rotary_switch_state|0|........... +// *|3|rotary_switch_state|0|........... +// *|4|power_supply|0|........... +// *|5|battery|0|........... +// *|6|door_condition|0|........... +// *|8|state_of_breaker|1|........... +// *|9|state_of_breaker|2|........... +// *|10|state_of_breaker|3|........... +// *|11|state_of_contactor|1|........... +// *|12|state_of_contactor|2|........... +// *|13|state_of_contactor|3|........... +// *|16|twilight_sensor|0|........... + +//! pins.table --> from UNIPI +// pin:string|type:string|line:number +// *|input1_01|state_of_main_switch|0|........... +// *|input1_02|rotary_switch_state|0|........... +// *|input1_03|rotary_switch_state|0|........... +// *|intut1_04|power_supply|0|........... +// *|input1_05|door_condition|0|........... +// *|input1_06|state_of_breaker|1|........... +// *|input1_07|state_of_breaker|2|........... +// *|input1_08|state_of_breaker|3|........... +// *|relay1_02|state_of_contactor|1|........... +// *|relay1_03|state_of_contactor|2|........... +// *|relay1_04|state_of_contactor|3|........... +// *|287D8776E0013CE9|temperature|0|........... + + +//! pins_data --> from UNIPI +// { +// input1_01: { +// pin: 'input1_01', +// type: 'door_condition', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_02: { +// pin: 'input1_02', +// type: 'rotary_switch_state', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_03: { +// pin: 'input1_03', +// type: 'rotary_switch_state', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_04: { +// pin: 'input1_04', +// type: 'power_supply', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_05: { +// pin: 'input1_05', +// type: 'state_of_main_switch', +// line: 0, +// tbname: 'PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8' +// }, +// input1_06: { +// pin: 'input1_06', +// type: 'state_of_breaker', +// line: 1, +// tbname: '52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo' +// }, +// relay1_02: { +// pin: 'relay1_02', +// type: 'state_of_contactor', +// line: 1, +// tbname: '52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo' +// }, +// '28F46E9D0E00008B': { pin: '28F46E9D0E00008B', type: 'temperature', line: 0 }, +// twilight_sensor: { pin: 'twilight_sensor', type: 'twilight_sensor', line: 0 } +// } + +//! relays_data +// { +// '0': { +// line: 0, +// tbname: 'KjbN4q7JPZmexgdnz2yKQ98YAWwO0Q3BMX6ERLoV', +// contactor: 1, +// profile: '' +// }, +// '1': { +// line: 1, +// tbname: 'RMgnK93rkoAazbqdQ4yBG95Z1YXGx6pmwBeVEP2O', +// contactor: 0, +// profile: '{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"10:00","start_time":"20:00"},{"value":0,"end_time":"10:20","start_time":"10:00"},{"value":1,"end_time":"10:40","start_time":"10:20"},{"value":0,"end_time":"11:00","start_time":"10:40"},{"value":1,"end_time":"11:30","start_time":"11:00"},{"value":0,"end_time":"11:50","start_time":"11:30"},{"value":1,"end_time":"13:00","start_time":"11:50"}],"astro_clock":false,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}' +// }, +// '2': { +// line: 2, +// tbname: 'dlE1VQjYrNx9gZRmb38gG08oLBO4qaAk2M6JPnG7', +// contactor: 0, +// profile: '{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"10:00","start_time":"20:00"},{"value":0,"end_time":"10:20","start_time":"10:00"},{"value":1,"end_time":"10:40","start_time":"10:20"},{"value":0,"end_time":"11:00","start_time":"10:40"},{"value":1,"end_time":"11:30","start_time":"11:00"},{"value":0,"end_time":"11:50","start_time":"11:30"},{"value":1,"end_time":"13:00","start_time":"11:50"}],"astro_clock":false,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}' +// }, +// '3': { +// line: 3, +// tbname: 'vnmG4kJxaXWNBgMQq0D7Aj5e9oZzOAlr6LdR3w2V', +// contactor: 0, +// profile: '{"intervals":[{"value":0,"end_time":"20:30","start_time":"13:00"},{"value":1,"end_time":"00:10","start_time":"20:30"},{"value":0,"end_time":"13:00","start_time":"05:40"},{"value":1,"end_time":"05:40","start_time":"00:10"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}' +// } +// } + + + + + +// { +// "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV": [ +// { +// "ts": 1700409326353, +// "values": { +// "_event": { +// "type": "notice", +// "status": "new", +// "source": { +// "func": "rsPort.open()", +// "component": "1700343402190", +// "component_name": "DIDO_Controller", +// "edge": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV" +// }, +// "message": "al_shariff_10.0.0.38: FLOW has been started ", +// "message_data": "" +// } +// } +// } +// ] +// } diff --git a/RVO16/flow/helper/DataToTbHandler.js b/RVO16/flow/helper/DataToTbHandler.js new file mode 100755 index 0000000..716ef7b --- /dev/null +++ b/RVO16/flow/helper/DataToTbHandler.js @@ -0,0 +1,187 @@ +class DataToTbHandler { + + constructor(index) { + this.index = index; + + // time, after new value for the given key will be resend to tb (e.g. {status: "OK"}) + this.timeToHoldTbValue = 30 * 60; //30 minutes + this.previousValues = {}; + this.debug = false; + this.messageCounter = 0; + this.itIsNodeReadout = false; + this.sender = ""; + + // if attribute change difference is less than limit value, we do not send to tb. + this.attributeChangeLimit = { + temperature: 0.5, + Phase_1_voltage: 2, + Phase_2_voltage: 2, + Phase_3_voltage: 2, + Phase_1_current: 0.1, + Phase_2_current: 0.1, + Phase_3_current: 0.1, + Phase_1_power: 2, + Phase_2_power: 2, + Phase_3_power: 2, + total_power: 2, + total_energy: 1, + Phase_1_pow_factor: 0.1, + Phase_2_pow_factor: 0.1, + Phase_3_pow_factor: 0.1, + power_factor: 0.1, + lifetime: 2, + voltage: 2, + power: 2, + frequency: 3, + energy: 0.1, + current: 2, + inclination_x: 10, + inclination_y: 10, + inclination_z: 10 + }; + + } + + dump() { + console.log("----------------------------"); + console.log("previousValues", this.previousValues); + console.log("----------------------------"); + } + + setSender(sender) { + this.sender = sender; + } + + isEmptyObject(obj) { + for (var _ in obj) { + return false; + } + return true; + } + + + sendToTb(data, instance) { + + //not to modify data object, we do deep copy: + let dataCopy = JSON.parse(JSON.stringify(data)); + + let keys = Object.keys(dataCopy); + + if (keys.length == 0) { + if (this.debug) console.log("sendToTb received empty object", dataCopy); + return; + } + + let tbname = keys[0]; + let ts; + + let arrayOfValues = dataCopy[tbname]; + let arrayOfValuesToSend = []; + + for (let i = 0; i < arrayOfValues.length; i++) { + + ts = arrayOfValues[i].ts; + let values = this.prepareValuesForTb(tbname, ts, arrayOfValues[i].values); + + if (!this.isEmptyObject(values)) { + arrayOfValuesToSend.push({ ts: ts, values: values }); + } + + } + + if (arrayOfValuesToSend.length == 0) { + //if(this.debug) console.log("data not sent - empty array"); + return; + } + + this.messageCounter++; + + let dataToTbModified = { + [tbname]: arrayOfValuesToSend + } + + //console.log(this.sender + " DATA SEND TO TB ", tbname, this.messageCounter, new Date(ts), dataToTbModified[tbname][0].values, this.instance); + //if(this.debug) console.log(this.sender + " DATA SEND TO TB ", this.index, tbname, arrayOfValuesToSend); + instance.send(this.index, dataToTbModified); + } + + + getDiffTimestamp(key) { + //TODO set different value for given key!!! + //if(key == "status") this.timeToHoldTbValue = 2*60*60;//2h + return this.timeToHoldTbValue * 1000; + } + + + prepareValuesForTb(tbname, timestamp, values) { + + let keys = Object.keys(values); + + if (keys.includes("lifetime")) this.itIsNodeReadout = true; + + if (!this.previousValues.hasOwnProperty(tbname)) { + this.previousValues[tbname] = {}; + } + + //if(this.debug) console.log("prepareValuesForTb", tbname, timestamp, values); + + for (let i = 0; i < keys.length; i++) { + + let key = keys[i]; + let value = values[key]; + + if (!this.previousValues[tbname].hasOwnProperty(key)) { + this.previousValues[tbname][key] = { ts: timestamp, value: value }; + continue; + } + + // attributeData ==> {voltage: {ts:333333, value:5}} + let attributeData = this.previousValues[tbname][key]; + let attributeToChange = false; + if (key in this.attributeChangeLimit) attributeToChange = true; + let limit = this.attributeChangeLimit[key]; + let timestampDiffToRemoveKey; + + //this will ensure "node statecode" will be sent just once an hour + if (this.itIsNodeReadout && key === "statecode") { + attributeData.value = value; + this.itIsNodeReadout = false; + timestampDiffToRemoveKey = 1 * 60 * 60 * 1000; // 1 hour + } + + if (key === "twilight_sensor" && value > 100) { + attributeData.value = value; + } + + //if edge, master or node version do not change, send just once a day: + if (["edge_fw_version", "master_node_version", "fw_version"].includes(key)) { + timestampDiffToRemoveKey = 24 * 60 * 60 * 1000; + } + + if (attributeData.value === value || attributeToChange && Math.abs(attributeData.value - value) < limit) { + + let diff = timestamp - attributeData.ts; + if (!timestampDiffToRemoveKey) timestampDiffToRemoveKey = this.getDiffTimestamp(key); + + if (diff > timestampDiffToRemoveKey) { + attributeData.ts = Date.now(); + //if(this.debug) console.log(this.sender + ": update ts for key", key, "diff is", diff, "messageCounter", this.messageCounter); + } + else { + delete values[key]; + //if(this.debug) console.log(this.sender + ": delete key", key, "diff is", diff, "messageCounter", this.messageCounter, timestampDiffToRemoveKey); + } + } + else { + attributeData.value = value; + attributeData.ts = timestamp; + } + + } + + return values; + } +} + +module.exports = DataToTbHandler; + diff --git a/RVO16/flow/helper/ErrorToServiceHandler.js b/RVO16/flow/helper/ErrorToServiceHandler.js new file mode 100755 index 0000000..2b27c32 --- /dev/null +++ b/RVO16/flow/helper/ErrorToServiceHandler.js @@ -0,0 +1,91 @@ +const { MD5 } = require('./md5.js'); +const { networkInterfaces } = require('os'); + +class ErrorToServiceHandler { + constructor() { + this.previousValues = {}; + + this.project_id = undefined; + + const nets = networkInterfaces(); + this.ipAddresses = {}; + + for (const name of Object.keys(nets)) { + for (const net of nets[name]) { + // Skip over non-IPv4 and internal (i.e. 127.0.0.1) addresses + if (net.family === 'IPv4' && !net.internal) { + if (!this.ipAddresses[name]) { + this.ipAddresses[name] = []; + } + this.ipAddresses[name].push(net.address); + } + } + } + } + + setProjectId(project_id) { + this.project_id = project_id; + } + + processMessage(message, seconds) { + if (Array.isArray(message)) message = message.join(', '); + + let key = MD5(message); + let ts = Date.now(); + + //keep in memory - default value is 1h + if (seconds === undefined) seconds = 60 * 60; + + if (!this.previousValues.hasOwnProperty(key)) { + this.previousValues[key] = { ts: ts, duration: seconds }; + } + + let diff = (ts - this.previousValues[key].ts); + if (diff < this.previousValues[key].duration * 1000) return false; + + this.previousValues[key].ts = ts; + + return message; + } + + sendMessageToService(message, seconds, message_type) { + + // if error occures too early FLOW.GLOBALS.settings.project_id is still undefined + if (this.project_id === undefined) { + console.log("ErrorToServiceHandler.js: no project_id"); + return; + } + + let f = this.processMessage(message, seconds); + if (f === false) return; + + if (message_type === undefined) message_type = "error_message"; + + let toService = { + id: this.project_id, + ipAddresses: this.ipAddresses + }; + + //js_error || error_message + toService[message_type] = message; + + console.log("ErrorToServiceHandler------------------------>send to service", toService); + + RESTBuilder.make(function(builder) { + builder.method('POST'); + builder.post(toService); + builder.url('http://192.168.252.2:8004/sentmessage'); + + builder.callback(function(err, response, output) { + console.log("process.on error send", err, response, output, toService); + }); + }); + + } +} + +const errorHandler = new ErrorToServiceHandler(); + + +module.exports = errorHandler; +//module.exports = ErrorToServiceHandler; diff --git a/RVO16/flow/helper/db_helper.js b/RVO16/flow/helper/db_helper.js new file mode 100755 index 0000000..40e796c --- /dev/null +++ b/RVO16/flow/helper/db_helper.js @@ -0,0 +1,44 @@ +function promisifyBuilder(builder) +{ + return new Promise((resolve, reject) => { + + try{ + + builder.callback(function(err, response) { + + if(err != null) reject(err); + resolve(response); + }); + + } catch (error) { + reject(error); + } + }) +} + +function makeMapFromDbResult(response, ...keys) +{ + let s = "-"; + let data = {}; + + for(let i = 0; i < response.length; i++) + { + let record = response[i]; + + let k = []; + for(let j = 0; j < keys.length; j++) + { + k.push( record[keys[j]] ); + } + + let key = k.join(s); + data[ key ] = record; + } + + return data; +} + +module.exports = { + promisifyBuilder, + makeMapFromDbResult + } \ No newline at end of file diff --git a/RVO16/flow/helper/logger.js b/RVO16/flow/helper/logger.js new file mode 100755 index 0000000..2585639 --- /dev/null +++ b/RVO16/flow/helper/logger.js @@ -0,0 +1,30 @@ +//https://github.com/log4js-node/log4js-node/blob/master/examples/example.js +//file: { type: 'file', filename: path.join(__dirname, 'log/file.log') } + +var log4js = require("log4js"); +var path = require('path'); + +log4js.configure({ +appenders: { + errLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../../", 'err.txt') }, + monitorLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../../", 'monitor.txt') }, + console: { type: 'console' } +}, +categories: { + errLogs: { appenders: ['console', 'errLogs'], level: 'error' }, + monitorLogs: { appenders: ['console', 'monitorLogs'], level: 'trace' }, + //another: { appenders: ['console'], level: 'trace' }, + default: { appenders: ['console'], level: 'trace' } +} +}); + +const errLogger = log4js.getLogger("errLogs"); +const logger = log4js.getLogger(); +const monitor = log4js.getLogger("monitorLogs"); + +//USAGE +//logger.debug("text") +//monitor.info('info'); +//errLogger.error("some error"); + +module.exports = { errLogger, logger, monitor }; \ No newline at end of file diff --git a/RVO16/flow/helper/md5.js b/RVO16/flow/helper/md5.js new file mode 100755 index 0000000..d3b0480 --- /dev/null +++ b/RVO16/flow/helper/md5.js @@ -0,0 +1,5 @@ +function MD5(d){var r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_} + +module.exports = { + MD5 +} \ No newline at end of file diff --git a/RVO16/flow/helper/notification_reporter.js b/RVO16/flow/helper/notification_reporter.js new file mode 100755 index 0000000..839c12c --- /dev/null +++ b/RVO16/flow/helper/notification_reporter.js @@ -0,0 +1,121 @@ +//key is device, value = message {} +let sentValues = {}; +let notificationsData = null; +let rvoName; + +//sendNotification("CMD Manager: process cmd", SETTINGS.rvoTbName, "dimming_profile_was_successfully_received_by_node", { node: node }, "", SEND_TO.tb, instance); + +let ERRWEIGHT = { + EMERGENCY: "emergency", // System unusable + ALERT: "alert", // Action must be taken immidiately + CRITICAL: "critical", // Component unable to function + ERROR: "error", // Error, but component able to recover from it + WARNING: "warning", // Possibility of error, system running futher + NOTICE: "notice", // Significant message but not an error, things user might want to know about + INFO: "informational", // Info + DEBUG: "debug" // Debug - only if CONFIG.debug is enabled +}; + +function getKey(map, val) { + return Object.keys(map).findItem(key => map[key] === val); +} + +//https://stackoverflow.com/questions/41117799/string-interpolation-on-variable +var template = (tpl, args) => tpl.replace(/\${(\w+)}/g, (_, v) => args[v]); + + +function initNotification() { + notificationsData = FLOW.GLOBALS.notificationsData; + rvoName = FLOW.GLOBALS.settings.rvo_name; +} + + +function sendNotification(func, device, key, params, extra, tb_output, instance, saveKey) { + + let storeToSendValues = true; + if (saveKey == undefined) storeToSendValues = false; + + let weight = ""; + let message = {}; + + let notification = notificationsData[key]; + + if (notification) { + weight = notification.weight.toLowerCase(); + + Object.keys(notification).forEach(item => { + if (["en", "sk", "de", "cz", "it", "es"].includes(item)) { + message[item] = rvoName + ": " + template(notification[item], params); + } + }) + } + else { + //console.error("sendNotification: Notifications: undefined key", key, func, notificationsData); + console.error("sendNotification: Notifications: undefined key", key, func); + return false; + } + + //detect invalid err weight + if (getKey(ERRWEIGHT, weight) == undefined) { + console.error("sendNotification: Notifications: undefined weight", weight, key, func); + return false; + } + + if (sentValues.hasOwnProperty(saveKey)) { + if (JSON.stringify(sentValues[saveKey]) == JSON.stringify(message)) { + return false; + } + } + + if (sentValues[saveKey] == undefined) { + if (storeToSendValues) { + //do not send - flow is was started + sentValues[saveKey] = message; + return false; + } + } + + if (storeToSendValues) sentValues[saveKey] = message; + + let content = { + "type": weight, + "status": "new", + "source": { + "func": func, + "component": instance.id, + "component_name": instance.name, + "edge": device + }, + "message": message, + "message_data": extra + }; + + let msg = {}; + msg[device] = [ + { + "ts": Date.now(), + "values": { + "_event": content + } + } + ]; + + // Msg can be outputted from components only after configuration + /*if (canSendErrData()){ + sendBufferedErrors(); + } else { + bufferError(msg); + }*/ + + instance.send(tb_output, msg); // Even if error server is unavailable, send this message to output, for other possible component connections + + return true; + +} + +module.exports = { + sendNotification, + ERRWEIGHT, + initNotification +} + diff --git a/RVO16/flow/helper/register.js b/RVO16/flow/helper/register.js new file mode 100755 index 0000000..fc1d008 --- /dev/null +++ b/RVO16/flow/helper/register.js @@ -0,0 +1,144 @@ +/* +0 - cislo registra / prikaz +1 - recepient - 0 = master, 1 = slave (slave je automaticky group a broadcast) +2 - r/rw - read/write +3- register name - nazov registra / prikazu (len pre info - zobrazenie v aplikacii) + +4,5,6,7, - jednotlive byte-y - nazov byte-u +4-7 - RES. a prazdny string "" sa nezobrazia!!! +*/ + +//124 zaznamov +const registers = [ + ["0","1","R","Status","","",""], + ["1","1","RW","Dimming","R-Channel ","G-Channel","B-Channel ","W - Channel"], + ["2","1","R","Device types","","",".",""], + ["3","1","RW","Group addresses 1-4","Groups Add. 4","Groups Add. 3","Groups Add. 2","Groups Add. 1"], + ["4","1","RW","Group addresses 5-8","Groups Add. 8","Groups Add. 7","Groups Add. 6","Groups Add. 5"], + ["5","1","RW","Serial number (MAC)","","","",""], + ["6","1","RW","Time of dusk","HH","MM","SS","EXTRA"], + ["7","1","RW","Time of dawn","HH","MM","SS","EXTRA"], + ["8","1","RW","Time Schedule settings","TBD","TBD","Movement sensor","Time Schedule"], + ["9","1","RW","TS1 Time point 1","HH","MM","SS","Ext. Device"], + ["10","1","RW","TS1 Time point 1 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["11","1","RW","TS1 Time point 2","HH","MM","SS","Ext. Device"], + ["12","1","RW","TS1 Time point 2 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["13","1","RW","TS1 Time point 3","HH","MM","SS","Ext. Device"], + ["14","1","RW","TS1 Time point 3 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["15","1","RW","TS1 Time point 4","HH","MM","SS","Ext. Device"], + ["16","1","RW","TS1 Time point 4 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["17","1","RW","TS1 Time point 5","HH","MM","SS","Ext. Device"], + ["18","1","RW","TS1 Time point 5 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["19","1","RW","TS1 Time point 6","HH","MM","SS","Ext. Device"], + ["20","1","RW","TS1 Time point 6 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["21","1","RW","TS1 Time point 7","HH","MM","SS","Ext. Device"], + ["22","1","RW","TS1 Time point 7 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["23","1","RW","TS1 Time point 8","HH","MM","SS","Ext. Device"], + ["24","1","RW","TS1 Time point 8 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["25","1","RW","TS1 Time point 9","HH","MM","SS","Ext. Device"], + ["26","1","RW","TS1 Time point 9 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["27","1","RW","TS1 Time point 10","HH","MM","SS","Ext. Device"], + ["28","1","RW","TS1 Time point 10 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["29","1","RW","TS1 Time point 11","HH","MM","SS","Ext. Device"], + ["30","1","RW","TS1 Time point 11 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["31","1","RW","TS1 Time point 12","HH","MM","SS","Ext. Device"], + ["32","1","RW","TS1 Time point 12 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["33","1","RW","TS1 Time point 13","HH","MM","SS","Ext. Device"], + ["34","1","RW","TS1 Time point 13 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["35","1","RW","TS1 Time point 14","HH","MM","SS","Ext. Device"], + ["36","1","RW","TS1 Time point 14 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["37","1","RW","TS1 Time point 15","HH","MM","SS","Ext. Device"], + ["38","1","RW","TS1 Time point 15 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["39","1","RW","TS1 Time point 16","HH","MM","SS","Ext. Device"], + ["40","1","RW","TS1 Time point 16 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["41","1","RW","TS2 Time point 1","HH","MM","SS","Ext. Device"], + ["42","1","RW","TS2 Time point 1 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["43","1","RW","TS2 Time point 2","HH","MM","SS","Ext. Device"], + ["44","1","RW","TS2 Time point 2 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["45","1","RW","TS2 Time point 3","HH","MM","SS","Ext. Device"], + ["46","1","RW","TS2 Time point 3 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["47","1","RW","TS2 Time point 4","HH","MM","SS","Ext. Device"], + ["48","1","RW","TS2 Time point 4 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["49","1","RW","TS2 Time point 5","HH","MM","SS","Ext. Device"], + ["50","1","RW","TS2 Time point 5 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["51","1","RW","TS2 Time point 6","HH","MM","SS","Ext. Device"], + ["52","1","RW","TS2 Time point 6 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["53","1","RW","TS2 Time point 7","HH","MM","SS","Ext. Device"], + ["54","1","RW","TS2 Time point 7 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["55","1","RW","TS2 Time point 8","HH","MM","SS","Ext. Device"], + ["56","1","RW","TS2 Time point 8 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["57","1","RW","TS2 Time point 9","HH","MM","SS","Ext. Device"], + ["58","1","RW","TS2 Time point 9 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["59","1","RW","TS2 Time point 10","HH","MM","SS","Ext. Device"], + ["60","1","RW","TS2 Time point 10 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["61","1","RW","TS2 Time point 11","HH","MM","SS","Ext. Device"], + ["62","1","RW","TS2 Time point 11 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["63","1","RW","TS2 Time point 12","HH","MM","SS","Ext. Device"], + ["64","1","RW","TS2 Time point 12 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["65","1","RW","TS2 Time point 13","HH","MM","SS","Ext. Device"], + ["66","1","RW","TS2 Time point 13 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["67","1","RW","TS2 Time point 14","HH","MM","SS","Ext. Device"], + ["68","1","RW","TS2 Time point 14 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["69","1","RW","TS2 Time point 15","HH","MM","SS","Ext. Device"], + ["70","1","RW","TS2 Time point 15 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["71","1","RW","TS2 Time point 16","HH","MM","SS","Ext. Device"], + ["72","1","RW","TS2 Time point 16 Levels","R-Channel","G-Channel","B-Channel","W - Channel"], + ["73","1","RW","Power meter status","TBD","","",""], + ["74","1","R","Input Voltage","","","",""], + ["75","1","R","Input Current","","","",""], + ["76","1","R","Input Power","","","",""], + ["77","1","R","Cos phi","","","",""], + ["78","1","R","Frequency","","","",""], + ["79","1","RW","Energy","","","",""], + ["80","1","RW","Lifetime","","","",""], + ["81","1","RW","Power on cycles (input)","","","",""], + ["82","1","RW","Power on cycles (relay)","","","",""], + ["83","1","R","Time since last power on","","","",""], + ["84","1","R","Accelerometer data","","","",""], + ["85","1","RW","GPS latitude","pos/neg","deg","min ","sec"], + ["86","1","RW","GPS longitude","pos/neg","deg","min ","sec"], + ["87","1","RW","Actual time","HH","MM","SS","RES."], + ["88","1","RW","Actual date","Day of week","Day","Month","Year"], + ["89","1","R","Production data 1","","","",""], + ["90","1","R","Production data 2","","","",""], + ["91","1","RW","Network ID","NID3","NID2","NID1","NID0"], + ["95","1","RW","Actual Lux level from cabinet","RES.","RES.","HB","LB"], + ["96","1","RW","Threshold lux level","Dusk HB","Dusk LB","Dawn HB","Dawn LB"], + ["97","1","RW","Adjust period","Dusk HB","Dusk LB","Dawn HB","Dawn LB"], + ["98","1","RW","Offset","RES.","RES.","Dusk","Dawn"], + ["99","1","RW","CCT min/max range","max-H","max-L","min-H","min-L"], + ["100","1","RW","DALI interface","Cmd ID","Add","Cmd","Resp"], + ["101","1","RW","Module FW ver","v1","v2","v3","v4"], + ["102","1","RW","Module MAC-H","unused","unused","M1","M2"], + ["103","1","RW","Module MAC-L","M3","M4","M5","M6"], + ["122","1","R","FW update status/control register","Byte3","Byte2","Byte1","Byte0"], + ["123","1","R","FW update - data index","Byte3","Byte2","Byte1","Byte0"], + ["124","1","R","FW update - data","Byte3","Byte2","Byte1","Byte0"], + ["0","0","R","Status","","","",""], + ["1","0","RW","Control register","RES.","RES.","RES.","init mode enable"], + ["2","0","R","Device types","","","",""], + ["3","0","R","Serial number (MAC)","","","",""], + ["4","0","R","Production data 1","","","",""], + ["5","0","R","Production data 2","","","",""], + ["6","0","RW","Network ID","NID3","NID2","NID1","NID0"], + ["7","0","RW","RS232 settings","param.","param.","Baudrate H","Baudrate L"], + ["8","0","R","Accelerometer data","","","",""], + ["9","0","RW","Module FW ver","v1","v2","v3","v4"], + ["10","0","RW","Module MAC-H","unused","unused","M1","M2"], + ["11","0","RW","Module MAC-L","M3","M4","M5","M6"], + ["32","0","RW","FW update status/control register","Byte3","Byte2","Byte1","Byte0"], + ["33","0","RW","FW update - data index","Byte3","Byte2","Byte1","Byte0"], + ["34","0","RW","FW update - data","Byte3","Byte2","Byte1","Byte0"], + ["125","0","RW","Debug Register","Byte3","Byte2","Byte1","Byte0"], + ["126","0","RW","Network Control Register","Byte3","Byte2","Byte1","Byte0"], + ["127","0","R","Network Status Register","Byte3","Byte2","Byte1","Byte0"], + ["128","0","RW","Node XX Serial Number Register","SER3","SER2","SER1","SER0"], + ["256","0","R","Node XX Network Status Register","","","",""] +]; + +let register = {}; + +module.exports = { + registers, + register +} \ No newline at end of file diff --git a/RVO16/flow/helper/serialport_helper.js b/RVO16/flow/helper/serialport_helper.js new file mode 100755 index 0000000..7f5920d --- /dev/null +++ b/RVO16/flow/helper/serialport_helper.js @@ -0,0 +1,99 @@ +const { exec } = require('child_process'); + +function openPort(port) { + return new Promise((resolve, reject) => { + + var callbackError = function(err) { + port.removeListener('error', callbackError); + port.removeListener('open', callbackError); + + reject(err.message); + }; + + var callbackOpen = function(data) { + port.removeListener('error', callbackError); + port.removeListener('open', callbackOpen); + + resolve("port open: ok"); + }; + + port.on('error', callbackError); + port.on('open', callbackOpen); + + port.open(); + + }) +} + +function runSyncExec(command) { + return new Promise((resolve, reject) => { + + exec(command, (error, stdout, stderr) => { + if (error == null) resolve(stdout); + reject(error); + }); + + }) +} + +async function writeData(port, data, readbytes, timeout) { + return new Promise((resolve, reject) => { + + // If first item in data array is 255, we just write broadcast command to rsPort + // We wait 3 seconds and resolve(["broadcast"]) + // It is important to resolve with array + if (data[0] == 255) { + + port.write(Buffer.from(data), function(err) { + if (err) { + reject(err.message); + } + }); + + setTimeout(resolve, 3000, ["broadcast"]); + return; + } + + //cmd-manager mame http route POST / terminal a tomu sa tiez nastavuje timeout!!! + + var callback = function(data) { + rsPortReceivedData.push(...data); + let l = rsPortReceivedData.length; + + if (l >= readbytes) { + port.removeListener('data', callback); + + clearTimeout(t); + resolve(rsPortReceivedData); + } + }; + + port.removeListener('data', callback); + + let t = setTimeout(() => { + port.removeListener('data', callback); + + //console.log("serialport helper: writeData TIMEOUT READING", rsPortReceivedData); + + reject("TIMEOUT READING"); + }, timeout); + + let rsPortReceivedData = []; + + port.on('data', callback); + + port.write(Buffer.from(data), function(err) { + if (err) { + port.removeListener('data', callback); + reject(err.message); + } + + }); + }) +} + +module.exports = { + openPort, + runSyncExec, + writeData +} diff --git a/RVO16/flow/helper/suncalc.js b/RVO16/flow/helper/suncalc.js new file mode 100755 index 0000000..c9ca56d --- /dev/null +++ b/RVO16/flow/helper/suncalc.js @@ -0,0 +1,317 @@ +/* + (c) 2011-2015, Vladimir Agafonkin + SunCalc is a JavaScript library for calculating sun/moon position and light phases. + https://github.com/mourner/suncalc +*/ + +(function () { 'use strict'; + +// shortcuts for easier to read formulas + +var PI = Math.PI, + sin = Math.sin, + cos = Math.cos, + tan = Math.tan, + asin = Math.asin, + atan = Math.atan2, + acos = Math.acos, + rad = PI / 180; + +// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas + + +// date/time constants and conversions + +var dayMs = 1000 * 60 * 60 * 24, + J1970 = 2440588, + J2000 = 2451545; + +function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } +function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } +function toDays(date) { return toJulian(date) - J2000; } + + +// general calculations for position + +var e = rad * 23.4397; // obliquity of the Earth + +function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); } +function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); } + +function azimuth(H, phi, dec) { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); } +function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); } + +function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; } + +function astroRefraction(h) { + if (h < 0) // the following formula works for positive altitudes only. + h = 0; // if h = -0.08901179 a div/0 would occur. + + // formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad: + return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179)); +} + +// general sun calculations + +function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); } + +function eclipticLongitude(M) { + + var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center + P = rad * 102.9372; // perihelion of the Earth + + return M + C + P + PI; +} + +function sunCoords(d) { + + var M = solarMeanAnomaly(d), + L = eclipticLongitude(M); + + return { + dec: declination(L, 0), + ra: rightAscension(L, 0) + }; +} + + +var SunCalc = {}; + + +// calculates sun position for a given date and latitude/longitude + +SunCalc.getPosition = function (date, lat, lng) { + + var lw = rad * -lng, + phi = rad * lat, + d = toDays(date), + + c = sunCoords(d), + H = siderealTime(d, lw) - c.ra; + + return { + azimuth: azimuth(H, phi, c.dec), + altitude: altitude(H, phi, c.dec) + }; +}; + + +// sun times configuration (angle, morning name, evening name) + +var times = SunCalc.times = [ + [-0.833, 'sunrise', 'sunset' ], + [ -0.3, 'sunriseEnd', 'sunsetStart' ], + [ -6, 'dawn', 'dusk' ], + [ -12, 'nauticalDawn', 'nauticalDusk'], + [ -18, 'nightEnd', 'night' ], + [ 6, 'goldenHourEnd', 'goldenHour' ] +]; + +// adds a custom time to the times config + +SunCalc.addTime = function (angle, riseName, setName) { + times.push([angle, riseName, setName]); +}; + + +// calculations for sun times + +var J0 = 0.0009; + +function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } + +function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; } +function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); } + +function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); } +function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; } + +// returns set time for the given sun altitude +function getSetJ(h, lw, phi, dec, n, M, L) { + + var w = hourAngle(h, phi, dec), + a = approxTransit(w, lw, n); + return solarTransitJ(a, M, L); +} + + +// calculates sun times for a given date, latitude/longitude, and, optionally, +// the observer height (in meters) relative to the horizon + +SunCalc.getTimes = function (date, lat, lng, height) { + + height = height || 0; + + var lw = rad * -lng, + phi = rad * lat, + + dh = observerAngle(height), + + d = toDays(date), + n = julianCycle(d, lw), + ds = approxTransit(0, lw, n), + + M = solarMeanAnomaly(ds), + L = eclipticLongitude(M), + dec = declination(L, 0), + + Jnoon = solarTransitJ(ds, M, L), + + i, len, time, h0, Jset, Jrise; + + + var result = { + solarNoon: fromJulian(Jnoon), + nadir: fromJulian(Jnoon - 0.5) + }; + + for (i = 0, len = times.length; i < len; i += 1) { + time = times[i]; + h0 = (time[0] + dh) * rad; + + Jset = getSetJ(h0, lw, phi, dec, n, M, L); + Jrise = Jnoon - (Jset - Jnoon); + + result[time[1]] = fromJulian(Jrise); + result[time[2]] = fromJulian(Jset); + } + + return result; +}; + + +// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas + +function moonCoords(d) { // geocentric ecliptic coordinates of the moon + + var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude + M = rad * (134.963 + 13.064993 * d), // mean anomaly + F = rad * (93.272 + 13.229350 * d), // mean distance + + l = L + rad * 6.289 * sin(M), // longitude + b = rad * 5.128 * sin(F), // latitude + dt = 385001 - 20905 * cos(M); // distance to the moon in km + + return { + ra: rightAscension(l, b), + dec: declination(l, b), + dist: dt + }; +} + +SunCalc.getMoonPosition = function (date, lat, lng) { + + var lw = rad * -lng, + phi = rad * lat, + d = toDays(date), + + c = moonCoords(d), + H = siderealTime(d, lw) - c.ra, + h = altitude(H, phi, c.dec), + // formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H)); + + h = h + astroRefraction(h); // altitude correction for refraction + + return { + azimuth: azimuth(H, phi, c.dec), + altitude: h, + distance: c.dist, + parallacticAngle: pa + }; +}; + + +// calculations for illumination parameters of the moon, +// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and +// Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + +SunCalc.getMoonIllumination = function (date) { + + var d = toDays(date || new Date()), + s = sunCoords(d), + m = moonCoords(d), + + sdist = 149598000, // distance from Earth to Sun in km + + phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)), + inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)), + angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - + cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra)); + + return { + fraction: (1 + cos(inc)) / 2, + phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI, + angle: angle + }; +}; + + +function hoursLater(date, h) { + return new Date(date.valueOf() + h * dayMs / 24); +} + +// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article + +SunCalc.getMoonTimes = function (date, lat, lng, inUTC) { + var t = new Date(date); + if (inUTC) t.setUTCHours(0, 0, 0, 0); + else t.setHours(0, 0, 0, 0); + + var hc = 0.133 * rad, + h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc, + h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx; + + // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set) + for (var i = 1; i <= 24; i += 2) { + h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc; + h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc; + + a = (h0 + h2) / 2 - h1; + b = (h2 - h0) / 2; + xe = -b / (2 * a); + ye = (a * xe + b) * xe + h1; + d = b * b - 4 * a * h1; + roots = 0; + + if (d >= 0) { + dx = Math.sqrt(d) / (Math.abs(a) * 2); + x1 = xe - dx; + x2 = xe + dx; + if (Math.abs(x1) <= 1) roots++; + if (Math.abs(x2) <= 1) roots++; + if (x1 < -1) x1 = x2; + } + + if (roots === 1) { + if (h0 < 0) rise = i + x1; + else set = i + x1; + + } else if (roots === 2) { + rise = i + (ye < 0 ? x2 : x1); + set = i + (ye < 0 ? x1 : x2); + } + + if (rise && set) break; + + h0 = h2; + } + + var result = {}; + + if (rise) result.rise = hoursLater(t, rise); + if (set) result.set = hoursLater(t, set); + + if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true; + + return result; +}; + + +// export as Node module / AMD module / browser variable +if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc; +else if (typeof define === 'function' && define.amd) define(SunCalc); +else window.SunCalc = SunCalc; + +}()); diff --git a/RVO16/flow/helper/utils.js b/RVO16/flow/helper/utils.js new file mode 100755 index 0000000..dbffe45 --- /dev/null +++ b/RVO16/flow/helper/utils.js @@ -0,0 +1,161 @@ +const fs = require('fs').promises; + +function bytesToInt(bytes, numberOfBytes) { + let buffer = []; + if (Array.isArray(bytes)) { + buffer = bytes.slice(0); + if (numberOfBytes != undefined) { + buffer = bytes.slice(bytes.length - numberOfBytes); + } + } + else buffer.push(bytes); + + let result = 0; + for (let i = 0; i < buffer.length; i++) { + result = (result << 8) | buffer[i]; + } + + return result >>> 0; //ensure it's an unsigned 32-bit number +} + +function resizeArray(arr, newSize, defaultValue) { + while (newSize > arr.length) + arr.push(defaultValue); + arr.length = newSize; +} + +longToByteArray = function(/*long*/long) { + // we want to represent the input as a 8-bytes array + var byteArray = [0, 0, 0, 0, 0, 0, 0, 0]; + + for (var index = 0; index < byteArray.length; index++) { + var byte = long & 0xff; + byteArray[index] = byte; + long = (long - byte) / 256; + } + + return byteArray; +}; + +function addDays(date, days) { + var result = new Date(date); + result.setDate(result.getDate() + days); + return result; +} + +/* +sleep(2000).then(() => { + // Do something after the sleep! + + +}); +*/ + +function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)); +} + +function isEmptyObject(obj) { + for (var name in obj) { + return false; + } + return true; +} + +function emptyJsObject(jsObject) { + Object.keys(jsObject).forEach(key => delete jsObject[key]); +} + +function convertUTCDateToLocalDate(date) { + var newDate = new Date(date); + newDate.setMinutes(date.getMinutes() + date.getTimezoneOffset()); + return newDate; +} + +function addZeroBefore(n) { + return (n < 10 ? '0' : '') + n; +} + + +/** + * Asynchronously writes data to a file. + * + * @param {string} filePath The path to the file. + * @param {string} data The data to write to the file. + * @param {boolean} [append=false] If true, appends the data to the file. If false, it overwrites the file. + */ +async function writeToFile(filePath, data, append = false) { + if (typeof data !== 'string') data = JSON.stringify(data, null, 2); + try { + if (append) { + // Append the data to the end of the file. This is the simplest way to append. + await fs.appendFile(filePath, data, 'utf8'); + console.log(`Successfully appended data to ${filePath} using fs.appendFile.`); + } else { + // Overwrite the file with the new data. + await fs.writeFile(filePath, data, 'utf8'); + console.log(`Successfully wrote (overwrote) data to ${filePath} using fs.writeFile.`); + } + } catch (error) { + console.error(`Error writing to file ${filePath}:`, error); + } +} + + + /** + * Checks if an item is present in an array and adds it if it's not. + * * @param {Array} arr The array to check. + * @param {*} item The item to add. + * @returns {Array} The modified array. + */ +const addToArrayIfUnique = (arr, item) => { + if (!arr.includes(item)) { + arr.push(item); + } + return arr; +}; + + +var convertBase = function() { + + function convertBase(baseFrom, baseTo) { + return function(num) { + return parseInt(num, baseFrom).toString(baseTo); + + }; + } + + // binary to decimal + convertBase.bin2dec = convertBase(2, 10); + + // binary to hexadecimal + convertBase.bin2hex = convertBase(2, 16); + + // decimal to binary + convertBase.dec2bin = convertBase(10, 2); + + // decimal to hexadecimal + convertBase.dec2hex = convertBase(10, 16); + + // hexadecimal to binary + convertBase.hex2bin = convertBase(16, 2); + + // hexadecimal to decimal + convertBase.hex2dec = convertBase(16, 10); + + return convertBase; +}(); + +module.exports = { + bytesToInt, + longToByteArray, + addDays, + addZeroBefore, + resizeArray, + isEmptyObject, + emptyJsObject, + sleep, + convertUTCDateToLocalDate, + writeToFile, + addToArrayIfUnique +} diff --git a/RVO16/flow/httprequest.js b/RVO16/flow/httprequest.js new file mode 100755 index 0000000..469c8cb --- /dev/null +++ b/RVO16/flow/httprequest.js @@ -0,0 +1,137 @@ +exports.id = 'httprequest'; +exports.title = 'HTTP Request'; +exports.group = 'HTTP'; +exports.color = '#5D9CEC'; +exports.input = true; +exports.version = '2.0.1'; +exports.output = 1; +exports.author = 'Peter Širka'; +exports.icon = 'cloud-upload'; + +exports.html = `
+
@(URL address)
+
+
+
@(HTTP method)
+
+
+
@(Serialization)
+
+
+
@(Download the content in chunks)
+
@(Keep persistent cookies)
+
@(Disable DNS cache)
+
@(Keep alive connection)
+
+
+
+
@(Custom headers)
+
@(Cookies)
+
+
+
+ +
+
+
+
@(User)
+
+
+
@(Password)
+
+
+
+
+
`; + +exports.readme = `# Request + +This component creates a request with received data. + +__Response:__ +\`\`\`javascript +{ + data: String, + headers: Object, + status: Number, + host: String +} +\`\`\` + +__Dynamic arguments__: +Are performed via FlowData repository and can be used for URL address or for custom headers/cookies/auth. Use \`repository\` component for creating of dynamic arguments. Dynamic values are replaced in the form \`{key}\`: + +- url address e.g. \`https://.../{key}/\` +- headers values e.g. \`{token}\` +- cookies values e.g. \`{token}\``; + +exports.install = function(instance) { + + var can = false; + var flags = null; + var cookies2 = null; + + instance.on('data', function(response) { + can && instance.custom.send(response); + }); + + instance.custom.send = function(response) { + var options = instance.options; + + var headers = null; + var cookies = null; + + options.headers && Object.keys(options.headers).forEach(function(key) { + !headers && (headers = {}); + headers[key] = response.arg(options.headers[key]); + }); + + if (options.username && options.userpassword) { + !headers && (headers = {}); + headers['Authorization'] = 'Basic ' + U.createBuffer(response.arg(options.username + ':' + options.userpassword)).toString('base64'); + } + + options.cookies && Object.keys(options.cookies).forEach(function(key) { + !cookies && (cookies = {}); + cookies[key] = response.arg(options.cookies[key]); + }); + + if (options.chunks) { + U.download(response.arg(options.url), flags, options.stringify === 'none' ? null : response.data, function(err, response) { + response.on('data', (chunks) => instance.send2(chunks)); + }, cookies || cookies2, headers); + } else { + U.request(response.arg(options.url), flags, options.stringify === 'none' ? null : response.data, function(err, data, status, headers, host) { + if (response && !err) { + response.data = { data: data, status: status, headers: headers, host: host }; + instance.send2(response); + } else if (err) + instance.error(err, response); + }, cookies || cookies2, headers); + } + }; + + instance.reconfigure = function() { + var options = instance.options; + can = options.url && options.url && options.method && options.stringify ? true : false; + instance.status(can ? '' : 'Not configured', can ? undefined : 'red'); + + if (!can) + return; + + flags = []; + flags.push(options.method.toLowerCase()); + options.stringify === 'json' && flags.push('json'); + options.stringify === 'raw' && flags.push('raw'); + options.keepalive && flags.push('keepalive'); + !options.nodns && flags.push('dnscache'); + if (options.persistentcookies) { + flags.push('cookies'); + cookies2 = {}; + } else + cookies2 = null; + }; + + instance.on('options', instance.reconfigure); + instance.reconfigure(); +}; \ No newline at end of file diff --git a/RVO16/flow/httpresponse.js b/RVO16/flow/httpresponse.js new file mode 100755 index 0000000..160a3bb --- /dev/null +++ b/RVO16/flow/httpresponse.js @@ -0,0 +1,76 @@ +exports.id = 'httpresponse'; +exports.title = 'HTTP Response'; +exports.group = 'HTTP'; +exports.color = '#5D9CEC'; +exports.icon = 'arrow-right'; +exports.input = true; +exports.output = ['#666D76']; +exports.version = '2.0.0'; +exports.author = 'Martin Smola'; +exports.readme = `# HTTP response + +HTTP response will respond with data recieved using data-type set in Settings form or plain text if not set. Output is the message duration \`Number\` in seconds.`; + +exports.html = `
+
@(Response data-type)
+
JSON is by default.
+
`; + +exports.install = function(instance) { + + var dursum = 0; + var durcount = 0; + + instance.on('data', function(flowdata) { + + var ctrl = flowdata.repository.controller; + var data = flowdata.data; + + if (!ctrl) { + instance.throw('No controller to use for response!'); + return; + } + + durcount++; + dursum += ((new Date() - flowdata.begin) / 1000).floor(2); + setTimeout2(instance.id, instance.custom.duration, 500, 10); + + ctrl.$flowdata = flowdata; + + var datatype = instance.options.datatype || 'json'; + if (datatype === 'emptyresponse') + return ctrl.plain(''); + + if (datatype !== 'json' && typeof(data) !== 'string') { + instance.throw('Incorect type of data, expected string, got ' + typeof(data)); + ctrl.plain(data == null ? '' : data.toString()); + return; + } + + switch(datatype) { + case 'html': + ctrl.content(data, 'text/html'); + break; + case 'plain': + ctrl.plain(data); + break; + case 'xml': + ctrl.content(data, 'text/xml'); + break; + default: + ctrl.json(data); + break; + } + }); + + instance.on('service', function() { + dursum = 0; + durcount = 0; + }); + + instance.custom.duration = function() { + var avg = (dursum / durcount).floor(2); + instance.status(avg + ' sec.'); + instance.send2(0, avg); + }; +}; diff --git a/RVO16/flow/httproute.js b/RVO16/flow/httproute.js new file mode 100755 index 0000000..583a19d --- /dev/null +++ b/RVO16/flow/httproute.js @@ -0,0 +1,326 @@ +exports.id = 'httproute'; +exports.title = 'HTTP Route'; +exports.group = 'HTTP'; +exports.color = '#5D9CEC'; +exports.icon = 'globe'; +exports.input = false; +exports.output = ['#6CAC5A', '#37BC9B']; +exports.version = '1.2.3'; +exports.author = 'Martin Smola'; +exports.cloning = false; +exports.options = { method: 'GET', url: '', size: 5, cacheexpire: '5 minutes', cachepolicy: 0, timeout: 5 }; +exports.dateupdated = '2021-01-21 18:30d'; +exports.readme = `# HTTP route + +__Outputs__: +- first output: raw data (cache is empty or is disabled) +- second output: cached data + +If one of the outputs is disabled then automatic responce with code "503 service unavailable" is sent. + +When a request comes in bellow object is available at \`flowdata.data\`: + +\`\`\`javascript +{ + params: { id: '1' }, // params for dynamic routes, e.g. /test/{id} + query: { msg: 'Hello' }, // parsed query string, e.g. /test/1?msg=Hello + body: { test: 'OK' }, // object if json requests otherwise string + headers: {}, // headers data + session: {}, // session data + user: {}, // user data + files: [], // uploaded files + url: '/users/', // a relative URL address + referrer: '/', // referrer + mobile: false, // determines mobile device + robot: false, // determines search robots/crawlsers + language: 'en' // determines language +} +\`\`\` + +See [documentation for flags](https://docs.totaljs.com/latest/en.html#api~HttpRouteOptionsFlags~unauthorize). These method flags are set automatically e.g. \`get, post, put, patch or delete\` + +--- + +\`id:ROUTE_ID\` flag cannot be used since it's already used by this component internally`; + +exports.html = `
+
+ +
+ +
+
+
@(HTTP method)
+
+
+
@(URL address)
+
+
+
+
+
@(Additional flags)
+
@(Separate flags by comma e.g. json, authorize)
+
+
+
@(Max. request size)
+
@(In kB kilobytes)
+
+
+
@(Timeout)
+
@(In seconds.)
+
+
+
+
+
+
@(Automatically respond with 200 OK?)
+
@(If not checked you need to use HTTP response component to respond to the request.)
+
+
@(Custom headers)
+
@(Cookies)
+
+
+
+
+
+
@(Cache policy)
+
@(User instance must contain id property.)
+
+
+
@(Expiration)
+
@(E.g. 5 minutes)
+
+
+
+`; + +exports.install = function(instance) { + + var route; + + var uninstall = function(id) { + if (F.is4) { + route && route.remove(); + route = null; + } else + UNINSTALL('route', id); + }; + + instance.custom.emptyresponse = function(self) { + self.plain(); + }; + + instance.reconfigure = function() { + + var options = instance.options; + + if (!options.url) { + instance.status('Not configured', 'red'); + return; + } + + if (typeof(options.flags) === 'string') + options.flags = options.flags.split(',').trim(); + + uninstall('id:' + instance.id); + + var flags = options.flags || []; + + flags.push('id:' + instance.id); + + if (!F.is4) + flags.push(options.method.toLowerCase()); + + options.timeout && flags.push(options.timeout * 1000); + + // Make unique values + flags = flags.filter(function(v, i, a) { + if(F.is4 && v.toString().toLowerCase() === options.method.toLowerCase()) + return false; // remove method + return a.indexOf(v) === i; + }); + + options.flags = flags; + var handler = function() { + + if (instance.paused || (instance.isDisabled && (instance.isDisabled('output', 0) || instance.isDisabled('output', 1)))) { + instance.status('503 Service Unavailable'); + this.status = 503; + this.json(); + return; + } + + var key; + var self = this; + + if (instance.options.emptyresponse) { + instance.status('200 OK'); + setTimeout(instance.custom.emptyresponse, 100, self); + + if (instance.hasConnection(0)) { + var data = instance.make({ + query: self.query, + body: self.body, + session: self.session, + user: self.user, + files: self.files, + headers: self.req.headers, + url: self.url, + params: self.params + }); + instance.send2(0, data); + } + + return; + } + + switch (instance.options.cachepolicy) { + case 1: // URL + key = 'rro' + instance.id + self.url.hash(); + break; + case 2: // URL + query + case 3: // URL + query + user + key = self.url; + var keys = Object.keys(self.query); + keys.sort(); + for (var i = 0, length = keys.length; i < length; i++) + key += keys[i] + self.query[keys[i]] + '&'; + if (instance.options.cachepolicy === 3 && self.user) + key += 'iduser' + self.user.id; + key = 'rro' + instance.id + key.hash(); + break; + } + + if (key && F.cache.get2(key)) { + var data = instance.make(F.cache.get2(key)); + data.repository.controller = self; + instance.send2(1, data); + } else { + + var data = instance.make({ + query: self.query, + body: self.body, + session: self.session, + user: self.user, + files: self.files, + headers: self.req.headers, + url: self.url, + params: self.params, + mobile: self.mobile, + robot: self.robot, + referrer: self.referrer, + language: self.language + }); + + data.repository.controller = self; + instance.send2(0, data); + key && FINISHED(self.res, () => F.cache.set(key, self.$flowdata.data, instance.options.cacheexpire)); + } + }; + + if (F.is4) + route = ROUTE(options.method.toUpperCase() + ' ' + options.url, handler, flags, options.size || 5); + else + F.route(options.url, handler, flags, options.size || 5); + + instance.status('Listening', 'green'); + }; + + instance.reconfigure(); + instance.on('options', instance.reconfigure); + instance.on('close', function(){ + uninstall('id:' + instance.id); + }); +}; + +// check url exists +FLOW.trigger('httproutecheckurl', function(next, data) { + var url = data.url; + var method = data.method; + if (url[url.length - 1] !== '/') + url += '/'; + var exists = F.routes.web.findItem(r => r.urlraw === url && r.method === method); + next(exists != null); +}); + +exports.uninstall = function() { + FLOW.trigger('httproutecheckurl', null); +}; diff --git a/RVO16/flow/infosender.js b/RVO16/flow/infosender.js new file mode 100755 index 0000000..587724f --- /dev/null +++ b/RVO16/flow/infosender.js @@ -0,0 +1,81 @@ +exports.id = 'infosender'; +exports.title = 'Info sender'; +exports.version = '1.0.0'; +exports.group = 'Worksys'; +exports.color = '#2134B0'; +exports.input = 2; +exports.output = 1 +exports.icon = 'bolt'; + +const { networkInterfaces } = require('os'); + +exports.html = `
+
+
+
CSV Import
+
+
+
`; + +exports.readme = `# send all data to projects.worksys.io, required to monitor status of controller(unipi)`; + +exports.install = function(instance) { + + let id; + let allValues = {}; + let sendAllValuesInterval; + let configured = false; + + let now = new Date(); + console.log(exports.title, "INSTALLED", now.toLocaleString("sk-SK")); + + const nets = networkInterfaces(); + let ipAddresses = Object.create(null); // Or just '{}', an empty object + + for (const name of Object.keys(nets)) { + for (const net of nets[name]) { + // Skip over non-IPv4 and internal (i.e. 127.0.0.1) addresses + if (net.family === 'IPv4' && !net.internal) { + if (!ipAddresses[name]) { + ipAddresses[name] = []; + } + ipAddresses[name].push(net.address); + } + } + } + + function sendValues() { + if (!configured) return; + + if (Object.keys(allValues).length > 0) { + let dataToSend = { ...allValues }; + dataToSend.id = id; + dataToSend.ipAddresses = ipAddresses; + + instance.send(0, dataToSend); + + allValues = {}; + } + } + + instance.on("close", () => { + clearInterval(sendAllValuesInterval); + }) + + instance.on("0", _ => { + id = FLOW.GLOBALS.settings.project_id; + if (id) configured = true; + else console.log(exports.title, "InfoSender: Unable to send data, no id"); + }) + + instance.on("1", flowdata => { + allValues = { ...allValues, ...flowdata.data }; + //console.log("DATA RECEIVED", flowdata.data); + }) + + sendAllValuesInterval = setInterval(() => { + sendValues(); + }, 60000 * 3); + +} + diff --git a/RVO16/flow/modbus_reader.js b/RVO16/flow/modbus_reader.js new file mode 100755 index 0000000..d6d9dad --- /dev/null +++ b/RVO16/flow/modbus_reader.js @@ -0,0 +1,346 @@ +exports.id = 'modbus_reader'; +exports.title = 'Modbus reader'; +exports.version = '2.0.0'; +exports.group = 'Worksys'; +exports.color = '#2134B0'; +exports.input = 1; +exports.output = ["red", "white", "yellow"]; +exports.click = false; +exports.author = 'Rastislav Kovac'; +exports.icon = 'bolt'; +exports.readme = ` + Modbus requests to modbus devices (electromer, twilight sensor, thermometer. + Component keeps running arround deviceConfig array in "timeoutInterval" intervals. Array items are objects with single modbus devices. + Everything is sent to dido_controller. If requests to device fail (all registers must fail to send NOK status) , we send "NOK-'device'" status to dido_controller. + This device needs to be configured in dido_controller!!! Double check if it is. In dido_controller we calculate final status and all values with status are pushed to tb. +`; + +const modbus = require('jsmodbus'); +const SerialPort = require('serialport'); +const { timeoutInterval, deviceConfig } = require("../databases/modbus_config"); +const { sendNotification } = require('./helper/notification_reporter'); + +const DELAY_BETWEEN_DEVICES = 10000; + +const SEND_TO = { + debug: 0, + dido_controller: 1, + tb: 2 +}; + +//to handle NOK and OK sendNotifications s +const numberOfNotResponding = {}; +let tbName = null; +let mainSocket; +//number of phases inRVO +let phases; +//phases where voltage is 0 (set) +let noVoltage; +let energyToSwitchLamps; + +exports.install = function(instance) { + + class SocketWithClients { + + constructor() { + this.stream = null; + this.socket = null; + this.clients = {}; + this.allValues = {}; + this.errors = 0; + this.index = 0; + this.timeoutInterval = 5000; + + // we need to go always around for all devices. So we need index value, device address, as well as number of registers for single device + this.deviceAddress = null; // device address (1 - EM340 and 2 for twilight_sensor) + this.indexInDeviceConfig = 0; // first item in deviceConfig + this.lengthOfActualDeviceStream = null; + this.device = null; + + // lampSwitchNotification helper variables + this.onNotificationSent = false; + this.offNotificationSent = false; + this.phases = this.buildPhases(); + + this.startSocket(); + } + + buildPhases = () => { + let a = []; + for (let i = 1; i <= phases; i++) { + a.push(`Phase_${i}_voltage`) + } + return a; + } + + startSocket = () => { + + let obj = this; + + if (this.socket) { + this.socket.removeAllListeners(); + this.socket = null; + } + + this.socket = new SerialPort("/dev/ttymxc0", { + baudRate: 9600, + }) + + // we create a client for every deviceAddress ( = address) in list and push them into dictionary + for (let i = 0; i < deviceConfig.length; i++) { + this.clients[deviceConfig[i].deviceAddress] = new modbus.client.RTU(this.socket, deviceConfig[i].deviceAddress, 2000); // 2000 is timeout in register request, default is 5000, which is too long + } + + this.socket.on('error', function(e) { + console.log('Modbus_reader: Socket connection error', e); //'ECONNREFUSED' or 'ECONNRESET' ?? + }); + + this.socket.on('close', function() { + console.log('Modbus_reader: Socket connection closed - Waiting 10 seconds before connecting again'); + setTimeout(obj.startSocket, 10000); + }); + + this.socket.on('open', function() { + console.log("socket connected"); + obj.getActualStreamAndDevice(); + obj.timeoutInterval = timeoutInterval - DELAY_BETWEEN_DEVICES; // to make sure readout always runs in timeoutinterval we substract DELAY_BETWEEN_DEVICES + }) + + }; + + getActualStreamAndDevice = () => { + const dev = deviceConfig[this.indexInDeviceConfig]; + this.index = 0; + this.errors = 0; + this.stream = dev.stream; + this.lengthOfActualDeviceStream = dev.stream.length; + this.deviceAddress = dev.deviceAddress; // 1 or 2 or any number + this.device = dev.device; //em340, twilight_sensor + + //if we just start to loop devices from the beginning, or there is just 1 device in config, we wait whole timeoutInterval + if (this.indexInDeviceConfig == 0 || deviceConfig.length === 1) setTimeout(this.readRegisters, this.timeoutInterval); + else setTimeout(this.readRegisters, DELAY_BETWEEN_DEVICES); + } + + readRegisters = () => { + + const str = this.stream[this.index]; + const register = str.register; + const size = str.size; + const tbAttribute = str.tbAttribute; + + let obj = this; + + this.clients[this.deviceAddress].readHoldingRegisters(register, size) + .then(function(resp) { + + resp = resp.response._body.valuesAsArray; //resp is array of length 1 or 2, f.e. [2360,0] + // console.log(deviceAddress, register, tbAttribute, resp); + + //device is responding again after NOK status + if (numberOfNotResponding.hasOwnProperty(obj.device)) { + let message = ""; + if (obj.device == "em340") { + message = "electrometer_ok"; + } + else if (obj.device == "twilight_sensor") { + message = "twilight_sensor_ok"; + } + message && sendNotification("modbus_reader: readRegisters", tbName, message, {}, "", SEND_TO.tb, instance); + delete numberOfNotResponding[obj.device]; + } + + obj.transformResponse(resp, register); + + //obj.errors = 0; + obj.index++; + obj.readAnotherRegister(); + + }).catch(function() { + + //console.log("errors pri citani modbus registra", register, obj.indexInDeviceConfig, tbName, tbAttribute); + + obj.errors++; + if (obj.errors == obj.lengthOfActualDeviceStream) { + instance.send(SEND_TO.dido_controller, { status: "NOK-" + obj.device }); // NOK-em340, NOK-em111, NOK-twilight_sensor, NOK-thermometer + + //todo - neposlalo notification, ked sme vypojili twilight a neposle to do tb, ale do dido ?? + if (!numberOfNotResponding.hasOwnProperty(obj.device)) { + let message = ""; + if (obj.device == "twilight_sensor") { + message = "twilight_sensor_nok"; + } + else if (obj.device == "em340") { + message = "electrometer_nok"; + } + message && sendNotification("modbus_reader: readingTimeouted", tbName, message, {}, "", SEND_TO.tb, instance); + numberOfNotResponding[obj.device] = 1; + } + + obj.errors = 0; + numberOfNotResponding[obj.device] += 1; + } + + // console.error(require('util').inspect(arguments, { + // depth: null + // })) + + // if reading out of device's last register returns error, we send accumulated allValues to dido_controller (if allValues are not an empty object) + if (obj.index + 1 >= obj.lengthOfActualDeviceStream) { + if (!isObjectEmpty(obj.allValues)) instance.send(SEND_TO.dido_controller, { values: obj.allValues }); + obj.allValues = {}; + } + obj.index++; + obj.readAnotherRegister(); + }) + + }; + + readAnotherRegister = () => { + if (this.index < this.lengthOfActualDeviceStream) setTimeout(this.readRegisters, 0); + else this.setNewStream(); + } + + transformResponse = (response, register) => { + + for (let i = 0; i < this.lengthOfActualDeviceStream; i++) { + + let a = this.stream[i]; + if (a.register === register) { + let tbAttribute = a.tbAttribute; + let multiplier = a.multiplier; + + let value = this.calculateValue(response, multiplier); + // console.log(register, tbName, tbAttribute, response, a.multiplier, value); + + // if(tbName == undefined) return; + + if (this.index + 1 < this.lengthOfActualDeviceStream) { + this.allValues[tbAttribute] = value; + return; + } + + const values = { + ...this.allValues, + [tbAttribute]: value, + }; + + this.checkNullVoltage(values); + this.lampSwitchNotification(values); + + instance.send(SEND_TO.dido_controller, { values: values }); + + this.allValues = {}; + break; + } + } + } + + setNewStream = () => { + if (this.lengthOfActualDeviceStream == this.index) { + if (this.indexInDeviceConfig + 1 == deviceConfig.length) { + this.indexInDeviceConfig = 0; + } + else { + this.indexInDeviceConfig += 1; + } + + this.getActualStreamAndDevice(); + } + } + + calculateValue = (response, multiplier) => { + let value = 0; + + let l = response.length; + if (l === 2) { + value = (response[1] * (2 ** 16) + response[0]); + + if (value >= (2 ** 31)) // ak je MSB bit nastavený, eventuálne sa dá použiť aj (value & 0x80000000), ak vieš robiť logický súčin + { + value = value - "0xFFFFFFFF" + 1; + } + } + else if (l === 1) { + value = response[0]; + + if (value >= (2 ** 15)) // ak je MSB bit nastavený, eventuálne sa dá použiť aj (value & 0x8000), ak vieš robiť logický súčin + { + value = value - "0xFFFF" + 1; + } + } + + return Math.round(value * multiplier * 10) / 10; + } + + checkNullVoltage = (values) => { + + if (!(values.hasOwnProperty("Phase_1_voltage") || values.hasOwnProperty("Phase_2_voltage") || values.hasOwnProperty("Phase_3_voltage"))) return; + + Object.keys(values).map(singleValue => { + if (this.phases.includes(singleValue)) { + let l = singleValue.split("_"); + let phase = parseInt(l[1]); + + // console.log(values[singleValue], tbName); + + if (values[singleValue] == 0) { + noVoltage.add(phase); + sendNotification("modbus_reader: checkNullVoltage", tbName, "no_voltage_on_phase", { phase: phase }, "", SEND_TO.tb, instance, "voltage" + phase); + // console.log('no voltage') + } + else { + noVoltage.delete(phase); + // console.log('voltage detected') + sendNotification("modbus_reader: checkNullVoltage", tbName, "voltage_on_phase_restored", { phase: phase }, "", SEND_TO.tb, instance, "voltage" + phase); + } + } + }) + } + + /** + * function sends notification to slack and to tb, if EM total_power value changes more than numberOfNodes*15. This should show, that RVO lamps has been switched on or off + */ + lampSwitchNotification = (values) => { + + if (!values.hasOwnProperty("total_power")) return; + + const actualTotalPower = values.total_power; + + if (actualTotalPower > energyToSwitchLamps && this.onNotificationSent == false) { + sendNotification("modbus_reader: lampSwitchNotification", tbName, "lamps_have_turned_on", {}, "", SEND_TO.tb, instance); + this.onNotificationSent = true; + this.offNotificationSent = false; + } + else if (actualTotalPower <= energyToSwitchLamps && this.offNotificationSent == false) { + sendNotification("modbus_reader: lampSwitchNotification", tbName, "lamps_have_turned_off", {}, "", SEND_TO.tb, instance); + this.onNotificationSent = false; + this.offNotificationSent = true; + } + } + + } + + const isObjectEmpty = (objectName) => { + return Object.keys(objectName).length === 0 && objectName.constructor === Object; + } + + function main() { + + phases = FLOW.GLOBALS.settings.phases; + tbName = FLOW.GLOBALS.settings.rvoTbName; + noVoltage = FLOW.GLOBALS.settings.no_voltage; + energyToSwitchLamps = FLOW.GLOBALS.settings.energy_to_switch_lamps / 2.5; //half value is enought to show if lamps are turned on or off + if (deviceConfig.length) mainSocket = new SocketWithClients(); + else console.log("Modbus_reader: no modbus device in configuration"); + + // this notification is to show, that flow (unipi) has been restarted + sendNotification("modbus_reader", tbName, "flow_restart", {}, "", SEND_TO.slack, instance); + } + + instance.on("0", function(_) { + main(); + }) + +} + diff --git a/RVO16/flow/monitorconsumption.js b/RVO16/flow/monitorconsumption.js new file mode 100755 index 0000000..64cc58e --- /dev/null +++ b/RVO16/flow/monitorconsumption.js @@ -0,0 +1,156 @@ +exports.id = 'monitorconsumption'; +exports.title = 'Consumption'; +exports.version = '1.0.0'; +exports.author = 'Peter Širka'; +exports.group = 'Monitoring'; +exports.color = '#967ADC'; +exports.input = 0; +exports.output = 1; +exports.icon = 'bug'; +exports.options = { interval: 5000, enabled: true, monitorconsumption: true, monitorsize: true, monitorconnections: true, monitorfiles: true }; +exports.click = true; +exports.readme = `# Consumption monitoring + +This component measure CPU and memory consumption, open files and open connections of this application. It uses these Linux commands: \`ps\`, \`lsof\`, \`netstat\` and \`df\`. + +__Data Example__: + +\`\`\`javascript +{ + cpu: 0, // percentage + memory: 4096, // in bytes + size: 34303, // directory size in bytes + files: 34, // count of open files + connections: 343, // count of connections + uptime: '1-12:34:00' +} +\`\`\``; + +exports.html = `
+
+
+
@(Interval in milliseconds)
+
+
+
+
Monitor: Consumption + uptime
+
Monitor: Count of open files
+
Monitor: Count of open connections
+
Monitor: Directory size
+
`; + +exports.install = function(instance) { + + var current = { cpu: 0, memory: 0, files: 0, connections: 0, size: 0, uptime: '', counter: 0 }; + var tproc = null; + var Exec = require('child_process').exec; + var reg_empty = /\s{2,}/g; + var reg_appdisksize = /^[\d.,]+/; + + instance.custom.run = function() { + + if (tproc) { + clearTimeout(tproc); + tproc = null; + } + + var arr = []; + + // Get CPU and Memory consumption + instance.options.monitorconsumption && arr.push(function(next) { + Exec('ps -p {0} -o %cpu,rss,etime'.format(process.pid), function(err, response) { + + if (err) { + instance.throw(err); + } else { + var line = response.split('\n')[1]; + line = line.trim().replace(reg_empty, ' ').split(' '); + var cpu = line[0].parseFloat(); + current.cpu = cpu.floor(1); + current.memory = line[1].parseInt2() * 1024; // kB to bytes + current.uptime = line[2]; + } + + next(); + }); + }); + + // Get count of open files + instance.options.monitorfiles && arr.push(function(next) { + Exec('lsof -a -p {0} | wc -l'.format(process.pid), function(err, response) { + if (err) + instance.throw(err); + else + current.files = response.trim().parseInt2(); + next(); + }); + }); + + // Get count of opened network connections + instance.options.monitorconnections && arr.push(function(next) { + Exec('netstat -an | grep :{0} | wc -l'.format(F.port), function(err, response) { + if (err) { + instance.throw(err); + } else { + current.connections = response.trim().parseInt2() - 1; + if (current.connections < 0) + current.connections = 0; + } + next(); + }); + }); + + // Get directory size + instance.options.monitorsize && current.counter % 5 !== 0 && arr.push(function(next) { + Exec('du -hsb ' + process.cwd(), function(err, response) { + if (err) { + instance.throw(err); + } else { + var match = response.trim().match(reg_appdisksize); + match && (current.size = match.toString().trim().parseInt2()); + } + next(); + }); + }); + + arr.async(function() { + + tproc && clearTimeout(tproc); + + if (instance.options.enabled) { + tproc = setTimeout(instance.custom.run, instance.options.interval); + instance.send2(current); + } + + instance.custom.status(); + current.counter++; + }); + }; + + instance.custom.status = function() { + if (instance.options.enabled) + instance.status('{0}% / {1}'.format(current.cpu, current.memory.filesize())); + else + instance.status('Disabled', 'red'); + }; + + instance.on('click', function() { + instance.options.enabled = !instance.options.enabled; + instance.custom.status(); + + if (instance.options.enabled) { + current.counter = 0; + instance.custom.run(); + } + + }); + + instance.on('close', function() { + if (tproc) { + clearTimeout(tproc); + tproc = null; + } + }); + + setTimeout(instance.custom.run, 1000); +}; \ No newline at end of file diff --git a/RVO16/flow/monitordisk.js b/RVO16/flow/monitordisk.js new file mode 100755 index 0000000..f4fdaa0 --- /dev/null +++ b/RVO16/flow/monitordisk.js @@ -0,0 +1,96 @@ +exports.id = 'monitordisk'; +exports.title = 'Disk'; +exports.version = '1.0.0'; +exports.author = 'Peter Širka'; +exports.group = 'Monitoring'; +exports.color = '#F6BB42'; +exports.output = 1; +exports.icon = 'hdd-o'; +exports.click = true; +exports.options = { interval: 8000, path: '/', enabled: true }; +exports.readme = `# Disk monitoring + +This component monitors disk \`bytes\` consumption in Linux systems. It uses \`df\` command. + +__Data Example__: + +\`\`\`javascript +{ + total: 474549649408, + used: 39125245952, + free: 411294994432 +} +\`\`\``; + +exports.html = `
+
+
+
@(Interval in milliseconds)
+
+
+
@(Path)
+
+
+
`; + +exports.install = function(instance) { + + var current = { total: 0, used: 0, free: 0, path: '', type: '', percentUsed: 0 }; + var tproc = null; + + instance.custom.run = function() { + + if (tproc) { + clearTimeout(tproc); + tproc = null; + } + + if (!instance.options.enabled) + return; + + require('child_process').exec('df -hTB1 ' + instance.options.path, function(err, response) { + + tproc = setTimeout(instance.custom.run, instance.options.interval); + + if (err) { + instance.error(err); + return; + } + + response.parseTerminal(function(line) { + if (line[0][0] !== '/') + return; + current.total = line[2].parseInt(); + current.free = line[4].parseInt(); + current.used = line[3].parseInt(); + current.path = instance.options.path || '/'; + current.type = line[1]; + current.percentUsed = line[5]; + instance.custom.status(); + instance.send2(current); + }); + }); + }; + + instance.custom.status = function() { + if (instance.options.enabled) + instance.status(current.free.filesize() + ' / ' + current.total.filesize()); + else + instance.status('Disabled', 'red'); + }; + + instance.on('click', function() { + instance.options.enabled = !instance.options.enabled; + instance.custom.status(); + instance.options.enabled && instance.custom.run(); + }); + + instance.on('close', function() { + if (tproc) { + clearTimeout(tproc); + tproc = null; + } + }); + + setTimeout(instance.custom.run, 1000); +}; \ No newline at end of file diff --git a/RVO16/flow/monitormemory.js b/RVO16/flow/monitormemory.js new file mode 100755 index 0000000..2decbc4 --- /dev/null +++ b/RVO16/flow/monitormemory.js @@ -0,0 +1,87 @@ +exports.id = 'monitormemory'; +exports.title = 'Memory'; +exports.version = '1.0.0'; +exports.author = 'Peter Širka'; +exports.group = 'Monitoring'; +exports.color = '#F6BB42'; +exports.output = 1; +exports.click = true; +exports.icon = 'microchip'; +exports.options = { interval: 8000, enabled: true }; +exports.readme = `# Memory monitoring + +This component monitors memory \`bytes\` consumption in Linux systems. It uses \`free\` command. + +__Data Example__: + +\`\`\`javascript +{ + total: 33558769664, + used: 1998868480, + free: 2653708288 +} +\`\`\``; + +exports.html = `
+
+
+
@(Interval in milliseconds)
+
+
+
`; + +exports.install = function(instance) { + + var current = { total: 0, used: 0, free: 0 }; + var tproc = null; + + instance.custom.run = function() { + + if (tproc) { + clearTimeout(tproc); + tproc = null; + } + + if (!instance.options.enabled) + return; + + require('child_process').exec('free -b -t', function(err, response) { + + tproc = setTimeout(instance.custom.run, instance.options.interval); + + if (err) { + instance.error(err); + return; + } + + var memory = response.split('\n')[1].match(/\d+/g); + current.total = memory[0].parseInt(); + current.used = memory[1].parseInt() - memory[3].parseInt(); + current.free = current.total - current.used; + instance.custom.status(); + instance.send2(current); + }); + }; + + instance.custom.status = function() { + if (instance.options.enabled) + instance.status(current.free.filesize() + ' / ' + current.total.filesize()); + else + instance.status('Disabled', 'red'); + }; + + instance.on('click', function() { + instance.options.enabled = !instance.options.enabled; + instance.custom.status(); + instance.options.enabled && instance.custom.run(); + }); + + instance.on('close', function() { + if (tproc) { + clearTimeout(tproc); + tproc = null; + } + }); + + setTimeout(instance.custom.run, 1000); +}; \ No newline at end of file diff --git a/RVO16/flow/nodesdb_changecheck.js b/RVO16/flow/nodesdb_changecheck.js new file mode 100755 index 0000000..9adab62 --- /dev/null +++ b/RVO16/flow/nodesdb_changecheck.js @@ -0,0 +1,77 @@ +exports.id = 'nodesdb_change_check'; +exports.title = 'Nodes DB change check'; +exports.group = 'Worksys'; +exports.color = '#888600'; +exports.version = '1.0.2'; +exports.icon = 'sign-out'; +exports.input = 1; +exports.output = 2; +exports.readme = `Check, if nodes.table db changed compared to original database`; + +const fs = require('fs'); +const path = require('path'); +const { sendNotification } = require('./helper/notification_reporter'); +const nodesOriginalFile = path.join(__dirname, '../databases/nodes_original/', 'nodes_original.table'); + + +exports.install = function(instance) { + + function compareArrays(array1, array2) { + let message = ""; + let areEqual = true; + let zmenene = [] + + if (array1.length !== array2.length) { + message += "Nezhoda v pocte nodov. " + } + + const set1 = new Set(array1.map(obj => JSON.stringify(obj))); + const set2 = new Set(array2.map(obj => JSON.stringify(obj))); + + for (const objStr of set1) { + + if (!set2.has(objStr)) { + zmenene.push(objStr) + areEqual = false; + } else { + set2.delete(objStr); + } + } + + //kedze do slacku posielame stringy, na cloud musime previest vsetky stringy spat na objekty: + // Funkcia na parsovanie všetkých reťazcov v poli + const parseArray = (arr) => { + return arr.map(jsonString => JSON.parse(jsonString)); + }; + + if (!areEqual) { + message += `Aktualne nody: ${zmenene.toString()}. Zmenene proti originalu: ${Array.from(set2).join(' ')}`; + sendNotification("Nodesdb_changecheck", FLOW.GLOBALS.settings.rvoTbName, "nodes_db_changed", "", message, 0, instance); + if (FLOW.GLOBALS.settings.send_changed_node_numbers) instance.send(1, { aktualneNody: parseArray(zmenene), originalne: parseArray(Array.from(set2)) }); + } + else console.log("Arrays are equal."); + + console.log(message) + } + + + instance.on("data", _ => { + + let nodesData = FLOW.GLOBALS.nodesData; + + // we check if nodes.table has changed compared to nodes_original.table (we have array of nodes e.g. [{node:255, tbname: "agruhuwhgursuhgo34hgsdiguhrr"}] + const nodes_actual = Object.keys(nodesData).map(node => ({ [node]: nodesData[node].tbname })) + let nodes_original = fs.readFileSync(nodesOriginalFile, { encoding: 'utf8', flag: 'r' }); + + try { + nodes_original = JSON.parse(nodes_original); + } catch (e) { + console.log(e) + } + + + setTimeout(() => compareArrays(nodes_actual, nodes_original), 10000); + }) + +} + diff --git a/RVO16/flow/show_dbdata.js b/RVO16/flow/show_dbdata.js new file mode 100755 index 0000000..1e23ff7 --- /dev/null +++ b/RVO16/flow/show_dbdata.js @@ -0,0 +1,243 @@ +exports.id = 'showdb'; +exports.title = 'Show db data'; +exports.group = 'Worksys'; +exports.color = '#888600'; +exports.version = '1.0.2'; +exports.icon = 'sign-out'; +exports.input = 8; +exports.output = 1; + +const { exec } = require('child_process'); + +exports.install = function(instance) { + + instance.on("0", _ => { + instance.send(0, FLOW.GLOBALS.settings); + }) + instance.on("1", _ => { + instance.send(0, FLOW.GLOBALS.relaysData); + }) + instance.on("2", _ => { + instance.send(0, FLOW.GLOBALS.nodesData); + }) + instance.on("3", _ => { + instance.send(0, FLOW.GLOBALS.pinsData); + }) + instance.on("4", _ => { + instance.send(0, { rpcSwitchOffLine, rpcSetNodeDimming, rpcLineProfile, rpcNodeProfile, sunCalcExample, dataFromTerminalBroadcast }) + }) + instance.on("5", _ => { + exec("sudo tail -n 25 monitor.txt", (err, stdout, stderr) => { + if (err || stderr) instance.send(0, { err, stderr }); + else instance.send(0, stdout); + }) + }) + instance.on("6", _ => { + exec("sudo tail -n 25 err.txt", (err, stdout, stderr) => { + if (err || stderr) instance.send(0, { err, stderr }); + else instance.send(0, stdout); + }) + }) + instance.on("7", _ => { + instance.send(0, FLOW.deviceStatus); + }) +}; + + +const rpcSwitchOffLine = +{ + "topic": "v1/gateway/rpc", + "content": { + "device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV", + "data": { + "id": 8, + "method": "set_command", + "params": { + "entities": [ + { + "entity_type": "edb_line", + "tb_name": "MgnK93rkoAazbqdQ4yB2Q0yZ1YXGx6pmwBeVEP2O" + } + ], + "command": "switch", + "payload": { + "value": false + } + } + } + } +} + +const rpcSetNodeDimming = +{ + "topic": "v1/gateway/rpc", + "content": { + "device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV", + "data": { + "id": 10, + "method": "set_command", + "params": { + "entities": [ + { + "entity_type": "street_luminaire", + "tb_name": "jbN4q7JPZmexgdnz2yKbWdDYAWwO0Q3BMX6ERLoV" + } + ], + "command": "dimming", + "payload": { + "value": 5 + } + } + } + } +} + +const rpcLineProfile = +{ + "topic": "v1/gateway/rpc", + "content": { + "device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV", + "data": { + "id": 9, + "method": "set_profile", + "params": { + "entities": [ + { + "entity_type": "edb_line", + "tb_name": "MgnK93rkoAazbqdQ4yB2Q0yZ1YXGx6pmwBeVEP2O" + } + ], + "payload": { + "intervals": [ + { + "value": 0, + "end_time": "20:00", + "start_time": "13:00" + }, + { + "value": 1, + "end_time": "05:30", + "start_time": "20:00" + }, + { + "value": 0, + "end_time": "13:00", + "start_time": "05:30" + } + ], + "astro_clock": true, + "dawn_lux_sensor": false, + "dusk_lux_sensor": false, + "dawn_lux_sensor_value": 5, + "dusk_lux_sensor_value": 5, + "dawn_astro_clock_offset": 0, + "dusk_astro_clock_offset": 0, + "dawn_lux_sensor_time_window": 30, + "dusk_lux_sensor_time_window": 30, + "dawn_astro_clock_time_window": 60, + "dusk_astro_clock_time_window": 60 + } + } + } + } +} + + +const rpcNodeProfile = +{ + "topic": "v1/gateway/rpc", + "content": { + "device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV", + "data": { + "id": 11, + "method": "set_profile", + "params": { + "entities": [ + { + "entity_type": "street_luminaire", + "tb_name": "jbN4q7JPZmexgdnz2yKbWdDYAWwO0Q3BMX6ERLoV" + } + ], + "payload": { + "intervals": [ + { + "cct": 3000, + "value": 0, + "end_time": "17:50", + "start_time": "13:00" + }, + { + "cct": 3000, + "value": 100, + "end_time": "21:30", + "start_time": "17:50" + }, + { + "cct": 3000, + "value": 0, + "end_time": "13:00", + "start_time": "07:10" + }, + { + "cct": 3000, + "value": 50, + "end_time": "00:00", + "start_time": "21:30" + }, + { + "cct": 3000, + "value": 10, + "end_time": "04:30", + "start_time": "00:00" + }, + { + "cct": 3000, + "value": 100, + "end_time": "07:10", + "start_time": "04:30" + } + ], + "astro_clock": true, + "dawn_lux_sensor": false, + "dusk_lux_sensor": false, + "dawn_lux_sensor_value": 5, + "dusk_lux_sensor_value": 5, + "dawn_astro_clock_offset": 30, + "dusk_astro_clock_offset": 20, + "dawn_lux_sensor_time_window": 30, + "dusk_lux_sensor_time_window": 30, + "dawn_astro_clock_time_window": 60, + "dusk_astro_clock_time_window": 60 + } + } + } + } +} + +const sunCalcExample = { + dusk_no_offset: '20:18', + dawn_no_offset: '05:19', + dusk: '20:18', + dusk_hours: 20, + dusk_minutes: 18, + dawn: '05:19', + dawn_hours: 5, + dawn_minutes: 19, + dusk_time: 1715278688962, + dawn_time: 1715224744357, + dusk_astro_clock_offset: 0, + dawn_astro_clock_offset: 0 +} + + +const dataFromTerminalBroadcast = { + address: 4294967295, + byte1: 0, + byte2: 0, + byte3: 0, + byte4: 96, + name: "Time Schedule settings", + recipient: 2, + register: 8, + rw: 1 +} diff --git a/RVO16/flow/slack_filter.js b/RVO16/flow/slack_filter.js new file mode 100755 index 0000000..6618523 --- /dev/null +++ b/RVO16/flow/slack_filter.js @@ -0,0 +1,188 @@ +exports.id = 'slack_filter'; +exports.title = 'Slack Filter'; +exports.group = 'Citysys'; +exports.color = '#30E193'; +exports.input = 2; +exports.output = 1; +exports.author = 'Jakub Klena'; +exports.icon = 'plug'; +exports.version = '1.0.8'; +exports.options = { 'name': '', 'types': '["emergency", "critical", "error", "alert"]', 'message_includes': '["is responding again"]', 'tag_on_include': '[{"user_id":"U072JE5JUQG", "includes":["Electrometer", "Twilight sensor"]}]', 'slack_channel': '' }; + +exports.html = `
+
+
+
@(Slack channel to receive the alerts)
+
+
+
@(Watch these types, comma separated names)
+
+
+
@(Watch messages that include any of the following strings)
+
+
+
@(Tag people if message includes something)
+
+
+
`; + +exports.readme = `# Slack Filter`; + +exports.install = function(instance) { + var running = false; + instance["savedSlackMessages"] = []; + var timer = null; + + instance.on('0', function(response) { + if (!running) return; + let value = response.data; + if (typeof value !== 'object') return; + + let can = false + var k = Object.keys(value); + var interested = JSON.parse(instance.options.types); + var msg_incl = JSON.parse(instance.options.message_includes); + var tags = JSON.parse(instance.options.tag_on_include); + + if (k.length <= 0) return; + if (value[k[0]].length <= 0) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0], 'values')) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0]['values'], '_event')) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0]['values']['_event'], 'type')) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0]['values']['_event'], 'source')) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0]['values']['_event']['source'], 'func')) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0]['values']['_event'], 'message')) return; + if (!Object.prototype.hasOwnProperty.call(value[k[0]][0]['values']['_event'], 'message_data')) return; + + let icon = ':totaljs:'; + let type = value[k[0]][0]['values']['_event']['type']; + let source = value[k[0]][0]['values']['_event']['source']['func']; + let message = value[k[0]][0]['values']['_event']['message']['en']; + let message_data = value[k[0]][0]['values']['_event']['message_data']; + let tag = ''; + + switch (type) { + case 'debug': + icon = ':beetle:'; + break; + case 'info': + icon = ':speech_balloon:'; + break; + case 'notice': + icon = ':speech_balloon:'; + break; + case 'warning': + icon = ':exclamation:'; + break; + case 'alert': + icon = ':warning:'; + break; + case 'error': + icon = ':no_entry:'; + break; + case 'emergency': + icon = ':fire:'; + break; + case 'critical': + icon = ':fire:'; + break; + } + + // Check if this message includes one of the strings we are watching for + for (const msg of msg_incl) { + if (message.includes(msg)) { + if (msg == 'is responding again') icon = ':large_green_circle:'; + can = true; + break; + } + } + // Check if message is one of the types we are watching for + if (interested.includes(type)) { + can = true; + } + + if (!can) return; + + + // Check for each person tags based on what the message includes + for (const person of tags) { + for (const msg of person.includes) { + if (message.includes(msg)) { + tag += '<@' + person.user_id + '> '; + break; // Break out from this person checks as they are already tagged now + } + } + } + // Now that all people are tagged add new line symbol + if (tag != '') tag += '\n'; + + let send_data = tag + instance.options.name + ' ' + type.toUpperCase() + '\n*Source*: ' + source + '\n*Message*: ' + message; + if (message_data) { + send_data += '\nData: ' + message_data; + } + + let ignore_msg = false + if (message.includes('Configuration of dimming profile to node no')) { + for (let i = 0; i < FLOW["savedSlackMessages"].length; i++) { + if (FLOW["savedSlackMessages"][i].message == message) { + ignore_msg = true; + break; + } + } + if (!ignore_msg) { + FLOW["savedSlackMessages"].push({ message, 'dateandtime': Date.now() }); + if (timer === null) { + timer = setTimeout(checkSavedMessages, 60 * 60000); + } + } + } + + if (!ignore_msg) { + instance.send2({ 'msg': send_data, 'bot_name': instance.options.name + ' ' + type.toUpperCase(), 'bot_icon': icon, 'channel': instance.options.slack_channel }); + } + }); + + function checkSavedMessages() { + var d = Date.now(); + d = d - 86400000; // older then 24hr + var a = []; + //Remove msgs older then 24hr + for (let i = 0; i < FLOW["savedSlackMessages"].length; i++) { + if (FLOW["savedSlackMessages"][i].dateandtime > d) { + a.push(FLOW["savedSlackMessages"][i]); + } + } + FLOW["savedSlackMessages"] = a; + + if (FLOW["savedSlackMessages"].length > 0) { + timer = setTimeout(checkSavedMessages, 60 * 60000); + } else { + timer = null; + } + } + + instance.reconfigure = function() { + try { + if (!FLOW["savedSlackMessages"]) { + FLOW["savedSlackMessages"] = []; + } + + instance.options.name = FLOW.GLOBALS.settings.rvo_name; + if (instance.options.name) { + instance.status('Running'); + running = true; + } else { + instance.status('Please run options again', 'red'); + running = false; + } + } catch (e) { + instance.error('Citysys connector: ' + e.message); + } + }; + + instance.on('options', instance.reconfigure); + + instance.on("1", _ => { + instance.reconfigure(); + }) +}; diff --git a/RVO16/flow/thermometer.js b/RVO16/flow/thermometer.js new file mode 100755 index 0000000..fc7074d --- /dev/null +++ b/RVO16/flow/thermometer.js @@ -0,0 +1,99 @@ +exports.id = 'thermometer'; +exports.title = 'Thermometer'; +exports.group = 'Worksys'; +exports.color = '#5CB36D'; +exports.input = 1; +exports.version = '1.0.3'; +exports.output = ["red", "white", "blue"]; +exports.icon = 'thermometer-three-quarters'; + +exports.readme = `# Getting temperature values for RVO. In case of LM, you need device address. In case of unipi, evok sends values, in case thermometer is installed`; + +const { errLogger, logger, monitor } = require('./helper/logger'); + +const SEND_TO = { + debug: 0, + tb: 1, + dido_controller: 2 +} + +//read temperature - frequency +let timeoutMin = 5;//minutes +let NUMBER_OF_FAILURES_TO_SEND_ERROR = 13; + +exports.install = function(instance) { + + const { exec } = require('child_process'); + const { sendNotification } = require('./helper/notification_reporter'); + + let startRead; + let counter = 0; + let rvoTbName = ""; + let temperatureAddress = ""; + + logger.debug(exports.title, "installed"); + + instance.on("close", function() { + clearInterval(startRead); + }) + + + const main = function() { + + try { + + if (temperatureAddress === "") throw "Thermometer: temperatureAddress is not defined"; + + exec(`owread -C ${temperatureAddress}/temperature`, (error, stdout, stderr) => { + + if (!error) { + parseData(stdout) + return; + } + + counter++; + if (counter == NUMBER_OF_FAILURES_TO_SEND_ERROR) { + sendNotification("Thermometer_main", rvoTbName, "thermometer_is_not_responding", {}, { "Error": error }, SEND_TO.tb, instance, "thermometer"); + monitor.info("Thermometer is not responding", error); + } + instance.send(SEND_TO.dido_controller, { status: "NOK-thermometer" }); + }); + + } + catch (err) { + errLogger.error(exports.title, err); + clearInterval(startRead); + } + } + + const parseData = function(data) { + + data = parseFloat(data); + //logger.debug("Thermometer", data); + + if (isNaN(data)) { + errLogger.error("Thermometer sends invalid data"); + return; + } + + if (counter > NUMBER_OF_FAILURES_TO_SEND_ERROR) //1 hour + { + instance.send(SEND_TO.debug, "Thermometer - temperature data are comming again"); + sendNotification("Thermometer_parseData", rvoTbName, "thermometer_is_responding_again", {}, "", SEND_TO.tb, instance, "thermometer"); + } + + const values = { + "temperature": Number(data.toFixed(2)), + } + + instance.send(SEND_TO.dido_controller, { values: values }); + counter = 0; + } + + instance.on("data", _ => { + temperatureAddress = FLOW.GLOBALS.settings.temperature_address; + rvoTbName = FLOW.GLOBALS.settings.rvoTbName; + startRead = setInterval(main, timeoutMin * 1000 * 60); + setTimeout(main, 20000); + }) +}; diff --git a/RVO16/flow/trigger.js b/RVO16/flow/trigger.js new file mode 100755 index 0000000..27545a8 --- /dev/null +++ b/RVO16/flow/trigger.js @@ -0,0 +1,79 @@ +exports.id = 'trigger'; +exports.title = 'Trigger'; +exports.group = 'Inputs'; +exports.color = '#F6BB42'; +exports.click = true; +exports.output = 1; +exports.version = '1.1.0'; +exports.author = 'Martin Smola'; +exports.icon = 'play'; + +exports.html = `
+
@(Data type (String by default))
+
@(Data)
+
Trigger 5s after initialization.
+
@(Useful when there's a need to run certain flow when the app restarts, etc.)
+
`; + +exports.readme = `# Trigger + +- Clicking on the component starts the chain +- Settings allows to set a data-type and a value`; + +exports.install = function(instance) { + + var value; + + instance.on('click', () => instance.send2(value)); + + instance.reconfigure = function() { + var options = instance.options; + value = null; + switch (options.datatype) { + case 'integer': + value = options.data.parseInt2('error'); + value = value === 'error' ? NaN : value; + break; + case 'float': + value = options.data.parseFloat2('error'); + value = value === 'error' ? NaN : value; + break; + case 'date': + options.data = options.data.toString(); + var num = options.data.parseInt('error'); + num === 'error' && (num = options.data.parseDate('error')); + num === 'error' && (num = null); + value = num ? new Date(num).toUTCString() : num; + break; + case 'object': + try { + value = (new Function('return ' + options.data))(); + } catch (e) { + instance.error(e); + } + break; + case 'boolean': + value = options.data.parseBoolean(); + break; + case 'buffer': + try { + value = U.createBuffer(options.data); + } catch (e) { + instance.error(e); + } + break; + case 'string': + default: + value = '' + (options.data || ''); + break; + } + }; + + instance.on('options', instance.reconfigure); + instance.reconfigure(); + + if (instance.options.restart) + setTimeout(function(){ + instance.send2(value); + }, 5000); +}; diff --git a/RVO16/flow/variables.txt b/RVO16/flow/variables.txt new file mode 100755 index 0000000..e69de29 diff --git a/RVO16/flow/virtualwirein.js b/RVO16/flow/virtualwirein.js new file mode 100755 index 0000000..38a4e42 --- /dev/null +++ b/RVO16/flow/virtualwirein.js @@ -0,0 +1,43 @@ +exports.id = 'virtualwirein'; +exports.title = 'Virtual wire in'; +exports.version = '1.0.0'; +exports.author = 'Martin Smola'; +exports.color = '#303E4D'; +exports.icon = 'sign-in'; +exports.input = false; +exports.output = 1; +exports.options = {}; +exports.readme = `# Virtual wire in + +When the wires between the components are mess it's time to use Virtual wire.`; + +exports.html = `
+
@(Wire name)
+
+`; + +exports.install = function(instance) { + + instance.custom.reconfigure = function(options){ + if (instance.options.wirename) { + instance.status(instance.options.wirename); + } else + instance.status('Not configured', 'red'); + }; + + ON('virtualwire', function(wirename, flowdata){ + if (instance.options.wirename && instance.options.wirename === wirename) + instance.send(flowdata); + }); + + instance.on('options', instance.custom.reconfigure); + instance.custom.reconfigure(); +}; diff --git a/RVO16/flow/virtualwireout.js b/RVO16/flow/virtualwireout.js new file mode 100755 index 0000000..94a1e4f --- /dev/null +++ b/RVO16/flow/virtualwireout.js @@ -0,0 +1,41 @@ +exports.id = 'virtualwireout'; +exports.title = 'Virtual wire out'; +exports.version = '1.0.0'; +exports.author = 'Martin Smola'; +exports.color = '#303E4D'; +exports.icon = 'sign-out'; +exports.input = true; +exports.options = {}; +exports.readme = `# Virtual wire out + +When the wires between the components are mess it's time to use Virtual wire.`; + +exports.html = `
+
@(Wire name)
+
+`; + +exports.install = function(instance) { + + instance.custom.reconfigure = function(){ + if (instance.options.wirename) { + instance.status(instance.options.wirename); + } else + instance.status('Not configured', 'red'); + }; + + instance.on('data', function(flowdata) { + EMIT('virtualwire', instance.options.wirename, flowdata); + }); + + instance.on('options', instance.custom.reconfigure); + instance.custom.reconfigure(); +}; diff --git a/RVO16/flow/wsmqttpublish.js b/RVO16/flow/wsmqttpublish.js new file mode 100755 index 0000000..0eba804 --- /dev/null +++ b/RVO16/flow/wsmqttpublish.js @@ -0,0 +1,448 @@ +exports.id = 'wsmqttpublish'; +exports.title = 'WS MQTT publish'; +exports.group = 'MQTT'; +exports.color = '#888600'; +exports.version = '1.0.2'; +exports.icon = 'sign-out'; +exports.input = 2; +exports.output = 3; +exports.options = { host: 'tb-stage.worksys.io', port: 1883, clientid: "", username: "" }; + +exports.html = `
+
+
+
Hostname or IP address (if not empty - setting will override db setting)
+
+
+
Port
+
+
+
+
+
@(Client id)
+
+
+
@(Username)
+
+
+
`; + + +exports.readme = ` +# WS MQTT Publish + +Version 1.0.3. + +Added: +- database collections, +- rpc response +`; + +const { promisifyBuilder } = require('./helper/db_helper'); +const { errLogger, monitor } = require('./helper/logger'); +const fs = require('fs'); +const mqtt = require('mqtt'); + +const SEND_TO = { + debug: 0, + rpcCall: 1, + services: 2 +} + +//CONFIG +let createTelemetryBackup = true; +let saveTelemetryOnError = true;//backup_on_failure overrides this value +//------------------------ + +let rollers; +if (createTelemetryBackup) rollers = require('streamroller'); + +const noSqlFileSizeLimit = 4194304;//use 5MB - 4194304 +let insertNoSqlCounter = 0; +let insertBackupNoSqlCounter = 0; +let processingData = false; + +let backup_on_failure = false;//== saveTelemetryOnError - create backup client send failure +let restore_from_backup = 0; //how many rows process at once? +let restore_backup_wait = 0;//wait seconds +let lastRestoreTime = 0; + +// if there is an error in client connection, flow logs to monitor.txt. Not to log messages every second, we use sendClientError variable +let sendClientError = true; + +process.on('uncaughtException', function(err) { + + errLogger.error('uncaughtException:', err.message) + errLogger.error(err.stack); + + //TODO + //send to service + + //process.exit(1); +}) + +const nosql = NOSQL('tbdata'); +const nosqlBackup = NOSQL('/backup/tbdata'); + + +exports.install = function(instance) { + + var client; + var opts; + var clientReady = false; + + // wsmqtt status for notification purposes on projects.worksys.io database + let wsmqttName = null; + let sendWsStatusVar = null; + let wsmqtt_status = 'disconnected'; + + function getWsmqttName(host) { + if (host == "tb-demo.worksys.io" || host == '192.168.252.4') return 'wsmqtt_demo'; + else if (host == "tb-qas01.worksys.io" || host == '192.168.252.5') return 'wsmqtt_qas01'; + else if (host == "tb-prod01.worksys.io" || host == '192.168.252.1') return 'wsmqtt_prod01'; + } + + function sendWsStatus() { + instance.send(SEND_TO.services, { [wsmqttName]: wsmqtt_status }); + } + + + function main() { + if (!FLOW.dbLoaded) return; + + loadSettings(); + clearInterval(sendWsStatus); + sendWsStatusVar = setInterval(sendWsStatus, 180000); + } + + //set opts according to db settings + function loadSettings() { + + if (instance.options.host !== "") { + //override settings from database + var o = instance.options; + opts = { + host: o.host, + port: o.port, + clientId: o.clientid, + username: o.username, + rejectUnauthorized: false, + resubscribe: false + }; + + wsmqttName = getWsmqttName(o.host); + + console.log("wsmqttpublich -> loadSettings from instance.options", instance.options); + } + else { + + const SETTINGS = FLOW.GLOBALS.settings; + backup_on_failure = SETTINGS.backup_on_failure; + saveTelemetryOnError = backup_on_failure; + + restore_from_backup = SETTINGS.restore_from_backup; + restore_backup_wait = SETTINGS.restore_backup_wait; + + let mqtt_host = SETTINGS.mqtt_host; + let mqtt_clientid = SETTINGS.mqtt_clientid; + let mqtt_username = SETTINGS.mqtt_username; + let mqtt_port = SETTINGS.mqtt_port; + + opts = { + host: mqtt_host, + port: mqtt_port, + keepalive: 10, + clientId: mqtt_clientid, + username: mqtt_username, + rejectUnauthorized: false, + resubscribe: false + }; + + wsmqttName = getWsmqttName(mqtt_host); + } + + connectToTbServer(); + } + + function connectToTbServer() { + var url = "mqtt://" + opts.host + ":" + opts.port; + console.log("MQTT URL: ", url); + + client = mqtt.connect(url, opts); + + client.on('connect', function() { + instance.status("Connected", "green"); + //monitor.info("MQTT client connected"); + + sendClientError = true; + clientReady = true; + wsmqtt_status = 'connected'; + }); + + client.on('reconnect', function() { + instance.status("Reconnecting", "yellow"); + clientReady = false; + }); + + client.on('message', function(topic, message) { + // message is type of buffer + message = message.toString(); + if (message[0] === '{') { + TRY(function() { + + message = JSON.parse(message); + if (message.hasOwnProperty("device") && message.hasOwnProperty("data") && message.data.hasOwnProperty("id")) { + client.publish(topic, `{"device": ${message.device}, "id": ${message.data.id}, "data": {"success": true}}`, { qos: 1 }); + instance.send(SEND_TO.rpcCall, { "device": message.device, "id": message.data.id, "RPC response": { "success": true } }); + } + + }, () => instance.debug('MQTT: Error parsing data', message)); + } + + instance.send(SEND_TO.rpcCall, { "topic": topic, "content": message }); + }); + + client.on('close', function() { + clientReady = false; + wsmqtt_status = 'disconnected'; + + instance.status("Disconnected", "red"); + instance.send(SEND_TO.debug, { "message": "Client CLOSE signal received !" }); + }); + + client.on('error', function(err) { + instance.status("Err: " + err.code, "red"); + instance.send(SEND_TO.debug, { "message": "Client ERROR signal received !", "error": err, "opt": opts }); + if (sendClientError) { + monitor.info('MQTT client error', err); + sendClientError = false; + } + clientReady = false; + wsmqtt_status = 'disconnected'; + }); + + } + + + instance.on("0", _ => { + main(); + }) + + + instance.on('1', function(data) { + + if (clientReady) { + //do we have some data in backup file? if any, process data from database + if (saveTelemetryOnError) { + //read telemetry data and send back to server + if (!processingData) processDataFromDatabase(); + } + + let stringifiedJson = JSON.stringify(data.data); + client.publish("v1/gateway/telemetry", stringifiedJson, { qos: 1 }); + + //backup telemetry + if (createTelemetryBackup) { + data.data.id = UID(); + nosqlBackup.insert(data.data); + + insertBackupNoSqlCounter++; + if (insertBackupNoSqlCounter > 150) { + let options = { compress: true }; + let path = __dirname + "/../databases/backup/tbdata.nosql"; + var stream = new rollers.RollingFileStream(path, noSqlFileSizeLimit, 150, options); + stream.write(""); + stream.end(); + + insertBackupNoSqlCounter = 0; + } + } + + } + else { + //logger.debug("Client unavailable. Data not sent !", JSON.stringify(data.data)); + instance.send(SEND_TO.debug, { "message": "Client unavailable. Data not sent !", "data": data.data }); + + if (saveTelemetryOnError) { + //create new file from tbdata.nosql, if file size exceeds given limit, and clear tbdata.nosql + makeBackupFromDbFile(); + + //write to tb + data.data.id = UID(); + nosql.insert(data.data); + } + } + }); + + + instance.close = function(done) { + if (clientReady) { + client.end(); + clearInterval(sendWsStatusVar); + } + }; + + + function getDbBackupFileCounter(type) { + var files = fs.readdirSync(__dirname + "/../databases"); + + let counter = 0; + for (var i = 0; i < files.length; i++) { + + if (files[i] == "tbdata.nosql") continue; + + if (files[i].endsWith(".nosql")) { + + let pos = files[i].indexOf("."); + if (pos > -1) { + + let fileCounter = counter; + let firstDigit = files[i].slice(0, pos); + + fileCounter = parseInt(firstDigit); + if (isNaN(fileCounter)) fileCounter = 0; + //console.log("getDbBackupFileCounter digit:", files[i], firstDigit, fileCounter, isNaN(fileCounter), type); + + if (type == "max") { + if (fileCounter > counter) { + counter = fileCounter; + } + } + else if (type == "min") { + if (counter == 0) counter = fileCounter; + + if (fileCounter < counter) { + counter = fileCounter; + } + } + } + } + + } + + if (type == "max") counter++; + + return counter; + } + + const makeBackupFromDbFile = async () => { + + if (!saveTelemetryOnError) return; + + //to avoid large file: tbdata.nosql + + //init value is 0! + if (insertNoSqlCounter > 0) { + --insertNoSqlCounter; + return; + } + + insertNoSqlCounter = 100; + + let source = __dirname + "/../databases/tbdata.nosql"; + + var stats = fs.statSync(source); + var fileSizeInBytes = stats.size; + + if (fileSizeInBytes > noSqlFileSizeLimit) { + + let counter = 1; + counter = getDbBackupFileCounter("max"); + + let destination = __dirname + "/../databases/" + counter + "." + "tbdata.nosql"; + + //make backup file + fs.copyFileSync(source, destination); + //fs.renameSync(p, p + "." + counter); + + //clear tbdata.nosql + fs.writeFileSync(source, ""); + fs.truncateSync(source, 0); + + } + } + + const processDataFromDatabase = async () => { + + if (restore_from_backup <= 0) return; + + //calculate diff + const now = new Date(); + let currentTime = now.getTime(); + let diff = currentTime - lastRestoreTime; + + if ((diff / 1000) < restore_backup_wait) { + //console.log("*********restore_backup_wait", diff, restore_backup_wait); + return; + } + + processingData = true; + + //get filename to process + let counter = getDbBackupFileCounter("min"); + + //we have some backup files + let dataBase = 'tbdata'; + + var nosql; + if (counter == 0) dataBase = 'tbdata'; + else dataBase = counter + "." + 'tbdata'; + + nosql = NOSQL(dataBase); + + //select all data - use limit restore_from_backup + let records = await promisifyBuilder(nosql.find().take(restore_from_backup)); + + for (let i = 0; i < records.length; i++) { + if (clientReady) { + + let item = records[i]; + let id = item.id; + + if (id !== undefined) { + //console.log("------------processDataFromDatabase - remove", id, dataBase, i); + + try { + + let message = JSON.parse(JSON.stringify(item)); + delete message.id; + + client.publish("v1/gateway/telemetry", JSON.stringify(message), { qos: 1 }); + + //remove from database + await promisifyBuilder(nosql.remove().where("id", id)); + + } catch (error) { + //process error + console.log("processDataFromDatabase", error); + } + + } + + } + else { + processingData = false; + return; + } + } + + if (records.length > 0) { + //clean backup file + if (counter > 0) nosql.clean(); + } + + //no data in db, remove + if (records.length == 0) { + if (counter > 0) nosql.drop(); + } + + const d = new Date(); + lastRestoreTime = d.getTime(); + + processingData = false; + + } + + instance.on('options', main); + //instance.reconfigure(); +}; diff --git a/RVO16/monitor.txt b/RVO16/monitor.txt new file mode 100755 index 0000000..576d0a8 --- /dev/null +++ b/RVO16/monitor.txt @@ -0,0 +1,7953 @@ +[2025-01-02T09:49:40.344] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-02T09:49:45.683] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup +[2025-01-02T09:49:45.699] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup +[2025-01-02T09:49:45.706] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup +[2025-01-02T09:49:45.749] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-01-02T09:49:50.717] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-02T09:49:50.719] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-02T09:49:50.720] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-02T09:49:50.725] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-02T09:49:50.727] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-03T07:14:00.726Z +[2025-01-02T09:49:50.728] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-02T15:37:00.728Z +[2025-01-02T09:49:50.729] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:14', name: 'luxOff' }, + { value: 1, start_time: '16:37', name: 'luxOn' } +] +[2025-01-02T09:49:50.730] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-02T09:49:50.731] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-02T09:49:50.731] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-02T09:49:50.734] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-02T09:49:50.734] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-03T07:14:00.734Z +[2025-01-02T09:49:50.735] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-02T15:37:00.735Z +[2025-01-02T09:49:50.736] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:14', name: 'luxOff' }, + { value: 1, start_time: '16:37', name: 'luxOn' } +] +[2025-01-02T09:49:50.737] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-02T09:49:50.738] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-02T09:49:50.738] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-02T09:49:50.740] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-02T09:49:50.741] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-03T07:14:00.741Z +[2025-01-02T09:49:50.742] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-02T15:37:00.742Z +[2025-01-02T09:49:50.742] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:14', name: 'luxOff' }, + { value: 1, start_time: '16:37', name: 'luxOn' } +] +[2025-01-02T09:49:50.743] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-02T09:49:50.762] [INFO] monitorLogs - tasks created: 2030 +[2025-01-02T09:49:50.765] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2024-11-04 +[2025-01-02T16:17:43.742] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-02T16:17:43.770] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-02T16:17:43.777] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-03T03:49:46.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-03 03:49:46 +[2025-01-03T07:24:51.322] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-03T07:24:51.334] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-03T07:24:51.341] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-03T10:20:07.943] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-03T10:20:13.284] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup +[2025-01-03T10:20:13.301] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup +[2025-01-03T10:20:13.308] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup +[2025-01-03T10:20:13.324] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-01-03T10:20:18.322] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-03T10:20:18.323] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-03T10:20:18.324] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-03T10:20:18.330] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-03T10:20:18.332] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-04T07:14:00.331Z +[2025-01-03T10:20:18.333] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-03T15:38:00.332Z +[2025-01-03T10:20:18.333] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:14', name: 'luxOff' }, + { value: 1, start_time: '16:38', name: 'luxOn' } +] +[2025-01-03T10:20:18.334] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-03T10:20:18.335] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-03T10:20:18.336] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-03T10:20:18.338] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-03T10:20:18.339] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-04T07:14:00.339Z +[2025-01-03T10:20:18.340] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-03T15:38:00.340Z +[2025-01-03T10:20:18.340] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:14', name: 'luxOff' }, + { value: 1, start_time: '16:38', name: 'luxOn' } +] +[2025-01-03T10:20:18.342] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-03T10:20:18.342] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-03T10:20:18.343] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-03T10:20:18.345] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-03T10:20:18.346] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-04T07:14:00.346Z +[2025-01-03T10:20:18.346] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-03T15:38:00.346Z +[2025-01-03T10:20:18.347] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:14', name: 'luxOff' }, + { value: 1, start_time: '16:38', name: 'luxOn' } +] +[2025-01-03T10:20:18.348] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-03T10:20:18.361] [INFO] monitorLogs - tasks created: 2030 +[2025-01-03T10:20:18.364] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-02 +[2025-01-03T16:29:50.515] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-03T16:29:50.540] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-03T16:29:50.547] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-04T03:20:15.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-04 03:20:15 +[2025-01-04T07:20:11.122] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-04T07:20:11.133] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-04T07:20:11.140] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-04T16:26:41.750] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-04T16:26:41.777] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-04T16:26:41.784] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-05T03:20:16.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-05 03:20:16 +[2025-01-05T07:33:01.652] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-05T07:33:01.664] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-05T07:33:01.670] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-05T16:16:00.709] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-05T16:16:00.730] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-05T16:16:00.736] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-06T03:20:17.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-06 03:20:17 +[2025-01-06T07:29:12.640] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-06T07:29:12.652] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-06T07:29:12.660] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-06T16:28:47.560] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-06T16:28:47.584] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-06T16:28:47.590] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-07T03:20:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-07 03:20:18 +[2025-01-07T07:31:09.630] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-07T07:31:09.642] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-07T07:31:09.648] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-07T16:21:57.879] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-07T16:21:57.900] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-07T16:21:57.907] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-08T03:20:19.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-08 03:20:19 +[2025-01-08T07:26:18.933] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-08T07:26:18.945] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-08T07:26:18.954] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-08T16:31:11.891] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-08T16:31:11.916] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-08T16:31:11.924] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-09T03:20:20.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-09 03:20:20 +[2025-01-09T07:28:09.711] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-09T07:28:09.723] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-09T07:28:09.730] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-09T12:43:19.676] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-09T12:43:25.017] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup +[2025-01-09T12:43:25.033] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup +[2025-01-09T12:43:25.041] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup +[2025-01-09T12:43:25.057] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-01-09T12:43:30.053] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-09T12:43:30.055] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-09T12:43:30.056] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-09T12:43:30.061] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-09T12:43:30.063] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-10T07:13:00.062Z +[2025-01-09T12:43:30.064] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-09T15:45:00.064Z +[2025-01-09T12:43:30.064] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:13', name: 'luxOff' }, + { value: 1, start_time: '16:45', name: 'luxOn' } +] +[2025-01-09T12:43:30.066] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-09T12:43:30.067] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-09T12:43:30.067] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-09T12:43:30.070] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-09T12:43:30.070] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-10T07:13:00.070Z +[2025-01-09T12:43:30.071] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-09T15:45:00.071Z +[2025-01-09T12:43:30.072] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:13', name: 'luxOff' }, + { value: 1, start_time: '16:45', name: 'luxOn' } +] +[2025-01-09T12:43:30.073] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-09T12:43:30.074] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-09T12:43:30.074] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-09T12:43:30.076] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-09T12:43:30.077] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-10T07:13:00.077Z +[2025-01-09T12:43:30.078] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-09T15:45:00.078Z +[2025-01-09T12:43:30.078] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:13', name: 'luxOff' }, + { value: 1, start_time: '16:45', name: 'luxOn' } +] +[2025-01-09T12:43:30.079] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-09T12:43:30.093] [INFO] monitorLogs - tasks created: 2030 +[2025-01-09T12:43:30.096] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-02 +[2025-01-09T15:32:37.697] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-09T15:32:43.031] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup +[2025-01-09T15:32:43.046] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup +[2025-01-09T15:32:43.053] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup +[2025-01-09T15:32:43.068] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-01-09T15:32:48.066] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-09T15:32:48.067] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-09T15:32:48.068] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-09T15:32:48.074] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-09T15:32:48.075] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-10T07:13:00.074Z +[2025-01-09T15:32:48.076] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-09T15:45:00.076Z +[2025-01-09T15:32:48.077] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:13', name: 'luxOff' }, + { value: 1, start_time: '16:45', name: 'luxOn' } +] +[2025-01-09T15:32:48.078] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-09T15:32:48.079] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-09T15:32:48.080] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-09T15:32:48.083] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-09T15:32:48.084] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-10T07:13:00.084Z +[2025-01-09T15:32:48.084] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-09T15:45:00.084Z +[2025-01-09T15:32:48.085] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:13', name: 'luxOff' }, + { value: 1, start_time: '16:45', name: 'luxOn' } +] +[2025-01-09T15:32:48.086] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-09T15:32:48.087] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-09T15:32:48.087] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-09T15:32:48.089] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-09T15:32:48.090] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-10T07:13:00.090Z +[2025-01-09T15:32:48.091] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-09T15:45:00.091Z +[2025-01-09T15:32:48.092] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:13', name: 'luxOff' }, + { value: 1, start_time: '16:45', name: 'luxOn' } +] +[2025-01-09T15:32:48.093] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-09T15:32:48.106] [INFO] monitorLogs - tasks created: 2030 +[2025-01-09T15:32:48.109] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-02 +[2025-01-09T16:31:42.046] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-09T16:31:42.070] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-09T16:31:42.078] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-10T03:32:44.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-10 03:32:44 +[2025-01-10T07:30:45.954] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-10T07:30:45.964] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-10T07:30:45.971] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-10T14:13:51.879] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-10T14:13:57.209] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup +[2025-01-10T14:13:57.224] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup +[2025-01-10T14:13:57.231] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup +[2025-01-10T14:13:57.262] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-01-10T14:14:02.244] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-10T14:14:02.246] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-10T14:14:02.247] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-10T14:14:02.252] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-10T14:14:02.253] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-11T07:12:00.252Z +[2025-01-10T14:14:02.254] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-10T15:46:00.254Z +[2025-01-10T14:14:02.255] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:12', name: 'luxOff' }, + { value: 1, start_time: '16:46', name: 'luxOn' } +] +[2025-01-10T14:14:02.256] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-10T14:14:02.257] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-10T14:14:02.257] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-10T14:14:02.260] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-10T14:14:02.260] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-11T07:12:00.260Z +[2025-01-10T14:14:02.261] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-10T15:46:00.261Z +[2025-01-10T14:14:02.262] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:12', name: 'luxOff' }, + { value: 1, start_time: '16:46', name: 'luxOn' } +] +[2025-01-10T14:14:02.263] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-10T14:14:02.264] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-10T14:14:02.264] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-10T14:14:02.266] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-10T14:14:02.267] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-11T07:12:00.267Z +[2025-01-10T14:14:02.268] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-10T15:46:00.267Z +[2025-01-10T14:14:02.268] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:12', name: 'luxOff' }, + { value: 1, start_time: '16:46', name: 'luxOn' } +] +[2025-01-10T14:14:02.269] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-10T14:14:02.282] [INFO] monitorLogs - tasks created: 2030 +[2025-01-10T14:14:02.285] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-02 +[2025-01-10T14:18:50.293] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-10T14:18:55.636] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup +[2025-01-10T14:18:55.651] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup +[2025-01-10T14:18:55.658] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup +[2025-01-10T14:18:55.674] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-01-10T14:19:00.671] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-10T14:19:00.673] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-10T14:19:00.674] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-10T14:19:00.679] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-10T14:19:00.681] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-11T07:12:00.680Z +[2025-01-10T14:19:00.682] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-10T15:46:00.681Z +[2025-01-10T14:19:00.682] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:12', name: 'luxOff' }, + { value: 1, start_time: '16:46', name: 'luxOn' } +] +[2025-01-10T14:19:00.683] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-10T14:19:00.684] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-10T14:19:00.685] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-10T14:19:00.687] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-10T14:19:00.688] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-11T07:12:00.688Z +[2025-01-10T14:19:00.689] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-10T15:46:00.689Z +[2025-01-10T14:19:00.689] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:12', name: 'luxOff' }, + { value: 1, start_time: '16:46', name: 'luxOn' } +] +[2025-01-10T14:19:00.690] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-10T14:19:00.691] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-10T14:19:00.692] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-10T14:19:00.694] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-10T14:19:00.694] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-11T07:12:00.694Z +[2025-01-10T14:19:00.695] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-10T15:46:00.695Z +[2025-01-10T14:19:00.696] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:12', name: 'luxOff' }, + { value: 1, start_time: '16:46', name: 'luxOn' } +] +[2025-01-10T14:19:00.697] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-10T14:19:00.715] [INFO] monitorLogs - tasks created: 2030 +[2025-01-10T14:19:00.718] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-02 +[2025-01-10T15:58:15.666] [INFO] monitorLogs - MQTT client connected +[2025-01-10T16:29:47.541] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-10T16:29:47.568] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-10T16:29:47.576] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-11T03:18:57.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-11 03:18:57 +[2025-01-11T07:22:50.322] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-11T07:22:50.334] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-11T07:22:50.342] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-11T16:31:56.369] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-11T16:31:56.396] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-11T16:31:56.403] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-12T03:18:57.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-12 03:18:57 +[2025-01-12T07:31:15.743] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-12T07:31:15.754] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-12T07:31:15.761] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-12T16:29:48.435] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-12T16:29:48.461] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-12T16:29:48.468] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-13T03:18:58.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-13 03:18:58 +[2025-01-13T07:36:54.697] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-13T07:36:54.709] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-13T07:36:54.716] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-13T16:35:21.903] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-13T16:35:21.930] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-13T16:35:21.937] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-14T03:18:59.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-14 03:18:59 +[2025-01-14T07:16:05.078] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-14T07:16:05.089] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-14T07:16:05.095] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-14T16:37:53.848] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-14T16:37:53.874] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-14T16:37:53.881] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-15T03:19:00.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-15 03:19:00 +[2025-01-15T07:23:37.382] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-15T07:23:37.394] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-15T07:23:37.401] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-15T16:37:20.028] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-15T16:37:20.054] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-15T16:37:20.061] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-16T03:19:02.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-16 03:19:02 +[2025-01-16T07:20:56.732] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-16T07:20:56.744] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-16T07:20:56.750] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-16T16:36:01.013] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-16T16:36:01.039] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-16T16:36:01.045] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-17T03:19:02.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-17 03:19:02 +[2025-01-17T07:23:33.087] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-17T07:23:33.099] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-17T07:23:33.105] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-17T16:40:37.327] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-17T16:40:37.352] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-17T16:40:37.359] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-18T03:19:03.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-18 03:19:03 +[2025-01-18T07:22:07.787] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-18T07:22:07.799] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-18T07:22:07.805] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-18T16:44:38.616] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-18T16:44:38.643] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-18T16:44:38.649] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-19T03:19:04.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-19 03:19:04 +[2025-01-19T07:19:58.151] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-19T07:19:58.163] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-19T07:19:58.170] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-19T16:41:59.826] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-19T16:41:59.851] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-19T16:41:59.858] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-20T03:19:05.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-20 03:19:05 +[2025-01-20T07:23:50.045] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-20T07:23:50.059] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-20T07:23:50.065] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-20T16:42:15.130] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-20T16:42:15.156] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-20T16:42:15.163] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-21T03:19:06.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-21 03:19:06 +[2025-01-21T06:22:13.309] [INFO] monitorLogs - MQTT client connected +[2025-01-21T07:27:44.319] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-21T07:27:44.330] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-21T07:27:44.337] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-21T16:42:13.928] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-21T16:42:13.955] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-21T16:42:13.962] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-22T03:19:07.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-22 03:19:07 +[2025-01-22T07:23:31.774] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-22T07:23:31.787] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-22T07:23:31.793] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-22T13:28:32.479] [INFO] monitorLogs - MQTT client connected +[2025-01-22T13:30:34.046] [INFO] monitorLogs - MQTT client connected +[2025-01-22T13:32:01.658] [INFO] monitorLogs - MQTT client connected +[2025-01-22T13:33:45.426] [INFO] monitorLogs - MQTT client connected +[2025-01-22T16:39:56.664] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-22T16:39:56.690] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-22T16:39:56.696] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-23T03:19:08.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-23 03:19:08 +[2025-01-23T07:20:31.446] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-23T07:20:31.459] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-23T07:20:31.465] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-23T16:45:46.632] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-23T16:45:46.658] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-23T16:45:46.665] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-24T03:19:09.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-24 03:19:09 +[2025-01-24T07:07:22.197] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-24T07:07:22.211] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-24T07:07:22.218] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-24T16:56:55.684] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-24T16:56:55.710] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-24T16:56:55.717] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-25T03:19:10.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-25 03:19:10 +[2025-01-25T07:16:47.378] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-25T07:16:47.390] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-25T07:16:47.396] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-25T12:45:07.874] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-01-25T12:45:13.220] [INFO] monitorLogs - buildTasks - params undefined +[2025-01-25T12:45:13.225] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-01-25T12:45:13.227] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-01-25T12:45:13.227] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-25T12:45:13.232] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-25T12:45:13.233] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-26T07:00:00.232Z +[2025-01-25T12:45:13.235] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-25T16:08:00.234Z +[2025-01-25T12:45:13.235] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '8:0', name: 'luxOff' }, + { value: 1, start_time: '17:8', name: 'luxOn' } +] +[2025-01-25T12:45:13.236] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-01-25T12:45:13.237] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-01-25T12:45:13.238] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-25T12:45:13.240] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-25T12:45:13.241] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-26T07:00:00.241Z +[2025-01-25T12:45:13.242] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-25T16:08:00.242Z +[2025-01-25T12:45:13.243] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '8:0', name: 'luxOff' }, + { value: 1, start_time: '17:8', name: 'luxOn' } +] +[2025-01-25T12:45:13.244] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-01-25T12:45:13.244] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-01-25T12:45:13.245] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-01-25T12:45:13.247] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-01-25T12:45:13.248] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-26T07:00:00.248Z +[2025-01-25T12:45:13.249] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-25T16:08:00.249Z +[2025-01-25T12:45:13.249] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '8:0', name: 'luxOff' }, + { value: 1, start_time: '17:8', name: 'luxOn' } +] +[2025-01-25T12:45:13.251] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-01-25T12:45:13.260] [INFO] monitorLogs - tasks created: 1904 +[2025-01-25T12:45:13.263] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-21 +[2025-01-25T12:45:13.369] [INFO] monitorLogs - MQTT client connected +[2025-01-25T12:45:13.578] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-01-25T12:45:13.884] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-01-25T12:45:14.190] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-01-25T16:51:24.984] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-25T16:51:24.987] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-25T16:51:24.990] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-26T03:45:15.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-26 03:45:15 +[2025-01-26T07:13:17.958] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-26T07:13:17.961] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-26T07:13:17.963] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-26T16:55:21.050] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-26T16:55:21.053] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-26T16:55:21.055] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-27T03:45:16.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-27 03:45:16 +[2025-01-27T07:05:42.631] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-27T07:05:42.634] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-27T07:05:42.636] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-27T17:03:03.056] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-27T17:03:03.058] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-27T17:03:03.060] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-28T03:45:21.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-28 03:45:21 +[2025-01-28T07:14:55.495] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-28T07:14:55.497] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-28T07:14:55.499] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-28T16:53:11.921] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-28T16:53:11.923] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-28T16:53:11.925] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-29T03:45:21.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-29 03:45:21 +[2025-01-29T07:04:39.421] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-29T07:04:39.423] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-29T07:04:39.425] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-29T17:06:24.859] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-29T17:06:24.861] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-29T17:06:24.863] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-30T03:45:19.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-30 03:45:19 +[2025-01-30T06:59:42.515] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-30T06:59:42.518] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-30T06:59:42.520] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-30T17:07:43.847] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-30T17:07:43.853] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-30T17:07:43.855] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-01-31T03:45:20.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-31 03:45:20 +[2025-01-31T07:00:29.432] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-01-31T07:00:29.435] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-01-31T07:00:29.437] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-01-31T10:50:42.610] [INFO] monitorLogs - MQTT client connected +[2025-01-31T17:07:05.523] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-01-31T17:07:05.528] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-01-31T17:07:05.531] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-01T03:45:24.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-01 03:45:24 +[2025-02-01T06:58:05.622] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-01T06:58:05.624] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-01T06:58:05.626] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-01T17:05:38.791] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-01T17:05:38.793] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-01T17:05:38.795] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-02T03:45:22.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-02 03:45:22 +[2025-02-02T07:09:05.551] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-02T07:09:05.553] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-02T07:09:05.555] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-02T17:10:15.975] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-02T17:10:15.978] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-02T17:10:15.979] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-03T03:45:23.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-03 03:45:23 +[2025-02-03T06:53:29.946] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-03T06:53:29.948] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-03T06:53:29.950] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-03T07:01:04.812] [INFO] monitorLogs - MQTT client connected +[2025-02-03T07:02:54.184] [INFO] monitorLogs - MQTT client connected +[2025-02-03T07:04:01.185] [INFO] monitorLogs - MQTT client connected +[2025-02-03T07:04:42.483] [INFO] monitorLogs - MQTT client connected +[2025-02-03T07:05:26.182] [INFO] monitorLogs - MQTT client connected +[2025-02-03T17:13:34.211] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-03T17:13:34.213] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-03T17:13:34.216] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-04T03:45:24.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-04 03:45:24 +[2025-02-04T06:53:26.519] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-04T06:53:26.522] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-04T06:53:26.524] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-04T17:16:01.747] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-04T17:16:01.749] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-04T17:16:01.752] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-05T03:45:25.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-05 03:45:25 +[2025-02-05T06:52:26.905] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-05T06:52:26.908] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-05T06:52:26.910] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-05T17:16:39.088] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-05T17:16:39.090] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-05T17:16:39.092] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-06T03:45:26.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-06 03:45:26 +[2025-02-06T06:52:19.434] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-06T06:52:19.436] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-06T06:52:19.439] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-06T17:12:56.967] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-06T17:12:56.969] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-06T17:12:56.971] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-07T03:45:27.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-07 03:45:27 +[2025-02-07T06:53:18.818] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-07T06:53:18.820] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-07T06:53:18.822] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-07T08:41:46.222] [INFO] monitorLogs - MQTT client connected +[2025-02-07T08:43:45.497] [INFO] monitorLogs - MQTT client connected +[2025-02-07T08:44:27.513] [INFO] monitorLogs - MQTT client connected +[2025-02-07T08:44:49.111] [INFO] monitorLogs - MQTT client connected +[2025-02-07T08:46:39.351] [INFO] monitorLogs - MQTT client connected +[2025-02-07T08:49:02.142] [INFO] monitorLogs - MQTT client connected +[2025-02-07T17:10:07.474] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-07T17:10:07.476] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-07T17:10:07.478] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-08T02:40:40.126] [INFO] monitorLogs - MQTT client connected +[2025-02-08T03:45:28.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-08 03:45:28 +[2025-02-08T06:48:54.039] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-08T06:48:54.041] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-08T06:48:54.043] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-08T17:19:59.791] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-08T17:19:59.793] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-08T17:19:59.795] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-09T03:45:29.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-09 03:45:29 +[2025-02-09T06:54:39.633] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-09T06:54:39.635] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-09T06:54:39.637] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-09T13:28:08.128] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-02-09T13:28:13.509] [INFO] monitorLogs - buildTasks - params undefined +[2025-02-09T13:28:13.513] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-02-09T13:28:13.515] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-02-09T13:28:13.515] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-02-09T13:28:13.520] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-02-09T13:28:13.521] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-10T06:40:00.520Z +[2025-02-09T13:28:13.522] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-09T16:32:00.522Z +[2025-02-09T13:28:13.523] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '17:32', name: 'luxOn' } +] +[2025-02-09T13:28:13.524] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-02-09T13:28:13.525] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-02-09T13:28:13.526] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-02-09T13:28:13.528] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-02-09T13:28:13.529] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-10T06:40:00.529Z +[2025-02-09T13:28:13.530] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-09T16:32:00.530Z +[2025-02-09T13:28:13.530] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '17:32', name: 'luxOn' } +] +[2025-02-09T13:28:13.531] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-02-09T13:28:13.532] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-02-09T13:28:13.533] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-02-09T13:28:13.535] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-02-09T13:28:13.536] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-10T06:40:00.535Z +[2025-02-09T13:28:13.536] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-09T16:32:00.536Z +[2025-02-09T13:28:13.537] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '17:32', name: 'luxOn' } +] +[2025-02-09T13:28:13.538] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-02-09T13:28:13.548] [INFO] monitorLogs - tasks created: 1904 +[2025-02-09T13:28:13.550] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-30 +[2025-02-09T13:28:13.677] [INFO] monitorLogs - MQTT client connected +[2025-02-09T13:28:13.867] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-02-09T13:28:14.172] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-02-09T13:28:14.478] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-02-09T17:10:50.197] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-09T17:10:50.200] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-09T17:10:50.203] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-10T03:28:15.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-10 03:28:15 +[2025-02-10T06:46:02.434] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-10T06:46:02.437] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-10T06:46:02.440] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-10T17:24:26.690] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-10T17:24:26.692] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-10T17:24:26.694] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-11T03:28:16.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-11 03:28:16 +[2025-02-11T06:43:09.871] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-11T06:43:09.874] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-11T06:43:09.876] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-11T17:21:25.854] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-11T17:21:25.857] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-11T17:21:25.859] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-12T03:28:17.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-12 03:28:17 +[2025-02-12T06:51:25.862] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-12T06:51:25.865] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-12T06:51:25.867] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-12T17:14:00.486] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-12T17:14:00.488] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-12T17:14:00.490] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-13T03:28:17.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-13 03:28:17 +[2025-02-13T06:55:17.296] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-13T06:55:17.299] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-13T06:55:17.301] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-13T13:18:10.312] [INFO] monitorLogs - MQTT client connected +[2025-02-13T13:19:08.602] [INFO] monitorLogs - MQTT client connected +[2025-02-13T13:20:53.466] [INFO] monitorLogs - MQTT client connected +[2025-02-13T13:21:27.062] [INFO] monitorLogs - MQTT client connected +[2025-02-13T13:23:21.563] [INFO] monitorLogs - MQTT client connected +[2025-02-13T13:24:29.106] [INFO] monitorLogs - MQTT client connected +[2025-02-13T13:26:01.619] [INFO] monitorLogs - MQTT client connected +[2025-02-13T15:22:54.343] [INFO] monitorLogs - MQTT client connected +[2025-02-13T17:16:05.428] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-13T17:16:05.431] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-13T17:16:05.433] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-14T03:28:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-14 03:28:18 +[2025-02-14T06:40:06.721] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-14T06:40:06.724] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-14T06:40:06.727] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-14T17:19:28.288] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-14T17:19:28.291] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-14T17:19:28.293] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-15T03:28:19.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-15 03:28:19 +[2025-02-15T06:44:42.086] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-15T06:44:42.090] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-15T06:44:42.092] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-15T17:26:18.817] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-15T17:26:18.819] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-15T17:26:18.821] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-16T03:28:20.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-16 03:28:20 +[2025-02-16T06:37:15.005] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-16T06:37:15.008] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-16T06:37:15.010] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-16T17:27:23.513] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-16T17:27:23.515] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-16T17:27:23.517] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-17T03:28:21.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-17 03:28:21 +[2025-02-17T06:36:54.550] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-17T06:36:54.554] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-17T06:36:54.556] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-17T07:03:54.119] [INFO] monitorLogs - MQTT client connected +[2025-02-17T07:04:16.364] [INFO] monitorLogs - MQTT client connected +[2025-02-17T08:02:50.228] [INFO] monitorLogs - MQTT client connected +[2025-02-17T08:04:10.887] [INFO] monitorLogs - MQTT client connected +[2025-02-17T08:56:46.155] [INFO] monitorLogs - MQTT client connected +[2025-02-17T17:26:42.936] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-17T17:26:42.939] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-17T17:26:42.941] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-18T03:28:22.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-18 03:28:22 +[2025-02-18T06:40:26.764] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-18T06:40:26.767] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-18T06:40:26.769] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-18T06:54:10.682] [INFO] monitorLogs - MQTT client connected +[2025-02-18T17:38:01.692] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-18T17:38:01.694] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-18T17:38:01.696] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-19T03:28:23.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-19 03:28:23 +[2025-02-19T06:29:19.006] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-19T06:29:19.008] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-19T06:29:19.010] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-19T15:06:42.845] [INFO] monitorLogs - MQTT client connected +[2025-02-19T15:09:58.579] [INFO] monitorLogs - MQTT client connected +[2025-02-19T15:12:55.370] [INFO] monitorLogs - MQTT client connected +[2025-02-19T17:36:54.182] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-19T17:36:54.184] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-19T17:36:54.186] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-20T03:28:24.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-20 03:28:24 +[2025-02-20T06:29:32.802] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-20T06:29:32.805] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-20T06:29:32.807] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-20T09:20:06.979] [INFO] monitorLogs - MQTT client connected +[2025-02-20T17:40:04.430] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-20T17:40:04.432] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-20T17:40:04.434] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-21T03:28:25.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-21 03:28:25 +[2025-02-21T06:25:58.764] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-21T06:25:58.766] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-21T06:25:58.768] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-21T17:40:32.048] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-21T17:40:32.052] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-21T17:40:32.053] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-22T03:28:26.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-22 03:28:26 +[2025-02-22T06:24:37.194] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-22T06:24:37.196] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-22T06:24:37.198] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-22T17:42:24.229] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-22T17:42:24.231] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-22T17:42:24.233] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-23T03:28:27.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-23 03:28:27 +[2025-02-23T06:22:53.722] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-23T06:22:53.725] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-23T06:22:53.727] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-23T17:31:20.116] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-23T17:31:20.119] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-23T17:31:20.121] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-24T03:28:28.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-24 03:28:28 +[2025-02-24T06:24:43.435] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-24T06:24:43.438] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-24T06:24:43.439] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-24T09:09:43.037] [INFO] monitorLogs - MQTT client connected +[2025-02-24T14:01:09.593] [INFO] monitorLogs - MQTT client connected +[2025-02-24T14:02:07.127] [INFO] monitorLogs - MQTT client connected +[2025-02-24T17:44:35.141] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-24T17:44:35.144] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-24T17:44:35.146] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-25T03:28:29.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-25 03:28:29 +[2025-02-25T06:25:03.623] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-25T06:25:03.625] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-25T06:25:03.627] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-25T06:51:14.538] [INFO] monitorLogs - MQTT client connected +[2025-02-25T06:52:29.080] [INFO] monitorLogs - MQTT client connected +[2025-02-25T06:55:26.687] [INFO] monitorLogs - MQTT client connected +[2025-02-25T06:57:16.396] [INFO] monitorLogs - MQTT client connected +[2025-02-25T06:57:45.010] [INFO] monitorLogs - MQTT client connected +[2025-02-25T06:58:12.446] [INFO] monitorLogs - MQTT client connected +[2025-02-25T07:10:57.227] [INFO] monitorLogs - MQTT client connected +[2025-02-25T07:11:29.540] [INFO] monitorLogs - MQTT client connected +[2025-02-25T07:12:32.955] [INFO] monitorLogs - MQTT client connected +[2025-02-25T07:14:26.513] [INFO] monitorLogs - MQTT client connected +[2025-02-25T07:14:56.234] [INFO] monitorLogs - MQTT client connected +[2025-02-25T07:16:54.393] [INFO] monitorLogs - MQTT client connected +[2025-02-25T12:37:28.692] [INFO] monitorLogs - MQTT client connected +[2025-02-25T12:37:50.041] [INFO] monitorLogs - MQTT client connected +[2025-02-25T12:39:00.851] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:05:34.234] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:07:41.904] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:08:17.909] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:08:54.277] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:09:34.675] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:10:30.558] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:11:39.827] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:12:02.785] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:12:55.309] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:14:08.593] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:15:05.584] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:15:51.325] [INFO] monitorLogs - MQTT client connected +[2025-02-25T14:20:51.100] [INFO] monitorLogs - MQTT client connected +[2025-02-25T17:41:56.690] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-25T17:41:56.692] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-25T17:41:56.694] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-26T03:28:30.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-26 03:28:30 +[2025-02-26T06:35:33.866] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-26T06:35:33.869] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-26T06:35:33.871] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-26T17:40:00.289] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-26T17:40:00.296] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-26T17:40:00.298] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-26T18:43:05.176] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-02-26T18:43:10.512] [INFO] monitorLogs - buildTasks - params undefined +[2025-02-26T18:43:10.517] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-02-26T18:43:10.518] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-02-26T18:43:10.519] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-02-26T18:43:10.523] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-02-26T18:43:10.525] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-27T06:10:00.524Z +[2025-02-26T18:43:10.526] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-27T17:00:00.526Z +[2025-02-26T18:43:10.527] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:10', name: 'luxOff' }, + { value: 1, start_time: '18:0', name: 'luxOn' } +] +[2025-02-26T18:43:10.528] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-02-26T18:43:10.529] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-02-26T18:43:10.530] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-02-26T18:43:10.532] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-02-26T18:43:10.533] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-27T06:10:00.533Z +[2025-02-26T18:43:10.534] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-27T17:00:00.534Z +[2025-02-26T18:43:10.534] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:10', name: 'luxOff' }, + { value: 1, start_time: '18:0', name: 'luxOn' } +] +[2025-02-26T18:43:10.535] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-02-26T18:43:10.536] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-02-26T18:43:10.537] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-02-26T18:43:10.539] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-02-26T18:43:10.539] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-27T06:10:00.539Z +[2025-02-26T18:43:10.540] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-27T17:00:00.540Z +[2025-02-26T18:43:10.541] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:10', name: 'luxOff' }, + { value: 1, start_time: '18:0', name: 'luxOn' } +] +[2025-02-26T18:43:10.542] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-02-26T18:43:10.552] [INFO] monitorLogs - tasks created: 1904 +[2025-02-26T18:43:10.555] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-30 +[2025-02-26T18:43:10.669] [INFO] monitorLogs - MQTT client connected +[2025-02-26T18:43:10.872] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-02-26T18:43:11.178] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-02-26T18:43:11.498] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-02-27T03:43:12.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-27 03:43:12 +[2025-02-27T06:26:15.391] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-27T06:26:15.396] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-27T06:26:15.398] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-27T17:41:26.438] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-27T17:41:26.446] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-27T17:41:26.449] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-02-28T03:43:13.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-28 03:43:13 +[2025-02-28T06:15:30.073] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-02-28T06:15:30.077] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-02-28T06:15:30.080] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-02-28T12:20:03.232] [INFO] monitorLogs - MQTT client connected +[2025-02-28T12:26:51.668] [INFO] monitorLogs - MQTT client connected +[2025-02-28T17:50:58.647] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-02-28T17:50:58.649] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-02-28T17:50:58.652] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-01T03:43:14.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-01 03:43:14 +[2025-03-01T06:14:46.087] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-01T06:14:46.090] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-01T06:14:46.092] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-01T17:52:21.750] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-01T17:52:21.752] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-01T17:52:21.754] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-02T03:43:15.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-02 03:43:15 +[2025-03-02T06:13:10.845] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-02T06:13:10.848] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-02T06:13:10.850] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-02T17:57:02.546] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-02T17:57:02.549] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-02T17:57:02.551] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-03T03:43:16.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-03 03:43:16 +[2025-03-03T06:08:55.866] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-03T06:08:55.869] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-03T06:08:55.871] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-03T17:56:12.631] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-03T17:56:12.639] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-03T17:56:12.641] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-04T03:43:17.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-04 03:43:17 +[2025-03-04T06:06:09.411] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-04T06:06:09.414] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-04T06:06:09.416] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-04T07:04:55.030] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:07:50.013] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:09:53.828] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:10:40.306] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:12:20.706] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:13:50.813] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:16:18.189] [INFO] monitorLogs - MQTT client connected +[2025-03-04T07:22:11.021] [INFO] monitorLogs - MQTT client connected +[2025-03-04T17:58:35.601] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-04T17:58:35.603] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-04T17:58:35.605] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-05T03:43:18.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-05 03:43:18 +[2025-03-05T06:05:23.350] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-05T06:05:23.353] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-05T06:05:23.355] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-05T17:58:36.860] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-05T17:58:36.868] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-05T17:58:36.871] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-06T03:43:19.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-06 03:43:19 +[2025-03-06T06:02:31.171] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-06T06:02:31.174] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-06T06:02:31.176] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-06T18:00:48.544] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-06T18:00:48.552] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-06T18:00:48.554] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-07T03:43:20.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-07 03:43:20 +[2025-03-07T06:01:50.493] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-07T06:01:50.495] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-07T06:01:50.497] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-07T18:03:44.779] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-07T18:03:44.787] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-07T18:03:44.789] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-08T03:43:21.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-08 03:43:21 +[2025-03-08T05:59:20.905] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-08T05:59:20.907] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-08T05:59:20.909] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-08T18:02:42.022] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-08T18:02:42.030] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-08T18:02:42.032] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-09T03:43:23.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-09 03:43:23 +[2025-03-09T06:01:30.927] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-09T06:01:30.929] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-09T06:01:30.931] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-09T18:04:09.731] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-09T18:04:09.740] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-09T18:04:09.742] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-10T03:43:24.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-10 03:43:24 +[2025-03-10T05:59:32.431] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-10T05:59:32.433] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-10T05:59:32.435] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-10T06:43:00.141] [INFO] monitorLogs - MQTT client connected +[2025-03-10T06:43:22.388] [INFO] monitorLogs - MQTT client connected +[2025-03-10T17:48:05.298] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-10T17:48:05.305] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-10T17:48:05.307] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-11T03:43:25.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-11 03:43:25 +[2025-03-11T05:54:32.495] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-11T05:54:32.498] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-11T05:54:32.500] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-11T08:22:20.605] [INFO] monitorLogs - MQTT client connected +[2025-03-11T08:23:27.392] [INFO] monitorLogs - MQTT client connected +[2025-03-11T08:24:03.794] [INFO] monitorLogs - MQTT client connected +[2025-03-11T08:25:00.081] [INFO] monitorLogs - MQTT client connected +[2025-03-11T17:59:43.780] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-11T17:59:43.783] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-11T17:59:43.785] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-12T03:43:26.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-12 03:43:26 +[2025-03-12T05:55:00.505] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-12T05:55:00.507] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-12T05:55:00.509] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-12T16:14:59.965] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-03-12T16:15:05.329] [INFO] monitorLogs - buildTasks - params undefined +[2025-03-12T16:15:05.334] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-03-12T16:15:05.335] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-03-12T16:15:05.336] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-12T16:15:05.340] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-12T16:15:05.342] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-03-13T05:41:00.341Z +[2025-03-12T16:15:05.343] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-03-12T17:22:00.343Z +[2025-03-12T16:15:05.344] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '18:22', name: 'luxOn' } +] +[2025-03-12T16:15:05.345] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-03-12T16:15:05.346] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-03-12T16:15:05.346] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-12T16:15:05.349] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-12T16:15:05.349] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-03-13T05:41:00.349Z +[2025-03-12T16:15:05.350] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-03-12T17:22:00.350Z +[2025-03-12T16:15:05.351] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '18:22', name: 'luxOn' } +] +[2025-03-12T16:15:05.352] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-03-12T16:15:05.353] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-03-12T16:15:05.354] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-12T16:15:05.356] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-12T16:15:05.356] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-03-13T05:41:00.356Z +[2025-03-12T16:15:05.357] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-03-12T17:22:00.357Z +[2025-03-12T16:15:05.358] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '18:22', name: 'luxOn' } +] +[2025-03-12T16:15:05.359] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-03-12T16:15:05.369] [INFO] monitorLogs - tasks created: 1904 +[2025-03-12T16:15:05.371] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-30 +[2025-03-12T16:15:05.448] [INFO] monitorLogs - MQTT client connected +[2025-03-12T16:15:05.687] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-03-12T16:15:05.993] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-03-12T16:15:06.298] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-03-12T18:08:27.978] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-12T18:08:27.981] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-12T18:08:27.984] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-13T03:15:06.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-13 03:15:06 +[2025-03-13T06:07:18.438] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-13T06:07:18.440] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-13T06:07:18.442] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-13T08:15:40.662] [INFO] monitorLogs - MQTT client connected +[2025-03-13T09:44:38.128] [INFO] monitorLogs - MQTT client connected +[2025-03-13T09:45:33.229] [INFO] monitorLogs - MQTT client connected +[2025-03-13T09:47:04.827] [INFO] monitorLogs - MQTT client connected +[2025-03-13T09:48:55.580] [INFO] monitorLogs - MQTT client connected +[2025-03-13T09:49:51.665] [INFO] monitorLogs - MQTT client connected +[2025-03-13T09:50:23.005] [INFO] monitorLogs - MQTT client connected +[2025-03-13T10:13:29.418] [INFO] monitorLogs - MQTT client connected +[2025-03-13T18:08:52.924] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-13T18:08:52.928] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-13T18:08:52.931] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-14T03:15:08.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-14 03:15:08 +[2025-03-14T06:00:36.361] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-14T06:00:36.365] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-14T06:00:36.367] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-14T18:04:38.077] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-14T18:04:38.080] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-14T18:04:38.082] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-15T03:15:09.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-15 03:15:09 +[2025-03-15T05:59:54.872] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-15T05:59:54.880] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-15T05:59:54.882] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-15T18:11:54.667] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-15T18:11:54.674] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-15T18:11:54.676] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-16T03:15:10.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-16 03:15:10 +[2025-03-16T05:50:15.059] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-16T05:50:15.061] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-16T05:50:15.063] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-16T18:16:10.540] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-16T18:16:10.543] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-16T18:16:10.545] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-17T03:15:11.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-17 03:15:11 +[2025-03-17T05:51:20.900] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-17T05:51:20.902] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-17T05:51:20.904] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-17T06:45:36.589] [INFO] monitorLogs - MQTT client connected +[2025-03-17T07:05:05.147] [INFO] monitorLogs - MQTT client connected +[2025-03-17T07:22:23.404] [INFO] monitorLogs - MQTT client connected +[2025-03-17T08:12:52.847] [INFO] monitorLogs - MQTT client connected +[2025-03-17T18:14:27.405] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-17T18:14:27.407] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-17T18:14:27.409] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-18T03:15:12.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-18 03:15:12 +[2025-03-18T05:38:29.204] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-18T05:38:29.206] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-18T05:38:29.208] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-18T18:19:58.971] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-18T18:19:58.975] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-18T18:19:58.976] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-19T03:15:13.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-19 03:15:13 +[2025-03-19T05:36:53.886] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-19T05:36:53.890] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-19T05:36:53.892] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-19T14:06:26.068] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-03-19T14:06:31.429] [INFO] monitorLogs - buildTasks - params undefined +[2025-03-19T14:06:31.434] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-03-19T14:06:31.436] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-03-19T14:06:31.436] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-19T14:06:31.441] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-19T14:06:31.442] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-03-20T05:27:00.441Z +[2025-03-19T14:06:31.444] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-03-19T17:32:00.443Z +[2025-03-19T14:06:31.444] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:27', name: 'luxOff' }, + { value: 1, start_time: '18:32', name: 'luxOn' } +] +[2025-03-19T14:06:31.446] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-03-19T14:06:31.446] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-03-19T14:06:31.447] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-19T14:06:31.449] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-19T14:06:31.450] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-03-20T05:27:00.450Z +[2025-03-19T14:06:31.451] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-03-19T17:32:00.451Z +[2025-03-19T14:06:31.452] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:27', name: 'luxOff' }, + { value: 1, start_time: '18:32', name: 'luxOn' } +] +[2025-03-19T14:06:31.453] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-03-19T14:06:31.454] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-03-19T14:06:31.454] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-19T14:06:31.456] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-19T14:06:31.457] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-03-20T05:27:00.457Z +[2025-03-19T14:06:31.458] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-03-19T17:32:00.458Z +[2025-03-19T14:06:31.458] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:27', name: 'luxOff' }, + { value: 1, start_time: '18:32', name: 'luxOn' } +] +[2025-03-19T14:06:31.459] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-03-19T14:06:31.469] [INFO] monitorLogs - tasks created: 1904 +[2025-03-19T14:06:31.472] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-30 +[2025-03-19T14:06:31.789] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-03-19T14:06:31.835] [INFO] monitorLogs - MQTT client connected +[2025-03-19T14:06:32.094] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-03-19T14:06:32.400] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-03-19T14:09:24.053] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-03-19T14:09:29.424] [INFO] monitorLogs - buildTasks - params undefined +[2025-03-19T14:09:29.428] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-03-19T14:09:29.430] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-03-19T14:09:29.430] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-19T14:09:29.435] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-19T14:09:29.436] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-03-20T05:27:00.435Z +[2025-03-19T14:09:29.438] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-03-19T17:32:00.437Z +[2025-03-19T14:09:29.438] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:27', name: 'luxOff' }, + { value: 1, start_time: '18:32', name: 'luxOn' } +] +[2025-03-19T14:09:29.439] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-03-19T14:09:29.440] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-03-19T14:09:29.441] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-19T14:09:29.443] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-19T14:09:29.444] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-03-20T05:27:00.444Z +[2025-03-19T14:09:29.445] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-03-19T17:32:00.445Z +[2025-03-19T14:09:29.446] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:27', name: 'luxOff' }, + { value: 1, start_time: '18:32', name: 'luxOn' } +] +[2025-03-19T14:09:29.447] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-03-19T14:09:29.447] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-03-19T14:09:29.448] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-19T14:09:29.450] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-19T14:09:29.451] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-03-20T05:27:00.451Z +[2025-03-19T14:09:29.452] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-03-19T17:32:00.452Z +[2025-03-19T14:09:29.452] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:27', name: 'luxOff' }, + { value: 1, start_time: '18:32', name: 'luxOn' } +] +[2025-03-19T14:09:29.453] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-03-19T14:09:29.463] [INFO] monitorLogs - tasks created: 1904 +[2025-03-19T14:09:29.466] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-30 +[2025-03-19T14:09:29.686] [INFO] monitorLogs - MQTT client connected +[2025-03-19T14:09:29.780] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-03-19T14:09:30.086] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-03-19T14:09:30.392] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-03-19T14:11:27.992] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false command received from platform +[2025-03-19T14:12:16.314] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false command received from platform +[2025-03-19T14:12:23.705] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false command received from platform +[2025-03-19T14:19:39.059] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false command received from platform +[2025-03-19T14:19:45.533] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false command received from platform +[2025-03-19T14:19:51.021] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false command received from platform +[2025-03-19T18:22:37.609] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-19T18:22:37.612] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-19T18:22:37.614] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-20T03:09:31.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-20 03:09:31 +[2025-03-20T05:34:25.797] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-20T05:34:25.800] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-20T05:34:25.802] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-20T18:21:58.894] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-20T18:21:58.902] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-20T18:21:58.904] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-21T03:09:32.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-21 03:09:32 +[2025-03-21T05:32:41.111] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-21T05:32:41.114] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-21T05:32:41.119] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-21T18:21:45.033] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-21T18:21:45.040] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-21T18:21:45.043] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-22T03:09:33.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-22 03:09:33 +[2025-03-22T05:31:07.163] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-22T05:31:07.165] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-22T05:31:07.167] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-22T18:17:03.174] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-22T18:17:03.176] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-22T18:17:03.178] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-23T03:09:34.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-23 03:09:34 +[2025-03-23T05:34:21.431] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-23T05:34:21.433] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-23T05:34:21.435] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-23T18:25:11.667] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-23T18:25:11.670] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-23T18:25:11.672] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-24T03:09:35.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-24 03:09:35 +[2025-03-24T05:33:18.450] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-24T05:33:18.452] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-24T05:33:18.454] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-24T08:09:06.036] [INFO] monitorLogs - MQTT client connected +[2025-03-24T10:16:39.719] [INFO] monitorLogs - MQTT client connected +[2025-03-24T10:17:10.884] [INFO] monitorLogs - MQTT client connected +[2025-03-24T10:48:28.299] [INFO] monitorLogs - MQTT client connected +[2025-03-24T12:01:37.244] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-03-24T12:01:42.591] [INFO] monitorLogs - buildTasks - params undefined +[2025-03-24T12:01:42.596] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-03-24T12:01:42.597] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-03-24T12:01:42.598] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-24T12:01:42.602] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-24T12:01:42.604] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-03-25T05:16:00.603Z +[2025-03-24T12:01:42.605] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-03-24T17:40:00.605Z +[2025-03-24T12:01:42.606] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:16', name: 'luxOff' }, + { value: 1, start_time: '18:40', name: 'luxOn' } +] +[2025-03-24T12:01:42.607] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-03-24T12:01:42.608] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-03-24T12:01:42.609] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-24T12:01:42.611] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-24T12:01:42.612] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-03-25T05:16:00.612Z +[2025-03-24T12:01:42.613] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-03-24T17:40:00.613Z +[2025-03-24T12:01:42.614] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:16', name: 'luxOff' }, + { value: 1, start_time: '18:40', name: 'luxOn' } +] +[2025-03-24T12:01:42.615] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-03-24T12:01:42.616] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-03-24T12:01:42.616] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-03-24T12:01:42.618] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-03-24T12:01:42.619] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-03-25T05:16:00.619Z +[2025-03-24T12:01:42.620] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-03-24T17:40:00.620Z +[2025-03-24T12:01:42.620] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:16', name: 'luxOff' }, + { value: 1, start_time: '18:40', name: 'luxOn' } +] +[2025-03-24T12:01:42.621] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-03-24T12:01:42.631] [INFO] monitorLogs - tasks created: 1904 +[2025-03-24T12:01:42.634] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-01-30 +[2025-03-24T12:01:42.710] [INFO] monitorLogs - MQTT client connected +[2025-03-24T12:01:42.949] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-03-24T12:01:43.255] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-03-24T12:01:43.560] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-03-24T18:26:44.089] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-24T18:26:44.097] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-24T18:26:44.100] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-25T03:01:44.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-25 03:01:44 +[2025-03-25T05:28:21.205] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-25T05:28:21.208] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-25T05:28:21.210] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-25T18:28:17.918] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-25T18:28:17.926] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-25T18:28:17.928] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-26T03:01:45.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-26 03:01:45 +[2025-03-26T05:23:19.717] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-26T05:23:19.720] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-26T05:23:19.723] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-26T18:27:47.309] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-26T18:27:47.317] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-26T18:27:47.319] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-27T03:01:46.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-27 03:01:46 +[2025-03-27T05:22:05.745] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-27T05:22:05.748] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-27T05:22:05.751] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-27T18:33:14.159] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-27T18:33:14.168] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-27T18:33:14.170] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-28T03:01:47.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-28 03:01:47 +[2025-03-28T05:19:34.823] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-28T05:19:34.826] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-28T05:19:34.828] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-28T07:34:53.063] [INFO] monitorLogs - MQTT client connected +[2025-03-28T07:38:11.495] [INFO] monitorLogs - MQTT client connected +[2025-03-28T09:16:08.976] [INFO] monitorLogs - MQTT client connected +[2025-03-28T18:23:46.730] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-28T18:23:46.738] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-28T18:23:46.741] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-29T03:01:48.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-29 03:01:48 +[2025-03-29T05:26:32.506] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-29T05:26:32.509] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-29T05:26:32.511] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-29T18:19:05.517] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-29T18:19:05.525] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-29T18:19:05.528] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-30T03:01:50.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-30 03:01:50 +[2025-03-30T06:23:58.749] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-30T06:23:58.752] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-30T06:23:58.755] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-30T19:24:11.054] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-30T19:24:11.063] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-30T19:24:11.065] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-03-31T03:01:50.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-31 03:01:50 +[2025-03-31T06:12:28.635] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-03-31T06:12:28.638] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-03-31T06:12:28.641] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-03-31T06:50:17.686] [INFO] monitorLogs - MQTT client connected +[2025-03-31T06:57:37.435] [INFO] monitorLogs - MQTT client connected +[2025-03-31T19:37:32.769] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-03-31T19:37:32.778] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-03-31T19:37:32.780] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-01T03:01:52.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-01 03:01:52 +[2025-04-01T06:14:19.203] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-01T06:14:19.206] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-01T06:14:19.208] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-01T07:40:45.867] [INFO] monitorLogs - MQTT client connected +[2025-04-01T07:56:54.445] [INFO] monitorLogs - MQTT client connected +[2025-04-01T19:37:06.382] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-01T19:37:06.389] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-01T19:37:06.392] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-02T02:17:52.578] [INFO] monitorLogs - MQTT client connected +[2025-04-02T03:01:53.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-02 03:01:53 +[2025-04-02T03:23:53.869] [INFO] monitorLogs - MQTT client connected +[2025-04-02T06:09:15.113] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-02T06:09:15.116] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-02T06:09:15.119] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-02T19:38:06.308] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-02T19:38:06.316] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-02T19:38:06.318] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-03T03:01:54.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-03 03:01:54 +[2025-04-03T06:04:25.156] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-03T06:04:25.160] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-03T06:04:25.162] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-03T19:43:04.644] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-03T19:43:04.653] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-03T19:43:04.655] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-04T03:01:55.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-04 03:01:55 +[2025-04-04T06:04:09.575] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-04T06:04:09.578] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-04T06:04:09.581] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-04T19:44:38.005] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-04T19:44:38.014] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-04T19:44:38.017] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-05T03:01:56.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-05 03:01:56 +[2025-04-05T06:02:27.264] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-05T06:02:27.267] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-05T06:02:27.269] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-05T19:44:35.902] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-05T19:44:35.911] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-05T19:44:35.913] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-06T03:01:57.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-06 03:01:57 +[2025-04-06T05:59:19.044] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-06T05:59:19.047] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-06T05:59:19.049] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-06T19:45:37.860] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-06T19:45:37.867] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-06T19:45:37.870] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-07T03:01:58.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-07 03:01:58 +[2025-04-07T06:06:10.727] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-07T06:06:10.730] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-07T06:06:10.732] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-07T12:04:53.964] [INFO] monitorLogs - MQTT client connected +[2025-04-07T19:36:27.600] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-07T19:36:27.607] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-07T19:36:27.610] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-08T03:01:59.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-08 03:01:59 +[2025-04-08T06:07:14.726] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-08T06:07:14.729] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-08T06:07:14.731] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-08T19:49:32.038] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-08T19:49:32.047] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-08T19:49:32.049] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-09T03:02:00.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-09 03:02:00 +[2025-04-09T05:53:45.395] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-09T05:53:45.398] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-09T05:53:45.400] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-09T19:51:10.876] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-09T19:51:10.884] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-09T19:51:10.886] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-10T03:02:01.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-10 03:02:01 +[2025-04-10T06:01:00.171] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-10T06:01:00.175] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-10T06:01:00.177] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-10T10:37:48.534] [INFO] monitorLogs - MQTT client connected +[2025-04-10T19:50:45.405] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-10T19:50:45.414] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-10T19:50:45.416] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-11T00:29:21.749] [INFO] monitorLogs - MQTT client connected +[2025-04-11T03:02:02.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-11 03:02:02 +[2025-04-11T05:50:13.394] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-11T05:50:13.397] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-11T05:50:13.399] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-11T19:48:45.124] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-11T19:48:45.132] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-11T19:48:45.135] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-12T05:48:54.627] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-12T05:48:54.631] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-12T05:48:54.633] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-12T19:55:19.126] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-12T19:55:19.133] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-12T19:55:19.135] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-13T03:02:05.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-13 03:02:05 +[2025-04-13T05:43:54.665] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-13T05:43:54.668] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-13T05:43:54.669] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-13T19:49:35.967] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-13T19:49:35.974] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-13T19:49:35.977] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-14T03:02:06.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-14 03:02:06 +[2025-04-14T05:44:17.588] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-14T05:44:17.591] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-14T05:44:17.593] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-14T16:19:27.234] [INFO] monitorLogs - MQTT client connected +[2025-04-14T19:57:07.460] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-14T19:57:07.466] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-14T19:57:07.468] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-15T03:02:07.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-15 03:02:07 +[2025-04-15T05:57:12.737] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-15T05:57:12.741] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-15T05:57:12.744] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-15T11:19:31.123] [INFO] monitorLogs - MQTT client connected +[2025-04-15T14:15:29.621] [INFO] monitorLogs - MQTT client connected +[2025-04-15T19:56:44.571] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-15T19:56:44.575] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-15T19:56:44.577] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-16T03:02:08.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-16 03:02:08 +[2025-04-16T05:38:08.481] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-16T05:38:08.483] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-16T05:38:08.486] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-16T20:00:15.671] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-16T20:00:15.679] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-16T20:00:15.681] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-17T03:02:09.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-17 03:02:09 +[2025-04-17T05:38:59.299] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-17T05:38:59.302] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-17T05:38:59.304] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-17T19:53:37.583] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-17T19:53:37.589] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-17T19:53:37.591] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-18T03:02:10.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-18 03:02:10 +[2025-04-18T05:50:00.533] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-18T05:50:00.536] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-18T05:50:00.538] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-18T19:47:47.542] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-18T19:47:47.550] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-18T19:47:47.552] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-19T03:02:11.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-19 03:02:11 +[2025-04-19T05:34:17.177] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-19T05:34:17.179] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-19T05:34:17.181] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-19T20:05:52.749] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-19T20:05:52.751] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-19T20:05:52.753] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-20T03:02:18.582] [INFO] monitorLogs - setCorrectPlcTimeOnceADay - function error SyntaxError: Unexpected token < in JSON at position 0 + at JSON.parse () + at /home/unipi/flowserver/flow/cmd_manager.js:2413:28 + at Object.exec_callback [as callback] (/home/unipi/flowserver/node_modules/total.js/builders.js:5803:3) + at IncomingMessage.request_process_end (/home/unipi/flowserver/node_modules/total.js/utils.js:1184:11) + at IncomingMessage.emit (events.js:412:35) + at endReadableNT (internal/streams/readable.js:1334:12) + at processTicksAndRejections (internal/process/task_queues.js:82:21) 503: Service Unavailable
503
Service Unavailable
+[2025-04-20T05:30:16.003] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-20T05:30:16.006] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-20T05:30:16.009] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-20T20:06:23.561] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-20T20:06:23.568] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-20T20:06:23.570] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-21T03:02:14.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-21 03:02:14 +[2025-04-21T05:30:55.669] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-21T05:30:55.673] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-21T05:30:55.675] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-21T20:09:44.028] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-21T20:09:44.035] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-21T20:09:44.038] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-22T03:02:15.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-22 03:02:15 +[2025-04-22T05:29:04.620] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-22T05:29:04.624] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-22T05:29:04.627] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-22T20:10:41.631] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-22T20:10:41.639] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-22T20:10:41.641] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-23T03:02:16.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-23 03:02:16 +[2025-04-23T05:31:38.881] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-23T05:31:38.885] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-23T05:31:38.887] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-23T11:55:39.590] [INFO] monitorLogs - MQTT client connected +[2025-04-23T20:09:27.628] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-23T20:09:27.632] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-23T20:09:27.634] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-24T03:02:17.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-24 03:02:17 +[2025-04-24T05:28:34.641] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-24T05:28:34.643] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-24T05:28:34.645] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-24T17:05:27.630] [INFO] monitorLogs - MQTT client connected +[2025-04-24T17:06:40.707] [INFO] monitorLogs - MQTT client connected +[2025-04-24T17:07:19.183] [INFO] monitorLogs - MQTT client connected +[2025-04-24T18:03:11.711] [INFO] monitorLogs - MQTT client connected +[2025-04-24T20:08:19.243] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-24T20:08:19.247] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-24T20:08:19.249] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-25T03:02:18.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-25 03:02:18 +[2025-04-25T05:37:24.191] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-25T05:37:24.194] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-25T05:37:24.196] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-25T10:31:50.888] [INFO] monitorLogs - MQTT client connected +[2025-04-25T12:15:18.281] [INFO] monitorLogs - MQTT client connected +[2025-04-25T20:11:40.302] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-25T20:11:40.307] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-25T20:11:40.309] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-26T03:02:19.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-26 03:02:19 +[2025-04-26T05:25:23.484] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-26T05:25:23.486] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-26T05:25:23.489] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-26T20:17:42.248] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-26T20:17:42.251] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-26T20:17:42.253] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-27T03:02:20.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-27 03:02:20 +[2025-04-27T05:18:21.223] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-27T05:18:21.225] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-27T05:18:21.227] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-27T20:19:51.785] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-27T20:19:51.789] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-27T20:19:51.790] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-28T03:02:21.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-28 03:02:21 +[2025-04-28T05:16:42.760] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-28T05:16:42.763] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-28T05:16:42.765] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-28T20:19:56.090] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-28T20:19:56.098] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-28T20:19:56.100] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-29T03:02:23.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-29 03:02:23 +[2025-04-29T05:14:55.736] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-29T05:14:55.739] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-29T05:14:55.741] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-29T06:46:22.547] [INFO] monitorLogs - MQTT client connected +[2025-04-29T06:53:15.787] [INFO] monitorLogs - MQTT client connected +[2025-04-29T06:54:53.183] [INFO] monitorLogs - MQTT client connected +[2025-04-29T06:56:16.503] [INFO] monitorLogs - MQTT client connected +[2025-04-29T07:48:12.417] [INFO] monitorLogs - MQTT client connected +[2025-04-29T07:49:21.794] [INFO] monitorLogs - MQTT client connected +[2025-04-29T07:51:58.675] [INFO] monitorLogs - MQTT client connected +[2025-04-29T07:53:07.773] [INFO] monitorLogs - MQTT client connected +[2025-04-29T07:54:11.811] [INFO] monitorLogs - MQTT client connected +[2025-04-29T09:11:45.442] [INFO] monitorLogs - MQTT client connected +[2025-04-29T09:12:08.744] [INFO] monitorLogs - MQTT client connected +[2025-04-29T20:21:23.390] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-29T20:21:23.394] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-29T20:21:23.397] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-04-29T22:22:32.226] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-04-29T22:22:37.584] [INFO] monitorLogs - buildTasks - params undefined +[2025-04-29T22:22:37.590] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-04-29T22:22:37.592] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-04-29T22:22:37.592] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-04-29T22:22:37.597] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-04-29T22:22:37.599] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-04-30T04:05:00.598Z +[2025-04-29T22:22:37.600] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-04-30T18:33:00.600Z +[2025-04-29T22:22:37.601] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:5', name: 'luxOff' }, + { value: 1, start_time: '20:33', name: 'luxOn' } +] +[2025-04-29T22:22:37.602] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-04-29T22:22:37.603] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-04-29T22:22:37.604] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-04-29T22:22:37.607] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-04-29T22:22:37.607] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-04-30T04:05:00.607Z +[2025-04-29T22:22:37.608] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-04-30T18:33:00.608Z +[2025-04-29T22:22:37.609] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:5', name: 'luxOff' }, + { value: 1, start_time: '20:33', name: 'luxOn' } +] +[2025-04-29T22:22:37.610] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-04-29T22:22:37.611] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-04-29T22:22:37.612] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-04-29T22:22:37.614] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-04-29T22:22:37.615] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-04-30T04:05:00.615Z +[2025-04-29T22:22:37.616] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-04-30T18:33:00.615Z +[2025-04-29T22:22:37.616] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:5', name: 'luxOff' }, + { value: 1, start_time: '20:33', name: 'luxOn' } +] +[2025-04-29T22:22:37.618] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-04-29T22:22:37.633] [INFO] monitorLogs - tasks created: 1778 +[2025-04-29T22:22:37.636] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-28 +[2025-04-29T22:22:37.771] [INFO] monitorLogs - MQTT client connected +[2025-04-29T22:22:37.950] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-04-29T22:22:38.257] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-04-29T22:22:38.562] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-04-30T03:22:39.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-30 03:22:39 +[2025-04-30T05:16:09.625] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-04-30T05:16:09.628] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-04-30T05:16:09.630] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-04-30T17:04:25.127] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-04-30T17:04:30.491] [INFO] monitorLogs - buildTasks - params undefined +[2025-04-30T17:04:30.496] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-04-30T17:04:30.497] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-04-30T17:04:30.498] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-04-30T17:04:30.502] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-04-30T17:04:30.504] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-01T04:03:00.503Z +[2025-04-30T17:04:30.505] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-04-30T18:34:00.505Z +[2025-04-30T17:04:30.506] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:3', name: 'luxOff' }, + { value: 1, start_time: '20:34', name: 'luxOn' } +] +[2025-04-30T17:04:30.507] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-04-30T17:04:30.508] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-04-30T17:04:30.509] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-04-30T17:04:30.511] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-04-30T17:04:30.512] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-01T04:03:00.512Z +[2025-04-30T17:04:30.513] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-04-30T18:34:00.513Z +[2025-04-30T17:04:30.513] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:3', name: 'luxOff' }, + { value: 1, start_time: '20:34', name: 'luxOn' } +] +[2025-04-30T17:04:30.514] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-04-30T17:04:30.515] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-04-30T17:04:30.516] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-04-30T17:04:30.518] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-04-30T17:04:30.519] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-01T04:03:00.518Z +[2025-04-30T17:04:30.519] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-04-30T18:34:00.519Z +[2025-04-30T17:04:30.520] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:3', name: 'luxOff' }, + { value: 1, start_time: '20:34', name: 'luxOn' } +] +[2025-04-30T17:04:30.521] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-04-30T17:04:30.547] [INFO] monitorLogs - tasks created: 1778 +[2025-04-30T17:04:30.550] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-04-30T17:04:30.666] [INFO] monitorLogs - MQTT client connected +[2025-04-30T17:04:30.865] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-04-30T17:04:31.170] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-04-30T17:04:31.475] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-04-30T20:22:38.875] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-04-30T20:22:38.879] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-04-30T20:22:38.881] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-01T03:04:32.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-01 03:04:32 +[2025-05-01T05:11:52.096] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-01T05:11:52.100] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-01T05:11:52.101] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-01T20:24:27.372] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-01T20:24:27.378] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-01T20:24:27.381] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-02T03:04:33.016] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-02 03:04:33 +[2025-05-02T05:10:11.006] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-02T05:10:11.009] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-02T05:10:11.011] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-02T20:24:50.647] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-02T20:24:50.654] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-02T20:24:50.656] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-03T03:04:34.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-03 03:04:34 +[2025-05-03T05:09:08.847] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-03T05:09:08.850] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-03T05:09:08.852] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-03T20:17:17.058] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-03T20:17:17.064] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-03T20:17:17.067] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-04T03:04:35.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-04 03:04:35 +[2025-05-04T05:16:36.743] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-04T05:16:36.745] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-04T05:16:36.747] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-04T20:25:54.298] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-04T20:25:54.305] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-04T20:25:54.308] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-05T03:04:36.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-05 03:04:36 +[2025-05-05T05:15:25.849] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-05T05:15:25.852] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-05T05:15:25.854] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-05T06:40:19.085] [INFO] monitorLogs - MQTT client connected +[2025-05-05T20:12:40.479] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-05T20:12:40.486] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-05T20:12:40.488] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-06T03:04:38.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-06 03:04:38 +[2025-05-06T05:10:26.815] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-06T05:10:26.817] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-06T05:10:26.819] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-06T20:26:50.844] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-06T20:26:50.847] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-06T20:26:50.849] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-07T03:04:39.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-07 03:04:39 +[2025-05-07T05:09:54.829] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-07T05:09:54.832] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-07T05:09:54.834] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-07T11:58:18.980] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-05-07T11:58:24.336] [INFO] monitorLogs - buildTasks - params undefined +[2025-05-07T11:58:24.340] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-05-07T11:58:24.342] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-05-07T11:58:24.343] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-07T11:58:24.347] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-07T11:58:24.348] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-08T03:52:00.347Z +[2025-05-07T11:58:24.350] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-07T18:44:00.349Z +[2025-05-07T11:58:24.350] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:52', name: 'luxOff' }, + { value: 1, start_time: '20:44', name: 'luxOn' } +] +[2025-05-07T11:58:24.351] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-05-07T11:58:24.352] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-05-07T11:58:24.353] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-07T11:58:24.355] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-07T11:58:24.356] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-08T03:52:00.356Z +[2025-05-07T11:58:24.357] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-07T18:44:00.356Z +[2025-05-07T11:58:24.357] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:52', name: 'luxOff' }, + { value: 1, start_time: '20:44', name: 'luxOn' } +] +[2025-05-07T11:58:24.358] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-05-07T11:58:24.359] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-05-07T11:58:24.359] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-07T11:58:24.362] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-07T11:58:24.362] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-08T03:52:00.362Z +[2025-05-07T11:58:24.363] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-07T18:44:00.363Z +[2025-05-07T11:58:24.363] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:52', name: 'luxOff' }, + { value: 1, start_time: '20:44', name: 'luxOn' } +] +[2025-05-07T11:58:24.364] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-05-07T11:58:24.393] [INFO] monitorLogs - tasks created: 1778 +[2025-05-07T11:58:24.396] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-05-07T11:58:24.497] [INFO] monitorLogs - MQTT client connected +[2025-05-07T11:58:24.710] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-05-07T11:58:25.015] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-05-07T11:58:25.322] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-05-07T12:53:22.743] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-05-07T12:53:28.092] [INFO] monitorLogs - buildTasks - params undefined +[2025-05-07T12:53:28.097] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-05-07T12:53:28.099] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-05-07T12:53:28.099] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-07T12:53:28.103] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-07T12:53:28.105] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-08T03:52:00.104Z +[2025-05-07T12:53:28.107] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-07T18:44:00.106Z +[2025-05-07T12:53:28.107] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:52', name: 'luxOff' }, + { value: 1, start_time: '20:44', name: 'luxOn' } +] +[2025-05-07T12:53:28.109] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-05-07T12:53:28.110] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-05-07T12:53:28.110] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-07T12:53:28.113] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-07T12:53:28.113] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-08T03:52:00.113Z +[2025-05-07T12:53:28.114] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-07T18:44:00.114Z +[2025-05-07T12:53:28.115] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:52', name: 'luxOff' }, + { value: 1, start_time: '20:44', name: 'luxOn' } +] +[2025-05-07T12:53:28.116] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-05-07T12:53:28.117] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-05-07T12:53:28.117] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-07T12:53:28.119] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-07T12:53:28.120] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-08T03:52:00.120Z +[2025-05-07T12:53:28.121] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-07T18:44:00.121Z +[2025-05-07T12:53:28.122] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:52', name: 'luxOff' }, + { value: 1, start_time: '20:44', name: 'luxOn' } +] +[2025-05-07T12:53:28.123] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-05-07T12:53:28.149] [INFO] monitorLogs - tasks created: 1778 +[2025-05-07T12:53:28.151] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-05-07T12:53:28.286] [INFO] monitorLogs - MQTT client connected +[2025-05-07T12:53:28.468] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-05-07T12:53:28.774] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-05-07T12:53:29.079] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-05-07T13:28:34.797] [INFO] monitorLogs - MQTT client connected +[2025-05-07T13:28:56.326] [INFO] monitorLogs - MQTT client connected +[2025-05-07T20:26:02.918] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-07T20:26:02.926] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-07T20:26:02.929] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-08T03:53:29.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-08 03:53:29 +[2025-05-08T05:10:22.731] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-08T05:10:22.733] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-08T05:10:22.736] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-08T20:33:04.462] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-08T20:33:04.471] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-08T20:33:04.473] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-09T03:53:30.075] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-09 03:53:30 +[2025-05-09T04:58:49.632] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-09T04:58:49.635] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-09T04:58:49.637] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-09T20:37:18.184] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-09T20:37:18.193] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-09T20:37:18.195] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-10T03:53:31.017] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-10 03:53:31 +[2025-05-10T04:56:27.936] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-10T04:56:27.939] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-10T04:56:27.941] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-10T20:34:39.638] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-10T20:34:39.646] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-10T20:34:39.649] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-11T03:53:33.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-11 03:53:33 +[2025-05-11T05:00:25.425] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-11T05:00:25.428] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-11T05:00:25.431] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-11T20:39:44.416] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-11T20:39:44.424] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-11T20:39:44.427] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-12T03:53:34.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-12 03:53:34 +[2025-05-12T04:54:35.482] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-12T04:54:35.484] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-12T04:54:35.487] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-12T09:50:56.691] [INFO] monitorLogs - MQTT client connected +[2025-05-12T09:51:58.129] [INFO] monitorLogs - MQTT client connected +[2025-05-12T10:52:27.381] [INFO] monitorLogs - MQTT client connected +[2025-05-12T20:41:41.197] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-12T20:41:41.205] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-12T20:41:41.208] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-13T03:53:35.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-13 03:53:35 +[2025-05-13T04:53:27.789] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-13T04:53:27.792] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-13T04:53:27.795] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-13T20:41:24.537] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-13T20:41:24.546] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-13T20:41:24.548] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-14T03:53:36.019] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-14 03:53:36 +[2025-05-14T04:52:37.976] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-14T04:52:37.978] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-14T04:52:37.980] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-14T07:44:39.494] [INFO] monitorLogs - MQTT client connected +[2025-05-14T08:32:11.183] [INFO] monitorLogs - MQTT client connected +[2025-05-14T09:41:29.565] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:08:29.602] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:46:15.864] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:47:22.623] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:48:04.342] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:48:23.951] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:52:48.828] [INFO] monitorLogs - MQTT client connected +[2025-05-14T10:55:08.575] [INFO] monitorLogs - MQTT client connected +[2025-05-14T20:40:38.069] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-14T20:40:38.077] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-14T20:40:38.080] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-15T03:53:37.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-15 03:53:37 +[2025-05-15T05:00:53.762] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-15T05:00:53.765] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-15T05:00:53.768] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-15T15:53:51.114] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-05-15T15:53:56.517] [INFO] monitorLogs - buildTasks - params undefined +[2025-05-15T15:53:56.521] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-05-15T15:53:56.523] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-05-15T15:53:56.523] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-15T15:53:56.528] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-15T15:53:56.529] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-16T03:41:00.528Z +[2025-05-15T15:53:56.530] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-15T18:56:00.530Z +[2025-05-15T15:53:56.531] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:41', name: 'luxOff' }, + { value: 1, start_time: '20:56', name: 'luxOn' } +] +[2025-05-15T15:53:56.532] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-05-15T15:53:56.533] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-05-15T15:53:56.534] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-15T15:53:56.536] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-15T15:53:56.537] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-16T03:41:00.537Z +[2025-05-15T15:53:56.538] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-15T18:56:00.538Z +[2025-05-15T15:53:56.538] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:41', name: 'luxOff' }, + { value: 1, start_time: '20:56', name: 'luxOn' } +] +[2025-05-15T15:53:56.539] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-05-15T15:53:56.540] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-05-15T15:53:56.541] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-15T15:53:56.543] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-15T15:53:56.544] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-16T03:41:00.544Z +[2025-05-15T15:53:56.545] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-15T18:56:00.544Z +[2025-05-15T15:53:56.545] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:41', name: 'luxOff' }, + { value: 1, start_time: '20:56', name: 'luxOn' } +] +[2025-05-15T15:53:56.546] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-05-15T15:53:56.555] [INFO] monitorLogs - tasks created: 1778 +[2025-05-15T15:53:56.558] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-05-15T15:53:56.644] [INFO] monitorLogs - MQTT client connected +[2025-05-15T15:53:56.872] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-05-15T15:53:57.177] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu +[2025-05-15T15:53:57.482] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu +[2025-05-15T20:36:39.883] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-15T20:36:39.886] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-15T20:36:39.889] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-16T03:53:58.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-16 03:53:58 +[2025-05-16T04:48:46.793] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-16T04:48:46.796] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-16T04:48:46.798] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-16T20:46:05.442] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-16T20:46:05.449] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-16T20:46:05.452] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-17T03:53:59.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-17 03:53:59 +[2025-05-17T04:57:42.164] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-17T04:57:42.167] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-17T04:57:42.169] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-17T20:44:43.240] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-17T20:44:43.243] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-17T20:44:43.245] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-18T03:54:00.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-18 03:54:00 +[2025-05-18T05:05:09.120] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-18T05:05:09.123] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-18T05:05:09.125] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-18T13:25:19.144] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-05-18T13:25:24.509] [INFO] monitorLogs - buildTasks - params undefined +[2025-05-18T13:25:24.513] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-05-18T13:25:24.514] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-05-18T13:25:24.515] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-18T13:25:24.519] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-18T13:25:24.521] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-19T03:37:00.520Z +[2025-05-18T13:25:24.522] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-18T19:00:00.522Z +[2025-05-18T13:25:24.523] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:37', name: 'luxOff' }, + { value: 1, start_time: '21:0', name: 'luxOn' } +] +[2025-05-18T13:25:24.524] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-05-18T13:25:24.525] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-05-18T13:25:24.525] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-18T13:25:24.528] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-18T13:25:24.529] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-19T03:37:00.528Z +[2025-05-18T13:25:24.529] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-18T19:00:00.529Z +[2025-05-18T13:25:24.530] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:37', name: 'luxOff' }, + { value: 1, start_time: '21:0', name: 'luxOn' } +] +[2025-05-18T13:25:24.531] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-05-18T13:25:24.532] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-05-18T13:25:24.532] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-18T13:25:24.535] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-18T13:25:24.535] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-19T03:37:00.535Z +[2025-05-18T13:25:24.536] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-18T19:00:00.536Z +[2025-05-18T13:25:24.537] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:37', name: 'luxOff' }, + { value: 1, start_time: '21:0', name: 'luxOn' } +] +[2025-05-18T13:25:24.538] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-05-18T13:25:24.563] [INFO] monitorLogs - tasks created: 1778 +[2025-05-18T13:25:24.565] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-05-18T13:25:29.579] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-05-18T20:43:51.557] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-18T20:43:51.565] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-18T20:43:51.568] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-19T03:25:25.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-19 03:25:25 +[2025-05-19T05:04:16.775] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-19T05:04:16.779] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-19T05:04:16.781] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-19T20:32:52.829] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-19T20:32:52.837] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-19T20:32:52.840] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-20T03:25:26.022] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-20 03:25:26 +[2025-05-20T04:55:02.542] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-20T04:55:02.545] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-20T04:55:02.547] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-20T20:50:39.287] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-20T20:50:39.290] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-20T20:50:39.292] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-21T03:25:27.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-21 03:25:27 +[2025-05-21T04:44:33.859] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-21T04:44:33.861] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-21T04:44:33.864] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-21T20:50:32.448] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-21T20:50:32.454] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-21T20:50:32.457] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-22T03:25:28.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-22 03:25:28 +[2025-05-22T04:46:38.151] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-22T04:46:38.153] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-22T04:46:38.156] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-22T20:44:22.363] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-22T20:44:22.365] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-22T20:44:22.367] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-23T03:25:30.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-23 03:25:30 +[2025-05-23T04:48:16.055] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-23T04:48:16.059] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-23T04:48:16.061] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-23T20:55:09.911] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-23T20:55:09.918] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-23T20:55:09.921] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-24T03:25:31.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-24 03:25:31 +[2025-05-24T04:41:07.749] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-24T04:41:07.751] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-24T04:41:07.754] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-24T20:55:57.526] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-24T20:55:57.529] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-24T20:55:57.532] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-25T03:25:32.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-25 03:25:32 +[2025-05-25T04:39:03.575] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-25T04:39:03.579] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-25T04:39:03.581] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-25T20:58:15.430] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-25T20:58:15.437] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-25T20:58:15.440] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-26T03:25:33.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-26 03:25:33 +[2025-05-26T04:49:52.322] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-26T04:49:52.324] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-26T04:49:52.327] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-26T20:58:00.177] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-26T20:58:00.185] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-26T20:58:00.187] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-27T03:25:34.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-27 03:25:34 +[2025-05-27T04:36:36.990] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-27T04:36:36.993] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-27T04:36:36.995] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-27T20:59:54.661] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-27T20:59:54.668] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-27T20:59:54.671] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-28T03:25:35.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-28 03:25:35 +[2025-05-28T04:35:10.052] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-28T04:35:10.055] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-28T04:35:10.057] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-28T20:58:37.111] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-28T20:58:37.119] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-28T20:58:37.122] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-29T03:25:37.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-29 03:25:37 +[2025-05-29T04:41:22.387] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-29T04:41:22.389] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-29T04:41:22.391] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-29T21:01:19.937] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-29T21:01:19.945] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-29T21:01:19.948] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-30T03:25:38.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-30 03:25:38 +[2025-05-30T04:34:59.014] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-30T04:34:59.017] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-30T04:34:59.019] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-30T16:04:38.115] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-05-30T16:04:43.484] [INFO] monitorLogs - buildTasks - params undefined +[2025-05-30T16:04:43.489] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-05-30T16:04:43.490] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-05-30T16:04:43.491] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-30T16:04:43.495] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-30T16:04:43.496] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-31T03:25:00.495Z +[2025-05-30T16:04:43.498] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-30T19:14:00.497Z +[2025-05-30T16:04:43.498] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:25', name: 'luxOff' }, + { value: 1, start_time: '21:14', name: 'luxOn' } +] +[2025-05-30T16:04:43.500] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-05-30T16:04:43.500] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-05-30T16:04:43.501] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-30T16:04:43.503] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-30T16:04:43.504] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-31T03:25:00.504Z +[2025-05-30T16:04:43.505] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-30T19:14:00.505Z +[2025-05-30T16:04:43.506] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:25', name: 'luxOff' }, + { value: 1, start_time: '21:14', name: 'luxOn' } +] +[2025-05-30T16:04:43.507] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-05-30T16:04:43.508] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-05-30T16:04:43.508] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-30T16:04:43.510] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-30T16:04:43.511] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-31T03:25:00.511Z +[2025-05-30T16:04:43.512] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-30T19:14:00.512Z +[2025-05-30T16:04:43.512] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:25', name: 'luxOff' }, + { value: 1, start_time: '21:14', name: 'luxOn' } +] +[2025-05-30T16:04:43.514] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-05-30T16:04:43.540] [INFO] monitorLogs - tasks created: 1778 +[2025-05-30T16:04:43.543] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-05-30T16:04:48.557] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-05-30T16:12:27.181] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-05-30T16:12:32.539] [INFO] monitorLogs - buildTasks - params undefined +[2025-05-30T16:12:32.544] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-05-30T16:12:32.545] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-05-30T16:12:32.545] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-30T16:12:32.550] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-30T16:12:32.551] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-31T03:25:00.550Z +[2025-05-30T16:12:32.553] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-30T19:14:00.552Z +[2025-05-30T16:12:32.553] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:25', name: 'luxOff' }, + { value: 1, start_time: '21:14', name: 'luxOn' } +] +[2025-05-30T16:12:32.555] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-05-30T16:12:32.555] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-05-30T16:12:32.556] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-30T16:12:32.558] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-30T16:12:32.559] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-31T03:25:00.559Z +[2025-05-30T16:12:32.560] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-30T19:14:00.560Z +[2025-05-30T16:12:32.561] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:25', name: 'luxOff' }, + { value: 1, start_time: '21:14', name: 'luxOn' } +] +[2025-05-30T16:12:32.562] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-05-30T16:12:32.562] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-05-30T16:12:32.563] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-05-30T16:12:32.565] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-05-30T16:12:32.566] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-31T03:25:00.566Z +[2025-05-30T16:12:32.568] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-30T19:14:00.567Z +[2025-05-30T16:12:32.569] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:25', name: 'luxOff' }, + { value: 1, start_time: '21:14', name: 'luxOn' } +] +[2025-05-30T16:12:32.570] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-05-30T16:12:32.596] [INFO] monitorLogs - tasks created: 1778 +[2025-05-30T16:12:32.598] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-05-30T16:12:37.613] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-05-30T21:04:55.003] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-30T21:04:55.011] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-30T21:04:55.014] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-05-31T03:12:34.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-31 03:12:34 +[2025-05-31T04:32:07.276] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-05-31T04:32:07.280] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-05-31T04:32:07.282] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-05-31T20:54:47.061] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-05-31T20:54:47.068] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-05-31T20:54:47.071] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-01T03:12:35.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-01 03:12:35 +[2025-06-01T04:36:01.145] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-01T04:36:01.149] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-01T04:36:01.151] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-01T20:59:08.074] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-01T20:59:08.081] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-01T20:59:08.084] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-02T03:12:36.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-02 03:12:36 +[2025-06-02T04:32:39.227] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-02T04:32:39.230] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-02T04:32:39.232] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-02T20:39:11.808] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-02T20:39:11.815] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-02T20:39:11.817] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-03T03:12:38.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-03 03:12:38 +[2025-06-03T04:41:57.994] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-03T04:41:57.997] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-03T04:41:57.999] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-03T21:04:21.764] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-03T21:04:21.772] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-03T21:04:21.774] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-04T03:12:39.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-04 03:12:39 +[2025-06-04T04:32:04.375] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-04T04:32:04.378] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-04T04:32:04.380] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-04T17:02:33.116] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-06-04T17:02:38.482] [INFO] monitorLogs - buildTasks - params undefined +[2025-06-04T17:02:38.486] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-06-04T17:02:38.487] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-06-04T17:02:38.488] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-04T17:02:38.492] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-04T17:02:38.493] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-06-05T03:22:00.493Z +[2025-06-04T17:02:38.495] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-06-04T19:19:00.495Z +[2025-06-04T17:02:38.496] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:22', name: 'luxOff' }, + { value: 1, start_time: '21:19', name: 'luxOn' } +] +[2025-06-04T17:02:38.497] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-06-04T17:02:38.498] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-06-04T17:02:38.498] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-04T17:02:38.501] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-04T17:02:38.501] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-06-05T03:22:00.501Z +[2025-06-04T17:02:38.502] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-06-04T19:19:00.502Z +[2025-06-04T17:02:38.503] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:22', name: 'luxOff' }, + { value: 1, start_time: '21:19', name: 'luxOn' } +] +[2025-06-04T17:02:38.504] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-06-04T17:02:38.505] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-06-04T17:02:38.505] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-04T17:02:38.507] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-04T17:02:38.508] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-06-05T03:22:00.508Z +[2025-06-04T17:02:38.509] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-06-04T19:19:00.509Z +[2025-06-04T17:02:38.510] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:22', name: 'luxOff' }, + { value: 1, start_time: '21:19', name: 'luxOn' } +] +[2025-06-04T17:02:38.511] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-06-04T17:02:38.537] [INFO] monitorLogs - tasks created: 1778 +[2025-06-04T17:02:38.540] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-06-04T17:02:43.555] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-06-04T21:06:23.959] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-04T21:06:23.966] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-04T21:06:23.969] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-05T03:02:40.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-05 03:02:40 +[2025-06-05T04:31:11.597] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-05T04:31:11.600] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-05T04:31:11.602] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-05T21:04:51.648] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-05T21:04:51.656] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-05T21:04:51.658] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-06T03:02:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-06 03:02:42 +[2025-06-06T04:31:21.975] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-06T04:31:21.977] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-06T04:31:21.980] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-06T21:07:18.796] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-06T21:07:18.804] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-06T21:07:18.806] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-07T03:02:43.070] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-07 03:02:43 +[2025-06-07T04:33:30.818] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-07T04:33:30.821] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-07T04:33:30.824] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-07T20:53:01.052] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-07T20:53:01.060] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-07T20:53:01.063] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-08T03:02:44.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-08 03:02:44 +[2025-06-08T04:28:53.896] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-08T04:28:53.898] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-08T04:28:53.900] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-08T21:11:07.022] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-08T21:11:07.029] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-08T21:11:07.032] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-09T03:02:45.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-09 03:02:45 +[2025-06-09T04:28:04.814] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-09T04:28:04.817] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-09T04:28:04.819] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-09T21:11:01.018] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-09T21:11:01.020] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-09T21:11:01.022] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-10T03:02:47.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-10 03:02:47 +[2025-06-10T04:30:44.303] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-10T04:30:44.306] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-10T04:30:44.307] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-10T21:09:35.042] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-10T21:09:35.050] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-10T21:09:35.052] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-11T03:02:48.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-11 03:02:48 +[2025-06-11T04:31:01.939] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-11T04:31:01.942] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-11T04:31:01.944] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-11T21:12:52.675] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-11T21:12:52.678] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-11T21:12:52.680] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-12T03:02:49.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-12 03:02:49 +[2025-06-12T04:26:50.328] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-12T04:26:50.330] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-12T04:26:50.334] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-12T21:14:29.506] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-12T21:14:29.514] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-12T21:14:29.516] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-13T03:02:50.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-13 03:02:50 +[2025-06-13T04:27:58.208] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-13T04:27:58.211] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-13T04:27:58.213] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-13T15:04:47.192] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-06-13T15:04:52.557] [INFO] monitorLogs - buildTasks - params undefined +[2025-06-13T15:04:52.561] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-06-13T15:04:52.562] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-06-13T15:04:52.563] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-13T15:04:52.567] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-13T15:04:52.568] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-06-14T03:19:00.568Z +[2025-06-13T15:04:52.570] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-06-13T19:25:00.570Z +[2025-06-13T15:04:52.571] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:25', name: 'luxOn' } +] +[2025-06-13T15:04:52.572] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-06-13T15:04:52.573] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-06-13T15:04:52.573] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-13T15:04:52.576] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-13T15:04:52.576] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-06-14T03:19:00.576Z +[2025-06-13T15:04:52.577] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-06-13T19:25:00.577Z +[2025-06-13T15:04:52.578] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:25', name: 'luxOn' } +] +[2025-06-13T15:04:52.579] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-06-13T15:04:52.580] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-06-13T15:04:52.580] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-13T15:04:52.582] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-13T15:04:52.583] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-06-14T03:19:00.583Z +[2025-06-13T15:04:52.584] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-06-13T19:25:00.584Z +[2025-06-13T15:04:52.584] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:25', name: 'luxOn' } +] +[2025-06-13T15:04:52.585] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-06-13T15:04:52.612] [INFO] monitorLogs - tasks created: 1778 +[2025-06-13T15:04:52.614] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-06-13T15:04:57.630] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-06-13T21:14:23.641] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-13T21:14:23.649] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-13T21:14:23.652] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-14T03:04:54.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-14 03:04:54 +[2025-06-14T04:26:20.346] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-14T04:26:20.349] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-14T04:26:20.351] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-14T21:15:41.402] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-14T21:15:41.409] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-14T21:15:41.411] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-15T03:04:55.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-15 03:04:55 +[2025-06-15T04:27:47.150] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-15T04:27:47.153] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-15T04:27:47.155] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-15T21:15:06.005] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-15T21:15:06.011] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-15T21:15:06.014] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-16T03:04:57.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-16 03:04:57 +[2025-06-16T04:25:45.748] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-16T04:25:45.751] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-16T04:25:45.753] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-16T20:52:06.910] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-16T20:52:06.918] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-16T20:52:06.920] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-17T03:04:58.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-17 03:04:58 +[2025-06-17T04:33:53.485] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-17T04:33:53.488] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-17T04:33:53.490] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-17T21:15:57.201] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-17T21:15:57.207] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-17T21:15:57.210] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-18T03:04:59.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-18 03:04:59 +[2025-06-18T04:27:28.269] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-18T04:27:28.271] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-18T04:27:28.274] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-18T21:16:34.965] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-18T21:16:34.973] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-18T21:16:34.975] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-19T03:05:00.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-19 03:05:00 +[2025-06-19T04:28:36.990] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-19T04:28:36.993] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-19T04:28:36.995] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-19T10:59:19.954] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform +[2025-06-19T10:59:27.938] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false command received from platform +[2025-06-19T10:59:35.306] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false command received from platform +[2025-06-19T21:19:33.062] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-19T21:19:33.065] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-19T21:19:33.067] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-20T03:05:02.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-20 03:05:02 +[2025-06-20T04:26:59.508] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-20T04:26:59.510] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-20T04:26:59.513] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-20T14:36:27.082] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-06-20T14:36:32.455] [INFO] monitorLogs - buildTasks - params undefined +[2025-06-20T14:36:32.459] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-06-20T14:36:32.460] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-06-20T14:36:32.461] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-20T14:36:32.465] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-20T14:36:32.466] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-06-21T03:19:00.466Z +[2025-06-20T14:36:32.468] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-06-20T19:28:00.468Z +[2025-06-20T14:36:32.468] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-06-20T14:36:32.470] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-06-20T14:36:32.471] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-06-20T14:36:32.471] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-20T14:36:32.474] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-20T14:36:32.474] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-06-21T03:19:00.474Z +[2025-06-20T14:36:32.475] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-06-20T19:28:00.475Z +[2025-06-20T14:36:32.476] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-06-20T14:36:32.477] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-06-20T14:36:32.478] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-06-20T14:36:32.478] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-20T14:36:32.480] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-20T14:36:32.481] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-06-21T03:19:00.481Z +[2025-06-20T14:36:32.482] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-06-20T19:28:00.482Z +[2025-06-20T14:36:32.482] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-06-20T14:36:32.483] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-06-20T14:36:32.509] [INFO] monitorLogs - tasks created: 1778 +[2025-06-20T14:36:32.512] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-06-20T14:36:37.525] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-06-20T14:44:05.105] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-06-20T14:44:10.466] [INFO] monitorLogs - buildTasks - params undefined +[2025-06-20T14:44:10.471] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-06-20T14:44:10.472] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-06-20T14:44:10.473] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-20T14:44:10.477] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-20T14:44:10.478] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-06-21T03:19:00.477Z +[2025-06-20T14:44:10.480] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-06-20T19:28:00.479Z +[2025-06-20T14:44:10.480] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-06-20T14:44:10.482] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-06-20T14:44:10.482] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-06-20T14:44:10.483] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-20T14:44:10.485] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-20T14:44:10.486] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-06-21T03:19:00.486Z +[2025-06-20T14:44:10.487] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-06-20T19:28:00.487Z +[2025-06-20T14:44:10.488] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-06-20T14:44:10.489] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-06-20T14:44:10.489] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-06-20T14:44:10.490] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-06-20T14:44:10.492] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-06-20T14:44:10.493] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-06-21T03:19:00.493Z +[2025-06-20T14:44:10.494] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-06-20T19:28:00.494Z +[2025-06-20T14:44:10.494] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:19', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-06-20T14:44:10.495] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-06-20T14:44:10.522] [INFO] monitorLogs - tasks created: 1778 +[2025-06-20T14:44:10.525] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-06-20T14:44:15.539] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-06-20T21:18:39.843] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-20T21:18:39.852] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-20T21:18:39.854] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-21T03:44:11.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-21 03:44:11 +[2025-06-21T04:29:04.628] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-21T04:29:04.631] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-21T04:29:04.633] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-21T21:16:58.431] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-21T21:16:58.439] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-21T21:16:58.441] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-22T03:44:12.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-22 03:44:12 +[2025-06-22T04:28:35.090] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-22T04:28:35.092] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-22T04:28:35.095] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-22T21:18:11.294] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-22T21:18:11.302] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-22T21:18:11.305] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-23T03:44:14.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-23 03:44:14 +[2025-06-23T04:28:47.590] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-23T04:28:47.592] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-23T04:28:47.594] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-23T21:06:58.604] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-23T21:06:58.612] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-23T21:06:58.614] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-24T03:44:15.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-24 03:44:15 +[2025-06-24T04:29:26.531] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-24T04:29:26.534] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-24T04:29:26.537] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-24T21:16:51.296] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-24T21:16:51.304] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-24T21:16:51.306] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-25T03:44:16.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-25 03:44:16 +[2025-06-25T04:29:07.218] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-25T04:29:07.221] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-25T04:29:07.223] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-25T21:19:24.152] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-25T21:19:24.160] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-25T21:19:24.162] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-26T03:44:18.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-26 03:44:18 +[2025-06-26T04:30:37.302] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-26T04:30:37.304] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-26T04:30:37.307] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-26T20:43:40.217] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-26T20:43:40.224] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-26T20:43:40.227] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-27T03:44:19.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-27 03:44:19 +[2025-06-27T04:34:16.464] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-27T04:34:16.467] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-27T04:34:16.469] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-27T21:10:45.071] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-27T21:10:45.079] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-27T21:10:45.081] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-28T03:44:21.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-28 03:44:21 +[2025-06-28T04:41:19.779] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-28T04:41:19.781] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-28T04:41:19.783] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-28T21:19:09.482] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-28T21:19:09.490] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-28T21:19:09.492] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-29T03:44:22.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-29 03:44:22 +[2025-06-29T04:30:00.433] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-29T04:30:00.435] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-29T04:30:00.437] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-29T21:17:35.001] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-29T21:17:35.009] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-29T21:17:35.012] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-06-30T03:44:23.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-30 03:44:23 +[2025-06-30T04:31:29.727] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-06-30T04:31:29.730] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-06-30T04:31:29.732] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-06-30T21:19:28.808] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-06-30T21:19:28.814] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-06-30T21:19:28.816] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-01T03:44:25.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-01 03:44:25 +[2025-07-01T04:29:31.812] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-01T04:29:31.815] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-01T04:29:31.817] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-01T21:20:32.873] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-01T21:20:32.881] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-01T21:20:32.883] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-02T03:44:26.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-02 03:44:26 +[2025-07-02T04:29:31.383] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-02T04:29:31.385] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-02T04:29:31.387] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-02T07:28:57.798] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform +[2025-07-02T07:29:17.991] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform +[2025-07-02T07:35:48.027] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform +[2025-07-02T07:36:49.913] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform +[2025-07-02T07:39:23.064] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform +[2025-07-02T07:39:35.061] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform +[2025-07-02T15:03:55.086] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform +[2025-07-02T21:00:02.146] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-02T21:00:07.516] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-02T21:00:07.521] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-02T21:00:07.522] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-02T21:00:07.522] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-02T21:00:07.527] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-02T21:00:07.528] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-03T03:23:00.527Z +[2025-07-02T21:00:07.529] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-02T19:28:00.529Z +[2025-07-02T21:00:07.530] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:23', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-07-02T21:00:07.531] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-02T21:00:07.532] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-02T21:00:07.533] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-02T21:00:07.535] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-02T21:00:07.536] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-03T03:23:00.536Z +[2025-07-02T21:00:07.537] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-02T19:28:00.537Z +[2025-07-02T21:00:07.538] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:23', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-07-02T21:00:07.539] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-02T21:00:07.539] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-02T21:00:07.540] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-02T21:00:07.542] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-02T21:00:07.543] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-03T03:23:00.543Z +[2025-07-02T21:00:07.544] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-02T19:28:00.543Z +[2025-07-02T21:00:07.544] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:23', name: 'luxOff' }, + { value: 1, start_time: '21:28', name: 'luxOn' } +] +[2025-07-02T21:00:07.545] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-02T21:00:07.571] [INFO] monitorLogs - tasks created: 1778 +[2025-07-02T21:00:07.574] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-07-02T21:00:12.589] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-02T21:18:29.561] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-02T21:18:29.564] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-02T21:18:29.567] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-03T03:00:09.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-03 03:00:09 +[2025-07-03T04:32:36.686] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-03T04:32:36.690] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-03T04:32:36.692] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-03T09:04:36.456] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-03T09:04:41.816] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-03T09:04:41.821] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-03T09:04:41.822] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-03T09:04:41.823] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-03T09:04:41.827] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-03T09:04:41.828] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-04T03:24:00.828Z +[2025-07-03T09:04:41.830] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-03T19:27:00.830Z +[2025-07-03T09:04:41.831] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:24', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-03T09:04:41.832] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-03T09:04:41.833] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-03T09:04:41.833] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-03T09:04:41.836] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-03T09:04:41.836] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-04T03:24:00.836Z +[2025-07-03T09:04:41.837] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-03T19:27:00.837Z +[2025-07-03T09:04:41.838] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:24', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-03T09:04:41.839] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-03T09:04:41.840] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-03T09:04:41.840] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-03T09:04:41.842] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-03T09:04:41.843] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-04T03:24:00.843Z +[2025-07-03T09:04:41.844] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-03T19:27:00.844Z +[2025-07-03T09:04:41.844] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:24', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-03T09:04:41.846] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-03T09:04:41.873] [INFO] monitorLogs - tasks created: 1778 +[2025-07-03T09:04:41.875] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-07-03T09:04:46.890] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-03T21:09:15.892] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-03T21:09:15.901] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-03T21:09:15.903] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-04T03:04:43.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-04 03:04:43 +[2025-07-04T04:47:21.475] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-04T04:47:21.479] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-04T04:47:21.482] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-04T21:16:19.103] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-04T21:16:19.111] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-04T21:16:19.113] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-05T03:04:44.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-05 03:04:44 +[2025-07-05T04:33:57.978] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-05T04:33:57.982] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-05T04:33:57.985] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-05T15:07:42.110] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-05T15:07:47.473] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-05T15:07:47.477] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-05T15:07:47.478] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-05T15:07:47.479] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T15:07:47.483] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T15:07:47.485] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-06T03:26:00.484Z +[2025-07-05T15:07:47.486] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-05T19:27:00.486Z +[2025-07-05T15:07:47.487] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T15:07:47.488] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-05T15:07:47.489] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-05T15:07:47.489] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T15:07:47.492] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T15:07:47.492] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-06T03:26:00.492Z +[2025-07-05T15:07:47.493] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-05T19:27:00.493Z +[2025-07-05T15:07:47.494] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T15:07:47.495] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-05T15:07:47.495] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-05T15:07:47.496] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T15:07:47.498] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T15:07:47.499] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-06T03:26:00.499Z +[2025-07-05T15:07:47.500] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-05T19:27:00.500Z +[2025-07-05T15:07:47.500] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T15:07:47.501] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-05T15:07:47.527] [INFO] monitorLogs - tasks created: 1778 +[2025-07-05T15:07:47.529] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-07-05T15:07:52.544] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-05T16:09:34.868] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-05T16:09:40.227] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-05T16:09:40.232] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-05T16:09:40.233] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-05T16:09:40.233] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:09:40.238] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:09:40.239] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-06T03:26:00.238Z +[2025-07-05T16:09:40.240] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-05T19:27:00.240Z +[2025-07-05T16:09:40.241] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:09:40.242] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-05T16:09:40.243] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-05T16:09:40.244] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:09:40.246] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:09:40.247] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-06T03:26:00.247Z +[2025-07-05T16:09:40.248] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-05T19:27:00.247Z +[2025-07-05T16:09:40.248] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:09:40.249] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-05T16:09:40.250] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-05T16:09:40.250] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:09:40.252] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:09:40.253] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-06T03:26:00.253Z +[2025-07-05T16:09:40.254] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-05T19:27:00.254Z +[2025-07-05T16:09:40.254] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:09:40.255] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-05T16:09:40.281] [INFO] monitorLogs - tasks created: 1778 +[2025-07-05T16:09:40.283] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-07-05T16:09:45.298] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-05T16:17:32.291] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-05T16:17:37.650] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-05T16:17:37.654] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-05T16:17:37.655] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-05T16:17:37.656] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:17:37.660] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:17:37.661] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-06T03:26:00.661Z +[2025-07-05T16:17:37.663] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-05T19:27:00.663Z +[2025-07-05T16:17:37.664] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:17:37.665] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-05T16:17:37.665] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-05T16:17:37.666] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:17:37.668] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:17:37.669] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-06T03:26:00.669Z +[2025-07-05T16:17:37.670] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-05T19:27:00.670Z +[2025-07-05T16:17:37.670] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:17:37.672] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-05T16:17:37.672] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-05T16:17:37.673] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:17:37.675] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:17:37.676] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-06T03:26:00.676Z +[2025-07-05T16:17:37.676] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-05T19:27:00.676Z +[2025-07-05T16:17:37.677] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:17:37.678] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-05T16:17:37.703] [INFO] monitorLogs - tasks created: 1778 +[2025-07-05T16:17:37.706] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-07-05T16:17:42.721] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-05T16:19:23.028] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-05T16:19:28.388] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-05T16:19:28.393] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-05T16:19:28.394] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-05T16:19:28.394] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:19:28.399] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:19:28.400] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-06T03:26:00.399Z +[2025-07-05T16:19:28.401] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-05T19:27:00.401Z +[2025-07-05T16:19:28.402] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:19:28.403] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-05T16:19:28.404] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-05T16:19:28.405] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:19:28.407] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:19:28.408] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-06T03:26:00.408Z +[2025-07-05T16:19:28.409] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-05T19:27:00.409Z +[2025-07-05T16:19:28.409] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:19:28.410] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-05T16:19:28.411] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-05T16:19:28.412] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-05T16:19:28.414] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-05T16:19:28.415] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-06T03:26:00.415Z +[2025-07-05T16:19:28.416] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-05T19:27:00.416Z +[2025-07-05T16:19:28.417] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:26', name: 'luxOff' }, + { value: 1, start_time: '21:27', name: 'luxOn' } +] +[2025-07-05T16:19:28.418] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-05T16:19:28.445] [INFO] monitorLogs - tasks created: 1778 +[2025-07-05T16:19:28.448] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-04-24 +[2025-07-05T16:19:33.463] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-05T21:14:29.961] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-05T21:14:29.970] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-05T21:14:29.972] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-06T03:19:30.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-06 03:19:30 +[2025-07-06T04:36:25.737] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-06T04:36:25.741] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-06T04:36:25.748] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-06T20:32:32.651] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-06T20:32:32.658] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-06T20:32:32.663] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-06T22:24:29.192] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform +[2025-07-06T22:25:59.428] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform +[2025-07-07T03:19:32.037] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-07 03:19:32 +[2025-07-07T04:51:14.660] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-07T04:51:14.664] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-07T04:51:14.667] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-07T13:50:46.448] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-07T13:50:51.820] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-07T13:50:51.824] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-07T13:50:51.825] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-07T13:50:51.826] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-07T13:50:51.830] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-07T13:50:51.832] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-08T03:27:00.831Z +[2025-07-07T13:50:51.833] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-07T19:26:00.833Z +[2025-07-07T13:50:51.834] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:27', name: 'luxOff' }, + { value: 1, start_time: '21:26', name: 'luxOn' } +] +[2025-07-07T13:50:51.835] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-07T13:50:51.836] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-07T13:50:51.836] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-07T13:50:51.839] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-07T13:50:51.840] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-08T03:27:00.839Z +[2025-07-07T13:50:51.841] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-07T19:26:00.840Z +[2025-07-07T13:50:51.841] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:27', name: 'luxOff' }, + { value: 1, start_time: '21:26', name: 'luxOn' } +] +[2025-07-07T13:50:51.842] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-07T13:50:51.843] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-07T13:50:51.844] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-07T13:50:51.846] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-07T13:50:51.847] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-08T03:27:00.846Z +[2025-07-07T13:50:51.847] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-07T19:26:00.847Z +[2025-07-07T13:50:51.848] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:27', name: 'luxOff' }, + { value: 1, start_time: '21:26', name: 'luxOn' } +] +[2025-07-07T13:50:51.849] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-07T13:50:51.876] [INFO] monitorLogs - tasks created: 1778 +[2025-07-07T13:50:51.879] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-07-07T13:50:56.894] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-07T21:14:19.235] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-07T21:14:19.244] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-07T21:14:19.247] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-08T03:50:53.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-08 03:50:53 +[2025-07-08T04:53:20.122] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-08T04:53:20.124] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-08T04:53:20.127] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-08T20:52:31.425] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-08T20:52:31.432] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-08T20:52:31.434] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-09T03:50:54.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-09 03:50:54 +[2025-07-09T05:02:41.637] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-09T05:02:41.639] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-09T05:02:41.641] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-09T21:10:12.776] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-09T21:10:12.783] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-09T21:10:12.786] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-10T02:24:05.055] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-07-10T03:50:55.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-10 03:50:55 +[2025-07-10T04:40:43.968] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-10T04:40:43.970] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-10T04:40:43.972] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-10T16:12:11.178] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-10T16:12:16.534] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-10T16:12:16.539] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-10T16:12:16.540] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-10T16:12:16.541] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-10T16:12:16.545] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-10T16:12:16.546] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-11T03:30:00.545Z +[2025-07-10T16:12:16.548] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-10T19:24:00.547Z +[2025-07-10T16:12:16.548] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:30', name: 'luxOff' }, + { value: 1, start_time: '21:24', name: 'luxOn' } +] +[2025-07-10T16:12:16.550] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-10T16:12:16.550] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-10T16:12:16.551] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-10T16:12:16.553] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-10T16:12:16.554] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-11T03:30:00.554Z +[2025-07-10T16:12:16.555] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-10T19:24:00.555Z +[2025-07-10T16:12:16.556] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:30', name: 'luxOff' }, + { value: 1, start_time: '21:24', name: 'luxOn' } +] +[2025-07-10T16:12:16.557] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-10T16:12:16.557] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-10T16:12:16.558] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-10T16:12:16.560] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-10T16:12:16.561] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-11T03:30:00.561Z +[2025-07-10T16:12:16.562] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-10T19:24:00.561Z +[2025-07-10T16:12:16.562] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:30', name: 'luxOff' }, + { value: 1, start_time: '21:24', name: 'luxOn' } +] +[2025-07-10T16:12:16.563] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-10T16:12:16.589] [INFO] monitorLogs - tasks created: 1778 +[2025-07-10T16:12:16.592] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-07-10T16:12:21.605] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-10T21:08:56.917] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-10T21:08:56.925] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-10T21:08:56.928] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-11T03:12:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-11 03:12:18 +[2025-07-11T04:42:38.531] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-11T04:42:38.534] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-11T04:42:38.536] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-11T21:10:47.440] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-11T21:10:47.446] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-11T21:10:47.450] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-12T03:12:19.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-12 03:12:19 +[2025-07-12T04:44:36.485] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-12T04:44:36.488] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-12T04:44:36.490] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-12T21:06:20.299] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-12T21:06:20.306] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-12T21:06:20.308] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-13T03:12:20.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-13 03:12:20 +[2025-07-13T04:44:30.533] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-13T04:44:30.537] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-13T04:44:30.539] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-13T21:08:45.908] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-13T21:08:45.915] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-13T21:08:45.917] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-14T03:12:21.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-14 03:12:21 +[2025-07-14T04:43:38.886] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-14T04:43:38.889] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-14T04:43:38.891] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-14T21:06:39.560] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-14T21:06:39.566] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-14T21:06:39.569] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-15T03:12:23.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-15 03:12:23 +[2025-07-15T04:45:53.030] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-15T04:45:53.033] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-15T04:45:53.035] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-15T15:05:52.102] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-15T15:05:57.473] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-15T15:05:57.478] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-15T15:05:57.479] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-15T15:05:57.480] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-15T15:05:57.484] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-15T15:05:57.485] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-16T03:35:00.484Z +[2025-07-15T15:05:57.487] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-15T19:20:00.487Z +[2025-07-15T15:05:57.487] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:35', name: 'luxOff' }, + { value: 1, start_time: '21:20', name: 'luxOn' } +] +[2025-07-15T15:05:57.489] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-15T15:05:57.490] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-15T15:05:57.490] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-15T15:05:57.492] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-15T15:05:57.493] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-16T03:35:00.493Z +[2025-07-15T15:05:57.494] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-15T19:20:00.494Z +[2025-07-15T15:05:57.495] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:35', name: 'luxOff' }, + { value: 1, start_time: '21:20', name: 'luxOn' } +] +[2025-07-15T15:05:57.496] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-15T15:05:57.496] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-15T15:05:57.497] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-15T15:05:57.499] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-15T15:05:57.500] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-16T03:35:00.500Z +[2025-07-15T15:05:57.501] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-15T19:20:00.500Z +[2025-07-15T15:05:57.501] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:35', name: 'luxOff' }, + { value: 1, start_time: '21:20', name: 'luxOn' } +] +[2025-07-15T15:05:57.502] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-15T15:05:57.529] [INFO] monitorLogs - tasks created: 1778 +[2025-07-15T15:05:57.532] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-07-15T15:06:02.546] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-15T21:01:03.664] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-15T21:01:03.673] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-15T21:01:03.676] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-16T03:05:59.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-16 03:05:59 +[2025-07-16T04:46:39.821] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-16T04:46:39.824] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-16T04:46:39.826] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-16T11:25:26.087] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-16T11:25:31.454] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-16T11:25:31.458] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-16T11:25:31.459] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-16T11:25:31.460] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-16T11:25:31.464] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-16T11:25:31.465] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-17T03:36:00.464Z +[2025-07-16T11:25:31.467] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-16T19:19:00.467Z +[2025-07-16T11:25:31.468] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:36', name: 'luxOff' }, + { value: 1, start_time: '21:19', name: 'luxOn' } +] +[2025-07-16T11:25:31.469] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-16T11:25:31.470] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-16T11:25:31.470] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-16T11:25:31.473] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-16T11:25:31.473] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-17T03:36:00.473Z +[2025-07-16T11:25:31.474] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-16T19:19:00.474Z +[2025-07-16T11:25:31.475] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:36', name: 'luxOff' }, + { value: 1, start_time: '21:19', name: 'luxOn' } +] +[2025-07-16T11:25:31.476] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-16T11:25:31.477] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-16T11:25:31.477] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-16T11:25:31.479] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-16T11:25:31.480] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-17T03:36:00.480Z +[2025-07-16T11:25:31.481] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-16T19:19:00.481Z +[2025-07-16T11:25:31.481] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:36', name: 'luxOff' }, + { value: 1, start_time: '21:19', name: 'luxOn' } +] +[2025-07-16T11:25:31.482] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-16T11:25:31.509] [INFO] monitorLogs - tasks created: 1778 +[2025-07-16T11:25:31.512] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-07-16T11:25:36.527] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-16T20:56:58.863] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-16T20:56:58.872] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-16T20:56:58.875] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-17T03:25:33.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-17 03:25:33 +[2025-07-17T04:54:09.827] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-17T04:54:09.830] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-17T04:54:09.832] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-17T09:05:28.193] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-17T09:05:33.550] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-17T09:05:33.555] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-17T09:05:33.556] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-17T09:05:33.556] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-17T09:05:33.561] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-17T09:05:33.562] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-18T03:37:00.561Z +[2025-07-17T09:05:33.564] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-17T19:18:00.563Z +[2025-07-17T09:05:33.564] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:37', name: 'luxOff' }, + { value: 1, start_time: '21:18', name: 'luxOn' } +] +[2025-07-17T09:05:33.565] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-17T09:05:33.566] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-17T09:05:33.567] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-17T09:05:33.569] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-17T09:05:33.570] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-18T03:37:00.570Z +[2025-07-17T09:05:33.571] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-17T19:18:00.571Z +[2025-07-17T09:05:33.572] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:37', name: 'luxOff' }, + { value: 1, start_time: '21:18', name: 'luxOn' } +] +[2025-07-17T09:05:33.573] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-17T09:05:33.573] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-17T09:05:33.574] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-17T09:05:33.576] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-17T09:05:33.577] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-18T03:37:00.577Z +[2025-07-17T09:05:33.577] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-17T19:18:00.577Z +[2025-07-17T09:05:33.578] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:37', name: 'luxOff' }, + { value: 1, start_time: '21:18', name: 'luxOn' } +] +[2025-07-17T09:05:33.579] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-17T09:05:33.605] [INFO] monitorLogs - tasks created: 1778 +[2025-07-17T09:05:33.608] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-07-17T09:05:38.623] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-17T20:59:41.501] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-17T20:59:41.510] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-17T20:59:41.513] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-18T03:05:35.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-18 03:05:35 +[2025-07-18T05:04:44.432] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-18T05:04:44.436] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-18T05:04:44.439] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-18T21:04:47.461] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-18T21:04:47.470] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-18T21:04:47.472] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-19T03:05:36.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-19 03:05:36 +[2025-07-19T04:55:28.571] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-19T04:55:28.580] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-19T04:55:28.582] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-19T21:03:39.654] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-19T21:03:39.663] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-19T21:03:39.665] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-20T03:05:37.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-20 03:05:37 +[2025-07-20T04:51:05.295] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-20T04:51:05.304] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-20T04:51:05.306] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-20T21:02:06.453] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-20T21:02:06.462] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-20T21:02:06.464] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-21T03:05:39.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-21 03:05:39 +[2025-07-21T04:51:30.019] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-21T04:51:30.026] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-21T04:51:30.029] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-21T20:31:24.915] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-21T20:31:24.922] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-21T20:31:24.925] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-22T03:05:40.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-22 03:05:40 +[2025-07-22T04:52:25.823] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-22T04:52:25.833] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-22T04:52:25.835] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-22T21:02:11.593] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-22T21:02:11.602] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-22T21:02:11.604] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-23T03:05:41.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-23 03:05:41 +[2025-07-23T04:52:56.721] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-23T04:52:56.731] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-23T04:52:56.733] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-23T08:17:31.117] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-07-23T08:17:36.477] [INFO] monitorLogs - buildTasks - params undefined +[2025-07-23T08:17:36.482] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-07-23T08:17:36.483] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-07-23T08:17:36.484] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-23T08:17:36.488] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-23T08:17:36.489] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-24T03:44:00.488Z +[2025-07-23T08:17:36.491] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-23T19:12:00.490Z +[2025-07-23T08:17:36.491] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:44', name: 'luxOff' }, + { value: 1, start_time: '21:12', name: 'luxOn' } +] +[2025-07-23T08:17:36.493] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-07-23T08:17:36.493] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-07-23T08:17:36.494] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-23T08:17:36.496] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-23T08:17:36.497] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-24T03:44:00.497Z +[2025-07-23T08:17:36.498] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-23T19:12:00.498Z +[2025-07-23T08:17:36.499] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:44', name: 'luxOff' }, + { value: 1, start_time: '21:12', name: 'luxOn' } +] +[2025-07-23T08:17:36.500] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-07-23T08:17:36.500] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-07-23T08:17:36.501] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-07-23T08:17:36.503] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-07-23T08:17:36.504] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-24T03:44:00.504Z +[2025-07-23T08:17:36.505] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-23T19:12:00.504Z +[2025-07-23T08:17:36.505] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:44', name: 'luxOff' }, + { value: 1, start_time: '21:12', name: 'luxOn' } +] +[2025-07-23T08:17:36.506] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-07-23T08:17:36.532] [INFO] monitorLogs - tasks created: 1778 +[2025-07-23T08:17:36.535] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-07-23T08:17:41.550] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-07-23T21:00:26.588] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-23T21:00:26.597] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-23T21:00:26.600] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-24T03:17:38.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-24 03:17:38 +[2025-07-24T04:59:32.038] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-24T04:59:32.042] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-24T04:59:32.045] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-24T20:47:56.020] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-24T20:47:56.029] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-24T20:47:56.031] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-25T03:17:39.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-25 03:17:39 +[2025-07-25T05:01:28.221] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-25T05:01:28.230] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-25T05:01:28.232] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-25T20:47:35.356] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-25T20:47:35.364] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-25T20:47:35.366] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-26T03:17:41.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-26 03:17:41 +[2025-07-26T05:02:28.072] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-26T05:02:28.080] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-26T05:02:28.083] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-26T20:50:42.509] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-26T20:50:42.517] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-26T20:50:42.520] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-27T03:17:42.014] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-27 03:17:42 +[2025-07-27T05:03:52.922] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-27T05:03:52.926] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-27T05:03:52.928] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-27T20:40:08.386] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-27T20:40:08.395] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-27T20:40:08.397] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-28T03:17:43.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-28 03:17:43 +[2025-07-28T05:06:00.942] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-28T05:06:00.950] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-28T05:06:00.952] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-28T20:44:54.253] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-28T20:44:54.262] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-28T20:44:54.265] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-29T03:17:45.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-29 03:17:45 +[2025-07-29T05:05:15.586] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-29T05:05:15.594] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-29T05:05:15.596] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-29T12:19:39.074] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-07-29T20:48:16.834] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-29T20:48:16.842] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-29T20:48:16.844] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-30T03:17:46.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-30 03:17:46 +[2025-07-30T05:03:38.141] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-30T05:03:38.150] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-30T05:03:38.152] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-30T20:44:15.998] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-30T20:44:16.006] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-30T20:44:16.008] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-07-31T03:17:47.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-31 03:17:47 +[2025-07-31T05:05:24.539] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-07-31T05:05:24.546] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-07-31T05:05:24.549] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-07-31T20:46:53.052] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-07-31T20:46:53.065] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-07-31T20:46:53.068] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-01T03:17:48.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-01 03:17:48 +[2025-08-01T05:05:28.714] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-01T05:05:28.718] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-01T05:05:28.721] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-01T11:22:03.289] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-08-01T11:22:08.662] [INFO] monitorLogs - buildTasks - params undefined +[2025-08-01T11:22:08.666] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-08-01T11:22:08.667] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-08-01T11:22:08.668] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-01T11:22:08.672] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-01T11:22:08.673] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-02T03:55:00.673Z +[2025-08-01T11:22:08.675] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-01T19:01:00.674Z +[2025-08-01T11:22:08.675] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '5:55', name: 'luxOff' }, + { value: 1, start_time: '21:1', name: 'luxOn' } +] +[2025-08-01T11:22:08.677] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-08-01T11:22:08.677] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-08-01T11:22:08.678] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-01T11:22:08.680] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-01T11:22:08.681] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-02T03:55:00.681Z +[2025-08-01T11:22:08.682] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-01T19:01:00.682Z +[2025-08-01T11:22:08.683] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '5:55', name: 'luxOff' }, + { value: 1, start_time: '21:1', name: 'luxOn' } +] +[2025-08-01T11:22:08.684] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-08-01T11:22:08.684] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-08-01T11:22:08.685] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-01T11:22:08.687] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-01T11:22:08.688] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-02T03:55:00.688Z +[2025-08-01T11:22:08.688] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-01T19:01:00.688Z +[2025-08-01T11:22:08.689] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '5:55', name: 'luxOff' }, + { value: 1, start_time: '21:1', name: 'luxOn' } +] +[2025-08-01T11:22:08.690] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-08-01T11:22:08.716] [INFO] monitorLogs - tasks created: 1778 +[2025-08-01T11:22:08.719] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-08-01T11:22:13.734] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-08-01T20:34:28.212] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-01T20:34:28.221] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-01T20:34:28.223] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-02T03:22:10.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-02 03:22:10 +[2025-08-02T05:06:33.520] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-02T05:06:33.524] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-02T05:06:33.527] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-02T20:37:11.333] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-02T20:37:11.341] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-02T20:37:11.345] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-03T03:22:12.023] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-03 03:22:12 +[2025-08-03T05:19:26.911] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-03T05:19:26.914] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-03T05:19:26.917] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-03T20:43:09.991] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-03T20:43:09.999] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-03T20:43:10.002] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-04T03:22:13.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-04 03:22:13 +[2025-08-04T05:11:47.511] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-04T05:11:47.519] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-04T05:11:47.522] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-04T20:41:05.778] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-04T20:41:05.786] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-04T20:41:05.789] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-05T03:22:14.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-05 03:22:14 +[2025-08-05T05:15:56.361] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-05T05:15:56.365] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-05T05:15:56.367] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-05T16:12:43.107] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-08-05T16:12:48.458] [INFO] monitorLogs - buildTasks - params undefined +[2025-08-05T16:12:48.462] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-08-05T16:12:48.463] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-08-05T16:12:48.464] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-05T16:12:48.468] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-05T16:12:48.469] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-06T04:01:00.468Z +[2025-08-05T16:12:48.471] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-05T18:55:00.471Z +[2025-08-05T16:12:48.472] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:1', name: 'luxOff' }, + { value: 1, start_time: '20:55', name: 'luxOn' } +] +[2025-08-05T16:12:48.474] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-08-05T16:12:48.474] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-08-05T16:12:48.475] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-05T16:12:48.477] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-05T16:12:48.478] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-06T04:01:00.478Z +[2025-08-05T16:12:48.479] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-05T18:55:00.479Z +[2025-08-05T16:12:48.480] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:1', name: 'luxOff' }, + { value: 1, start_time: '20:55', name: 'luxOn' } +] +[2025-08-05T16:12:48.481] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-08-05T16:12:48.481] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-08-05T16:12:48.482] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-05T16:12:48.484] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-05T16:12:48.485] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-06T04:01:00.485Z +[2025-08-05T16:12:48.485] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-05T18:55:00.485Z +[2025-08-05T16:12:48.486] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:1', name: 'luxOff' }, + { value: 1, start_time: '20:55', name: 'luxOn' } +] +[2025-08-05T16:12:48.487] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-08-05T16:12:48.515] [INFO] monitorLogs - tasks created: 1778 +[2025-08-05T16:12:48.517] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-07-08 +[2025-08-05T16:12:53.532] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-08-05T20:37:46.089] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-05T20:37:46.097] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-05T20:37:46.099] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-06T03:12:50.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-06 03:12:50 +[2025-08-06T05:14:09.326] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-06T05:14:09.335] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-06T05:14:09.337] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-06T12:53:22.054] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-08-06T12:53:27.410] [INFO] monitorLogs - buildTasks - params undefined +[2025-08-06T12:53:27.415] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-08-06T12:53:27.416] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-08-06T12:53:27.417] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-06T12:53:27.422] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-06T12:53:27.424] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-07T04:02:00.423Z +[2025-08-06T12:53:27.425] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-06T18:53:00.425Z +[2025-08-06T12:53:27.426] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:2', name: 'luxOff' }, + { value: 1, start_time: '20:53', name: 'luxOn' } +] +[2025-08-06T12:53:27.427] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-08-06T12:53:27.428] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-08-06T12:53:27.428] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-06T12:53:27.431] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-06T12:53:27.431] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-07T04:02:00.431Z +[2025-08-06T12:53:27.432] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-06T18:53:00.432Z +[2025-08-06T12:53:27.433] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:2', name: 'luxOff' }, + { value: 1, start_time: '20:53', name: 'luxOn' } +] +[2025-08-06T12:53:27.434] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-08-06T12:53:27.435] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-08-06T12:53:27.435] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-08-06T12:53:27.437] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-08-06T12:53:27.438] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-07T04:02:00.438Z +[2025-08-06T12:53:27.439] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-06T18:53:00.439Z +[2025-08-06T12:53:27.440] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:2', name: 'luxOff' }, + { value: 1, start_time: '20:53', name: 'luxOn' } +] +[2025-08-06T12:53:27.441] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-08-06T12:53:27.468] [INFO] monitorLogs - tasks created: 1778 +[2025-08-06T12:53:27.471] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-08-06T12:53:32.486] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-08-06T20:36:18.729] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-06T20:36:18.738] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-06T20:36:18.741] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-07T03:53:29.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-07 03:53:29 +[2025-08-07T05:16:35.634] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-07T05:16:35.638] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-07T05:16:35.640] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-07T20:37:38.948] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-07T20:37:38.956] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-07T20:37:38.959] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-08T03:53:30.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-08 03:53:30 +[2025-08-08T05:17:14.744] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-08T05:17:14.753] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-08T05:17:14.756] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-08T20:34:07.800] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-08T20:34:07.807] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-08T20:34:07.809] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-09T03:53:32.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-09 03:53:32 +[2025-08-09T05:16:06.489] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-09T05:16:06.493] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-09T05:16:06.496] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-09T20:34:57.194] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-09T20:34:57.202] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-09T20:34:57.204] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-10T03:53:33.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-10 03:53:33 +[2025-08-10T05:17:06.447] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-10T05:17:06.455] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-10T05:17:06.458] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-10T20:32:18.552] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-10T20:32:18.560] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-10T20:32:18.563] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-11T03:53:35.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-11 03:53:35 +[2025-08-11T05:19:48.118] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-11T05:19:48.122] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-11T05:19:48.125] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-11T20:31:55.141] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-11T20:31:55.149] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-11T20:31:55.151] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-12T03:53:36.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-12 03:53:36 +[2025-08-12T05:19:30.994] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-12T05:19:30.998] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-12T05:19:31.000] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-12T20:28:56.784] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-12T20:28:56.792] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-12T20:28:56.794] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-13T03:53:37.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-13 03:53:37 +[2025-08-13T05:22:19.368] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-13T05:22:19.372] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-13T05:22:19.374] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-13T20:28:12.153] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-13T20:28:12.161] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-13T20:28:12.163] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-14T03:53:39.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-14 03:53:39 +[2025-08-14T05:23:06.542] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-14T05:23:06.546] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-14T05:23:06.548] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-14T20:24:37.643] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-14T20:24:37.651] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-14T20:24:37.653] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-15T03:53:40.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-15 03:53:40 +[2025-08-15T05:25:27.207] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-15T05:25:27.211] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-15T05:25:27.213] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-15T20:21:27.262] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-15T20:21:27.268] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-15T20:21:27.270] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-16T03:53:42.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-16 03:53:42 +[2025-08-16T05:27:45.036] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-16T05:27:45.040] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-16T05:27:45.042] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-16T20:19:25.709] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-16T20:19:25.717] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-16T20:19:25.719] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-17T03:53:43.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-17 03:53:43 +[2025-08-17T05:30:20.017] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-17T05:30:20.021] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-17T05:30:20.024] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-17T20:18:55.461] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-17T20:18:55.469] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-17T20:18:55.472] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-18T03:53:44.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-18 03:53:44 +[2025-08-18T05:28:33.513] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-18T05:28:33.517] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-18T05:28:33.519] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-18T20:17:24.064] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-18T20:17:24.072] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-18T20:17:24.074] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-19T03:53:46.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-19 03:53:46 +[2025-08-19T05:30:06.286] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-19T05:30:06.289] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-19T05:30:06.292] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-19T20:17:51.497] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-19T20:17:51.506] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-19T20:17:51.508] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-20T03:53:47.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-20 03:53:47 +[2025-08-20T05:31:33.466] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-20T05:31:33.470] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-20T05:31:33.472] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-20T20:11:07.338] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-20T20:11:07.345] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-20T20:11:07.347] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-21T03:53:48.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-21 03:53:48 +[2025-08-21T05:39:45.307] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-21T05:39:45.311] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-21T05:39:45.313] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-21T19:54:38.800] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-21T19:54:38.808] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-21T19:54:38.811] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-22T03:53:50.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-22 03:53:50 +[2025-08-22T05:45:07.988] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-22T05:45:07.992] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-22T05:45:07.995] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-22T20:09:13.799] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-22T20:09:13.807] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-22T20:09:13.809] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-23T03:53:51.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-23 03:53:51 +[2025-08-23T05:41:47.170] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-23T05:41:47.174] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-23T05:41:47.177] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-23T20:08:10.515] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-23T20:08:10.523] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-23T20:08:10.525] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-24T03:53:52.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-24 03:53:52 +[2025-08-24T05:40:07.444] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-24T05:40:07.448] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-24T05:40:07.451] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-24T20:07:48.318] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-24T20:07:48.325] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-24T20:07:48.328] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-25T03:53:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-25 03:53:53 +[2025-08-25T05:43:40.059] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-25T05:43:40.067] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-25T05:43:40.070] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-25T20:02:11.762] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-25T20:02:11.769] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-25T20:02:11.772] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-26T03:53:55.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-26 03:53:55 +[2025-08-26T05:41:23.378] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-26T05:41:23.382] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-26T05:41:23.385] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-26T20:00:49.091] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-26T20:00:49.099] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-26T20:00:49.101] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-27T03:53:56.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-27 03:53:56 +[2025-08-27T05:43:46.707] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-27T05:43:46.711] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-27T05:43:46.714] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-27T19:58:33.645] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-27T19:58:33.653] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-27T19:58:33.655] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-28T03:53:57.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-28 03:53:57 +[2025-08-28T05:44:15.741] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-28T05:44:15.750] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-28T05:44:15.752] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-28T19:57:06.735] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-28T19:57:06.743] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-28T19:57:06.745] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-29T03:53:59.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-29 03:53:59 +[2025-08-29T05:47:48.709] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-29T05:47:48.713] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-29T05:47:48.715] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-29T19:45:08.324] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-29T19:45:08.332] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-29T19:45:08.334] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-30T03:54:00.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-30 03:54:00 +[2025-08-30T05:47:29.175] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-30T05:47:29.178] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-30T05:47:29.181] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-30T19:39:48.997] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-30T19:39:49.005] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-30T19:39:49.007] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-08-31T03:54:01.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-31 03:54:01 +[2025-08-31T06:02:44.979] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-08-31T06:02:44.987] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-08-31T06:02:44.990] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-08-31T19:52:56.185] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-08-31T19:52:56.193] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-08-31T19:52:56.195] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-01T03:54:03.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-01 03:54:03 +[2025-09-01T05:53:13.718] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-01T05:53:13.721] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-01T05:53:13.724] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-01T19:48:33.112] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-01T19:48:33.119] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-01T19:48:33.122] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-02T03:54:04.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-02 03:54:04 +[2025-09-02T05:49:49.935] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-02T05:49:49.943] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-02T05:49:49.945] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-02T19:40:05.866] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-02T19:40:05.873] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-02T19:40:05.876] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-03T03:54:05.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-03 03:54:05 +[2025-09-03T05:58:26.872] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-03T05:58:26.876] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-03T05:58:26.878] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-03T17:33:44.229] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-03T17:33:49.599] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-03T17:33:49.603] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-03T17:33:49.605] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-03T17:33:49.605] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-03T17:33:49.612] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-03T17:33:49.613] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-04T04:41:00.612Z +[2025-09-03T17:33:49.614] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-03T18:01:00.614Z +[2025-09-03T17:33:49.615] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '20:1', name: 'luxOn' } +] +[2025-09-03T17:33:49.616] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-03T17:33:49.617] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-03T17:33:49.618] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-03T17:33:49.621] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-03T17:33:49.622] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-04T04:41:00.621Z +[2025-09-03T17:33:49.622] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-03T18:01:00.622Z +[2025-09-03T17:33:49.623] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '20:1', name: 'luxOn' } +] +[2025-09-03T17:33:49.624] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-03T17:33:49.625] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-03T17:33:49.625] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-03T17:33:49.628] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-03T17:33:49.629] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-04T04:41:00.629Z +[2025-09-03T17:33:49.630] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-03T18:01:00.630Z +[2025-09-03T17:33:49.631] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '20:1', name: 'luxOn' } +] +[2025-09-03T17:33:49.633] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-03T17:33:49.654] [INFO] monitorLogs - tasks created: 267 +[2025-09-03T17:33:49.657] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-03T17:33:54.660] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-03T17:43:59.189] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-03T17:44:04.546] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-03T17:44:04.551] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-03T17:44:04.552] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-03T17:44:04.553] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-03T17:44:04.559] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-03T17:44:04.560] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-04T04:41:00.560Z +[2025-09-03T17:44:04.562] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-03T18:01:00.562Z +[2025-09-03T17:44:04.563] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '20:1', name: 'luxOn' } +] +[2025-09-03T17:44:04.564] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-03T17:44:04.565] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-03T17:44:04.566] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-03T17:44:04.569] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-03T17:44:04.570] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-04T04:41:00.570Z +[2025-09-03T17:44:04.571] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-03T18:01:00.571Z +[2025-09-03T17:44:04.572] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '20:1', name: 'luxOn' } +] +[2025-09-03T17:44:04.573] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-03T17:44:04.573] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-03T17:44:04.574] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-03T17:44:04.577] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-03T17:44:04.577] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-04T04:41:00.577Z +[2025-09-03T17:44:04.578] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-03T18:01:00.578Z +[2025-09-03T17:44:04.579] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:41', name: 'luxOff' }, + { value: 1, start_time: '20:1', name: 'luxOn' } +] +[2025-09-03T17:44:04.580] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-03T17:44:04.606] [INFO] monitorLogs - tasks created: 1779 +[2025-09-03T17:44:04.609] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-03T17:44:09.621] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-03T19:44:50.973] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-03T19:44:50.979] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-03T19:44:50.982] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-04T03:44:06.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-04 03:44:06 +[2025-09-04T05:54:36.003] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-04T05:54:36.009] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-04T05:54:36.012] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-04T19:45:02.126] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-04T19:45:02.132] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-04T19:45:02.135] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-05T03:44:08.066] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-05 03:44:08 +[2025-09-05T05:56:53.646] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-05T05:56:53.652] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-05T05:56:53.655] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-05T19:41:03.379] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-05T19:41:03.385] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-05T19:41:03.388] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-06T03:44:09.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-06 03:44:09 +[2025-09-06T06:09:48.370] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-06T06:09:48.376] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-06T06:09:48.378] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-06T18:06:11.099] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-06T18:06:16.495] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-06T18:06:16.501] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-06T18:06:16.502] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-06T18:06:16.502] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-06T18:06:16.507] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-06T18:06:16.508] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-07T04:46:00.507Z +[2025-09-06T18:06:16.510] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-06T17:55:00.510Z +[2025-09-06T18:06:16.511] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:46', name: 'luxOff' }, + { value: 1, start_time: '19:55', name: 'luxOn' } +] +[2025-09-06T18:06:16.512] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-06T18:06:16.513] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-06T18:06:16.514] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-06T18:06:16.516] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-06T18:06:16.517] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-07T04:46:00.517Z +[2025-09-06T18:06:16.518] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-06T17:55:00.518Z +[2025-09-06T18:06:16.519] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:46', name: 'luxOff' }, + { value: 1, start_time: '19:55', name: 'luxOn' } +] +[2025-09-06T18:06:16.520] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-06T18:06:16.521] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-06T18:06:16.521] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-06T18:06:16.524] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-06T18:06:16.524] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-07T04:46:00.524Z +[2025-09-06T18:06:16.526] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-06T17:55:00.525Z +[2025-09-06T18:06:16.526] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:46', name: 'luxOff' }, + { value: 1, start_time: '19:55', name: 'luxOn' } +] +[2025-09-06T18:06:16.527] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-06T18:06:16.531] [INFO] monitorLogs - tasks created: 266 +[2025-09-06T18:06:16.533] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-06T18:06:21.537] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-06T19:39:21.843] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-06T19:39:21.846] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-06T19:39:21.848] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-07T03:06:17.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-07 03:06:17 +[2025-09-07T05:57:11.580] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-07T05:57:11.587] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-07T05:57:11.590] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-07T19:35:07.757] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-07T19:35:07.765] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-07T19:35:07.768] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-07T23:19:51.334] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-07T23:19:56.717] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-07T23:19:56.724] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-07T23:19:56.725] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-07T23:19:56.726] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-07T23:19:56.731] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-07T23:19:56.732] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-08T04:47:00.731Z +[2025-09-07T23:19:56.734] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-08T17:53:00.734Z +[2025-09-07T23:19:56.735] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:47', name: 'luxOff' }, + { value: 1, start_time: '19:53', name: 'luxOn' } +] +[2025-09-07T23:19:56.737] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-09-07T23:19:56.738] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-07T23:19:56.738] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-07T23:19:56.741] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-07T23:19:56.742] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-08T04:47:00.742Z +[2025-09-07T23:19:56.743] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-08T17:53:00.743Z +[2025-09-07T23:19:56.743] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:47', name: 'luxOff' }, + { value: 1, start_time: '19:53', name: 'luxOn' } +] +[2025-09-07T23:19:56.745] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-09-07T23:19:56.746] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-07T23:19:56.746] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-07T23:19:56.749] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-07T23:19:56.750] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-08T04:47:00.750Z +[2025-09-07T23:19:56.751] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-08T17:53:00.751Z +[2025-09-07T23:19:56.751] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:47', name: 'luxOff' }, + { value: 1, start_time: '19:53', name: 'luxOn' } +] +[2025-09-07T23:19:56.752] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-09-07T23:19:56.756] [INFO] monitorLogs - tasks created: 266 +[2025-09-07T23:19:56.759] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-07T23:20:01.763] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-08T03:19:59.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-08 03:19:59 +[2025-09-08T05:59:23.774] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-08T05:59:23.779] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-08T05:59:23.782] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-08T15:34:15.256] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-08T15:34:20.624] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-08T15:34:20.628] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-08T15:34:20.629] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-08T15:34:20.630] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-08T15:34:20.634] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-08T15:34:20.636] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-09T04:48:00.635Z +[2025-09-08T15:34:20.637] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-08T17:51:00.637Z +[2025-09-08T15:34:20.638] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:48', name: 'luxOff' }, + { value: 1, start_time: '19:51', name: 'luxOn' } +] +[2025-09-08T15:34:20.639] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-08T15:34:20.640] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-08T15:34:20.640] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-08T15:34:20.643] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-08T15:34:20.644] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-09T04:48:00.643Z +[2025-09-08T15:34:20.644] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-08T17:51:00.644Z +[2025-09-08T15:34:20.645] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:48', name: 'luxOff' }, + { value: 1, start_time: '19:51', name: 'luxOn' } +] +[2025-09-08T15:34:20.646] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-08T15:34:20.647] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-08T15:34:20.647] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-08T15:34:20.650] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-08T15:34:20.650] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-09T04:48:00.650Z +[2025-09-08T15:34:20.651] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-08T17:51:00.651Z +[2025-09-08T15:34:20.652] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:48', name: 'luxOff' }, + { value: 1, start_time: '19:51', name: 'luxOn' } +] +[2025-09-08T15:34:20.653] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-08T15:34:20.679] [INFO] monitorLogs - tasks created: 1778 +[2025-09-08T15:34:20.681] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-08T15:34:25.695] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-08T19:36:11.981] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-08T19:36:11.987] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-08T19:36:11.990] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-09T03:34:22.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-09 03:34:22 +[2025-09-09T06:01:04.305] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-09T06:01:04.312] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-09T06:01:04.314] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-09T19:29:00.440] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-09T19:29:00.446] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-09T19:29:00.448] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-10T03:34:23.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-10 03:34:23 +[2025-09-10T06:05:06.389] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-10T06:05:06.396] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-10T06:05:06.398] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-10T09:14:57.896] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-10T09:15:03.256] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-10T09:15:03.261] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-10T09:15:03.262] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-10T09:15:03.262] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-10T09:15:03.267] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-10T09:15:03.268] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-11T04:51:00.267Z +[2025-09-10T09:15:03.269] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-10T17:46:00.269Z +[2025-09-10T09:15:03.270] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:51', name: 'luxOff' }, + { value: 1, start_time: '19:46', name: 'luxOn' } +] +[2025-09-10T09:15:03.271] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-10T09:15:03.272] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-10T09:15:03.273] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-10T09:15:03.275] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-10T09:15:03.276] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-11T04:51:00.276Z +[2025-09-10T09:15:03.277] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-10T17:46:00.276Z +[2025-09-10T09:15:03.277] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:51', name: 'luxOff' }, + { value: 1, start_time: '19:46', name: 'luxOn' } +] +[2025-09-10T09:15:03.278] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-10T09:15:03.279] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-10T09:15:03.279] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-10T09:15:03.282] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-10T09:15:03.282] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-11T04:51:00.282Z +[2025-09-10T09:15:03.283] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-10T17:46:00.283Z +[2025-09-10T09:15:03.284] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:51', name: 'luxOff' }, + { value: 1, start_time: '19:46', name: 'luxOn' } +] +[2025-09-10T09:15:03.285] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-10T09:15:03.311] [INFO] monitorLogs - tasks created: 1778 +[2025-09-10T09:15:03.314] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-10T09:15:08.328] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-10T16:27:37.332] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-10T16:27:42.695] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-10T16:27:42.700] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-10T16:27:42.701] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-10T16:27:42.701] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-10T16:27:42.706] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-10T16:27:42.707] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-11T04:51:00.706Z +[2025-09-10T16:27:42.709] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-10T17:46:00.708Z +[2025-09-10T16:27:42.709] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:51', name: 'luxOff' }, + { value: 1, start_time: '19:46', name: 'luxOn' } +] +[2025-09-10T16:27:42.711] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-10T16:27:42.711] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-10T16:27:42.712] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-10T16:27:42.715] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-10T16:27:42.715] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-11T04:51:00.715Z +[2025-09-10T16:27:42.716] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-10T17:46:00.716Z +[2025-09-10T16:27:42.717] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:51', name: 'luxOff' }, + { value: 1, start_time: '19:46', name: 'luxOn' } +] +[2025-09-10T16:27:42.718] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-10T16:27:42.718] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-10T16:27:42.719] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-10T16:27:42.721] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-10T16:27:42.722] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-11T04:51:00.722Z +[2025-09-10T16:27:42.723] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-10T17:46:00.723Z +[2025-09-10T16:27:42.723] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:51', name: 'luxOff' }, + { value: 1, start_time: '19:46', name: 'luxOn' } +] +[2025-09-10T16:27:42.724] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-10T16:27:42.752] [INFO] monitorLogs - tasks created: 1778 +[2025-09-10T16:27:42.754] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-10T16:27:47.769] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-10T19:18:09.819] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-10T19:18:09.825] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-10T19:18:09.828] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-11T03:27:44.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-11 03:27:44 +[2025-09-11T06:12:12.223] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-11T06:12:12.229] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-11T06:12:12.231] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-11T19:29:46.430] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-11T19:29:46.436] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-11T19:29:46.438] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-12T03:27:45.062] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-12 03:27:45 +[2025-09-12T06:07:25.063] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-12T06:07:25.069] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-12T06:07:25.071] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-12T19:16:24.474] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-12T19:16:24.479] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-12T19:16:24.481] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-13T03:27:46.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-13 03:27:46 +[2025-09-13T06:25:18.729] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-13T06:25:18.734] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-13T06:25:18.736] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-13T19:19:08.147] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-13T19:19:08.153] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-13T19:19:08.155] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-14T03:27:48.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-14 03:27:48 +[2025-09-14T06:21:56.079] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-14T06:21:56.086] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-14T06:21:56.088] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-14T19:22:36.196] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-14T19:22:36.202] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-14T19:22:36.204] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-14T22:41:57.355] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-14T22:42:02.711] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-14T22:42:02.716] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-14T22:42:02.717] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-14T22:42:02.718] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-14T22:42:02.722] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-14T22:42:02.723] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-15T04:57:00.723Z +[2025-09-14T22:42:02.725] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-15T17:38:00.725Z +[2025-09-14T22:42:02.726] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '6:57', name: 'luxOff' }, + { value: 1, start_time: '19:38', name: 'luxOn' } +] +[2025-09-14T22:42:02.727] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-09-14T22:42:02.728] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-14T22:42:02.728] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-14T22:42:02.731] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-14T22:42:02.732] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-15T04:57:00.732Z +[2025-09-14T22:42:02.733] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-15T17:38:00.733Z +[2025-09-14T22:42:02.733] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '6:57', name: 'luxOff' }, + { value: 1, start_time: '19:38', name: 'luxOn' } +] +[2025-09-14T22:42:02.734] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-09-14T22:42:02.735] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-14T22:42:02.736] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-14T22:42:02.738] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-14T22:42:02.738] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-15T04:57:00.738Z +[2025-09-14T22:42:02.739] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-15T17:38:00.739Z +[2025-09-14T22:42:02.740] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '6:57', name: 'luxOff' }, + { value: 1, start_time: '19:38', name: 'luxOn' } +] +[2025-09-14T22:42:02.741] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-09-14T22:42:02.766] [INFO] monitorLogs - tasks created: 1778 +[2025-09-14T22:42:02.769] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-14T22:42:07.780] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-15T03:42:04.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-15 03:42:04 +[2025-09-15T06:08:46.320] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-15T06:08:46.325] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-15T06:08:46.328] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-15T19:21:07.121] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-15T19:21:07.127] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-15T19:21:07.129] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-16T03:42:05.042] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-16 03:42:05 +[2025-09-16T06:27:52.328] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-16T06:27:52.335] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-16T06:27:52.337] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-16T19:15:32.430] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-16T19:15:32.436] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-16T19:15:32.438] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-17T03:42:06.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-17 03:42:06 +[2025-09-17T06:17:01.491] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-17T06:17:01.497] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-17T06:17:01.499] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-17T19:16:31.396] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-17T19:16:31.402] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-17T19:16:31.404] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-17T19:37:12.787] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-17T19:37:18.141] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-17T19:37:18.146] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-17T19:37:18.147] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-17T19:37:18.148] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-17T19:37:18.152] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-17T19:37:18.153] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-18T05:01:00.152Z +[2025-09-17T19:37:18.155] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-18T17:32:00.154Z +[2025-09-17T19:37:18.155] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:1', name: 'luxOff' }, + { value: 1, start_time: '19:32', name: 'luxOn' } +] +[2025-09-17T19:37:18.156] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-09-17T19:37:18.157] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-17T19:37:18.158] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-17T19:37:18.160] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-17T19:37:18.161] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-18T05:01:00.161Z +[2025-09-17T19:37:18.162] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-18T17:32:00.162Z +[2025-09-17T19:37:18.163] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:1', name: 'luxOff' }, + { value: 1, start_time: '19:32', name: 'luxOn' } +] +[2025-09-17T19:37:18.164] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-09-17T19:37:18.164] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-17T19:37:18.165] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-17T19:37:18.167] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-17T19:37:18.168] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-18T05:01:00.168Z +[2025-09-17T19:37:18.169] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-18T17:32:00.169Z +[2025-09-17T19:37:18.169] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:1', name: 'luxOff' }, + { value: 1, start_time: '19:32', name: 'luxOn' } +] +[2025-09-17T19:37:18.170] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-09-17T19:37:18.197] [INFO] monitorLogs - tasks created: 1778 +[2025-09-17T19:37:18.199] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-17T19:37:23.213] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-18T03:37:20.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-18 03:37:20 +[2025-09-18T06:20:06.081] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-18T06:20:06.086] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-18T06:20:06.088] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-18T19:15:55.598] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-18T19:15:55.604] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-18T19:15:55.606] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-19T03:37:21.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-19 03:37:21 +[2025-09-19T06:14:12.838] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-19T06:14:12.843] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-19T06:14:12.846] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-19T11:03:15.178] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-19T11:03:20.530] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-19T11:03:20.534] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-19T11:03:20.535] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-19T11:03:20.536] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-19T11:03:20.540] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-19T11:03:20.541] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-20T05:04:00.540Z +[2025-09-19T11:03:20.543] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-19T17:27:00.542Z +[2025-09-19T11:03:20.543] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:4', name: 'luxOff' }, + { value: 1, start_time: '19:27', name: 'luxOn' } +] +[2025-09-19T11:03:20.544] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-19T11:03:20.545] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-19T11:03:20.546] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-19T11:03:20.548] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-19T11:03:20.549] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-20T05:04:00.549Z +[2025-09-19T11:03:20.550] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-19T17:27:00.550Z +[2025-09-19T11:03:20.551] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:4', name: 'luxOff' }, + { value: 1, start_time: '19:27', name: 'luxOn' } +] +[2025-09-19T11:03:20.552] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-19T11:03:20.552] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-19T11:03:20.553] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-19T11:03:20.555] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-19T11:03:20.556] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-20T05:04:00.556Z +[2025-09-19T11:03:20.557] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-19T17:27:00.556Z +[2025-09-19T11:03:20.557] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:4', name: 'luxOff' }, + { value: 1, start_time: '19:27', name: 'luxOn' } +] +[2025-09-19T11:03:20.558] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-19T11:03:20.585] [INFO] monitorLogs - tasks created: 1778 +[2025-09-19T11:03:20.588] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-19T11:03:25.602] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-19T19:12:06.485] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-19T19:12:06.491] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-19T19:12:06.493] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-20T03:03:22.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-20 03:03:22 +[2025-09-20T06:14:18.733] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-20T06:14:18.740] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-20T06:14:18.742] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-20T19:11:24.245] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-20T19:11:24.251] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-20T19:11:24.253] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-21T01:29:28.145] [INFO] monitorLogs - MQTT client error Error: connect ECONNREFUSED 192.168.252.1:1883 + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16) { + errno: -111, + code: 'ECONNREFUSED', + syscall: 'connect', + address: '192.168.252.1', + port: 1883 +} +[2025-09-21T03:03:23.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-21 03:03:23 +[2025-09-21T06:16:44.066] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-21T06:16:44.073] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-21T06:16:44.078] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-21T17:55:48.117] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-21T17:55:53.503] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-21T17:55:53.508] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-21T17:55:53.509] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-21T17:55:53.510] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-21T17:55:53.515] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-21T17:55:53.516] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-22T05:07:00.515Z +[2025-09-21T17:55:53.518] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-21T17:23:00.517Z +[2025-09-21T17:55:53.519] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:7', name: 'luxOff' }, + { value: 1, start_time: '19:23', name: 'luxOn' } +] +[2025-09-21T17:55:53.520] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-21T17:55:53.521] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-21T17:55:53.522] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-21T17:55:53.524] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-21T17:55:53.525] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-22T05:07:00.525Z +[2025-09-21T17:55:53.526] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-21T17:23:00.526Z +[2025-09-21T17:55:53.527] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:7', name: 'luxOff' }, + { value: 1, start_time: '19:23', name: 'luxOn' } +] +[2025-09-21T17:55:53.528] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-21T17:55:53.529] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-21T17:55:53.529] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-21T17:55:53.532] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-21T17:55:53.533] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-22T05:07:00.533Z +[2025-09-21T17:55:53.534] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-21T17:23:00.533Z +[2025-09-21T17:55:53.534] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:7', name: 'luxOff' }, + { value: 1, start_time: '19:23', name: 'luxOn' } +] +[2025-09-21T17:55:53.535] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-21T17:55:53.551] [INFO] monitorLogs - tasks created: 1778 +[2025-09-21T17:55:53.554] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-21T17:55:58.568] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-21T19:07:22.082] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-21T19:07:22.090] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-21T19:07:22.093] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-22T03:55:56.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-22 03:55:56 +[2025-09-22T06:19:14.857] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-22T06:19:14.865] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-22T06:19:14.867] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-22T19:02:03.317] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-22T19:02:03.325] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-22T19:02:03.327] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-23T03:55:57.059] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-23 03:55:57 +[2025-09-23T06:25:40.429] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-23T06:25:40.435] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-23T06:25:40.437] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-23T12:44:08.124] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-23T12:44:13.511] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-23T12:44:13.516] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-23T12:44:13.517] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-23T12:44:13.517] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-23T12:44:13.521] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-23T12:44:13.523] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-24T05:09:00.522Z +[2025-09-23T12:44:13.524] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-23T17:19:00.524Z +[2025-09-23T12:44:13.525] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:9', name: 'luxOff' }, + { value: 1, start_time: '19:19', name: 'luxOn' } +] +[2025-09-23T12:44:13.526] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-23T12:44:13.527] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-23T12:44:13.528] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-23T12:44:13.530] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-23T12:44:13.531] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-24T05:09:00.531Z +[2025-09-23T12:44:13.532] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-23T17:19:00.532Z +[2025-09-23T12:44:13.532] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:9', name: 'luxOff' }, + { value: 1, start_time: '19:19', name: 'luxOn' } +] +[2025-09-23T12:44:13.533] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-23T12:44:13.534] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-23T12:44:13.535] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-23T12:44:13.537] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-23T12:44:13.537] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-24T05:09:00.537Z +[2025-09-23T12:44:13.538] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-23T17:19:00.538Z +[2025-09-23T12:44:13.539] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:9', name: 'luxOff' }, + { value: 1, start_time: '19:19', name: 'luxOn' } +] +[2025-09-23T12:44:13.540] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-23T12:44:13.567] [INFO] monitorLogs - tasks created: 1778 +[2025-09-23T12:44:13.569] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-23T12:44:18.583] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-23T14:36:14.271] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-23T14:36:19.626] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-23T14:36:19.631] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-23T14:36:19.632] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-23T14:36:19.633] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-23T14:36:19.637] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-23T14:36:19.639] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-24T05:09:00.638Z +[2025-09-23T14:36:19.640] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-23T17:19:00.640Z +[2025-09-23T14:36:19.641] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:9', name: 'luxOff' }, + { value: 1, start_time: '19:19', name: 'luxOn' } +] +[2025-09-23T14:36:19.642] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-23T14:36:19.643] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-23T14:36:19.643] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-23T14:36:19.646] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-23T14:36:19.646] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-24T05:09:00.646Z +[2025-09-23T14:36:19.647] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-23T17:19:00.647Z +[2025-09-23T14:36:19.648] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:9', name: 'luxOff' }, + { value: 1, start_time: '19:19', name: 'luxOn' } +] +[2025-09-23T14:36:19.649] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-23T14:36:19.650] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-23T14:36:19.650] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-23T14:36:19.652] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-23T14:36:19.653] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-24T05:09:00.653Z +[2025-09-23T14:36:19.654] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-23T17:19:00.654Z +[2025-09-23T14:36:19.654] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:9', name: 'luxOff' }, + { value: 1, start_time: '19:19', name: 'luxOn' } +] +[2025-09-23T14:36:19.655] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-23T14:36:19.682] [INFO] monitorLogs - tasks created: 1778 +[2025-09-23T14:36:19.684] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-23T14:36:24.698] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-23T18:52:24.280] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-23T18:52:24.289] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-23T18:52:24.291] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-24T03:36:20.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-24 03:36:20 +[2025-09-24T06:39:53.147] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-24T06:39:53.153] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-24T06:39:53.155] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-24T18:50:34.258] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-24T18:50:34.266] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-24T18:50:34.269] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-25T03:36:21.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-25 03:36:21 +[2025-09-25T06:40:34.626] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-25T06:40:34.632] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-25T06:40:34.635] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-25T11:37:54.253] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-25T11:37:59.655] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-25T11:37:59.660] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-25T11:37:59.661] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-25T11:37:59.662] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-25T11:37:59.666] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-25T11:37:59.668] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-26T05:12:00.667Z +[2025-09-25T11:37:59.670] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-25T17:14:00.669Z +[2025-09-25T11:37:59.670] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:12', name: 'luxOff' }, + { value: 1, start_time: '19:14', name: 'luxOn' } +] +[2025-09-25T11:37:59.672] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-25T11:37:59.673] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-25T11:37:59.673] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-25T11:37:59.676] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-25T11:37:59.677] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-26T05:12:00.677Z +[2025-09-25T11:37:59.678] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-25T17:14:00.678Z +[2025-09-25T11:37:59.678] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:12', name: 'luxOff' }, + { value: 1, start_time: '19:14', name: 'luxOn' } +] +[2025-09-25T11:37:59.680] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-25T11:37:59.681] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-25T11:37:59.681] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-25T11:37:59.684] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-25T11:37:59.685] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-26T05:12:00.684Z +[2025-09-25T11:37:59.685] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-25T17:14:00.685Z +[2025-09-25T11:37:59.686] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:12', name: 'luxOff' }, + { value: 1, start_time: '19:14', name: 'luxOn' } +] +[2025-09-25T11:37:59.687] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-25T11:37:59.703] [INFO] monitorLogs - tasks created: 1778 +[2025-09-25T11:37:59.705] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-25T11:38:04.720] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-25T15:17:16.534] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-09-25T15:17:21.879] [INFO] monitorLogs - buildTasks - params undefined +[2025-09-25T15:17:21.884] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-09-25T15:17:21.885] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-09-25T15:17:21.885] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-25T15:17:21.890] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-25T15:17:21.891] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-26T05:12:00.890Z +[2025-09-25T15:17:21.892] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-25T17:14:00.892Z +[2025-09-25T15:17:21.893] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:12', name: 'luxOff' }, + { value: 1, start_time: '19:14', name: 'luxOn' } +] +[2025-09-25T15:17:21.894] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-09-25T15:17:21.895] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-09-25T15:17:21.896] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-25T15:17:21.898] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-25T15:17:21.899] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-26T05:12:00.899Z +[2025-09-25T15:17:21.900] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-25T17:14:00.900Z +[2025-09-25T15:17:21.900] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:12', name: 'luxOff' }, + { value: 1, start_time: '19:14', name: 'luxOn' } +] +[2025-09-25T15:17:21.901] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-09-25T15:17:21.902] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-09-25T15:17:21.903] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-09-25T15:17:21.905] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-09-25T15:17:21.906] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-26T05:12:00.905Z +[2025-09-25T15:17:21.906] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-25T17:14:00.906Z +[2025-09-25T15:17:21.907] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:12', name: 'luxOff' }, + { value: 1, start_time: '19:14', name: 'luxOn' } +] +[2025-09-25T15:17:21.908] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-09-25T15:17:21.935] [INFO] monitorLogs - tasks created: 1778 +[2025-09-25T15:17:21.938] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-09-25T15:17:26.952] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-09-25T18:40:02.834] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-25T18:40:02.840] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-25T18:40:02.843] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-26T03:17:24.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-26 03:17:24 +[2025-09-26T06:38:35.022] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-26T06:38:35.028] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-26T06:38:35.031] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-26T18:55:06.023] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-26T18:55:06.030] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-26T18:55:06.032] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-27T03:17:25.059] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-27 03:17:25 +[2025-09-27T06:35:33.380] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-27T06:35:33.386] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-27T06:35:33.388] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-27T18:55:04.633] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-27T18:55:04.639] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-27T18:55:04.641] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-28T03:17:26.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-28 03:17:26 +[2025-09-28T06:34:23.717] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-28T06:34:23.723] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-28T06:34:23.726] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-28T18:54:33.807] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-28T18:54:33.813] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-28T18:54:33.815] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-29T03:17:27.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-29 03:17:27 +[2025-09-29T06:29:05.978] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-29T06:29:05.982] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-29T06:29:05.984] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-29T18:51:00.139] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-29T18:51:00.142] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-29T18:51:00.144] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-09-30T03:17:28.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-30 03:17:28 +[2025-09-30T06:30:09.070] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-09-30T06:30:09.076] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-09-30T06:30:09.078] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-09-30T18:49:36.463] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-09-30T18:49:36.469] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-09-30T18:49:36.471] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-01T03:17:30.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-01 03:17:30 +[2025-10-01T06:37:03.837] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-01T06:37:03.844] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-01T06:37:03.846] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-01T18:46:54.426] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-01T18:46:54.432] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-01T18:46:54.434] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-02T03:17:31.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-02 03:17:31 +[2025-10-02T06:32:34.084] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-02T06:32:34.090] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-02T06:32:34.092] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-02T18:46:06.611] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-02T18:46:06.617] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-02T18:46:06.619] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-03T03:17:32.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-03 03:17:32 +[2025-10-03T06:34:47.922] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-03T06:34:47.927] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-03T06:34:47.929] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-03T14:35:40.728] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-03T14:35:46.094] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-03T14:35:46.099] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-03T14:35:46.100] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-03T14:35:46.101] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-03T14:35:46.105] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-03T14:35:46.106] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-04T05:24:00.105Z +[2025-10-03T14:35:46.108] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-03T16:58:00.107Z +[2025-10-03T14:35:46.109] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:24', name: 'luxOff' }, + { value: 1, start_time: '18:58', name: 'luxOn' } +] +[2025-10-03T14:35:46.111] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-03T14:35:46.112] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-03T14:35:46.112] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-03T14:35:46.115] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-03T14:35:46.115] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-04T05:24:00.115Z +[2025-10-03T14:35:46.116] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-03T16:58:00.116Z +[2025-10-03T14:35:46.117] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:24', name: 'luxOff' }, + { value: 1, start_time: '18:58', name: 'luxOn' } +] +[2025-10-03T14:35:46.118] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-03T14:35:46.118] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-03T14:35:46.119] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-03T14:35:46.121] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-03T14:35:46.122] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-04T05:24:00.122Z +[2025-10-03T14:35:46.122] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-03T16:58:00.122Z +[2025-10-03T14:35:46.123] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:24', name: 'luxOff' }, + { value: 1, start_time: '18:58', name: 'luxOn' } +] +[2025-10-03T14:35:46.124] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-03T14:35:46.149] [INFO] monitorLogs - tasks created: 1778 +[2025-10-03T14:35:46.152] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-03T14:35:51.166] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-03T15:42:11.623] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-03T15:42:16.970] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-03T15:42:16.975] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-03T15:42:16.976] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-03T15:42:16.977] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-03T15:42:16.981] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-03T15:42:16.983] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-04T05:24:00.982Z +[2025-10-03T15:42:16.984] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-03T16:58:00.984Z +[2025-10-03T15:42:16.985] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:24', name: 'luxOff' }, + { value: 1, start_time: '18:58', name: 'luxOn' } +] +[2025-10-03T15:42:16.986] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-03T15:42:16.987] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-03T15:42:16.987] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-03T15:42:16.990] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-03T15:42:16.991] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-04T05:24:00.990Z +[2025-10-03T15:42:16.991] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-03T16:58:00.991Z +[2025-10-03T15:42:16.992] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:24', name: 'luxOff' }, + { value: 1, start_time: '18:58', name: 'luxOn' } +] +[2025-10-03T15:42:16.993] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-03T15:42:16.994] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-03T15:42:16.994] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-03T15:42:16.997] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-03T15:42:16.997] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-04T05:24:00.997Z +[2025-10-03T15:42:16.998] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-03T16:58:00.998Z +[2025-10-03T15:42:16.999] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:24', name: 'luxOff' }, + { value: 1, start_time: '18:58', name: 'luxOn' } +] +[2025-10-03T15:42:17.000] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-03T15:42:17.027] [INFO] monitorLogs - tasks created: 1778 +[2025-10-03T15:42:17.030] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-03T15:42:22.042] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-03T18:42:36.289] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-03T18:42:36.296] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-03T18:42:36.299] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-04T03:42:19.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-04 03:42:19 +[2025-10-04T06:36:50.215] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-04T06:36:50.218] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-04T06:36:50.221] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-04T18:31:20.710] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-04T18:31:20.716] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-04T18:31:20.718] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-05T03:42:20.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-05 03:42:20 +[2025-10-05T06:39:53.596] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-05T06:39:53.602] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-05T06:39:53.604] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-05T18:35:05.060] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-05T18:35:05.062] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-05T18:35:05.064] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-06T03:42:21.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-06 03:42:21 +[2025-10-06T06:51:14.163] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-06T06:51:14.167] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-06T06:51:14.169] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-06T18:25:36.908] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-06T18:25:36.912] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-06T18:25:36.914] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-07T03:42:22.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-07 03:42:22 +[2025-10-07T06:45:18.947] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-07T06:45:18.953] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-07T06:45:18.955] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-07T18:33:46.558] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-07T18:33:46.564] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-07T18:33:46.566] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-08T03:42:24.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-08 03:42:24 +[2025-10-08T06:42:20.332] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-08T06:42:20.338] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-08T06:42:20.340] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-08T18:30:16.462] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-08T18:30:16.468] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-08T18:30:16.470] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-09T03:42:25.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-09 03:42:25 +[2025-10-09T06:58:08.565] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-09T06:58:08.572] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-09T06:58:08.574] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-09T12:07:01.184] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-09T12:07:06.541] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-09T12:07:06.546] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-09T12:07:06.547] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-09T12:07:06.548] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T12:07:06.552] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T12:07:06.553] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.553Z +[2025-10-09T12:07:06.555] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-09T16:45:00.555Z +[2025-10-09T12:07:06.555] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T12:07:06.557] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-09T12:07:06.558] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-09T12:07:06.558] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T12:07:06.561] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T12:07:06.561] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.561Z +[2025-10-09T12:07:06.562] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-09T16:45:00.562Z +[2025-10-09T12:07:06.563] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T12:07:06.564] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-09T12:07:06.565] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-09T12:07:06.565] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T12:07:06.567] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T12:07:06.568] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.568Z +[2025-10-09T12:07:06.569] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-09T16:45:00.569Z +[2025-10-09T12:07:06.569] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T12:07:06.570] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-09T12:07:06.597] [INFO] monitorLogs - tasks created: 1778 +[2025-10-09T12:07:06.600] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-09T12:07:11.612] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-09T16:30:16.782] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-09T16:30:22.167] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-09T16:30:22.172] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-09T16:30:22.173] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-09T16:30:22.174] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:30:22.178] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:30:22.180] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.179Z +[2025-10-09T16:30:22.181] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-09T16:45:00.181Z +[2025-10-09T16:30:22.182] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:30:22.183] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-09T16:30:22.184] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-09T16:30:22.185] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:30:22.188] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:30:22.189] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.189Z +[2025-10-09T16:30:22.190] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-09T16:45:00.190Z +[2025-10-09T16:30:22.190] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:30:22.191] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-09T16:30:22.192] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-09T16:30:22.192] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:30:22.195] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:30:22.195] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.195Z +[2025-10-09T16:30:22.196] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-09T16:45:00.196Z +[2025-10-09T16:30:22.196] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:30:22.198] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-09T16:30:22.224] [INFO] monitorLogs - tasks created: 1778 +[2025-10-09T16:30:22.227] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-09T16:30:27.241] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-09T16:31:03.822] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-09T16:31:09.173] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-09T16:31:09.178] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-09T16:31:09.179] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-09T16:31:09.180] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:31:09.184] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:31:09.186] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.185Z +[2025-10-09T16:31:09.187] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-09T16:45:00.187Z +[2025-10-09T16:31:09.188] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:31:09.189] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-09T16:31:09.190] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-09T16:31:09.190] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:31:09.193] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:31:09.193] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.193Z +[2025-10-09T16:31:09.194] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-09T16:45:00.194Z +[2025-10-09T16:31:09.195] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:31:09.196] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-09T16:31:09.196] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-09T16:31:09.197] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:31:09.199] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:31:09.200] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.200Z +[2025-10-09T16:31:09.200] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-09T16:45:00.200Z +[2025-10-09T16:31:09.201] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:31:09.202] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-09T16:31:09.229] [INFO] monitorLogs - tasks created: 1778 +[2025-10-09T16:31:09.232] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-09T16:31:14.245] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-09T16:32:03.153] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-09T16:32:08.540] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-09T16:32:08.546] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-09T16:32:08.548] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-09T16:32:08.548] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:32:08.553] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:32:08.555] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.554Z +[2025-10-09T16:32:08.557] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-09T16:45:00.556Z +[2025-10-09T16:32:08.557] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:32:08.559] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-09T16:32:08.559] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-09T16:32:08.560] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:32:08.563] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:32:08.564] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.564Z +[2025-10-09T16:32:08.565] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-09T16:45:00.564Z +[2025-10-09T16:32:08.565] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:32:08.567] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-09T16:32:08.567] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-09T16:32:08.568] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:32:08.571] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:32:08.571] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.571Z +[2025-10-09T16:32:08.572] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-09T16:45:00.572Z +[2025-10-09T16:32:08.572] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:32:08.573] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-09T16:32:08.589] [INFO] monitorLogs - tasks created: 1778 +[2025-10-09T16:32:08.592] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-09T16:32:13.606] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-09T16:32:54.727] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-09T16:33:00.098] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-09T16:33:00.103] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-09T16:33:00.104] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-09T16:33:00.104] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:33:00.108] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:33:00.110] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.109Z +[2025-10-09T16:33:00.111] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-09T16:45:00.111Z +[2025-10-09T16:33:00.112] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:33:00.113] [INFO] monitorLogs - -->currentValue for relay 1 0 +[2025-10-09T16:33:00.114] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-09T16:33:00.115] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:33:00.117] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:33:00.118] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.118Z +[2025-10-09T16:33:00.119] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-09T16:45:00.119Z +[2025-10-09T16:33:00.119] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:33:00.120] [INFO] monitorLogs - -->currentValue for relay 2 0 +[2025-10-09T16:33:00.121] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-09T16:33:00.122] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T16:33:00.124] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T16:33:00.124] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.124Z +[2025-10-09T16:33:00.125] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-09T16:45:00.125Z +[2025-10-09T16:33:00.126] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T16:33:00.127] [INFO] monitorLogs - -->currentValue for relay 3 0 +[2025-10-09T16:33:00.153] [INFO] monitorLogs - tasks created: 1778 +[2025-10-09T16:33:00.156] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-09T16:33:05.167] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-09T18:26:48.166] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-09T18:26:48.173] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-09T18:26:48.175] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-09T19:10:07.344] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-09T19:10:12.728] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-09T19:10:12.733] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-09T19:10:12.734] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-09T19:10:12.735] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T19:10:12.739] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T19:10:12.741] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.740Z +[2025-10-09T19:10:12.742] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-10T16:45:00.742Z +[2025-10-09T19:10:12.744] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T19:10:12.745] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-10-09T19:10:12.746] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-09T19:10:12.746] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T19:10:12.749] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T19:10:12.750] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.750Z +[2025-10-09T19:10:12.751] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-10T16:45:00.751Z +[2025-10-09T19:10:12.752] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T19:10:12.753] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-10-09T19:10:12.754] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-09T19:10:12.754] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-09T19:10:12.757] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-09T19:10:12.758] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.757Z +[2025-10-09T19:10:12.758] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-10T16:45:00.758Z +[2025-10-09T19:10:12.759] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:32', name: 'luxOff' }, + { value: 1, start_time: '18:45', name: 'luxOn' } +] +[2025-10-09T19:10:12.760] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-10-09T19:10:12.776] [INFO] monitorLogs - tasks created: 1778 +[2025-10-09T19:10:12.779] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-08-08 +[2025-10-09T19:10:17.794] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-10T03:10:14.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-10 03:10:14 +[2025-10-10T06:56:15.568] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-10T06:56:15.573] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-10T06:56:15.575] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-10T18:21:46.656] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-10T18:21:46.661] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-10T18:21:46.664] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-11T03:10:15.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-11 03:10:15 +[2025-10-11T06:56:44.513] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-11T06:56:44.519] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-11T06:56:44.521] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-11T18:22:16.173] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-11T18:22:16.180] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-11T18:22:16.182] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-12T03:10:17.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-12 03:10:17 +[2025-10-12T06:55:44.136] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-12T06:55:44.141] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-12T06:55:44.143] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-12T18:21:28.990] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-12T18:21:28.997] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-12T18:21:28.999] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-13T03:10:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-13 03:10:18 +[2025-10-13T06:49:52.597] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-13T06:49:52.603] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-13T06:49:52.605] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-13T18:25:08.194] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-13T18:25:08.201] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-13T18:25:08.203] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-14T03:10:19.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-14 03:10:19 +[2025-10-14T06:50:50.847] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-14T06:50:50.853] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-14T06:50:50.856] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-14T18:15:04.153] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-14T18:15:04.160] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-14T18:15:04.162] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor +[2025-10-14T23:55:44.750] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-14T23:55:50.112] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-14T23:55:50.117] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-14T23:55:50.118] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-14T23:55:50.118] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-14T23:55:50.123] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-14T23:55:50.124] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-15T05:40:00.123Z +[2025-10-14T23:55:50.126] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-15T16:35:00.125Z +[2025-10-14T23:55:50.126] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '18:35', name: 'luxOn' } +] +[2025-10-14T23:55:50.128] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-10-14T23:55:50.128] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-14T23:55:50.129] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-14T23:55:50.132] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-14T23:55:50.132] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-15T05:40:00.132Z +[2025-10-14T23:55:50.133] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-15T16:35:00.133Z +[2025-10-14T23:55:50.134] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '18:35', name: 'luxOn' } +] +[2025-10-14T23:55:50.135] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-10-14T23:55:50.136] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-14T23:55:50.136] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-14T23:55:50.138] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-14T23:55:50.139] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-15T05:40:00.139Z +[2025-10-14T23:55:50.140] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-15T16:35:00.140Z +[2025-10-14T23:55:50.141] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '18:35', name: 'luxOn' } +] +[2025-10-14T23:55:50.143] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-10-14T23:55:50.169] [INFO] monitorLogs - tasks created: 1778 +[2025-10-14T23:55:50.172] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-10-08 +[2025-10-14T23:55:55.186] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-14T23:56:44.744] [INFO] monitorLogs - DIDO_Relay_Controller installed +[2025-10-14T23:56:50.098] [INFO] monitorLogs - buildTasks - params undefined +[2025-10-14T23:56:50.103] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup +[2025-10-14T23:56:50.104] [INFO] monitorLogs - buildTasks: profile for line 1 +[2025-10-14T23:56:50.105] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-14T23:56:50.109] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-14T23:56:50.111] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-15T05:40:00.110Z +[2025-10-14T23:56:50.112] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-15T16:35:00.112Z +[2025-10-14T23:56:50.113] [INFO] monitorLogs - -->time_points final 1 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '18:35', name: 'luxOn' } +] +[2025-10-14T23:56:50.114] [INFO] monitorLogs - -->currentValue for relay 1 1 +[2025-10-14T23:56:50.115] [INFO] monitorLogs - buildTasks: profile for line 2 +[2025-10-14T23:56:50.116] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-14T23:56:50.118] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-14T23:56:50.119] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-15T05:40:00.118Z +[2025-10-14T23:56:50.120] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-15T16:35:00.119Z +[2025-10-14T23:56:50.120] [INFO] monitorLogs - -->time_points final 2 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '18:35', name: 'luxOn' } +] +[2025-10-14T23:56:50.121] [INFO] monitorLogs - -->currentValue for relay 2 1 +[2025-10-14T23:56:50.122] [INFO] monitorLogs - buildTasks: profile for line 3 +[2025-10-14T23:56:50.122] [INFO] monitorLogs - profile: { + intervals: [ + { value: 0, end_time: '20:00', start_time: '13:00' }, + { value: 1, end_time: '08:00', start_time: '20:00' }, + { value: 0, end_time: '13:00', start_time: '08:00' } + ], + astro_clock: true, + dawn_lux_sensor: true, + dusk_lux_sensor: true, + dawn_lux_sensor_value: 15, + dusk_lux_sensor_value: 15, + dawn_astro_clock_offset: 0, + dusk_astro_clock_offset: 0, + dawn_lux_sensor_time_window: 30, + dusk_lux_sensor_time_window: 30, + dawn_astro_clock_time_window: 60, + dusk_astro_clock_time_window: 60 +} +[2025-10-14T23:56:50.125] [INFO] monitorLogs - -->comming events turn on/off lines: +[2025-10-14T23:56:50.125] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-15T05:40:00.125Z +[2025-10-14T23:56:50.126] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-15T16:35:00.126Z +[2025-10-14T23:56:50.127] [INFO] monitorLogs - -->time_points final 3 [ + { value: 0, start_time: '7:40', name: 'luxOff' }, + { value: 1, start_time: '18:35', name: 'luxOn' } +] +[2025-10-14T23:56:50.128] [INFO] monitorLogs - -->currentValue for relay 3 1 +[2025-10-14T23:56:50.155] [INFO] monitorLogs - tasks created: 1778 +[2025-10-14T23:56:50.157] [INFO] monitorLogs - -->FLOW bol spustený PLBJzmK1r3Gynd6OW0gKRo0e5wV4vx9bDEqNgYR8 2025-10-08 +[2025-10-14T23:56:55.170] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu +[2025-10-15T03:56:52.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-15 03:56:52 +[2025-10-15T06:58:28.540] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor +[2025-10-15T06:58:28.547] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor +[2025-10-15T06:58:28.549] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor +[2025-10-15T08:29:25.067] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform +[2025-10-15T08:29:32.101] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform +[2025-10-15T08:29:41.061] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false command received from platform +[2025-10-15T08:29:51.286] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false command received from platform +[2025-10-15T08:29:56.100] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform +[2025-10-15T08:30:11.790] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform +[2025-10-15T18:13:32.743] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor +[2025-10-15T18:13:32.749] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor +[2025-10-15T18:13:32.751] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor diff --git a/RVO16/package-lock.json b/RVO16/package-lock.json new file mode 100755 index 0000000..3c5c1ba --- /dev/null +++ b/RVO16/package-lock.json @@ -0,0 +1,2139 @@ +{ + "name": "emptyproject", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "emptyproject", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "bitwise": "^2.1.0", + "easy-crc": "0.0.2", + "jsmodbus": "^4.0.6", + "log4js": "^6.3.0", + "moment": "^2.30.1", + "mqtt": "^4.2.6", + "nodemailer": "^6.9.7", + "serialport": "^9.2.8", + "total.js": "^3.4.13" + } + }, + "node_modules/@serialport/binding-abstract": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", + "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "dependencies": { + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/binding-mock": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", + "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", + "dependencies": { + "@serialport/binding-abstract": "9.2.3", + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.8.tgz", + "integrity": "sha512-hSLxTe0tADZ3LMMGwvEJWOC/TaFQTyPeFalUCsJ1lSQ0k6bPF04JwrtB/C81GetmDBTNRY0GlD0SNtKCc7Dr5g==", + "hasInstallScript": true, + "dependencies": { + "@serialport/binding-abstract": "9.2.3", + "@serialport/parser-readline": "9.2.4", + "bindings": "^1.5.0", + "debug": "^4.3.2", + "nan": "^2.15.0", + "prebuild-install": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", + "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", + "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", + "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", + "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", + "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "dependencies": { + "@serialport/parser-delimiter": "9.2.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", + "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", + "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", + "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", + "dependencies": { + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bitwise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bitwise/-/bitwise-2.1.0.tgz", + "integrity": "sha512-XKgAhMXCh4H/3oNwAHAsAO0iC89s9cOiumgYwSHjSobGWxYjv62YhkL9QEdvGP151xypCtMlAfKK79GEcd2eRQ==" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/commist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz", + "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==", + "dependencies": { + "leven": "^2.1.0", + "minimist": "^1.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/crc": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.0.tgz", + "integrity": "sha512-ycVC2+4/DLgXXq7QweYi2znhqDuZz6P5TQXnkQo8v15XY/5p/IWeZwsSE31Ifo8w15b8TWLsqhXOjXyilHuQxw==" + }, + "node_modules/date-format": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", + "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/easy-crc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/easy-crc/-/easy-crc-0.0.2.tgz", + "integrity": "sha512-h6eqIdhJRe0p271/xZJbM/0klCi13mW5IB7ZEzEGH11yV4QXWAkD4yPErz0fXdhFrd6sZ4Q1k5Iky2kMsMNePw==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/help-me": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz", + "integrity": "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==", + "dependencies": { + "glob": "^7.1.6", + "readable-stream": "^3.6.0" + } + }, + "node_modules/help-me/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/jsmodbus": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jsmodbus/-/jsmodbus-4.0.6.tgz", + "integrity": "sha512-gCmjoaERErK5Rn9Lu/BN07fY13MoWV7JKgGzrnkPlQPdPxYcwDhLtYcmpFFpZ4J9NPZZBSezi1UkLZO/DnNppA==", + "dependencies": { + "crc": "3.4.0", + "debug": "^3.1.0" + }, + "bin": { + "jsmodbus": "bin/jsmodbus.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/jsmodbus/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log4js": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", + "integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==", + "dependencies": { + "date-format": "^4.0.10", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.1.1" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/mqtt": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.3.7.tgz", + "integrity": "sha512-ew3qwG/TJRorTz47eW46vZ5oBw5MEYbQZVaEji44j5lAUSQSqIEoul7Kua/BatBW0H0kKQcC9kwUHa1qzaWHSw==", + "dependencies": { + "commist": "^1.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.1.1", + "duplexify": "^4.1.1", + "help-me": "^3.0.0", + "inherits": "^2.0.3", + "lru-cache": "^6.0.0", + "minimist": "^1.2.5", + "mqtt-packet": "^6.8.0", + "number-allocator": "^1.0.9", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "reinterval": "^1.1.0", + "rfdc": "^1.3.0", + "split2": "^3.1.0", + "ws": "^7.5.5", + "xtend": "^4.0.2" + }, + "bin": { + "mqtt": "bin/mqtt.js", + "mqtt_pub": "bin/pub.js", + "mqtt_sub": "bin/sub.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mqtt-packet": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz", + "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==", + "dependencies": { + "bl": "^4.0.2", + "debug": "^4.1.1", + "process-nextick-args": "^2.0.1" + } + }, + "node_modules/mqtt/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/node-abi": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", + "integrity": "sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nodemailer": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-allocator": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", + "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", + "dependencies": { + "debug": "^4.3.1", + "js-sdsl": "4.3.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.0.tgz", + "integrity": "sha512-CNcMgI1xBypOyGqjp3wOc8AAo1nMhZS3Cwd3iHIxOdAUbb+YxdNuM4Z5iIrZ8RLvOsf3F3bl7b7xGq6DjQoNYA==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/reinterval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", + "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialport": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.8.tgz", + "integrity": "sha512-FsWpMQgSJxi93JgWl5xM1f9/Z8IjRJuaUEoHqLf8FPBLw7gMhInuHOBhI2onQufWIYPGTz3H3oGcu1nCaK1EfA==", + "dependencies": { + "@serialport/binding-mock": "9.2.4", + "@serialport/bindings": "9.2.8", + "@serialport/parser-byte-length": "9.2.4", + "@serialport/parser-cctalk": "9.2.4", + "@serialport/parser-delimiter": "9.2.4", + "@serialport/parser-inter-byte-timeout": "9.2.4", + "@serialport/parser-readline": "9.2.4", + "@serialport/parser-ready": "9.2.4", + "@serialport/parser-regex": "9.2.4", + "@serialport/stream": "9.2.4", + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/streamroller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", + "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", + "dependencies": { + "date-format": "^4.0.10", + "debug": "^4.3.4", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/total.js": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/total.js/-/total.js-3.4.13.tgz", + "integrity": "sha512-lAH4gEixlPFbrE3xfKADAcHfO79IFq2wKa9GTsrgRzIR5MTg3mNH7+4IxvX1pK8faoYb/0oYSJ1YTsAa5hIFFQ==", + "bin": { + "total": "bin/totaljs", + "total.js": "bin/totaljs", + "totaljs": "bin/totaljs", + "totalpackage": "bin/tpm", + "tpm": "bin/tpm" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, + "dependencies": { + "@serialport/binding-abstract": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", + "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "requires": { + "debug": "^4.3.2" + } + }, + "@serialport/binding-mock": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", + "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", + "requires": { + "@serialport/binding-abstract": "9.2.3", + "debug": "^4.3.2" + } + }, + "@serialport/bindings": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.8.tgz", + "integrity": "sha512-hSLxTe0tADZ3LMMGwvEJWOC/TaFQTyPeFalUCsJ1lSQ0k6bPF04JwrtB/C81GetmDBTNRY0GlD0SNtKCc7Dr5g==", + "requires": { + "@serialport/binding-abstract": "9.2.3", + "@serialport/parser-readline": "9.2.4", + "bindings": "^1.5.0", + "debug": "^4.3.2", + "nan": "^2.15.0", + "prebuild-install": "^7.0.0" + } + }, + "@serialport/parser-byte-length": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", + "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==" + }, + "@serialport/parser-cctalk": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", + "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==" + }, + "@serialport/parser-delimiter": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", + "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==" + }, + "@serialport/parser-inter-byte-timeout": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", + "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==" + }, + "@serialport/parser-readline": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", + "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "requires": { + "@serialport/parser-delimiter": "9.2.4" + } + }, + "@serialport/parser-ready": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", + "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==" + }, + "@serialport/parser-regex": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", + "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==" + }, + "@serialport/stream": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", + "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", + "requires": { + "debug": "^4.3.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bitwise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bitwise/-/bitwise-2.1.0.tgz", + "integrity": "sha512-XKgAhMXCh4H/3oNwAHAsAO0iC89s9cOiumgYwSHjSobGWxYjv62YhkL9QEdvGP151xypCtMlAfKK79GEcd2eRQ==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, + "commist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz", + "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==", + "requires": { + "leven": "^2.1.0", + "minimist": "^1.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.0.tgz", + "integrity": "sha512-ycVC2+4/DLgXXq7QweYi2znhqDuZz6P5TQXnkQo8v15XY/5p/IWeZwsSE31Ifo8w15b8TWLsqhXOjXyilHuQxw==" + }, + "date-format": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", + "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "easy-crc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/easy-crc/-/easy-crc-0.0.2.tgz", + "integrity": "sha512-h6eqIdhJRe0p271/xZJbM/0klCi13mW5IB7ZEzEGH11yV4QXWAkD4yPErz0fXdhFrd6sZ4Q1k5Iky2kMsMNePw==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "help-me": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz", + "integrity": "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==", + "requires": { + "glob": "^7.1.6", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==" + }, + "jsmodbus": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/jsmodbus/-/jsmodbus-4.0.6.tgz", + "integrity": "sha512-gCmjoaERErK5Rn9Lu/BN07fY13MoWV7JKgGzrnkPlQPdPxYcwDhLtYcmpFFpZ4J9NPZZBSezi1UkLZO/DnNppA==", + "requires": { + "crc": "3.4.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + }, + "log4js": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", + "integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==", + "requires": { + "date-format": "^4.0.10", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.1.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, + "mqtt": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.3.7.tgz", + "integrity": "sha512-ew3qwG/TJRorTz47eW46vZ5oBw5MEYbQZVaEji44j5lAUSQSqIEoul7Kua/BatBW0H0kKQcC9kwUHa1qzaWHSw==", + "requires": { + "commist": "^1.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.1.1", + "duplexify": "^4.1.1", + "help-me": "^3.0.0", + "inherits": "^2.0.3", + "lru-cache": "^6.0.0", + "minimist": "^1.2.5", + "mqtt-packet": "^6.8.0", + "number-allocator": "^1.0.9", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "reinterval": "^1.1.0", + "rfdc": "^1.3.0", + "split2": "^3.1.0", + "ws": "^7.5.5", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "mqtt-packet": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz", + "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==", + "requires": { + "bl": "^4.0.2", + "debug": "^4.1.1", + "process-nextick-args": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node-abi": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", + "integrity": "sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w==", + "requires": { + "semver": "^7.3.5" + } + }, + "nodemailer": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-allocator": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", + "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", + "requires": { + "debug": "^4.3.1", + "js-sdsl": "4.3.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "prebuild-install": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.0.tgz", + "integrity": "sha512-CNcMgI1xBypOyGqjp3wOc8AAo1nMhZS3Cwd3iHIxOdAUbb+YxdNuM4Z5iIrZ8RLvOsf3F3bl7b7xGq6DjQoNYA==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "reinterval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", + "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialport": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.8.tgz", + "integrity": "sha512-FsWpMQgSJxi93JgWl5xM1f9/Z8IjRJuaUEoHqLf8FPBLw7gMhInuHOBhI2onQufWIYPGTz3H3oGcu1nCaK1EfA==", + "requires": { + "@serialport/binding-mock": "9.2.4", + "@serialport/bindings": "9.2.8", + "@serialport/parser-byte-length": "9.2.4", + "@serialport/parser-cctalk": "9.2.4", + "@serialport/parser-delimiter": "9.2.4", + "@serialport/parser-inter-byte-timeout": "9.2.4", + "@serialport/parser-readline": "9.2.4", + "@serialport/parser-ready": "9.2.4", + "@serialport/parser-regex": "9.2.4", + "@serialport/stream": "9.2.4", + "debug": "^4.3.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "streamroller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", + "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", + "requires": { + "date-format": "^4.0.10", + "debug": "^4.3.4", + "fs-extra": "^10.1.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "total.js": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/total.js/-/total.js-3.4.13.tgz", + "integrity": "sha512-lAH4gEixlPFbrE3xfKADAcHfO79IFq2wKa9GTsrgRzIR5MTg3mNH7+4IxvX1pK8faoYb/0oYSJ1YTsAa5hIFFQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/RVO16/package.json b/RVO16/package.json new file mode 100755 index 0000000..7f7c795 --- /dev/null +++ b/RVO16/package.json @@ -0,0 +1,30 @@ +{ + "name": "emptyproject", + "description": "Total.js empty project.", + "version": "1.0.0", + "main": "debug.js", + "dependencies": { + "bitwise": "^2.1.0", + "easy-crc": "0.0.2", + "jsmodbus": "^4.0.6", + "log4js": "^6.3.0", + "moment": "^2.30.1", + "mqtt": "^4.2.6", + "nodemailer": "^6.9.7", + "serialport": "^9.2.8", + "total.js": "^3.4.13" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/totaljs/emptyproject-flow" + }, + "keywords": [ + "empty", + "project" + ], + "author": "Peter Širka", + "license": "MIT" +} diff --git a/RVO16/release.js b/RVO16/release.js new file mode 100755 index 0000000..02d52ff --- /dev/null +++ b/RVO16/release.js @@ -0,0 +1,15 @@ +// =================================================== +// FOR PRODUCTION +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {'ip':'0.0.0.0', 'port':12345}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; + +require('total.js').http('release', options); +// require('total.js').cluster.http(5, 'release', options); diff --git a/RVO16/release.js.json b/RVO16/release.js.json new file mode 100755 index 0000000..87cf245 --- /dev/null +++ b/RVO16/release.js.json @@ -0,0 +1,34 @@ +{ + "pid": 17794, + "stats": [ + { + "id": null, + "version": { + "node": "v14.18.1", + "total": "3.4.13", + "app": "1.0.0" + }, + "pid": 17794, + "thread": "", + "mode": "release", + "overload": 0, + "date": "2025-10-16T00:23:43.622Z", + "memory": 25.99, + "rm": 0, + "fm": 0, + "wm": 0, + "mm": 0, + "om": 6, + "em": 0, + "dbrm": 0, + "dbwm": 0, + "usage": 0, + "requests": 5, + "pending": 0, + "errors": 0, + "timeouts": 0, + "uptime": 1588, + "online": 0 + } + ] +} \ No newline at end of file diff --git a/RVO16/report_data.log b/RVO16/report_data.log new file mode 100755 index 0000000..f227606 --- /dev/null +++ b/RVO16/report_data.log @@ -0,0 +1,2191 @@ +{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-09T18:10:18.411Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-09T19:10:18.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-09T20:10:18.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-09T21:10:18.407Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-09T22:10:18.407Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-09T23:10:18.407Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T00:10:18.409Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T01:10:19.412Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T02:10:19.413Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T03:10:19.413Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T04:10:19.413Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T07:33:36.911Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T08:33:36.911Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T09:33:36.911Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T10:33:36.912Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T11:33:36.912Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T12:33:36.912Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T13:33:36.912Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T14:33:36.912Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T15:33:36.913Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T17:53:33.407Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T18:53:33.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T19:53:33.407Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T20:53:33.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T21:53:33.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T22:53:33.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-10T23:53:33.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T00:53:33.406Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T01:53:34.452Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T02:53:34.452Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T03:53:34.452Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T04:53:34.453Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T07:37:54.032Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T08:37:54.032Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T09:37:54.033Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T10:37:54.034Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T11:37:54.034Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T12:37:54.034Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T13:37:54.035Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T14:37:54.036Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T15:37:54.036Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T17:46:59.301Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T18:46:59.300Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T19:46:59.299Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T20:46:59.300Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T21:46:59.301Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T22:46:59.301Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-11T23:46:59.301Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T00:46:59.301Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T01:47:01.307Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T02:47:01.309Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T03:47:01.309Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T04:47:01.310Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T07:38:54.619Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T08:38:54.620Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T09:38:54.620Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T10:38:54.621Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T11:38:54.621Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T12:38:54.622Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T13:38:54.623Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T14:38:54.624Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T15:38:54.624Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T17:44:59.085Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T18:44:59.083Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T19:44:59.084Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T20:44:59.085Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T21:44:59.085Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T22:44:59.084Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-12T23:44:59.085Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T00:44:59.086Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T01:45:00.080Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T02:45:00.080Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T03:45:00.081Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T04:45:00.082Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T07:40:21.933Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T08:40:21.932Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T09:40:21.932Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T10:40:21.934Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T11:40:21.932Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T12:40:21.933Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T13:40:21.934Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T14:40:21.934Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T15:40:21.934Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T17:44:40.288Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T18:44:40.293Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T19:44:40.288Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T20:44:40.293Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T21:44:40.287Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T22:44:40.289Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-13T23:44:40.288Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T00:44:40.288Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T01:44:41.253Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T02:44:41.254Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T03:44:41.255Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T04:44:41.255Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870", + "3710", + "3726" + ], + "night_dimming=0": [ + "4096", + "4764" + ], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T07:42:06.909Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T08:42:06.909Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T09:42:06.909Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T10:42:06.910Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T11:42:06.910Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T12:42:06.911Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T13:42:06.911Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T14:42:06.911Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T15:42:06.912Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T17:41:02.972Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T18:41:02.971Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T19:41:02.972Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T20:41:02.972Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T21:41:02.971Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "3870" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T22:56:55.788Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-14T23:56:55.789Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T00:56:55.785Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T01:56:57.426Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T02:56:57.424Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T03:56:57.425Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T04:56:57.424Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T08:30:11.791Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T09:30:11.791Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T10:30:11.791Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T11:30:11.790Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T12:30:11.791Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T13:30:11.791Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T14:30:11.792Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T15:30:11.792Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [], + "night_dimming=0": [], + "night_power=0": [], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T17:40:38.689Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T18:40:38.689Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T19:40:38.685Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T20:40:38.687Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T21:40:38.693Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T22:40:38.688Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +}{ + "name": "rvo_senica_16_10.0.0.131", + "time": "2025-10-15T23:40:38.689Z", + "report": { + "contactor": { + "off": [], + "on": [] + }, + "night_no_data": [ + "16/76_1L_3870_NEMA" + ], + "night_dimming=0": [], + "night_power=0": [ + "16/114_1L_4096_NEMA", + "16/116_1L_4764_NEMA" + ], + "day_24/7_no_data": [], + "day_24/7_dimming>0": [], + "day_24/7_power>0": [] + } +} \ No newline at end of file