diff --git a/RVO13/addSwitch.py b/RVO13/addSwitch.py
new file mode 100755
index 0000000..c35e96b
--- /dev/null
+++ b/RVO13/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/RVO13/cloud_topic.py b/RVO13/cloud_topic.py
new file mode 100755
index 0000000..77c31f1
--- /dev/null
+++ b/RVO13/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/RVO13/config b/RVO13/config
new file mode 100755
index 0000000..cd0a8a9
--- /dev/null
+++ b/RVO13/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/RVO13/createNode.py b/RVO13/createNode.py
new file mode 100755
index 0000000..a8cea91
--- /dev/null
+++ b/RVO13/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[3] + 1 : i[4] ]
+ 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/RVO13/databases/accelerometer_db.js b/RVO13/databases/accelerometer_db.js
new file mode 100755
index 0000000..fdfc7fd
--- /dev/null
+++ b/RVO13/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/RVO13/databases/modbus_config.js b/RVO13/databases/modbus_config.js
new file mode 100755
index 0000000..b73116a
--- /dev/null
+++ b/RVO13/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/RVO13/databases/nodes.table b/RVO13/databases/nodes.table
new file mode 100755
index 0000000..ac9b259
--- /dev/null
+++ b/RVO13/databases/nodes.table
@@ -0,0 +1,136 @@
+node:number|pole_number:string|node_type:string|tbname:string|line:number|profile:string|processed:boolean|status:boolean|time_of_last_communication:number
++|3271|63|NEMA|XMBbew5z4ELrZa2mRAd38x78vPN6gy3DdVYlpKjq|1||1|1|1760573731205|
++|3140|84|NEMA|dz4ojlpP85JMgDLZWkQJR37aKYqQexEr62GXRV1y|1||1|1|1760573859208|
++|3141|44|NEMA|EjgWGnXaLy9opPOz20n4dQ786BlYM3w1deVQvbKr|1||1|1|1760573859528|
++|3143|89|NEMA|B5EoxeMVp4zwr8nqW0GB9GARjvD1PNamOGbLg63Z|1||1|1|1760573860806|
++|3128|23|NEMA|pE5X8NQPaow6vlOZxk6aJw0q42ezGBMyWgDVjR3L|1||1|1|1760573858426|
++|3134|87|NEMA|K94XLav1glVRnyQ6r01PR3Ame3YJwBxM5oOzdP2j|1||1|1|1760573859033|
++|4250|28|NEMA|OzNMgZ9n43qPbjXmy7zw6GA2DKdYvW5e6pxGRrVa|1||1|1|1760573849462|
++|3145|86|NEMA|gRoJEyXVx4qD9er287L4eE7wBzGldaPjLWQKm3Mv|1||1|1|1760573861222|
++|3150|30|NEMA|RO8rjaBDy21qPQJzW7om2D0pK3xmNleVZg9Ed4Gw|1||1|1|1760573861653|
++|3151|88|NEMA|d9x2V5LGYBzXp4mMRAOm6VkPloaqJwnQj6DgrNe3|1||1|1|1760573861909|
++|3153|85|NEMA|d5xjWYMwEJon6rLlK7yE8x7qgV4DaOeNB9ZX3Gzb|1||1|1|1760573862117|
++|3155|26|NEMA|JzwxZXOvDj1bVrN4nkW5o8A8qdyBl3MRKLpGPgaQ|1||1|1|1760573862868|
++|3184|68|NEMA|zrR51V2ajQ9ZLygPKkEMY1kYDq38xOJolENBXGnv|1||1|1|1760573863155|
++|3185|67|NEMA|5dBNwRp9graYJxZn409N8vklVov1b2QLPDqGm6XK|1||1|1|1760573865536|
++|3188|69|NEMA|BaY3Xpy1EbKGjLq2O7ma497rx8owgQz9P4dDJRmN|1||1|1|1760573869403|
++|3196|27|NEMA|g9OxBZ5KRwNznlY6pAppYmAWXvjdEL4eGQobMDy2|1||1|1|1760574145845|
++|3197|24|NEMA|6lQGaY9RDywdVzObj0Pa5rkPg4NBn3exEK51LWZq|1||1|1|1760574146036|
++|3275|33|NEMA|1JMYvnx2RzKEo4aWQ7DGLzkL8yZV3m9NBePXbrdj|1||1|1|1760574203143|
++|3301|64|NEMA|gYbDLqlyZVoRerQpB72MB4kWJnwM5z24POKa8Exj|1||1|1|1760573734050|
++|3302|60B|NEMA|E6Kg9oDnLWyzPRMva7v5K9kJxp4VG58qO2w1lZYe|1||1|1|1760573734369|
++|3303|60A|NEMA|rDbQ84xzwgdqEoPm3kbExD09anOZY1RXyBv2LVM6|1||1|1|1760573736622|
++|3304|61|NEMA|roKgWqY95V3mXMRzyAjKbn0bLjexpJPvaGDBw826|1||1|1|1760573737117|
++|3307|62|NEMA|nJL5lPMwBx23YpqRe0rp9b7damXvWVbOrD4gNzy8|1||1|1|1760573744308|
++|3308|54|NEMA|3a5oqJN1bgnx4Ol9dk89K17ByE6jQ8mKDWMpGrLV|1||1|1|1760573744643|
++|3309|56|NEMA|wvKJdZML6mXP4DzWBAXxLVAjxNloa5g23Ve9Y1ry|1||1|1|1760573744867|
++|3310|58|NEMA|PLBJzmK1r3Gynd6OW0gK3q0e5wV4vx9bDEqNgYR8|1||1|1|1760573747775|
++|3311|57|07-Repeater|Nzp2OoJlqn6r1ZgvdA3BMv7abBwP5G4eE3RQmyxD|1||1|1|1760573729432|
++|3312|55|NEMA|EjgWGnXaLy9opPOz20n4dd786BlYM3w1deVQvbKr|1||1|1|1760573748638|
++|3313|73B|NEMA|6lQGaY9RDywdVzObj0PaPbkPg4NBn3exEK51LWZq|1||1|1|1760573749053|
++|3314|94|NEMA|EjgWGnXaLy9opPOz20n45d786BlYM3w1deVQvbKr|1||1|1|1760573749325|
++|3315|79|NEMA|RvmwNz8QPblKp41GD7lKeYkJrLVYoBO92dMegn6W|1||1|1|1760573749485|
++|3316|83A|NEMA|1JMYvnx2RzKEo4aWQ7DG2XkL8yZV3m9NBePXbrdj|1||1|1|1760573749724|
++|3317|70B|NEMA|apKVJBwOyrP35m2lv7KYKz0YXbeWNd64En9GxRqg|1||1|1|1760573753016|
++|2726|90|NEMA|aw4eELG2DlPMdn1JW0BMrQAqQXOZRN3xB5yp8VKr|1||1|1|1760573857394|
++|3319|70A|NEMA|DbQY6zyveZRwK5drV0Z8n87joE4XJM83N9xl2nWq|1||1|1|1760573753639|
++|3320|83B|NEMA|PjLblDgRBO6WQqnxmkJ1Bb0Jv3ewZN4p5a89yKdY|1||1|1|1760573754470|
++|3321|81|NEMA|3JjOWdylwgNLzxVab7Na5JkZ2vG64rq8PEB5QmDo|1||1|1|1760573757522|
++|3322|77|NEMA|OzNMgZ9n43qPbjXmy7zwneA2DKdYvW5e6pxGRrVa|1||1|1|1760573757761|
++|3324|82|NEMA|Z5KyJe9nEg1QNbWlX0w4xPkoDjBLdqzR83VGv624|1||1|1|1760573614021|
++|3325|78|NEMA|JX1ObgmqGZ54DMyYL7aDjlkEVdve38WKRzwjNrQ9|1||1|1|1760573614213|
++|3326|70C|NEMA|o9vbeQlLMVg8j5dq4keLYK0NxZpEmnXzwYKO1ar2|1||1|1|1760573617855|
++|3327|97|NEMA|52dD6ZlV1QaOpRBmbAqGRNkKnGzWMLj4eJq38Pgo|1||1|1|1760573618063|
++|4152|80|NEMA|RO8rjaBDy21qPQJzW7om610pK3xmNleVZg9Ed4Gw|1||1|1|1760573849254|
++|3442|101|NEMA|XMBbew5z4ELrZa2mRAd32x78vPN6gy3DdVYlpKjq|1||1|1|1760574093644|
++|3331|96|NEMA|PLBJzmK1r3Gynd6OW0gK9q0e5wV4vx9bDEqNgYR8|1||1|1|1760573761603|
++|3332|4|Kamera|EjgWGnXaLy9opPOz20n4oQ786BlYM3w1deVQvbKr|1||1|1|1760573767316|
++|3333|98B|NEMA|E6Kg9oDnLWyzPRMva7v5l9kJxp4VG58qO2w1lZYe|1||1|1|1760573767476|
++|3334|9|NEMA|rDbQ84xzwgdqEoPm3kbEoW09anOZY1RXyBv2LVM6|1||1|1|1760573767636|
++|3335|102|NEMA|gYbDLqlyZVoRerQpB72MW4kWJnwM5z24POKa8Exj|1||1|1|1760573767812|
++|3336|95A|NEMA|wvKJdZML6mXP4DzWBAXxVVAjxNloa5g23Ve9Y1ry|1||1|1|1760573768115|
++|3337|100|NEMA|nJL5lPMwBx23YpqRe0rpWb7damXvWVbOrD4gNzy8|1||1|1|1760573768291|
++|3339|98A|NEMA|rDbQ84xzwgdqEoPm3kbErD09anOZY1RXyBv2LVM6|1||1|1|1760573772893|
++|4014|71|NEMA|gP1eOZVj3Q9lv5aDEk45za7rdpqW8yLm2BbKzJxM|1||1|1|1760573712638|
++|3344|74|NEMA|m6EYyZoJ4gWexdjVPAR5WV7RDOq9wv2N5XzKGplr|1||1|1|1760573647207|
++|2887|76|NEMA|g9OxBZ5KRwNznlY6pAppPOAWXvjdEL4eGQobMDy2|1||1|1|1760573857659|
++|3346|75|NEMA|JzwxZXOvDj1bVrN4nkW5xzA8qdyBl3MRKLpGPgaQ|1||1|1|1760573779061|
++|3347|91|NEMA|ZmRwd93QL4gaezxEbAx2Vbk1prn2XjlPvGyqJ6BO|1||1|1|1760573779252|
++|4119|72|NEMA|2O14VBzl8aDmWdNw3A59aGAGyZ5qLJoEMpj6R9ng|1||1|1|1760573849046|
++|3351|73A|NEMA|pE5X8NQPaow6vlOZxk6alz0q42ezGBMyWgDVjR3L|1||1|1|1760573918823|
++|3363|39|NEMA|B5EoxeMVp4zwr8nqW0GBL5ARjvD1PNamOGbLg63Z|1||1|1|1760573780035|
++|3364|46|NEMA|PLBJzmK1r3Gynd6OW0gK3z0e5wV4vx9bDEqNgYR8|1||1|1|1760573780227|
++|3365|38|NEMA|d9x2V5LGYBzXp4mMRAOmL1kPloaqJwnQj6DgrNe3|1||1|1|1760573780387|
++|3366|50|NEMA|roKgWqY95V3mXMRzyAjKb60bLjexpJPvaGDBw826|1||1|1|1760573780595|
++|3367|47|NEMA|52dD6ZlV1QaOpRBmbAqGMbkKnGzWMLj4eJq38Pgo|1||1|1|1760573781889|
++|3368|48|NEMA|rDbQ84xzwgdqEoPm3kbExW09anOZY1RXyBv2LVM6|1||1|1|1760573782368|
++|3369|20|NEMA|o9vbeQlLMVg8j5dq4keLOy0NxZpEmnXzwYKO1ar2|1||1|1|1760573782736|
++|3370|19|NEMA|apKVJBwOyrP35m2lv7KYmd0YXbeWNd64En9GxRqg|1||1|1|1760573782911|
++|3371|35|NEMA|d5xjWYMwEJon6rLlK7yE5w7qgV4DaOeNB9ZX3Gzb|1||1|1|1760573783231|
++|3386|45B|NEMA|Nzp2OoJlqn6r1ZgvdA3BME7abBwP5G4eE3RQmyxD|1||1|1|1760573783758|
++|3388|37|NEMA|K94XLav1glVRnyQ6r01P2WAme3YJwBxM5oOzdP2j|1||1|1|1760573785468|
++|3389|36|NEMA|gRoJEyXVx4qD9er287L4LO7wBzGldaPjLWQKm3Mv|1||1|1|1760573785724|
++|3390|31|NEMA|3JjOWdylwgNLzxVab7NaLwkZ2vG64rq8PEB5QmDo|1||1|1|1760573785884|
++|3391|18|NEMA|DbQY6zyveZRwK5drV0Z8oj7joE4XJM83N9xl2nWq|1||1|1|1760573786155|
++|3393|22|NEMA|2O14VBzl8aDmWdNw3A59JOAGyZ5qLJoEMpj6R9ng|1||1|1|1760573927915|
++|3394|53|NEMA|eod9aRWLVl34Gx1Dn7VNL972rz6qjgmpEXwQJN5Z|1||1|1|1760573928331|
++|3338|51|NEMA|nJL5lPMwBx23YpqRe0rp947damXvWVbOrD4gNzy8|1||1|1|1760573768467|
++|3397|40|NEMA|aw4eELG2DlPMdn1JW0BMaZAqQXOZRN3xB5yp8VKr|1||1|1|1760573928906|
++|3401|32|NEMA|Z5KyJe9nEg1QNbWlX0w4eMkoDjBLdqzR83VGv624|1||1|1|1760573808573|
++|3402|49|NEMA|E6Kg9oDnLWyzPRMva7v5KykJxp4VG58qO2w1lZYe|1||1|1|1760573808845|
++|3403|42|NEMA|eod9aRWLVl34Gx1Dn7VNLD72rz6qjgmpEXwQJN5Z|1||1|1|1760573790421|
++|3404|34B|NEMA|dz4ojlpP85JMgDLZWkQJLj7aKYqQexEr62GXRV1y|1||1|1|1760573878494|
++|3405|34A|NEMA|PjLblDgRBO6WQqnxmkJ1La0Jv3ewZN4p5a89yKdY|1||1|1|1760573809388|
++|3406|12|NEMA|nJL5lPMwBx23YpqRe0rpo47damXvWVbOrD4gNzy8|1||1|1|1760574075652|
++|3407|29B|NEMA|RvmwNz8QPblKp41GD7lKjKkJrLVYoBO92dMegn6W|1||1|1|1760573809819|
++|3409|13B|NEMA|gYbDLqlyZVoRerQpB72MJvkWJnwM5z24POKa8Exj|1||1|1|1760574076243|
++|3410|29A|NEMA|JX1ObgmqGZ54DMyYL7aDLJkEVdve38WKRzwjNrQ9|1||1|1|1760574076451|
++|3411|14|NEMA|WlVJBygjDZMeKX3vnAMRKL08NqdmG2x1Y69LQ4P5|1||1|1|1760574076818|
++|3412|15|NEMA|5dBNwRp9graYJxZn409Nx8klVov1b2QLPDqGm6XK|1||1|1|1760574076978|
++|3413|16|NEMA|zrR51V2ajQ9ZLygPKkEMdWkYDq38xOJolENBXGnv|1||1|1|1760574077186|
++|3414|17|NEMA|BaY3Xpy1EbKGjLq2O7mao27rx8owgQz9P4dDJRmN|1||1|1|1760574077393|
++|3415|13A|NEMA|XMBbew5z4ELrZa2mRAd3o978vPN6gy3DdVYlpKjq|1||1|1|1760574091391|
++|3416|3|NEMA|3a5oqJN1bgnx4Ol9dk891q7ByE6jQ8mKDWMpGrLV|1||1|1|1760573901567|
++|3417|6|NEMA|Nzp2OoJlqn6r1ZgvdA3BJE7abBwP5G4eE3RQmyxD|1||1|1|1760573904251|
++|3418|7|NEMA|PLBJzmK1r3Gynd6OW0gKoz0e5wV4vx9bDEqNgYR8|1||1|1|1760574092349|
++|3419|2|NEMA|eod9aRWLVl34Gx1Dn7VNzD72rz6qjgmpEXwQJN5Z|1||1|1|1760574092509|
++|3420|103|NEMA|zdQO8GwxDqjRgP4137YV8XANyKlpem2nL65rvVJY|1||1|1|1760574092653|
++|3628|104|NEMA|WlVJBygjDZMeKX3vnAMR4P08NqdmG2x1Y69LQ4P5|1||1|1|1760573652033|
++|3422|5|NEMA|wvKJdZML6mXP4DzWBAXxo8AjxNloa5g23Ve9Y1ry|1||1|1|1760574092813|
++|3154|11|NEMA|roKgWqY95V3mXMRzyAjKo60bLjexpJPvaGDBw826|1||1|1|1760573862676|
++|3425|1|NEMA|ZmRwd93QL4gaezxEbAx2nwk1prn2XjlPvGyqJ6BO|1||1|1|1760574093292|
++|3513|116|IP65|2O14VBzl8aDmWdNw3A59QDAGyZ5qLJoEMpj6R9ng|1||1|1|1760573812823|
++|3516|115|IP65|6lQGaY9RDywdVzObj0PamXkPg4NBn3exEK51LWZq|1||1|1|1760573814309|
++|3521|111|IP65|DbQY6zyveZRwK5drV0Z8pr7joE4XJM83N9xl2nWq|1||1|1|1760573816339|
++|3526|107|NEMA|JzwxZXOvDj1bVrN4nkWw1Lk8qdyBl3MRKLpGPgaQ|1||1|1|1760573819119|
++|3527|110|IP65|BaY3Xpy1EbKGjLq2O7ma2b7rx8owgQz9P4dDJRmN|1||1|1|1760573819902|
++|3534|114|IP65|gP1eOZVj3Q9lv5aDEk45Qn7rdpqW8yLm2BbKzJxM|1||1|1|1760573991126|
++|3544|113|IP65|o9vbeQlLMVg8j5dq4keL3D0NxZpEmnXzwYKO1ar2|1||1|1|1760573992772|
++|3552|112|IP65|apKVJBwOyrP35m2lv7KY260YXbeWNd64En9GxRqg|1||1|1|1760573996607|
++|3561|109|IP65|BaY3Xpy1EbKGjLq2O7maV97rx8owgQz9P4dDJRmN|1||1|1|1760573997150|
++|3565|117|IP65|pE5X8NQPaow6vlOZxk6aQb0q42ezGBMyWgDVjR3L|1||1|1|1760574105196|
++|3567|40/1|IP65|gP1eOZVj3Q9lv5aDEk4EXZ7rdpqW8yLm2BbKzJxM|1||1|1|1760573651266|
++|3597|75/1|prechod|WlVJBygjDZMeKX3vnAMzgL08NqdmG2x1Y69LQ4P5|1||1|1|1760573651522|
++|3328|71/1|prechod|gYbDLqlyZVoRerQpB72rzv7WJnwM5z24POKa8Exj|1||1|1|1760573884662|
++|3847|54/1|prechod|XMBbew5z4ELrZa2mRAd5r908vPN6gy3DdVYlpKjq|1||1|1|1760574112642|
++|3822|71/2|prechod|zdQO8GwxDqjRgP4137Y1bo7NyKlpem2nL65rvVJY|1||1|1|1760573787689|
++|4361|105|NEMA|5dBNwRp9graYJxZn409NMvklVov1b2QLPDqGm6XK|1||1|1|1760573850277|
++|4362|106|NEMA|zrR51V2ajQ9ZLygPKkEMW1kYDq38xOJolENBXGnv|1||1|1|1760573850676|
++|4363|10|NEMA|E6Kg9oDnLWyzPRMva7v5VykJxp4VG58qO2w1lZYe|1||1|1|1760573851235|
++|4364|25|NEMA|m6EYyZoJ4gWexdjVPAR5PL7RDOq9wv2N5XzKGplr|1||1|1|1760573851411|
++|4365|59|NEMA|52dD6ZlV1QaOpRBmbAqGMNkKnGzWMLj4eJq38Pgo|1||1|1|1760573851747|
++|4366|65|NEMA|zdQO8GwxDqjRgP4137YVLXANyKlpem2nL65rvVJY|1||1|1|1760573853121|
++|3866|118|prechod|RvmwNz8QPblKp41GD7lDZK7JrLVYoBO92dMegn6W|1||1|0|1760287656776|
++|4093|60/1|prechod|JX1ObgmqGZ54DMyYL7a9gJ7EVdve38WKRzwjNrQ9|1||1|1|1760574172864|
++|4310|78/1|IP65|2O14VBzl8aDmWdNw3A51WlAGyZ5qLJoEMpj6R9ng|1||1|1|1760573849829|
++|4424|108|IP65|m6EYyZoJ4gWexdjVPARNjPARDOq9wv2N5XzKGplr|1||1|1|1760573853664|
++|3387|41|NEMA|ZmRwd93QL4gaezxEbAx24wk1prn2XjlPvGyqJ6BO|1||1|1|1760573784126|
++|3392|45A|NEMA|wvKJdZML6mXP4DzWBAXxL8AjxNloa5g23Ve9Y1ry|1||1|1|1760573927356|
++|3323|95B|NEMA|Nzp2OoJlqn6r1ZgvdA3Bpv7abBwP5G4eE3RQmyxD|1||1|1|1760573613254|
++|3372|52|Kamera|ZmRwd93QL4gaezxEbAx24bk1prn2XjlPvGyqJ6BO|1||1|1|1760573783503|
++|3147|43|NEMA|3a5oqJN1bgnx4Ol9dk89Kq7ByE6jQ8mKDWMpGrLV|1||1|1|1760573861397|
++|3408|21|NEMA|gP1eOZVj3Q9lv5aDEk45JP7rdpqW8yLm2BbKzJxM|1||1|1|1760574076067|
++|3424|8|NEMA|52dD6ZlV1QaOpRBmbAqGobkKnGzWMLj4eJq38Pgo|1||1|1|1760574093148|
++|3300|66|NEMA|WlVJBygjDZMeKX3vnAMRLP08NqdmG2x1Y69LQ4P5|1||1|1|1760573733442|
++|3329|99|NEMA|roKgWqY95V3mXMRzyAjKZn0bLjexpJPvaGDBw826|1||1|1|1760573761165|
++|3399|13C|NEMA|zdQO8GwxDqjRgP4137YVooANyKlpem2nL65rvVJY|1||1|1|1760573929145|
diff --git a/RVO13/databases/nodes_original/nodes_original.table b/RVO13/databases/nodes_original/nodes_original.table
new file mode 100755
index 0000000..542ce21
--- /dev/null
+++ b/RVO13/databases/nodes_original/nodes_original.table
@@ -0,0 +1 @@
+[{"3271": "XMBbew5z4ELrZa2mRAd38x78vPN6gy3DdVYlpKjq"}, {"3140": "dz4ojlpP85JMgDLZWkQJR37aKYqQexEr62GXRV1y"}, {"3141": "EjgWGnXaLy9opPOz20n4dQ786BlYM3w1deVQvbKr"}, {"3143": "B5EoxeMVp4zwr8nqW0GB9GARjvD1PNamOGbLg63Z"}, {"3128": "pE5X8NQPaow6vlOZxk6aJw0q42ezGBMyWgDVjR3L"}, {"3134": "K94XLav1glVRnyQ6r01PR3Ame3YJwBxM5oOzdP2j"}, {"4250": "OzNMgZ9n43qPbjXmy7zw6GA2DKdYvW5e6pxGRrVa"}, {"3145": "gRoJEyXVx4qD9er287L4eE7wBzGldaPjLWQKm3Mv"}, {"3150": "RO8rjaBDy21qPQJzW7om2D0pK3xmNleVZg9Ed4Gw"}, {"3151": "d9x2V5LGYBzXp4mMRAOm6VkPloaqJwnQj6DgrNe3"}, {"3153": "d5xjWYMwEJon6rLlK7yE8x7qgV4DaOeNB9ZX3Gzb"}, {"3155": "JzwxZXOvDj1bVrN4nkW5o8A8qdyBl3MRKLpGPgaQ"}, {"3184": "zrR51V2ajQ9ZLygPKkEMY1kYDq38xOJolENBXGnv"}, {"3185": "5dBNwRp9graYJxZn409N8vklVov1b2QLPDqGm6XK"}, {"3188": "BaY3Xpy1EbKGjLq2O7ma497rx8owgQz9P4dDJRmN"}, {"3196": "g9OxBZ5KRwNznlY6pAppYmAWXvjdEL4eGQobMDy2"}, {"3197": "6lQGaY9RDywdVzObj0Pa5rkPg4NBn3exEK51LWZq"}, {"3275": "1JMYvnx2RzKEo4aWQ7DGLzkL8yZV3m9NBePXbrdj"}, {"3301": "gYbDLqlyZVoRerQpB72MB4kWJnwM5z24POKa8Exj"}, {"3302": "E6Kg9oDnLWyzPRMva7v5K9kJxp4VG58qO2w1lZYe"}, {"3303": "rDbQ84xzwgdqEoPm3kbExD09anOZY1RXyBv2LVM6"}, {"3304": "roKgWqY95V3mXMRzyAjKbn0bLjexpJPvaGDBw826"}, {"3307": "nJL5lPMwBx23YpqRe0rp9b7damXvWVbOrD4gNzy8"}, {"3308": "3a5oqJN1bgnx4Ol9dk89K17ByE6jQ8mKDWMpGrLV"}, {"3309": "wvKJdZML6mXP4DzWBAXxLVAjxNloa5g23Ve9Y1ry"}, {"3310": "PLBJzmK1r3Gynd6OW0gK3q0e5wV4vx9bDEqNgYR8"}, {"3311": "Nzp2OoJlqn6r1ZgvdA3BMv7abBwP5G4eE3RQmyxD"}, {"3312": "EjgWGnXaLy9opPOz20n4dd786BlYM3w1deVQvbKr"}, {"3313": "6lQGaY9RDywdVzObj0PaPbkPg4NBn3exEK51LWZq"}, {"3314": "EjgWGnXaLy9opPOz20n45d786BlYM3w1deVQvbKr"}, {"3315": "RvmwNz8QPblKp41GD7lKeYkJrLVYoBO92dMegn6W"}, {"3316": "1JMYvnx2RzKEo4aWQ7DG2XkL8yZV3m9NBePXbrdj"}, {"3317": "apKVJBwOyrP35m2lv7KYKz0YXbeWNd64En9GxRqg"}, {"2726": "aw4eELG2DlPMdn1JW0BMrQAqQXOZRN3xB5yp8VKr"}, {"3319": "DbQY6zyveZRwK5drV0Z8n87joE4XJM83N9xl2nWq"}, {"3320": "PjLblDgRBO6WQqnxmkJ1Bb0Jv3ewZN4p5a89yKdY"}, {"3321": "3JjOWdylwgNLzxVab7Na5JkZ2vG64rq8PEB5QmDo"}, {"3322": "OzNMgZ9n43qPbjXmy7zwneA2DKdYvW5e6pxGRrVa"}, {"3324": "Z5KyJe9nEg1QNbWlX0w4xPkoDjBLdqzR83VGv624"}, {"3325": "JX1ObgmqGZ54DMyYL7aDjlkEVdve38WKRzwjNrQ9"}, {"3326": "o9vbeQlLMVg8j5dq4keLYK0NxZpEmnXzwYKO1ar2"}, {"3327": "52dD6ZlV1QaOpRBmbAqGRNkKnGzWMLj4eJq38Pgo"}, {"4152": "RO8rjaBDy21qPQJzW7om610pK3xmNleVZg9Ed4Gw"}, {"3442": "XMBbew5z4ELrZa2mRAd32x78vPN6gy3DdVYlpKjq"}, {"3331": "PLBJzmK1r3Gynd6OW0gK9q0e5wV4vx9bDEqNgYR8"}, {"3332": "EjgWGnXaLy9opPOz20n4oQ786BlYM3w1deVQvbKr"}, {"3333": "E6Kg9oDnLWyzPRMva7v5l9kJxp4VG58qO2w1lZYe"}, {"3334": "rDbQ84xzwgdqEoPm3kbEoW09anOZY1RXyBv2LVM6"}, {"3335": "gYbDLqlyZVoRerQpB72MW4kWJnwM5z24POKa8Exj"}, {"3336": "wvKJdZML6mXP4DzWBAXxVVAjxNloa5g23Ve9Y1ry"}, {"3337": "nJL5lPMwBx23YpqRe0rpWb7damXvWVbOrD4gNzy8"}, {"3339": "rDbQ84xzwgdqEoPm3kbErD09anOZY1RXyBv2LVM6"}, {"4014": "gP1eOZVj3Q9lv5aDEk45za7rdpqW8yLm2BbKzJxM"}, {"3344": "m6EYyZoJ4gWexdjVPAR5WV7RDOq9wv2N5XzKGplr"}, {"2887": "g9OxBZ5KRwNznlY6pAppPOAWXvjdEL4eGQobMDy2"}, {"3346": "JzwxZXOvDj1bVrN4nkW5xzA8qdyBl3MRKLpGPgaQ"}, {"3347": "ZmRwd93QL4gaezxEbAx2Vbk1prn2XjlPvGyqJ6BO"}, {"4119": "2O14VBzl8aDmWdNw3A59aGAGyZ5qLJoEMpj6R9ng"}, {"3351": "pE5X8NQPaow6vlOZxk6alz0q42ezGBMyWgDVjR3L"}, {"3363": "B5EoxeMVp4zwr8nqW0GBL5ARjvD1PNamOGbLg63Z"}, {"3364": "PLBJzmK1r3Gynd6OW0gK3z0e5wV4vx9bDEqNgYR8"}, {"3365": "d9x2V5LGYBzXp4mMRAOmL1kPloaqJwnQj6DgrNe3"}, {"3366": "roKgWqY95V3mXMRzyAjKb60bLjexpJPvaGDBw826"}, {"3367": "52dD6ZlV1QaOpRBmbAqGMbkKnGzWMLj4eJq38Pgo"}, {"3368": "rDbQ84xzwgdqEoPm3kbExW09anOZY1RXyBv2LVM6"}, {"3369": "o9vbeQlLMVg8j5dq4keLOy0NxZpEmnXzwYKO1ar2"}, {"3370": "apKVJBwOyrP35m2lv7KYmd0YXbeWNd64En9GxRqg"}, {"3371": "d5xjWYMwEJon6rLlK7yE5w7qgV4DaOeNB9ZX3Gzb"}, {"3386": "Nzp2OoJlqn6r1ZgvdA3BME7abBwP5G4eE3RQmyxD"}, {"3388": "K94XLav1glVRnyQ6r01P2WAme3YJwBxM5oOzdP2j"}, {"3389": "gRoJEyXVx4qD9er287L4LO7wBzGldaPjLWQKm3Mv"}, {"3390": "3JjOWdylwgNLzxVab7NaLwkZ2vG64rq8PEB5QmDo"}, {"3391": "DbQY6zyveZRwK5drV0Z8oj7joE4XJM83N9xl2nWq"}, {"3393": "2O14VBzl8aDmWdNw3A59JOAGyZ5qLJoEMpj6R9ng"}, {"3394": "eod9aRWLVl34Gx1Dn7VNL972rz6qjgmpEXwQJN5Z"}, {"3338": "nJL5lPMwBx23YpqRe0rp947damXvWVbOrD4gNzy8"}, {"3397": "aw4eELG2DlPMdn1JW0BMaZAqQXOZRN3xB5yp8VKr"}, {"3401": "Z5KyJe9nEg1QNbWlX0w4eMkoDjBLdqzR83VGv624"}, {"3402": "E6Kg9oDnLWyzPRMva7v5KykJxp4VG58qO2w1lZYe"}, {"3403": "eod9aRWLVl34Gx1Dn7VNLD72rz6qjgmpEXwQJN5Z"}, {"3404": "dz4ojlpP85JMgDLZWkQJLj7aKYqQexEr62GXRV1y"}, {"3405": "PjLblDgRBO6WQqnxmkJ1La0Jv3ewZN4p5a89yKdY"}, {"3406": "nJL5lPMwBx23YpqRe0rpo47damXvWVbOrD4gNzy8"}, {"3407": "RvmwNz8QPblKp41GD7lKjKkJrLVYoBO92dMegn6W"}, {"3409": "gYbDLqlyZVoRerQpB72MJvkWJnwM5z24POKa8Exj"}, {"3410": "JX1ObgmqGZ54DMyYL7aDLJkEVdve38WKRzwjNrQ9"}, {"3411": "WlVJBygjDZMeKX3vnAMRKL08NqdmG2x1Y69LQ4P5"}, {"3412": "5dBNwRp9graYJxZn409Nx8klVov1b2QLPDqGm6XK"}, {"3413": "zrR51V2ajQ9ZLygPKkEMdWkYDq38xOJolENBXGnv"}, {"3414": "BaY3Xpy1EbKGjLq2O7mao27rx8owgQz9P4dDJRmN"}, {"3415": "XMBbew5z4ELrZa2mRAd3o978vPN6gy3DdVYlpKjq"}, {"3416": "3a5oqJN1bgnx4Ol9dk891q7ByE6jQ8mKDWMpGrLV"}, {"3417": "Nzp2OoJlqn6r1ZgvdA3BJE7abBwP5G4eE3RQmyxD"}, {"3418": "PLBJzmK1r3Gynd6OW0gKoz0e5wV4vx9bDEqNgYR8"}, {"3419": "eod9aRWLVl34Gx1Dn7VNzD72rz6qjgmpEXwQJN5Z"}, {"3420": "zdQO8GwxDqjRgP4137YV8XANyKlpem2nL65rvVJY"}, {"3628": "WlVJBygjDZMeKX3vnAMR4P08NqdmG2x1Y69LQ4P5"}, {"3422": "wvKJdZML6mXP4DzWBAXxo8AjxNloa5g23Ve9Y1ry"}, {"3154": "roKgWqY95V3mXMRzyAjKo60bLjexpJPvaGDBw826"}, {"3425": "ZmRwd93QL4gaezxEbAx2nwk1prn2XjlPvGyqJ6BO"}, {"3513": "2O14VBzl8aDmWdNw3A59QDAGyZ5qLJoEMpj6R9ng"}, {"3516": "6lQGaY9RDywdVzObj0PamXkPg4NBn3exEK51LWZq"}, {"3521": "DbQY6zyveZRwK5drV0Z8pr7joE4XJM83N9xl2nWq"}, {"3526": "JzwxZXOvDj1bVrN4nkWw1Lk8qdyBl3MRKLpGPgaQ"}, {"3527": "BaY3Xpy1EbKGjLq2O7ma2b7rx8owgQz9P4dDJRmN"}, {"3534": "gP1eOZVj3Q9lv5aDEk45Qn7rdpqW8yLm2BbKzJxM"}, {"3544": "o9vbeQlLMVg8j5dq4keL3D0NxZpEmnXzwYKO1ar2"}, {"3552": "apKVJBwOyrP35m2lv7KY260YXbeWNd64En9GxRqg"}, {"3561": "BaY3Xpy1EbKGjLq2O7maV97rx8owgQz9P4dDJRmN"}, {"3565": "pE5X8NQPaow6vlOZxk6aQb0q42ezGBMyWgDVjR3L"}, {"3567": "gP1eOZVj3Q9lv5aDEk4EXZ7rdpqW8yLm2BbKzJxM"}, {"3597": "WlVJBygjDZMeKX3vnAMzgL08NqdmG2x1Y69LQ4P5"}, {"3328": "gYbDLqlyZVoRerQpB72rzv7WJnwM5z24POKa8Exj"}, {"3847": "XMBbew5z4ELrZa2mRAd5r908vPN6gy3DdVYlpKjq"}, {"3822": "zdQO8GwxDqjRgP4137Y1bo7NyKlpem2nL65rvVJY"}, {"4361": "5dBNwRp9graYJxZn409NMvklVov1b2QLPDqGm6XK"}, {"4362": "zrR51V2ajQ9ZLygPKkEMW1kYDq38xOJolENBXGnv"}, {"4363": "E6Kg9oDnLWyzPRMva7v5VykJxp4VG58qO2w1lZYe"}, {"4364": "m6EYyZoJ4gWexdjVPAR5PL7RDOq9wv2N5XzKGplr"}, {"4365": "52dD6ZlV1QaOpRBmbAqGMNkKnGzWMLj4eJq38Pgo"}, {"4366": "zdQO8GwxDqjRgP4137YVLXANyKlpem2nL65rvVJY"}, {"3866": "RvmwNz8QPblKp41GD7lDZK7JrLVYoBO92dMegn6W"}, {"4093": "JX1ObgmqGZ54DMyYL7a9gJ7EVdve38WKRzwjNrQ9"}, {"4310": "2O14VBzl8aDmWdNw3A51WlAGyZ5qLJoEMpj6R9ng"}, {"4424": "m6EYyZoJ4gWexdjVPARNjPARDOq9wv2N5XzKGplr"}, {"3387": "ZmRwd93QL4gaezxEbAx24wk1prn2XjlPvGyqJ6BO"}, {"3392": "wvKJdZML6mXP4DzWBAXxL8AjxNloa5g23Ve9Y1ry"}, {"3323": "Nzp2OoJlqn6r1ZgvdA3Bpv7abBwP5G4eE3RQmyxD"}, {"3372": "ZmRwd93QL4gaezxEbAx24bk1prn2XjlPvGyqJ6BO"}, {"3147": "3a5oqJN1bgnx4Ol9dk89Kq7ByE6jQ8mKDWMpGrLV"}, {"3408": "gP1eOZVj3Q9lv5aDEk45JP7rdpqW8yLm2BbKzJxM"}, {"3424": "52dD6ZlV1QaOpRBmbAqGobkKnGzWMLj4eJq38Pgo"}, {"3300": "WlVJBygjDZMeKX3vnAMRLP08NqdmG2x1Y69LQ4P5"}, {"3329": "roKgWqY95V3mXMRzyAjKZn0bLjexpJPvaGDBw826"}, {"3399": "zdQO8GwxDqjRgP4137YVooANyKlpem2nL65rvVJY"}]
\ No newline at end of file
diff --git a/RVO13/databases/notifications.table b/RVO13/databases/notifications.table
new file mode 100755
index 0000000..f7c96cb
--- /dev/null
+++ b/RVO13/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/RVO13/databases/pins.table b/RVO13/databases/pins.table
new file mode 100755
index 0000000..6417b40
--- /dev/null
+++ b/RVO13/databases/pins.table
@@ -0,0 +1,15 @@
+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|...........
+*|relay1_05|state_of_contactor|4|...........
+*|28F46E9D0E00008B|temperature|0|...........
+*|twilight_sensor|twilight_sensor|0|...........
diff --git a/RVO13/databases/relays.table b/RVO13/databases/relays.table
new file mode 100755
index 0000000..97dd649
--- /dev/null
+++ b/RVO13/databases/relays.table
@@ -0,0 +1,6 @@
+line:number|tbname:string|contactor:number|profile:string
++|0|wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry|1||...........
++|1|d9x2V5LGYBzXp4mMRAOm41kPloaqJwnQj6DgrNe3|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|B5EoxeMVp4zwr8nqW0GBY5ARjvD1PNamOGbLg63Z|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|aw4eELG2DlPMdn1JW0BMvZAqQXOZRN3xB5yp8VKr|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}|...........
++|4|PLBJzmK1r3Gynd6OW0gKX20e5wV4vx9bDEqNgYR8|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/RVO13/databases/settings.table b/RVO13/databases/settings.table
new file mode 100755
index 0000000..3f855f0
--- /dev/null
+++ b/RVO13/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_13_ip123|en|28.023A9C0E0000|48.70826502|17.28455203|192.168.252.1|rvo_senica_13_ip123|aVbwODdQlqbtbkOg4sjM|1883|0|58|unipi|ttyUSB0|1|20|5|6|3|u123|0|1|1|...................................................
diff --git a/RVO13/databases/tbdata.nosql b/RVO13/databases/tbdata.nosql
new file mode 100755
index 0000000..ac5f399
--- /dev/null
+++ b/RVO13/databases/tbdata.nosql
@@ -0,0 +1,6 @@
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760509628558,"values":{"twilight_sensor":1141}}],"id":"2999967001hm71b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760509635207,"values":{"temperature":15.75}}],"id":"2999967002hm70b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261417,"values":{"_event":{"type":"notice","status":"new","source":{"func":"modbus_reader","component":"1699965957410","component_name":"Modbus reader","edge":"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry"},"message":{"sk":"rvo_senica_13_ip123: FLOW bol reštartovaný","en":"rvo_senica_13_ip123: FLOW has been restarted"},"message_data":""}}}],"id":"3000161001lf71b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261516,"values":{"edge_fw_version":"2025-10-08","maintenance_mode":false}}],"id":"3000161002lf70b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261529,"values":{"statecode":2,"power_mode":"Automatic"}}],"id":"3000161004lf70b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261589,"values":{"_event":{"type":"notice","status":"new","source":{"func":"rsPort.open()","component":"1699963668903","component_name":"DIDO_Controller","edge":"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry"},"message":{"sk":"rvo_senica_13_ip123: FLOW bol spustený","en":"rvo_senica_13_ip123: FLOW has been started "},"message_data":""}}}],"id":"3000161006lf70b"}
diff --git a/RVO13/databases/tbdatacloud.nosql b/RVO13/databases/tbdatacloud.nosql
new file mode 100755
index 0000000..f3537c4
--- /dev/null
+++ b/RVO13/databases/tbdatacloud.nosql
@@ -0,0 +1,3 @@
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261516,"values":{"edge_fw_version":"2025-10-08","maintenance_mode":false}}],"id":"3000161003lf71b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261529,"values":{"statecode":2,"power_mode":"Automatic"}}],"id":"3000161005lf71b"}
+-"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry":[{"ts":1760521261589,"values":{"_event":{"type":"notice","status":"new","source":{"func":"rsPort.open()","component":"1699963668903","component_name":"DIDO_Controller","edge":"wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry"},"message":{"sk":"rvo_senica_13_ip123: FLOW bol spustený","en":"rvo_senica_13_ip123: FLOW has been started "},"message_data":""}}}],"id":"3000161007lf71b"}
diff --git a/RVO13/databases/total_energy.js b/RVO13/databases/total_energy.js
new file mode 100755
index 0000000..dde340e
--- /dev/null
+++ b/RVO13/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/RVO13/debug.js b/RVO13/debug.js
new file mode 100755
index 0000000..9818194
--- /dev/null
+++ b/RVO13/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/RVO13/err.txt b/RVO13/err.txt
new file mode 100755
index 0000000..1b29018
--- /dev/null
+++ b/RVO13/err.txt
@@ -0,0 +1,33 @@
+[2025-09-23T14:03:10.813] [ERROR] errLogs - uncaughtException: Cannot read property 'getHours' of undefined
+[2025-09-23T14:03:10.814] [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-23T14:03:10.815] [ERROR] errLogs - uncaughtException: Cannot read property 'getHours' of undefined
+[2025-09-23T14:03:10.815] [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-23T14:03:10.825] [ERROR] errLogs - uncaughtException: Cannot read property 'getHours' of undefined
+[2025-09-23T14:03:10.826] [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-23T14:03:16.908] [ERROR] errLogs - uncaughtException: date.getHours is not a function
+[2025-09-23T14:03:16.909] [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-23T14:03:16.910] [ERROR] errLogs - uncaughtException: date.getHours is not a function
+[2025-09-23T14:03:16.910] [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-23T14:03:16.915] [ERROR] errLogs - uncaughtException: date.getHours is not a function
+[2025-09-23T14:03:16.916] [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/RVO13/flow/cloudmqttconnect.js b/RVO13/flow/cloudmqttconnect.js
new file mode 100755
index 0000000..b03491f
--- /dev/null
+++ b/RVO13/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)
+
+
+
+
+
`;
+
+
+
+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/RVO13/flow/cmd_manager.js b/RVO13/flow/cmd_manager.js
new file mode 100755
index 0000000..25912df
--- /dev/null
+++ b/RVO13/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 = `
+
+`;
+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 // key == nodeNumber
+
+ if (poleNumber && nodeType) {
+ 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/RVO13/flow/code.js b/RVO13/flow/code.js
new file mode 100755
index 0000000..63b31bf
--- /dev/null
+++ b/RVO13/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/RVO13/flow/comment.js b/RVO13/flow/comment.js
new file mode 100755
index 0000000..1e0cd13
--- /dev/null
+++ b/RVO13/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/RVO13/flow/count.js b/RVO13/flow/count.js
new file mode 100755
index 0000000..fa92ee9
--- /dev/null
+++ b/RVO13/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 = ``;
+
+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/RVO13/flow/db_connector.js b/RVO13/flow/db_connector.js
new file mode 100755
index 0000000..65ee94b
--- /dev/null
+++ b/RVO13/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 = ``;
+
+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/RVO13/flow/db_init.js b/RVO13/flow/db_init.js
new file mode 100755
index 0000000..b399878
--- /dev/null
+++ b/RVO13/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/RVO13/flow/debug.js b/RVO13/flow/debug.js
new file mode 100755
index 0000000..00cb259
--- /dev/null
+++ b/RVO13/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/RVO13/flow/designer.json b/RVO13/flow/designer.json
new file mode 100755
index 0000000..580f5a3
--- /dev/null
+++ b/RVO13/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": {
+ "datatype": "object",
+ "data": "{line: 3, command: \"turnOff\", force: true}"
+ },
+ "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": {
+ "data": "profile_nodes",
+ "datatype": "string"
+ },
+ "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": {
+ "data": "{line: 1, command: \"turnOn\", force: true}",
+ "datatype": "object"
+ },
+ "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": {
+ "datatype": "object",
+ "data": "{command: \"turnOnAlarm\"}"
+ },
+ "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": {
+ "datatype": "object",
+ "data": "{command: \"turnOffAlarm\"}"
+ },
+ "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": "858.88 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": {
+ "url": "http://192.168.252.2:8004/sentmessage",
+ "method": "POST",
+ "stringify": "json"
+ },
+ "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": "49.2% / 69.91 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": ""
+ },
+ "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": {
+ "url": "http://192.168.252.2:8004/slack",
+ "method": "POST",
+ "stringify": "json"
+ },
+ "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": {
+ "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\": \"\" } } } ] }",
+ "datatype": "object"
+ },
+ "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": ""
+ },
+ "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": {
+ "stringify": "json",
+ "method": "POST",
+ "url": "http://192.168.252.2:8015/daily_report"
+ },
+ "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": {
+ "stringify": "json",
+ "method": "POST",
+ "url": "http://192.168.252.2:8015/node_numbers"
+ },
+ "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
+}
diff --git a/RVO13/flow/dido_controller.js b/RVO13/flow/dido_controller.js
new file mode 100755
index 0000000..d16fb19
--- /dev/null
+++ b/RVO13/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 = ``;
+
+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/RVO13/flow/helper/DataToTbHandler.js b/RVO13/flow/helper/DataToTbHandler.js
new file mode 100755
index 0000000..716ef7b
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/ErrorToServiceHandler.js b/RVO13/flow/helper/ErrorToServiceHandler.js
new file mode 100755
index 0000000..2b27c32
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/db_helper.js b/RVO13/flow/helper/db_helper.js
new file mode 100755
index 0000000..40e796c
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/logger.js b/RVO13/flow/helper/logger.js
new file mode 100755
index 0000000..2585639
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/md5.js b/RVO13/flow/helper/md5.js
new file mode 100755
index 0000000..d3b0480
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/notification_reporter.js b/RVO13/flow/helper/notification_reporter.js
new file mode 100755
index 0000000..839c12c
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/register.js b/RVO13/flow/helper/register.js
new file mode 100755
index 0000000..fc1d008
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/serialport_helper.js b/RVO13/flow/helper/serialport_helper.js
new file mode 100755
index 0000000..7f5920d
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/suncalc.js b/RVO13/flow/helper/suncalc.js
new file mode 100755
index 0000000..c9ca56d
--- /dev/null
+++ b/RVO13/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/RVO13/flow/helper/utils.js b/RVO13/flow/helper/utils.js
new file mode 100755
index 0000000..dbffe45
--- /dev/null
+++ b/RVO13/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/RVO13/flow/httprequest.js b/RVO13/flow/httprequest.js
new file mode 100755
index 0000000..469c8cb
--- /dev/null
+++ b/RVO13/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)
+
+
@(Download the content in chunks)
+
@(Keep persistent cookies)
+
@(Disable DNS cache)
+
@(Keep alive connection)
+
+
+
+
@(Custom headers)
+
@(Cookies)
+
+
+
+
+
+
+
`;
+
+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/RVO13/flow/httpresponse.js b/RVO13/flow/httpresponse.js
new file mode 100755
index 0000000..160a3bb
--- /dev/null
+++ b/RVO13/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/RVO13/flow/httproute.js b/RVO13/flow/httproute.js
new file mode 100755
index 0000000..583a19d
--- /dev/null
+++ b/RVO13/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 = `
+
+
+
+
+
+
+
+
@(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/RVO13/flow/infosender.js b/RVO13/flow/infosender.js
new file mode 100755
index 0000000..587724f
--- /dev/null
+++ b/RVO13/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 = ``;
+
+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/RVO13/flow/modbus_reader.js b/RVO13/flow/modbus_reader.js
new file mode 100755
index 0000000..d6d9dad
--- /dev/null
+++ b/RVO13/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/RVO13/flow/monitorconsumption.js b/RVO13/flow/monitorconsumption.js
new file mode 100755
index 0000000..64cc58e
--- /dev/null
+++ b/RVO13/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/RVO13/flow/monitordisk.js b/RVO13/flow/monitordisk.js
new file mode 100755
index 0000000..f4fdaa0
--- /dev/null
+++ b/RVO13/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)
+
+
+
+
`;
+
+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/RVO13/flow/monitormemory.js b/RVO13/flow/monitormemory.js
new file mode 100755
index 0000000..2decbc4
--- /dev/null
+++ b/RVO13/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/RVO13/flow/nodesdb_changecheck.js b/RVO13/flow/nodesdb_changecheck.js
new file mode 100755
index 0000000..9adab62
--- /dev/null
+++ b/RVO13/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/RVO13/flow/show_dbdata.js b/RVO13/flow/show_dbdata.js
new file mode 100755
index 0000000..1e23ff7
--- /dev/null
+++ b/RVO13/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/RVO13/flow/slack_filter.js b/RVO13/flow/slack_filter.js
new file mode 100755
index 0000000..6618523
--- /dev/null
+++ b/RVO13/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/RVO13/flow/thermometer.js b/RVO13/flow/thermometer.js
new file mode 100755
index 0000000..fa015c6
--- /dev/null
+++ b/RVO13/flow/thermometer.js
@@ -0,0 +1,98 @@
+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/RVO13/flow/trigger.js b/RVO13/flow/trigger.js
new file mode 100755
index 0000000..27545a8
--- /dev/null
+++ b/RVO13/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/RVO13/flow/variables.txt b/RVO13/flow/variables.txt
new file mode 100755
index 0000000..e69de29
diff --git a/RVO13/flow/virtualwirein.js b/RVO13/flow/virtualwirein.js
new file mode 100755
index 0000000..38a4e42
--- /dev/null
+++ b/RVO13/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 = `
+`;
+
+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/RVO13/flow/virtualwireout.js b/RVO13/flow/virtualwireout.js
new file mode 100755
index 0000000..94a1e4f
--- /dev/null
+++ b/RVO13/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 = `
+`;
+
+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/RVO13/flow/wsmqttpublish.js b/RVO13/flow/wsmqttpublish.js
new file mode 100755
index 0000000..0eba804
--- /dev/null
+++ b/RVO13/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)
+
+
+
+
+
`;
+
+
+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/RVO13/flow_3_2_25/cloudmqttconnect.js b/RVO13/flow_3_2_25/cloudmqttconnect.js
new file mode 100755
index 0000000..d619784
--- /dev/null
+++ b/RVO13/flow_3_2_25/cloudmqttconnect.js
@@ -0,0 +1,374 @@
+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)
+
+
+
+
+
`;
+
+
+
+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 = null; //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);
+
+ 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)
+ {
+ //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/RVO13/flow_3_2_25/cmd_manager.js b/RVO13/flow_3_2_25/cmd_manager.js
new file mode 100755
index 0000000..a960aaa
--- /dev/null
+++ b/RVO13/flow_3_2_25/cmd_manager.js
@@ -0,0 +1,2988 @@
+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 = `
+
+`;
+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 ErrorToServiceHandler = require('./helper/ErrorToServiceHandler');
+ const { sendNotification } = require('./helper/notification_reporter');
+ const process = require('process');
+ const { errLogger, logger, monitor } = require('./helper/logger');
+
+ 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 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["0"] = minutes;
+ priorities["1"] = minutes;
+
+ minutes = 5;
+ priorities["74"] = minutes;
+ priorities["75"] = minutes;
+ priorities["76"] = minutes;
+ priorities["77"] = minutes;
+ priorities["78"] = minutes;
+ priorities["79"] = minutes;
+ priorities["84"] = minutes;
+
+ minutes = 10;
+ priorities["87"] = minutes;
+ priorities["6"] = minutes;
+ priorities["7"] = minutes;
+ priorities["80"] = minutes;
+ priorities["8"] = minutes;
+ priorities["3"] = minutes;
+ priorities["89"] = minutes;
+
+ //prikazy kt sa budu spustat na dany node - see config.js in terminal-oms.app. (1 - dimming)
+ let listOfCommands = [0, 1, 3, 6, 7, 8, 74, 75, 76, 77, 78, 79, 80, 84, 87, 89];
+
+ const errorHandler = new ErrorToServiceHandler();
+
+ 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 rvoTbName;
+
+ 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();
+
+ //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);
+
+ //SETTINGS.project_id, name: SETTINGS.rvo_name;
+ //const errorHandler = new ErrorToServiceHandler(instance, SEND_TO.infoSender);
+ errorHandler.setProjectsId(SETTINGS.project_id);
+ //const errorHandler = new ErrorToServiceHandler(instance);
+ //errorHandler.sendMessageToService("ahoj", 0);
+
+ let now = new Date();
+ console.log("CMD Manager 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();
+
+ //to ensure, edgeDateTime will be send to tb at full minute
+ customTasksInterval = setInterval(function() {
+ if (new Date().getSeconds() === 0) reportEdgeDateTimeAndNumberOfLuminaires();
+ }, 1000);
+
+ setCorrectTime = setInterval(setCorrectPlcTimeOnceADay, 60000 * 60); // 1 hour
+ setCorrectPlcTimeOnceADay();
+ }
+
+
+ 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,
+
+ //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_manager - 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.byte1 = 0;
+ params.byte2 = 0;
+ params.byte3 = 0;
+ params.byte4 = 96;
+ params.recipient = 1;
+ params.register = 8;
+ params.rw = 1;//write
+ params.timestamp = timestamp;
+ params.addMinutesToTimestamp = 0;
+ 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.byte1 = 0;
+ params.byte2 = 0;
+ params.byte3 = 0;
+ params.byte4 = 96;
+ params.recipient = 1;
+ params.register = 8;
+ params.rw = 1;//write
+ params.timestamp = timestamp;
+ params.addMinutesToTimestamp = 0;
+ 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).
+ */
+
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //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
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ 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.byte3 = 0;//ss
+ params.byte4 = 0;//
+ 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.byte1 = 0;
+ params.byte2 = 0;
+ params.byte3 = 0;//ss
+ 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
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //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
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+ //Time schedule settings na koniec
+ //if(nodeProfile.dusk_lux_sensor || nodeProfile.dawn_lux_sensor)
+ {
+
+ logger.debug("processNodeProfile: Threshold lux level for DUSK/DAWN", node);
+
+ let params = getParams(PRIORITY_TYPES.node_cmd);
+ params.type = "set_node_profile";
+ params.address = node;
+ params.register = 96;
+ params.recipient = 1;
+ params.rw = 1;//write
+ params.timestamp = timestamp;
+ params.addMinutesToTimestamp = 0;
+ 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(PRIORITY_TYPES.node_cmd);
+ params.type = "set_node_profile";
+ params.address = node;
+ params.register = 97;
+ params.recipient = 1;
+ params.rw = 1;//write
+ params.timestamp = timestamp;
+ params.addMinutesToTimestamp = 0;
+ 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.addMinutesToTimestamp = 0;
+ 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) {
+ //broadcast cas, o 3 sek neskor - status, brightness
+ //Po zapnutí línie broadcastovo aktualizovať predtým čas.
+
+ logger.debug("--->reportOnlineNodeStatus for line", line);
+
+ //return;
+
+ //run broadcast //Actual time
+ addMinutesToTimestamp = 0;
+
+ let params = {};
+
+ var d = new Date();
+ let hours = d.getHours();
+ let minutes = d.getMinutes();
+ let seconds = d.getSeconds();
+
+ let time = d.getTime(); // time in ms
+
+ params.address = 0xffffffff;//Broadcast
+ params.byte1 = hours;//h
+ params.byte2 = minutes;//m
+ params.byte3 = seconds;//s
+ params.byte4 = 0;
+ params.recipient = 2;//2 broadcast, address = 0
+ params.register = 87;//Actual time
+ params.rw = 1;//write
+
+ //other values
+ params.type = "cmd";
+ params.timestamp = Date.now() + 60000;
+ params.addMinutesToTimestamp = addMinutesToTimestamp;
+ params.info = "run broadcast: Actual time";
+
+ tasks.push(params);
+
+ let sec = 3;
+ setTimeout(function() {
+ //Po zapnutí línie - spraviť hromadný refresh stavu práve zapnutých svietidiel
+
+ 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].status) {
+ status = "OK";
+ nodesData[k].time_of_last_communication = time;
+ }
+
+ sendTelemetry({ status: status }, tbname, time);
+
+ //prud, vykon - current, input power pre liniu pre vsetky nody
+
+ //a pridame aj vyreportovanie dimmingu
+ {
+ let params = getParams(PRIORITY_TYPES.high_priority);
+
+ params.type = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 1;//dimming
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ params.timestamp = PRIORITY_TYPES.high_priority;
+ params.info = 'read dimming';
+ //params.debug = true;
+
+ tasks.push(params);
+ }
+
+ //Prúd
+ {
+ let params = getParams(PRIORITY_TYPES.high_priority);
+
+ params.type = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 75;//prud
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ params.timestamp = PRIORITY_TYPES.high_priority;
+ params.info = 'read current';
+ //params.debug = true;
+
+ tasks.push(params);
+ }
+
+ //výkon
+ {
+ let params = getParams(PRIORITY_TYPES.high_priority);
+
+ params.type = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 76;//výkon
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ params.timestamp = PRIORITY_TYPES.high_priority;
+ params.info = 'read power';
+ //params.debug = true;
+
+ tasks.push(params);
+ }
+ }
+ }
+ }, sec * 1000);
+ }
+
+
+ function reportOfflineNodeStatus(line) {
+ logger.debug("--->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();
+
+ // it happens, that some data did not get to tb after sending
+ // we setTimeout to make more time for db to process telemetry (eg 150 messages at once)
+ Object.keys(nodesData).forEach((node, index) => {
+
+ setTimeout(function() {
+
+ //potrebujem nody k danej linii
+ if (line == nodesData[node].line || line == undefined) {
+ let tbname = nodesData[node].tbname;
+ sendTelemetry(values, tbname, date)
+ }
+
+ }, (index + 1) * 1000);
+ })
+
+ }
+
+
+ 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) {
+ //report SETTINGS.edge_fw_version as fw_version
+ //report date as startdate
+
+ //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;
+ }
+
+ //load profiles pre vsetky linie:
+ let now = new Date();
+
+ if (processLineProfiles) {
+ //process line profiles
+ let keys = Object.keys(relaysData);
+ for (let i = 0; i < keys.length; i++) {
+ let line = parseInt(keys[i]); //line is turned off by default
+ 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(PRIORITY_TYPES.relay_profile);
+ params.type = "relay";
+ params.line = parseInt(line);
+ params.value = time_points[t].value;
+ params.tbname = relaysData[line].tbname;
+ params.timestamp = start_time.getTime();
+
+ params.addMinutesToTimestamp = 0;
+
+ // 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(PRIORITY_TYPES.terminal);
+ params.type = "relay";
+ params.line = parseInt(line);
+ params.tbname = relaysData[line].tbname;
+ params.value = currentValue;
+
+ params.timestamp = PRIORITY_TYPES.terminal;
+ params.addMinutesToTimestamp = 0;
+ 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);
+ errorHandler.sendMessageToService(profilestr + "-" + error, 0, "js_error");
+ }
+ }
+
+ }
+
+ //logger.debug("tasks:");
+ //logger.debug(tasks);
+ }
+
+
+ //PROCESS DEFAULT BROADCASTS
+ //Time of dusk, Time of dawn, Actual Time
+
+ if (processBroadcast) {
+ let addMinutesToTimestamp = 5;
+
+ {
+ //run broadcast Time of dusk
+ addMinutesToTimestamp = 60 * 3; //kazde 3 hodiny zisti novy dusk
+
+ let params = getParams(PRIORITY_TYPES.node_broadcast);
+
+ let sunCalcResult = calculateDuskDawn();
+ let dusk_hours = sunCalcResult["dusk_hours"];
+ let dusk_minutes = sunCalcResult["dusk_minutes"];
+
+ params.address = 0xffffffff;//broadcast
+ params.byte1 = dusk_hours;//h
+ params.byte2 = dusk_minutes;//m
+ params.byte3 = 0;//s
+ params.byte4 = 0;
+ params.recipient = 2;//2 broadcast,
+ params.register = 6;//Time of dusk - Reg 6
+ params.rw = 1;//write
+
+ //other values
+ params.type = "cmd";
+ params.timestamp = Date.now() + 60000;
+ params.addMinutesToTimestamp = addMinutesToTimestamp;
+ params.info = "Broadcast-duskTime";
+
+ tasks.push(params);
+ }
+
+ {
+
+ //run broadcast Time of dawn
+ addMinutesToTimestamp = 60 * 3; //kazde 3 hodiny zisti novy dawn
+
+ let params = getParams(PRIORITY_TYPES.node_broadcast);
+
+ let sunCalcResult = calculateDuskDawn();
+ let dawn_hours = sunCalcResult["dawn_hours"];
+ let dawn_minutes = sunCalcResult["dawn_minutes"];
+
+ params.address = 0xffffffff;//broadcast
+ params.byte1 = dawn_hours;//h
+ params.byte2 = dawn_minutes;//m
+ params.byte3 = 0;//s
+ params.byte4 = 0;
+ params.recipient = 2; //2 broadcast
+ params.register = 7;//Time of dawn - Reg 6
+ params.rw = 1;//write
+
+ //other values
+ params.type = "cmd";
+ params.timestamp = Date.now() + 60000;
+ params.addMinutesToTimestamp = addMinutesToTimestamp;
+ params.info = "Broadcast-dawnTime";
+
+ tasks.push(params);
+ }
+
+ {
+ //run broadcast Actual time
+ addMinutesToTimestamp = 5;
+
+ let params = getParams(PRIORITY_TYPES.node_broadcast);
+
+ var d = new Date();
+ let hours = d.getHours();
+ let minutes = d.getMinutes();
+ let seconds = d.getSeconds();
+
+ params.address = 0xffffffff;//broadcast
+ params.byte1 = hours;//h
+ params.byte2 = minutes;//m
+ params.byte3 = seconds;//s
+ params.byte4 = 0;
+ params.recipient = 2; //2 broadcast
+ params.register = 87;//Actual time
+ params.rw = 1;//write
+
+ //other values
+ params.type = "cmd";
+ params.timestamp = Date.now() + 60000;
+ params.addMinutesToTimestamp = addMinutesToTimestamp;
+ params.info = "run broadcast: Actual time";
+
+ tasks.push(params);
+ }
+
+ }
+
+ //process nodes & tasks
+ //reportovanie pre platformu
+ if (processNodes) {
+ for (let k in nodesData) {
+ let address = parseInt(k);
+ let tbname = nodesData[k].tbname;
+ let register = 0;
+
+ //logger.debug("generated cmd - buildTasks for node:", address);
+
+ //listOfCommands - READ
+ for (let i = 0; i < listOfCommands.length; i++) {
+ register = listOfCommands[i];
+
+ let params = getParams(PRIORITY_TYPES.node_cmd);
+
+ //core rpc values
+ params.address = address;
+ params.byte1 = 0;
+ params.byte2 = 0;
+ params.byte3 = 0;
+ params.byte4 = 0;
+ params.recipient = 1;
+ params.register = register;
+ params.rw = 0;
+
+ let addMinutesToTimestamp = priorities[register];
+
+ let timestampStart = PRIORITY_TYPES.node_cmd; //run imediatelly in function runTasks
+ if (addMinutesToTimestamp > 1) {
+ timestampStart = timestampStart + addMinutesToTimestamp * 60000;
+ }
+
+ //other values
+ params.type = "cmd";
+ params.tbname = tbname;
+ params.timestamp = timestampStart;
+ params.addMinutesToTimestamp = addMinutesToTimestamp;
+ params.info = "generated cmd - buildTasks (node)";
+
+ tasks.push(params);
+
+ }
+ }
+ }
+
+
+ //niektore ulohy sa vygeneruju iba 1x pri starte!!!
+ if (!init) return;
+
+
+ //Priebežne (raz za cca 5 minút) je potrebné vyčítať z Master nodu verziu jeho FW.
+ //Jedná sa o register 10. Rovnaká interpretácia ako pri FW verzii nodu.
+ //Adresa mastera je 0. V prípade že kedykoľvek nastane situácia že Master Node neodpovedá (napríklad pri vyčítaní telemetrie z nodu nevráti žiadne dáta),
+ //tak treba vyreportovať string "NOK".
+ {
+ let params = getParams(PRIORITY_TYPES.fw_detection);
+ params.type = "cmd-master";
+ params.register = 4;
+ params.address = 0;
+ params.timestamp = Date.now() + 60000;
+ params.addMinutesToTimestamp = 5;
+ params.tbname = SETTINGS.rvoTbName;
+ params.info = "Master node FW verzia";
+ //params.debug = true;
+
+ //this will set SETTINGS.masterNodeIsResponding
+
+ tasks.push(params);
+ }
+
+ //kazdu hodinu skontrolovat nastavenie profilov
+ {
+ let params = getParams(PRIORITY_TYPES.fw_detection);
+ params.type = "process_profiles";
+ params.timestamp = Date.now() + 60000;
+ 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 (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 Manager: 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("CMD Manager: 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_manager - !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 line = null;
+
+ //rpc related
+ if (nodesData[node] !== undefined) line = nodesData[node].line;
+ if (params.line !== undefined) line = params.line;
+
+ let repeatTask = false;
+ if (params.addMinutesToTimestamp > 0 || params.timePointName) repeatTask = true;
+
+ if (repeatTask) {
+ if (type === "cmd" || type === "cmd-master") {
+ //set next start time automatically
+ tasks[0].timestamp = currentTimestamp + tasks[0].addMinutesToTimestamp * 60000;
+ }
+ }
+ else {
+ tasks.shift();
+ }
+
+ //kontrola nespracovanych profilov nodov
+ if (type == "process_profiles") {
+ tasks[0].timestamp = currentTimestamp + tasks[0].addMinutesToTimestamp * 60000;
+
+ //vsetky linie kt. su zapnute, a spracuju sa 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, SHORT_INTERVAL);
+ return;
+ }
+
+ //zhodeny hlavny istic
+ let disconnected = false;
+ //if(rotary_switch_state == "Off") disconnected = true;
+
+ //state_of_breaker[line] - alebo istic linie
+ if (state_of_breaker.hasOwnProperty(line)) {
+ //if(state_of_breaker[line] == "Off") disconnected = true;
+ }
+
+ //toto sa reportuje po prijati dat z dido_controlera
+ if (disconnected) {
+ let values = { "status": "OFFLINE" };
+
+ logger.debug("disconnected", values);
+ logger.debug("rotary_switch_state", rotary_switch_state);
+ logger.debug("state_of_breaker", state_of_breaker[line]);
+
+ //report only once!
+ if (!disconnectedReport.hasOwnProperty(tbname)) disconnectedReport[tbname] = false;
+
+ if (!disconnectedReport[tbname]) {
+ sendTelemetry(values, tbname)
+ }
+
+ interval = setInterval(runTasks, SHORT_INTERVAL);
+
+ return;
+ }
+
+ disconnectedReport[tbname] = false;
+
+ const register = params.register;
+
+ //high_priority
+ if (!SETTINGS.masterNodeIsResponding) {
+ //ak neodpoveda, nebudeme vykonavat ziadne commands, okrem cmd-terminal, a fw version
+ errorHandler.sendMessageToService("Master node is not responding");
+
+ let stop = true;
+
+ //fw version - register == 4
+ if (type == "cmd-terminal" || register == 4) 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) {
+ interval = setInterval(runTasks, LONG_INTERVAL);
+ return;
+ }
+
+ // TODO: -> status offline for rvo if rotary_switch_state is OFF, this is source of errors
+ //
+ // let relayStatus = 1;
+ // if (relaysData[line] != undefined) {
+ // relayStatus = relaysData[line].contactor;
+ // }
+
+ // if (line == 0) relayStatus = 0;
+ // if (type == "cmd-terminal") relayStatus = 1;
+
+ // //check if rotary_switch_state == "Off"
+ // if (relayStatus == 0) {
+ // console.log("------------------------------------relayStatus", relayStatus, line);
+ // let values = { "status": "OFFLINE" };
+
+ // if(tbname) sendTelemetry(values, tbname)
+
+ // interval = setInterval(runTasks, SHORT_INTERVAL);
+ // return;
+ // }
+
+ 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
+ params.byte3 = 0;//s
+ params.byte4 = 0;
+ }
+
+ //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
+ params.byte3 = 0;//s
+ params.byte4 = 0;
+
+ //TODO astrohodiny
+ let dusk = "Time of dusk: " + sunCalcResult["dusk"];
+ }
+ }
+
+ //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
+ params.byte3 = 0;//s
+ params.byte4 = 0;
+
+ //TODO astrohodiny
+ let dawn = "Time of dawn: " + sunCalcResult["dawn"];
+ }
+
+ }
+ //-----------------------
+
+ 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 itIsNodeCommand = listOfCommands.includes(register); //reading data from node (voltage, current, dimming, status)
+
+ 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) {
+
+ 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;
+ let error = result.error;
+
+ if (params.debug != "generated cmd") {
+ //debug("writeData: done " + message_type + " duration: " + timeDiff + " message_type: " + params.debug, params);
+ }
+
+ // if(params.hasOwnProperty("debug"))
+ // {
+ // if(params.debug)
+ // {
+ // console.log("detected response:", result);
+
+ // logger.debug("writeData: done " + message_typetype + " duration: " + timeDiff + " type: " + params.debug, params, result);
+ // }
+ // }
+
+ //debug("writeData: done " + message_type + " duration: " + timeDiff + " message_type: " + params.debug);
+ //debug("writeData done", message_type, "duration", timeDiff, "message_type", params.debug, 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 Manager: 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";
+ }
+
+ //master node
+ if (node == 0) {
+ sendNotification("CMD Manager: 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;
+ }
+
+ //odoslanie príkazu z terminálu - dáta
+ if (type == "cmd-terminal") {
+ sendNotification("CMD Manager: process cmd", SETTINGS.rvoTbName, "command_was_sent_from_terminal_interface", {}, params, SEND_TO.tb, instance);
+ }
+
+ if (params.debug) {
+ //logger.debug("saveToTb", saveToTb, tbname, values);
+ }
+
+ if (saveToTb) {
+ 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);
+ }
+
+
+ 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 = {};
+
+ // console.log(message);
+ let updateStatus = updateNodeStatus(node, false);
+
+ //master node
+ if (node == 0) {
+ sendNotification("CMD Manager: 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 Manager: process cmd", tbName, "configuration_of_dimming_profile_to_node_failed", { node: node }, "", SEND_TO.tb, instance);
+ nodeProfileSendFail.add(node);
+ }
+ }
+
+ if (itIsNodeCommand) {
+ values.comm_status = "NOK";
+ }
+
+ if (updateStatus) {
+ values.status = "NOK";
+ }
+
+ // console.log("------",node, register, type, itIsNodeCommand, updateStatus, saveToTb, values);
+ if (saveToTb && Object.keys(values).length > 0) {
+ sendTelemetry(values, tbName)
+ }
+
+ }
+
+
+ /**
+ * 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;
+ }
+ else {
+ console.log("params.refFlowdataKey: ", params);
+ }
+
+ 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);
+ logger.debug(params);
+
+ //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) 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
+ };
+
+ sendTelemetry(values, SETTINGS.rvoTbName, ts);
+ }
+
+
+ function handleRsPort() {
+
+ //! 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 manager - rsPort opened success");
+
+ //loadRelaysData();
+
+ 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);
+
+ //APP START
+ let dataToInfoSender = { id: SETTINGS.project_id, name: SETTINGS.rvo_name };
+ dataToInfoSender.fw_version = SETTINGS.edge_fw_version;
+ dataToInfoSender.startdate = new Date().toISOString().slice(0, 19).replace('T', ' ');
+ dataToInfoSender.__force__ = true;
+
+ instance.send(SEND_TO.infoSender, dataToInfoSender);
+
+ logger.debug(0, "---------------------------->START message send to service", dataToInfoSender);
+
+ }).catch(function(reason) {
+ instance.send(SEND_TO.debug, "CMD manager - RPC runSyncExec - promise rejected:" + reason);
+ });
+ });
+
+ rsPort.on('error', function(err) {
+
+ //TODO report to service!!!
+ //errLogger.error(exports.title, "unable to open port", SETTINGS.serial_port, err.message);
+ errorHandler.sendMessageToService([exports.title, "unable to open port", SETTINGS.serial_port, err.message], 0);
+
+ instance.send(SEND_TO.debug, err.message);
+ });
+
+ rsPort.on("close", () => {
+ setTimeout(() => rsPort.open(), 1000);
+ });
+
+ rsPort.open();
+ }
+
+
+ instance.on("close", () => {
+ clearInterval(interval);
+ clearInterval(customTasksInterval);
+ clearInterval(setCorrectTime);
+ rsPort.close();
+ });
+
+
+ instance.on("0", flowdata => {
+ 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 MANAGER - BUILD TASKS");
+ buildTasks();
+
+ //logger.debug("tasks:");
+ //logger.debug(tasks);
+
+ logger.debug("-->CMD MANAGER - RUN TASKS");
+ interval = setInterval(runTasks, LONG_INTERVAL);
+ }
+ 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 Manager: onData", tbname, "circuit_breaker_was_turned_off_line", { line: line }, "", SEND_TO.tb, instance, "circuit_breaker");
+ else sendNotification("CMD Manager: 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 (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;
+
+ //set dimming - LUM1_13 - 647 je node linie 1 kt. dobre vidime
+ params.type = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 1;//dimming
+ params.recipient = 1;//slave
+ params.byte4 = value;
+ params.rw = 1;//write
+ params.timestamp = PRIORITY_TYPES.high_priority;
+ params.info = 'set dimming from platform';
+ //params.debug = true;
+
+ //ak linia je
+
+ //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 = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 1;//dimming
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ 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 = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 76;
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ 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 = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 75;
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ 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 = "cmd";
+ params.tbname = tbname;
+ params.address = node;
+ params.register = 77;
+ params.recipient = 1;//slave
+ params.rw = 0;//read
+ params.timestamp = PRIORITY_TYPES.high_priority;
+ params.info = 'read power factor - Cos phi (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 manager", 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)
+
+ //TODO build tasks by mala bezat az ked je vsetko loadRelaysData
+ //spracovane, pravdepodobne treba spravit promisy
+ logger.debug("loadRelaysData DONE for line", line);
+ console.log("zacina buildTasks po loadRelaysData.........")
+
+ buildTasks({ processLineProfiles: true, line: line });
+
+ sendNotification("CMD manager - 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 manager 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
+ 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;
+ }
+
+ //
+ if (register == 4) {
+ values["master_node_version"] = bytes[1] + "." + bytes[2];
+ //logger.debug("FW Version", register, bytes);
+ }
+
+ //Napätie
+ if (register == 74) {
+ let voltage = (bytesToInt(bytes) * 0.1).toFixed(1);
+ values["voltage"] = Number(voltage);
+ }
+
+ //Prúd
+ if (register == 75) {
+ let current = bytesToInt(bytes);
+ values["current"] = current;
+ }
+
+ //výkon
+ if (register == 76) {
+ let power = (bytesToInt(bytes) * 0.1).toFixed(2);
+ values["power"] = Number(power);
+ }
+
+ //účinník
+ if (register == 77) {
+ let power_factor = Math.cos(bytesToInt(bytes) * 0.1).toFixed(2);
+ values["power_factor"] = Number(power_factor);
+ }
+
+ //frekvencia
+ if (register == 78) {
+ let frequency = (bytesToInt(bytes) * 0.1).toFixed(2);
+ values["frequency"] = Number(frequency);
+ }
+
+ //energia
+ if (register == 79) {
+ let energy = bytesToInt(bytes);
+
+ //Energiu treba reportovať v kWh. Teda číslo, ktoré príde treba podeliť 1000. Toto som ti možno zle napísal.
+
+ values["energy"] = energy / 1000;
+ }
+
+ //doba života
+ if (register == 80) {
+ let lifetime = (bytesToInt(bytes) / 60).toFixed(2);
+ values["lifetime"] = Number(lifetime);
+ }
+
+ //nastavenie profilu
+ if (register == 8) {
+ let time_schedule_settings = bytesToInt(bytes);
+ values["time_schedule_settings"] = time_schedule_settings;
+ }
+
+ //skupinová adresa 1
+ if (register == 3) {
+ let gr_add_1 = bytesToInt(byte0);
+ values["gr_add_1"] = gr_add_1;
+
+ let gr_add_2 = bytesToInt(byte1);
+ values["gr_add_2"] = gr_add_2;
+
+ let gr_add_3 = bytesToInt(byte2);
+ values["gr_add_3"] = gr_add_3;
+
+ let gr_add_4 = bytesToInt(byte3);
+ values["gr_add_4"] = gr_add_4;
+ }
+
+ //naklon
+ if (register == 84) {
+ let temp;
+ if (byte3 >= 128) {
+ temp = (byte3 - 128) * (-1);
+ }
+ else {
+ temp = byte3;
+ }
+
+ let inclination_x;
+ if (byte2 >= 128) {
+ inclination_x = (byte2 - 128) * (-1);
+ }
+ else {
+ inclination_x = byte2;
+ }
+
+ let inclination_y;
+ if (byte1 >= 128) {
+ inclination_y = (byte1 - 128) * (-1);
+ }
+ else {
+ inclination_y = byte1;
+ }
+
+ let inclination_z;
+ if (byte0 >= 128) {
+ inclination_z = (byte0 - 128) * (-1);
+ }
+ else {
+ inclination_z = byte0;
+ }
+
+ values["temperature"] = temp;
+
+ //náklon x
+ values["inclination_x"] = inclination_x;
+
+ //náklon y
+ values["inclination_y"] = inclination_y;
+
+ //náklon z
+ values["inclination_z"] = inclination_z;
+ }
+
+ let h = byte3;
+ let m = byte2;
+
+ let timestamp;
+
+ if (register == 87 || register == 6 || register == 7) {
+ //if(byte3 < 10) h = "0" + byte3;
+ //if(byte2 < 10) m = "0" + byte2;
+ //if(byte1 < 10) s = "0" + byte1;
+
+ var d = new Date();
+ d.setHours(h, m, 0, 0);
+ timestamp = d.getTime();
+ }
+
+ //aktuálny čas
+ if (register == 87) {
+ //Byte3 - hodiny, Byte 2 - minúty, Byte 1 -sek.
+ //values["actual_time"] = h + ":" + m + ":" + s;
+
+ values["actual_time"] = timestamp;
+ }
+
+ //čas súmraku
+ if (register == 6) {
+ //Byte3 - hodiny, Byte 2 - minúty, Byte 1 -sek.
+ //values["dusk_time"] = h + ":" + m + ":" + s;
+
+ values["dusk_time"] = timestamp;
+ }
+
+ //čas úsvitu
+ if (register == 7) {
+ //Byte3 - hodiny, Byte 2 - minúty, Byte 1 -sek.
+ //values["dawn_time"] = h + ":" + m + ":" + s;
+
+ values["dawn_time"] = timestamp;
+ }
+
+ //FW verzia
+ if (register == 89) {
+ //formát: "Byte3: Byte2.Byte1 (Byte0)"
+ values["fw_version"] = byte3 + ":" + byte2 + "." + byte1 + "(" + byte0 + ")";
+ }
+
+ 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);
+ }
+
+} // end of instance.export
+
diff --git a/RVO13/flow_3_2_25/code.js b/RVO13/flow_3_2_25/code.js
new file mode 100755
index 0000000..63b31bf
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/comment.js b/RVO13/flow_3_2_25/comment.js
new file mode 100755
index 0000000..1e0cd13
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/db_connector.js b/RVO13/flow_3_2_25/db_connector.js
new file mode 100755
index 0000000..65ee94b
--- /dev/null
+++ b/RVO13/flow_3_2_25/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 = ``;
+
+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/RVO13/flow_3_2_25/db_init.js b/RVO13/flow_3_2_25/db_init.js
new file mode 100755
index 0000000..ddd0aa0
--- /dev/null
+++ b/RVO13/flow_3_2_25/db_init.js
@@ -0,0 +1,106 @@
+exports.id = 'db_init';
+exports.title = 'DB Initialization';
+exports.group = 'Worksys';
+exports.color = '#888600';
+exports.version = '1.0.2';
+exports.icon = 'sign-out';
+exports.input = 1;
+exports.output = ["blue"];
+
+exports.html = `
+
+
+
Hostname or IP address (if not empty - setting will override db setting)
+
+
+
+
+
`;
+
+
+exports.readme = `
+# DB initialization
+`;
+
+const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper.js');
+const { initNotification } = require('./helper/notification_reporter');
+
+
+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"];
+
+ dbs.settings = {
+ edge_fw_version : "2025-01-09", //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"],
+
+ //dynamic values
+ masterNodeIsResponding : true, //cmd_manager
+ maintenance_mode : false,
+ }
+
+ FLOW.dbLoaded = true;
+ initNotification();
+
+ setTimeout(()=> {
+ console.log("DB_INIT - data loaded");
+ instance.send(0, "_")
+ }, 5000)
+
+};
+
+
+
+
diff --git a/RVO13/flow_3_2_25/debug.js b/RVO13/flow_3_2_25/debug.js
new file mode 100755
index 0000000..00cb259
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/designer.json b/RVO13/flow_3_2_25/designer.json
new file mode 100755
index 0000000..3af15b8
--- /dev/null
+++ b/RVO13/flow_3_2_25/designer.json
@@ -0,0 +1,2846 @@
+{
+ "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": 304.75,
+ "y": 237,
+ "connections": {
+ "0": [
+ {
+ "index": "0",
+ "id": "1615551060773"
+ }
+ ],
+ "1": [
+ {
+ "index": "0",
+ "id": "1618300858252"
+ },
+ {
+ "index": "0",
+ "id": "1618558465485"
+ }
+ ],
+ "2": [
+ {
+ "index": "0",
+ "id": "1618300863816"
+ },
+ {
+ "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": 86.75,
+ "y": 375,
+ "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": 306.75,
+ "y": 371,
+ "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": 650,
+ "y": 76,
+ "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": 753,
+ "y": 150,
+ "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": 761,
+ "y": 251,
+ "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": 765,
+ "y": 350,
+ "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": 595.8833312988281,
+ "y": 557.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": 598.8833312988281,
+ "y": 654.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": 594.8833312988281,
+ "y": 350.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": 114,
+ "y": 546,
+ "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": 772,
+ "y": 443,
+ "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": 88,
+ "y": 1158,
+ "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": 215,
+ "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": 119,
+ "y": 280,
+ "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": 650.8833312988281,
+ "y": 160,
+ "connections": {},
+ "disabledio": {
+ "input": [],
+ "output": []
+ },
+ "state": {
+ "text": "Enabled",
+ "color": "gray"
+ },
+ "options": {
+ "type": "data",
+ "repository": false,
+ "enabled": true
+ },
+ "color": "#967ADC",
+ "notes": ""
+ },
+ {
+ "id": "1618300863816",
+ "component": "debug",
+ "tab": "1612772287426",
+ "name": "wsmqtt-exit2",
+ "x": 845.8833312988281,
+ "y": 320,
+ "connections": {},
+ "disabledio": {
+ "input": [
+ 0
+ ],
+ "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": 119.88333129882812,
+ "y": 369,
+ "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": 93.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": 779.8833312988281,
+ "y": 552,
+ "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": 649.8833312988281,
+ "y": 246,
+ "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": 89,
+ "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"
+ }
+ ]
+ },
+ "disabledio": {
+ "input": [],
+ "output": []
+ },
+ "state": {
+ "text": "",
+ "color": "gray"
+ },
+ "options": {},
+ "color": "#5D9CEC",
+ "notes": ""
+ },
+ {
+ "id": "1619605019281",
+ "component": "httproute",
+ "tab": "1615551125555",
+ "name": "GET db",
+ "x": 115,
+ "y": 651,
+ "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": 85,
+ "y": 1231,
+ "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": 84,
+ "y": 1304,
+ "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": 596,
+ "y": 462,
+ "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": 885.5,
+ "connections": {
+ "0": [
+ {
+ "index": "0",
+ "id": "1634465281992"
+ }
+ ]
+ },
+ "disabledio": {
+ "input": [],
+ "output": []
+ },
+ "state": {
+ "text": "799.50 MB / 987.80 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.73 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": 650.8833312988281,
+ "y": 355.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": 480.8833312988281,
+ "y": 1334.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": 280.75,
+ "y": 1446,
+ "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": 253,
+ "y": 788,
+ "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": 242,
+ "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//let total = value.total/1024/1024;\n//let free = value.free/1024/1024;\n//let used = value.used/1024/1024;\nlet response = {};\n//value.memory_total = (total).toFixed(0) + ' MB';\n//value.memory_free = (free).toFixed(0) + ' MB';\n//value.memory_used = (used).toFixed(0) + ' MB';\n\nresponse.memory_total = value.total;\nresponse.memory_free = value.free;\nresponse.memory_used = value.used;\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//let total = value.total/1024/1024;\n//let free = value.free/1024/1024;\n//let used = value.used/1024/1024;\nlet response = {};\n//value.hdd_total = (total).toFixed(0) + ' MB';\n//value.hdd_free = (free).toFixed(0) + ' MB';\n//value.used = (used).toFixed(0) + ' MB';\n\nresponse.hdd_total = value.total;\nresponse.hdd_free = value.free;\nresponse.hdd_used = value.used;\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": 480,
+ "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": 285,
+ "y": 1338,
+ "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": 795.8833312988281,
+ "y": 1329.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": 778,
+ "y": 656,
+ "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": "0.9% / 59.33 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": 113,
+ "y": 456,
+ "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": 448,
+ "y": 519,
+ "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": 447,
+ "y": 620,
+ "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"
+ }
+ ]
+ },
+ "disabledio": {
+ "input": [],
+ "output": []
+ },
+ "state": {
+ "text": "",
+ "color": "gray"
+ },
+ "options": {},
+ "color": "#5CB36D",
+ "notes": ""
+ },
+ {
+ "id": "1714752862828",
+ "component": "debug",
+ "tab": "1611921777196",
+ "name": "MDBToTb",
+ "x": 599,
+ "y": 257,
+ "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": 755.0833282470703,
+ "y": 209,
+ "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}\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}",
+ "outputs": 1
+ },
+ "color": "#656D78",
+ "notes": ""
+ },
+ {
+ "id": "1717442627834",
+ "component": "debug",
+ "tab": "1611921777196",
+ "name": "modbus service",
+ "x": 966.0833282470703,
+ "y": 152,
+ "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": 77.75,
+ "y": 1630,
+ "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": {
+ "name": "rvo_senica_13_10.0.0.123",
+ "types": "[\"emergency\", \"critical\", \"error\", \"alert\"]",
+ "message_includes": "[\"is responding again\", \"Flow has been restarted\", \"Node db has changed\"]",
+ "tag_on_include": "[{\"user_id\":\"U072JE5JUQG\", \"includes\":[\"Electrometer\", \"Twilight sensor\"]}]",
+ "slack_channel": "C071KN2Q8SK"
+ },
+ "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": 79,
+ "y": 1723,
+ "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": 649.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": 650.9333343505859,
+ "y": 451.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": 90.75,
+ "y": 250,
+ "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 client - to senica-prod01",
+ "x": 304.75,
+ "y": 474,
+ "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": "u123"
+ },
+ "color": "#888600",
+ "notes": ""
+ },
+ {
+ "id": "1731069001548",
+ "component": "db_init",
+ "tab": "1612772287426",
+ "name": "DB Initialization",
+ "x": 91.75,
+ "y": 55.25,
+ "connections": {
+ "0": [
+ {
+ "index": "0",
+ "id": "1731069033416"
+ }
+ ]
+ },
+ "disabledio": {
+ "input": [],
+ "output": []
+ },
+ "state": {
+ "text": "",
+ "color": "gray"
+ },
+ "options": {},
+ "color": "#888600",
+ "notes": ""
+ },
+ {
+ "id": "1731069033416",
+ "component": "virtualwireout",
+ "tab": "1612772287426",
+ "name": "db-init",
+ "x": 343.75,
+ "y": 50.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": 1121.75,
+ "y": 814.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": 1315.75,
+ "y": 853.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": 911.75,
+ "y": 710.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": 832.75,
+ "y": 775.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": 747.75,
+ "y": 840.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": 803.75,
+ "y": 899.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": 858.75,
+ "y": 959.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": 151.88333129882812,
+ "y": 148,
+ "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": 89.88333129882812,
+ "y": 1381,
+ "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": 915.75,
+ "y": 1017.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": 966.75,
+ "y": 1080.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": 263.8833312988281,
+ "y": 1993.2333984375,
+ "connections": {
+ "0": [
+ {
+ "index": "0",
+ "id": "1732700071298"
+ },
+ {
+ "index": "0",
+ "id": "1732700642917"
+ }
+ ]
+ },
+ "disabledio": {
+ "input": [],
+ "output": []
+ },
+ "state": {
+ "text": "",
+ "color": "gray"
+ },
+ "options": {},
+ "color": "#888600",
+ "notes": ""
+ },
+ {
+ "id": "1732700057052",
+ "component": "virtualwirein",
+ "tab": "1612772287426",
+ "name": "db-init",
+ "x": 84.75,
+ "y": 1994,
+ "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": 561.8833312988281,
+ "y": 2055.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": 557.8833312988281,
+ "y": 1949,
+ "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": 745,
+ "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": 86.75,
+ "y": 495,
+ "connections": {
+ "0": [
+ {
+ "index": "1",
+ "id": "1731068754606"
+ }
+ ]
+ },
+ "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/RVO13/flow_3_2_25/dido_controller.js b/RVO13/flow_3_2_25/dido_controller.js
new file mode 100755
index 0000000..8415921
--- /dev/null
+++ b/RVO13/flow_3_2_25/dido_controller.js
@@ -0,0 +1,1524 @@
+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 = ``;
+
+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
+*/
+
+
+/*
+RVO objekt:
+state_of_main_switch - sem sa bude reportovať stav hlavného ističa : 0-> off 1-> on (toto nie je na platforme, ale Rado to už do entity type doplnil)
+rotary_switch_state - sem by sa mal reportovať stav vstupov manual a auto podľa nasledovnej logiky:
+ Manual = 1 a Auto = 0 -> vyreportuje Manual
+ Manual = 0 a Auto = 0 -> vyreportuje Off
+ Manual = 0 a Auto = 1 -> vyreportuje Automatic
+
+door_condition - tuto ide 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
+
+zjavne nám v jsone chýba stav hlavného ističa. Musíme to potom doplniť
+
+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
+ momentálne sa stav zmení len keď vo flow klikneš aby sa zmenil, ale tá zmena by sa mala ukázať aj na platforme
+*/
+
+const { errLogger, logger, monitor } = require('./helper/logger');
+const SerialPort = require('serialport');
+const WebSocket = require('ws');
+//const { exec } = require('child_process');
+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, when
+ 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č
+ "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;
+
+ //this will modify database
+ let forceTurnOff = true;
+ turnLine("off", line, pin, forceTurnOff, "turn off on startup");
+ }
+ }
+
+ //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);
+
+ let time = 5 * 1000;
+ setTimeout(function() {
+ 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);
+ }, time);
+ }
+
+
+ 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");
+
+ // useTurnOffCounter = true;
+ // turnOffCounter = relaysData.length - 1;
+ initialSetting();
+ ws.send(JSON.stringify({ "cmd": "all" }));
+
+ // 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
+ // https://evok.api-docs.io/1.0/mpqzDwPwirsoq7i5A/websocket
+ startRequests = setInterval(() => {
+ // console.log(" *** data from evok requested");
+ 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));
+ switchLogic(pin, value)
+ }
+
+ //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");
+
+ //! ake data prichadzaju z cmd_manager.js ???
+ //TODO transform to websocket
+ if (Array.isArray(obj)) {
+
+ rsPort.write(Buffer.from(obj), function(err) {
+ switchLogic(obj);
+
+ instance.send(SEND_TO.debug, { "WRITE": obj });
+ });
+ }
+ })
+
+
+ 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";
+
+ //Hlavný istič
+ //! po novom uz 'state of main switch' nemame. Namiesto neho je 'door_condition', kedze mame dvoje dveri
+ //! takze ked pride z evoku signal pre 'input1_05', handlujeme ho ako 'door_condition'
+ // if(type === "!!!state_of_main_switch")
+ // {
+ // if (newPinValue === 0 && newPinValue !== previousValues[pinIndex])
+ // {
+ // sendNotification("switchLogic", rvoTbName, "main_switch_has_been_turned_off", {}, "", SEND_TO.tb, instance , "state_of_main_switch");
+ // values["status"] = "NOK";
+
+ // 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";
+ // }
+ // }
+
+ //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/RVO13/flow_3_2_25/helper/DataToTbHandler.js b/RVO13/flow_3_2_25/helper/DataToTbHandler.js
new file mode 100755
index 0000000..65e4ec3
--- /dev/null
+++ b/RVO13/flow_3_2_25/helper/DataToTbHandler.js
@@ -0,0 +1,166 @@
+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.sender = "";
+
+ // if attribute 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,
+ Phase_1_pow_factor: 0.1,
+ Phase_2_pow_factor: 0.1,
+ Phase_3_pow_factor: 0.1,
+ power_factor: 0.1,
+ lifetime: 0.5,
+ 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 name in obj) {
+ return false;
+ }
+ return true;
+ }
+
+ sendToTb(dataToTb, instance) {
+
+ let keys = Object.keys(dataToTb);
+
+ if(keys.length == 0)
+ {
+ if(this.debug) console.log("sendToTb received empty object", dataToTb);
+ return;
+ }
+
+ let tbname = keys[0];
+ let ts;
+
+ let arrayOfValues = dataToTb[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(!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];
+
+ if(attributeData.value === value || attributeToChange && Math.abs(attributeData.value - value) < limit)
+ {
+ let diff = timestamp - attributeData.ts;
+ let 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/RVO13/flow_3_2_25/helper/ErrorToServiceHandler.js b/RVO13/flow_3_2_25/helper/ErrorToServiceHandler.js
new file mode 100755
index 0000000..110ea8b
--- /dev/null
+++ b/RVO13/flow_3_2_25/helper/ErrorToServiceHandler.js
@@ -0,0 +1,126 @@
+const { MD5 } = require('./md5.js');
+const { networkInterfaces } = require('os');
+
+class ErrorToServiceHandler
+{
+ constructor() {
+ this.previousValues = {};
+
+ this.projects_id = undefined;
+
+ const nets = networkInterfaces();
+ this.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 (!this.ipAddresses[name]) {
+ this.ipAddresses[name] = [];
+ }
+ this.ipAddresses[name].push(net.address);
+ }
+ }
+ }
+
+ //console.log(this.ipAddresses);
+
+ }
+
+ setProjectsId(projects_id)
+ {
+ this.projects_id = projects_id;
+ }
+
+ processMessage(message, seconds, message_type)
+ {
+ if(message_type == undefined) message_type = "error_message";
+ if(Array.isArray(message)) message = message.join(', ');
+
+ let key = MD5(message);
+ let timestamp = new Date().getTime();
+
+ //keep in memory - default value is 1h
+ if (seconds === undefined) seconds = 60*60;
+
+ if(!this.previousValues.hasOwnProperty(key))
+ {
+ this.previousValues[key] = {ts: timestamp, duration: seconds};
+ }
+
+ let diff = (timestamp - this.previousValues[key].ts);
+ if(diff < this.previousValues[key].duration*1000) return false;
+
+ this.previousValues[key].ts = timestamp;
+
+ return true;
+ }
+
+ sendMessageToService(message, seconds, message_type)
+ {
+
+ let f = this.processMessage(message, seconds, message_type);
+ if(!f) return;
+
+ /*
+ //-------------
+ if(message_type == undefined) message_type = "error_message";
+ if(Array.isArray(message)) message = message.join(', ');
+
+ let key = MD5(message);
+ let timestamp = new Date().getTime();
+
+ //keep in memory
+ if (seconds === undefined) seconds = 60*60;
+
+ if(!this.previousValues.hasOwnProperty(key))
+ {
+ this.previousValues[key] = {ts: timestamp, duration: seconds};
+ }
+
+ let diff = (timestamp - this.previousValues[key].ts);
+ if(diff < this.previousValues[key].duration*1000) return;
+
+ this.previousValues[key].ts = timestamp;
+ */
+
+ //-------------------------
+
+ //send to service
+
+ let dataToInfoSender = {id: this.projects_id};
+
+ //js_error || error_message
+ dataToInfoSender[message_type] = message;
+ dataToInfoSender.ipAddresses = this.ipAddresses;
+
+ console.log("ErrorToServiceHandler------------------------>send to service", dataToInfoSender);
+
+ //TODO UGLY!!!
+ // if error occures too early FLOW.GLOBALs.settings.project_id is still undefined
+ // if(this.projects_id === undefined) this.projects_id = FLOW.GLOBALS.settings.project_id;
+ if(this.projects_id === undefined) return;
+
+ /*
+ if(this.projects_id === undefined)
+ {
+ console.log("this.projects_id is undefined");
+ return;
+ }
+ */
+
+ RESTBuilder.make(function(builder) {
+ builder.method('POST');
+ builder.post(dataToInfoSender);
+ builder.url('http://192.168.252.2:8004/sentmessage');
+
+ builder.callback(function(err, response, output) {
+ console.log("process.on error send", err, response, output, dataToInfoSender);
+ });
+ });
+
+
+ }
+}
+
+module.exports = ErrorToServiceHandler;
\ No newline at end of file
diff --git a/RVO13/flow_3_2_25/helper/db_helper.js b/RVO13/flow_3_2_25/helper/db_helper.js
new file mode 100755
index 0000000..40e796c
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/helper/logger.js b/RVO13/flow_3_2_25/helper/logger.js
new file mode 100755
index 0000000..2585639
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/helper/md5.js b/RVO13/flow_3_2_25/helper/md5.js
new file mode 100755
index 0000000..d3b0480
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/helper/notification_reporter.js b/RVO13/flow_3_2_25/helper/notification_reporter.js
new file mode 100755
index 0000000..61c0aef
--- /dev/null
+++ b/RVO13/flow_3_2_25/helper/notification_reporter.js
@@ -0,0 +1,131 @@
+//key is device, value = str
+let sentValues= {};
+let notificationsData = null;
+
+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;
+}
+
+function sendNotification(func, device, key, params, extra, tb_output, instance, saveKey) {
+
+ // return;
+
+ let storeToSendValues = true;
+ if(saveKey == undefined) storeToSendValues = false;
+
+ let lang = FLOW.GLOBALS.settings.language;
+ if(lang != "en" || lang != "sk") lang = "en";
+
+ let tpl = key;
+ let weight = "";
+
+ if(notificationsData[key])
+ {
+ weight = notificationsData[key].weight;
+ weight = weight.toLowerCase();
+
+ tpl = notificationsData[key][lang];
+ tpl = template(tpl, 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(sentValues[saveKey] == tpl)
+ {
+ return false;
+ }
+ }
+
+ if(sentValues[saveKey] == undefined)
+ {
+ if(storeToSendValues)
+ {
+ //do not send - flow is was started
+ sentValues[saveKey] = tpl;
+ return false;
+ }
+ }
+
+ if(saveKey == "rvo_door")
+ {
+ //console.log("******", saveKey, sentValues[saveKey], tpl);
+ }
+
+ if(storeToSendValues) sentValues[saveKey] = tpl;
+
+ let str = FLOW.GLOBALS.settings.rvo_name;
+ if(str != "") str = str + ": ";
+ str = str + tpl;
+
+ let content = {
+ "type": weight,
+ "status": "new",
+ "source": {
+ "func":func,
+ "component":instance.id,
+ "component_name":instance.name,
+ "edge":device
+ },
+ "message":str,
+ "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/RVO13/flow_3_2_25/helper/register.js b/RVO13/flow_3_2_25/helper/register.js
new file mode 100755
index 0000000..fc1d008
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/helper/serialport_helper.js b/RVO13/flow_3_2_25/helper/serialport_helper.js
new file mode 100755
index 0000000..8efa6af
--- /dev/null
+++ b/RVO13/flow_3_2_25/helper/serialport_helper.js
@@ -0,0 +1,100 @@
+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/RVO13/flow_3_2_25/helper/suncalc.js b/RVO13/flow_3_2_25/helper/suncalc.js
new file mode 100755
index 0000000..c9ca56d
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/helper/utils.js b/RVO13/flow_3_2_25/helper/utils.js
new file mode 100755
index 0000000..a16210c
--- /dev/null
+++ b/RVO13/flow_3_2_25/helper/utils.js
@@ -0,0 +1,124 @@
+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);
+
+ //var decimal = (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3];
+ let l = (buffer.length - 1) * 8;
+
+ let decimal = 0;
+ for(let i = 0; i < buffer.length; i++)
+ {
+ var s = buffer[i] << l;
+ if(l < 8) s = buffer[i]
+ decimal = decimal + s;
+
+ l = l - 8;
+
+ }
+
+ return decimal;
+}
+
+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 convertUTCDateToLocalDate(date) {
+ var newDate = new Date(date);
+ newDate.setMinutes(date.getMinutes() + date.getTimezoneOffset());
+ return newDate;
+}
+
+function addZeroBefore(n) {
+ return (n < 10 ? '0' : '') + n;
+}
+
+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,
+ sleep,
+ convertUTCDateToLocalDate
+}
\ No newline at end of file
diff --git a/RVO13/flow_3_2_25/httprequest.js b/RVO13/flow_3_2_25/httprequest.js
new file mode 100755
index 0000000..469c8cb
--- /dev/null
+++ b/RVO13/flow_3_2_25/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)
+
+
@(Download the content in chunks)
+
@(Keep persistent cookies)
+
@(Disable DNS cache)
+
@(Keep alive connection)
+
+
+
+
@(Custom headers)
+
@(Cookies)
+
+
+
+
+
+
+
`;
+
+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/RVO13/flow_3_2_25/httpresponse.js b/RVO13/flow_3_2_25/httpresponse.js
new file mode 100755
index 0000000..160a3bb
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/httproute.js b/RVO13/flow_3_2_25/httproute.js
new file mode 100755
index 0000000..583a19d
--- /dev/null
+++ b/RVO13/flow_3_2_25/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 = `
+
+
+
+
+
+
+
+
@(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/RVO13/flow_3_2_25/infosender.js b/RVO13/flow_3_2_25/infosender.js
new file mode 100755
index 0000000..c7afd83
--- /dev/null
+++ b/RVO13/flow_3_2_25/infosender.js
@@ -0,0 +1,101 @@
+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 = ``;
+
+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)
+ {
+ if(id)
+ {
+ delete allValues.__force__;
+ let dataToSend = {...allValues};
+ dataToSend.id = id;
+ dataToSend.ipAddresses = ipAddresses;
+
+ instance.send(0, dataToSend);
+
+ allValues = {};
+ }
+ else
+ {
+ console.log(exports.title, "unable to send data, no id");
+ }
+
+ }
+ }
+
+ instance.on("close", () => {
+ clearInterval(sendAllValuesInterval);
+ })
+
+ instance.on("0", _ => {
+ id = FLOW.GLOBALS.settings.project_id;
+ configured = true;
+ })
+
+ instance.on("1", flowdata => {
+
+ allValues = { ...allValues, ...flowdata.data};
+ //console.log("DATA RECEIVED", flowdata.data);
+
+ //__force__
+ if(flowdata.data.hasOwnProperty("__force__"))
+ {
+ if(flowdata.data.__force__)
+ {
+ sendValues();
+ }
+ }
+ })
+
+ sendAllValuesInterval = setInterval(() => {
+ sendValues();
+ }, 60000*3);
+
+}
+
diff --git a/RVO13/flow_3_2_25/modbus_reader.js b/RVO13/flow_3_2_25/modbus_reader.js
new file mode 100755
index 0000000..b907148
--- /dev/null
+++ b/RVO13/flow_3_2_25/modbus_reader.js
@@ -0,0 +1,367 @@
+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;
+
+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;
+
+ 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('socket connection error', e);
+ if(e.code == 'ECONNREFUSED' || e.code == 'ECONNRESET') {
+ console.log(exports.title + ' Waiting 10 seconds before trying to connect again');
+ setTimeout(obj.startSocket, 10000);
+ }
+ });
+
+ this.socket.on('close', function() {
+ console.log('Socket connection closed ' + exports.title + ' Waiting 10 seconds before trying to connect 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(this.indexInDeviceConfig == 0) 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;
+
+ const numberOfNodes = Object.keys(FLOW.GLOBALS.nodesData).length;
+ if(numberOfNodes == 0) numberOfNodes = 20; // to make sure, we send notification if totalPower is more than 300
+
+ if(actualTotalPower > numberOfNodes * 15 && 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 <= numberOfNodes * 15 && 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;
+ mainSocket = new SocketWithClients();
+
+ // 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/RVO13/flow_3_2_25/monitorconsumption.js b/RVO13/flow_3_2_25/monitorconsumption.js
new file mode 100755
index 0000000..64cc58e
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/monitordisk.js b/RVO13/flow_3_2_25/monitordisk.js
new file mode 100755
index 0000000..f4fdaa0
--- /dev/null
+++ b/RVO13/flow_3_2_25/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)
+
+
+
+
`;
+
+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/RVO13/flow_3_2_25/monitormemory.js b/RVO13/flow_3_2_25/monitormemory.js
new file mode 100755
index 0000000..2decbc4
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/nodesdb_changecheck.js b/RVO13/flow_3_2_25/nodesdb_changecheck.js
new file mode 100755
index 0000000..be1e700
--- /dev/null
+++ b/RVO13/flow_3_2_25/nodesdb_changecheck.js
@@ -0,0 +1,70 @@
+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 = 1;
+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);
+ }
+ }
+
+ 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);
+ }
+ 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/RVO13/flow_3_2_25/show_dbdata.js b/RVO13/flow_3_2_25/show_dbdata.js
new file mode 100755
index 0000000..d01eecd
--- /dev/null
+++ b/RVO13/flow_3_2_25/show_dbdata.js
@@ -0,0 +1,241 @@
+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 = 7;
+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);
+ })
+ })
+};
+
+
+
+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/RVO13/flow_3_2_25/slack_filter.js b/RVO13/flow_3_2_25/slack_filter.js
new file mode 100755
index 0000000..753c24a
--- /dev/null
+++ b/RVO13/flow_3_2_25/slack_filter.js
@@ -0,0 +1,187 @@
+exports.id = 'slack_filter';
+exports.title = 'Slack Filter';
+exports.group = 'Citysys';
+exports.color = '#30E193';
+exports.input = 1;
+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('data', 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'];
+ 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);
+ setTimeout(instance.reconfigure, 10000);
+
+
+};
diff --git a/RVO13/flow_3_2_25/thermometer.js b/RVO13/flow_3_2_25/thermometer.js
new file mode 100755
index 0000000..fa015c6
--- /dev/null
+++ b/RVO13/flow_3_2_25/thermometer.js
@@ -0,0 +1,98 @@
+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/RVO13/flow_3_2_25/trigger.js b/RVO13/flow_3_2_25/trigger.js
new file mode 100755
index 0000000..27545a8
--- /dev/null
+++ b/RVO13/flow_3_2_25/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/RVO13/flow_3_2_25/variables.txt b/RVO13/flow_3_2_25/variables.txt
new file mode 100755
index 0000000..e69de29
diff --git a/RVO13/flow_3_2_25/virtualwirein.js b/RVO13/flow_3_2_25/virtualwirein.js
new file mode 100755
index 0000000..38a4e42
--- /dev/null
+++ b/RVO13/flow_3_2_25/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 = `
+`;
+
+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/RVO13/flow_3_2_25/virtualwireout.js b/RVO13/flow_3_2_25/virtualwireout.js
new file mode 100755
index 0000000..94a1e4f
--- /dev/null
+++ b/RVO13/flow_3_2_25/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 = `
+`;
+
+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/RVO13/flow_3_2_25/wsmqttpublish.js b/RVO13/flow_3_2_25/wsmqttpublish.js
new file mode 100755
index 0000000..b2a218d
--- /dev/null
+++ b/RVO13/flow_3_2_25/wsmqttpublish.js
@@ -0,0 +1,477 @@
+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)
+
+
+
+
+
`;
+
+
+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/RVO13/monitor.txt b/RVO13/monitor.txt
new file mode 100755
index 0000000..3c4dfc3
--- /dev/null
+++ b/RVO13/monitor.txt
@@ -0,0 +1,11116 @@
+[2024-10-11T13:29:53.206] [INFO] monitorLogs - MQTT broker 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
+}
+[2024-10-11T13:30:23.427] [INFO] monitorLogs - MQTT broker connected
+[2024-10-11T18:20:59.605] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-11T18:20:59.608] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-11T18:20:59.610] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-11T18:20:59.613] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-11T18:41:03.247] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-11T18:41:03.283] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-11T18:41:03.319] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-11T18:41:03.356] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-12T03:23:16.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-12 03:23:16
+[2024-10-12T06:53:38.136] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-12T06:53:38.139] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-12T06:53:38.142] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-12T06:53:38.145] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-12T07:37:50.205] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-12T07:37:50.240] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-12T07:37:50.275] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-12T07:37:50.310] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-12T14:55:18.268] [INFO] monitorLogs - MQTT broker connected
+[2024-10-12T18:19:19.683] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-12T18:19:19.686] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-12T18:19:19.689] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-12T18:19:19.692] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-12T18:39:05.118] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-12T18:39:05.153] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-12T18:39:05.189] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-12T18:39:05.225] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-13T03:23:18.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-13 03:23:18
+[2024-10-13T07:00:24.151] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-13T07:00:24.154] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-13T07:00:24.157] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-13T07:00:24.160] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-13T07:14:40.150] [INFO] monitorLogs - MQTT broker connected
+[2024-10-13T07:39:20.629] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-13T07:39:20.664] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-13T07:39:20.699] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-13T07:39:20.735] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-13T18:15:05.452] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-13T18:15:05.455] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-13T18:15:05.457] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-13T18:15:05.460] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-13T18:37:04.739] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-13T18:37:04.775] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-13T18:37:04.810] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-13T18:37:04.846] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-14T03:23:19.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-14 03:23:19
+[2024-10-14T06:56:10.225] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-14T06:56:10.227] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-14T06:56:10.230] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-14T06:56:10.232] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-14T07:40:50.517] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-14T07:40:50.553] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-14T07:40:50.590] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-14T07:40:50.625] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-14T18:15:33.933] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-14T18:15:33.936] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-14T18:15:33.938] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-14T18:15:33.941] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-14T18:35:04.111] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-14T18:35:04.148] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-14T18:35:04.183] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-14T18:35:04.218] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-15T03:23:20.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-15 03:23:20
+[2024-10-15T06:44:37.529] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T06:46:13.786] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:12:04.054] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-15T07:12:04.057] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-15T07:12:04.059] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-15T07:12:04.061] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-15T07:25:51.416] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:27:03.421] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:39:52.737] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:42:21.068] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-15T07:42:21.104] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-15T07:42:21.139] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-15T07:42:21.175] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-15T07:43:23.791] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:47:14.419] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:50:44.446] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T07:56:15.564] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T08:02:19.056] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T08:05:48.126] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T08:08:57.684] [INFO] monitorLogs - MQTT broker connected
+[2024-10-15T18:13:20.753] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-15T18:13:20.755] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-15T18:13:20.759] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-15T18:13:20.762] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-15T18:33:06.230] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-15T18:33:06.266] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-15T18:33:06.302] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-15T18:33:06.337] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-16T02:26:06.099] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T03:23:21.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-16 03:23:21
+[2024-10-16T06:59:04.277] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-16T06:59:04.279] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-16T06:59:04.282] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-16T06:59:04.284] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-16T07:43:52.431] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-16T07:43:52.466] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-16T07:43:52.502] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-16T07:43:52.538] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-16T08:52:07.766] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T08:52:42.385] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T08:54:01.823] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:00:19.002] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:01:23.254] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:02:16.036] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:03:07.227] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:03:53.269] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:05:19.530] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:05:44.602] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:07:13.738] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:48:25.786] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:49:43.966] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:50:14.328] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:56:54.590] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T09:58:45.159] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:00:31.406] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:02:13.985] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:04:05.171] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:04:46.415] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:05:31.359] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:31:38.499] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:32:02.703] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:35:01.110] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:36:02.460] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:38:11.860] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:43:15.588] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:49:14.565] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:50:20.710] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:51:33.949] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:54:44.352] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T10:55:41.995] [INFO] monitorLogs - MQTT broker connected
+[2024-10-16T18:12:07.033] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-16T18:12:07.036] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-16T18:12:07.038] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-16T18:12:07.040] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-16T18:31:09.371] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-16T18:31:09.407] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-16T18:31:09.443] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-16T18:31:09.479] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-17T03:23:22.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-17 03:23:22
+[2024-10-17T07:02:39.116] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-17T07:02:39.119] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-17T07:02:39.121] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-17T07:02:39.123] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-17T07:45:23.843] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-17T07:45:23.880] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-17T07:45:23.915] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-17T07:45:23.951] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-17T08:30:28.213] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T08:33:00.218] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T08:33:41.811] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T08:35:40.725] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T08:39:18.314] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T08:42:56.150] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T13:39:14.119] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T13:45:07.386] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T13:46:04.074] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T13:47:06.744] [INFO] monitorLogs - MQTT broker connected
+[2024-10-17T18:11:11.361] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-17T18:11:11.365] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-17T18:11:11.368] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-17T18:11:11.371] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-17T18:29:15.543] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-17T18:29:15.580] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-17T18:29:15.616] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-17T18:29:15.653] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-18T03:23:23.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-18 03:23:23
+[2024-10-18T07:01:53.929] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-18T07:01:53.932] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-18T07:01:53.934] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-18T07:01:53.937] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-18T07:46:55.424] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-18T07:46:55.459] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-18T07:46:55.496] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-18T07:46:55.532] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-18T09:49:36.999] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T16:22:17.210] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T16:22:48.726] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:20:12.756] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:20:13.903] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:27:58.196] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:29:24.595] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:29:50.442] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T17:29:50.590] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:30:29.846] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T17:30:29.986] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:31:23.389] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:31:59.502] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T17:40:47.243] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:50:04.905] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:50:05.756] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:54:26.622] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T17:54:59.293] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T18:03:29.793] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T18:08:24.399] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-18T18:08:24.402] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-18T18:08:24.404] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-18T18:08:24.407] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-18T18:15:35.118] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T18:15:35.262] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T18:27:20.167] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-18T18:27:20.202] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-18T18:27:20.237] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-18T18:27:20.272] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-18T18:36:52.538] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T20:03:33.103] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T20:03:39.855] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T20:06:38.895] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-18T20:30:06.329] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T20:30:06.505] [INFO] monitorLogs - MQTT broker connected
+[2024-10-18T20:44:09.072] [INFO] monitorLogs - MQTT broker connected
+[2024-10-19T03:23:25.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-19 03:23:25
+[2024-10-19T07:06:26.641] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-19T07:06:26.644] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-19T07:06:26.647] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-19T07:06:26.650] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-19T07:48:27.719] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-19T07:48:27.754] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-19T07:48:27.790] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-19T07:48:27.826] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-19T17:03:21.827] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-19T17:03:28.545] [INFO] monitorLogs - MQTT broker connected
+[2024-10-19T18:04:02.807] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-19T18:04:02.811] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-19T18:04:02.814] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-19T18:04:02.816] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-19T18:25:24.251] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-19T18:25:24.287] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-19T18:25:24.323] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-19T18:25:24.358] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-20T03:23:26.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-20 03:23:26
+[2024-10-20T07:03:52.485] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-20T07:03:52.488] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-20T07:03:52.490] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-20T07:03:52.493] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-20T07:50:00.095] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-20T07:50:00.131] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-20T07:50:00.166] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-20T07:50:00.202] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-20T14:29:14.194] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-20T14:29:14.342] [INFO] monitorLogs - MQTT broker connected
+[2024-10-20T14:29:36.904] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-20T14:29:37.024] [INFO] monitorLogs - MQTT broker connected
+[2024-10-20T18:03:39.690] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-20T18:03:39.693] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-20T18:03:39.695] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-20T18:03:39.698] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-20T18:23:31.116] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-20T18:23:31.153] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-20T18:23:31.188] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-20T18:23:31.224] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-21T03:23:27.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-21 03:23:27
+[2024-10-21T03:51:33.755] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T03:51:33.922] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T04:10:16.689] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T04:10:18.191] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T04:37:28.104] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-21T04:37:30.781] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T04:37:32.197] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T06:59:56.459] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T07:05:36.844] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-21T07:05:36.847] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-21T07:05:36.849] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-21T07:05:36.851] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-21T07:48:55.584] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T07:51:32.924] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-21T07:51:32.960] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-21T07:51:32.996] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-21T07:51:33.031] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-21T07:59:58.352] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-21T08:00:07.907] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T09:11:24.180] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T09:11:24.630] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T09:22:04.374] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T09:55:22.429] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T09:55:22.634] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:04:14.903] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-21T10:07:34.580] [INFO] monitorLogs - MQTT broker error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-10-21T10:07:37.684] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:08:29.523] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:23:10.193] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:23:10.684] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:35:23.767] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:36:42.448] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:44:27.050] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T10:44:33.555] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T11:45:20.752] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T11:45:21.071] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T11:56:16.404] [INFO] monitorLogs - MQTT broker connected
+[2024-10-21T18:02:35.588] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-21T18:02:35.591] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-21T18:02:35.594] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-21T18:02:35.598] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-21T18:21:39.212] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-21T18:21:39.247] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-21T18:21:39.283] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-21T18:21:39.319] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-22T03:23:28.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-22 03:23:28
+[2024-10-22T07:08:02.052] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-22T07:08:02.069] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-22T07:08:02.071] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-22T07:08:02.073] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-22T07:53:06.123] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-22T07:53:06.158] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-22T07:53:06.193] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-22T07:53:06.229] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-22T18:02:08.528] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-22T18:02:08.531] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-22T18:02:08.533] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-22T18:02:08.535] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-22T18:19:51.050] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-22T18:19:51.086] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-22T18:19:51.122] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-22T18:19:51.158] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-23T03:23:29.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-23 03:23:29
+[2024-10-23T07:10:55.469] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-23T07:10:55.472] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-23T07:10:55.474] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-23T07:10:55.476] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-23T07:54:39.767] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-23T07:54:39.802] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-23T07:54:39.837] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-23T07:54:39.873] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-23T16:09:32.159] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-10-23T16:09:32.507] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-10-23T16:09:32.521] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-10-23T16:09:32.526] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-10-23T16:09:32.532] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-10-23T16:09:33.996] [INFO] monitorLogs - MQTT broker connected
+[2024-10-23T16:09:37.544] [INFO] monitorLogs - buildTasks - params undefined
+[2024-10-23T16:09:37.546] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-10-23T16:09:37.547] [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
+}
+[2024-10-23T16:09:37.552] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-23T16:09:37.554] [INFO] monitorLogs - luxOff: turn off line: 1 2024-10-24T05:54:00.553Z
+[2024-10-23T16:09:37.555] [INFO] monitorLogs - luxOn: turn on line: 1 2024-10-23T16:17:00.555Z
+[2024-10-23T16:09:37.556] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:54', name: 'luxOff' },
+ { value: 1, start_time: '18:17', name: 'luxOn' }
+]
+[2024-10-23T16:09:37.557] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-10-23T16:09:37.558] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-10-23T16:09:37.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
+}
+[2024-10-23T16:09:37.561] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-23T16:09:37.561] [INFO] monitorLogs - luxOff: turn off line: 2 2024-10-24T05:54:00.561Z
+[2024-10-23T16:09:37.562] [INFO] monitorLogs - luxOn: turn on line: 2 2024-10-23T16:17:00.562Z
+[2024-10-23T16:09:37.562] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:54', name: 'luxOff' },
+ { value: 1, start_time: '18:17', name: 'luxOn' }
+]
+[2024-10-23T16:09:37.563] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-10-23T16:09:37.564] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-10-23T16:09:37.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
+}
+[2024-10-23T16:09:37.567] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-23T16:09:37.567] [INFO] monitorLogs - luxOff: turn off line: 3 2024-10-24T05:54:00.567Z
+[2024-10-23T16:09:37.568] [INFO] monitorLogs - luxOn: turn on line: 3 2024-10-23T16:17:00.568Z
+[2024-10-23T16:09:37.569] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:54', name: 'luxOff' },
+ { value: 1, start_time: '18:17', name: 'luxOn' }
+]
+[2024-10-23T16:09:37.570] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-10-23T16:09:37.570] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-10-23T16:09:37.571] [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
+}
+[2024-10-23T16:09:37.573] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-23T16:09:37.574] [INFO] monitorLogs - luxOff: turn off line: 4 2024-10-24T05:54:00.573Z
+[2024-10-23T16:09:37.574] [INFO] monitorLogs - luxOn: turn on line: 4 2024-10-23T16:17:00.574Z
+[2024-10-23T16:09:37.575] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:54', name: 'luxOff' },
+ { value: 1, start_time: '18:17', name: 'luxOn' }
+]
+[2024-10-23T16:09:37.576] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-10-23T16:09:37.589] [INFO] monitorLogs - tasks created: 2177
+[2024-10-23T16:09:37.593] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-09-23
+[2024-10-23T16:09:37.901] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-23T16:09:37.940] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-23T16:09:37.977] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-23T16:09:38.015] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-23T17:56:48.922] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-23T17:56:48.933] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-23T17:56:48.939] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-23T17:56:48.945] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-23T18:17:02.258] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-23T18:17:02.298] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-23T18:17:02.336] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-23T18:17:02.374] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-24T03:09:33.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-24 03:09:33
+[2024-10-24T07:13:10.996] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-24T07:13:11.005] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-24T07:13:11.010] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-24T07:13:11.016] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-24T07:53:58.586] [INFO] monitorLogs - MQTT broker connected
+[2024-10-24T07:54:00.567] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-24T07:54:00.602] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-24T07:54:00.638] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-24T07:54:00.674] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-24T17:58:25.018] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-24T17:58:25.043] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-24T17:58:25.049] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-24T17:58:25.054] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-24T18:16:12.775] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-24T18:16:12.811] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-24T18:16:12.847] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-24T18:16:12.884] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-25T03:09:35.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-25 03:09:35
+[2024-10-25T07:15:30.378] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-25T07:15:30.387] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-25T07:15:30.392] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-25T07:15:30.397] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-25T07:57:47.738] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-25T07:57:47.773] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-25T07:57:47.809] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-25T07:57:47.845] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-25T12:53:55.201] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-10-25T12:53:55.529] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-10-25T12:53:55.543] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-10-25T12:53:55.549] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-10-25T12:53:55.554] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-10-25T12:53:55.620] [INFO] monitorLogs - MQTT broker connected
+[2024-10-25T12:54:00.566] [INFO] monitorLogs - buildTasks - params undefined
+[2024-10-25T12:54:00.568] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-10-25T12:54:00.569] [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
+}
+[2024-10-25T12:54:00.575] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T12:54:00.576] [INFO] monitorLogs - luxOff: turn off line: 1 2024-10-26T05:57:00.575Z
+[2024-10-25T12:54:00.577] [INFO] monitorLogs - luxOn: turn on line: 1 2024-10-25T16:14:00.577Z
+[2024-10-25T12:54:00.578] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T12:54:00.579] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-10-25T12:54:00.580] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-10-25T12:54:00.581] [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
+}
+[2024-10-25T12:54:00.583] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T12:54:00.584] [INFO] monitorLogs - luxOff: turn off line: 2 2024-10-26T05:57:00.584Z
+[2024-10-25T12:54:00.585] [INFO] monitorLogs - luxOn: turn on line: 2 2024-10-25T16:14:00.585Z
+[2024-10-25T12:54:00.585] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T12:54:00.587] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-10-25T12:54:00.587] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-10-25T12:54:00.588] [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
+}
+[2024-10-25T12:54:00.590] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T12:54:00.591] [INFO] monitorLogs - luxOff: turn off line: 3 2024-10-26T05:57:00.591Z
+[2024-10-25T12:54:00.591] [INFO] monitorLogs - luxOn: turn on line: 3 2024-10-25T16:14:00.591Z
+[2024-10-25T12:54:00.592] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T12:54:00.593] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-10-25T12:54:00.594] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-10-25T12:54:00.594] [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
+}
+[2024-10-25T12:54:00.597] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T12:54:00.597] [INFO] monitorLogs - luxOff: turn off line: 4 2024-10-26T05:57:00.597Z
+[2024-10-25T12:54:00.598] [INFO] monitorLogs - luxOn: turn on line: 4 2024-10-25T16:14:00.598Z
+[2024-10-25T12:54:00.599] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T12:54:00.600] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-10-25T12:54:00.614] [INFO] monitorLogs - tasks created: 2177
+[2024-10-25T12:54:00.617] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-09-23
+[2024-10-25T12:54:00.926] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-25T12:54:00.965] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-25T12:54:01.003] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-25T12:54:01.039] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-25T13:38:38.056] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-10-25T13:38:38.383] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-10-25T13:38:38.397] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-10-25T13:38:38.403] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-10-25T13:38:38.408] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-10-25T13:38:38.475] [INFO] monitorLogs - MQTT broker connected
+[2024-10-25T13:38:43.421] [INFO] monitorLogs - buildTasks - params undefined
+[2024-10-25T13:38:43.423] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-10-25T13:38:43.423] [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
+}
+[2024-10-25T13:38:43.428] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T13:38:43.430] [INFO] monitorLogs - luxOff: turn off line: 1 2024-10-26T05:57:00.429Z
+[2024-10-25T13:38:43.431] [INFO] monitorLogs - luxOn: turn on line: 1 2024-10-25T16:14:00.431Z
+[2024-10-25T13:38:43.432] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T13:38:43.433] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-10-25T13:38:43.434] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-10-25T13:38:43.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
+}
+[2024-10-25T13:38:43.437] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T13:38:43.438] [INFO] monitorLogs - luxOff: turn off line: 2 2024-10-26T05:57:00.438Z
+[2024-10-25T13:38:43.439] [INFO] monitorLogs - luxOn: turn on line: 2 2024-10-25T16:14:00.439Z
+[2024-10-25T13:38:43.440] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T13:38:43.441] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-10-25T13:38:43.441] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-10-25T13:38:43.442] [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
+}
+[2024-10-25T13:38:43.444] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T13:38:43.445] [INFO] monitorLogs - luxOff: turn off line: 3 2024-10-26T05:57:00.445Z
+[2024-10-25T13:38:43.446] [INFO] monitorLogs - luxOn: turn on line: 3 2024-10-25T16:14:00.446Z
+[2024-10-25T13:38:43.447] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T13:38:43.448] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-10-25T13:38:43.449] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-10-25T13:38:43.449] [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
+}
+[2024-10-25T13:38:43.452] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-10-25T13:38:43.452] [INFO] monitorLogs - luxOff: turn off line: 4 2024-10-26T05:57:00.452Z
+[2024-10-25T13:38:43.453] [INFO] monitorLogs - luxOn: turn on line: 4 2024-10-25T16:14:00.453Z
+[2024-10-25T13:38:43.454] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:57', name: 'luxOff' },
+ { value: 1, start_time: '18:14', name: 'luxOn' }
+]
+[2024-10-25T13:38:43.455] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-10-25T13:38:43.469] [INFO] monitorLogs - tasks created: 2177
+[2024-10-25T13:38:43.472] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-09-23
+[2024-10-25T13:38:43.781] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-25T13:38:43.819] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-25T13:38:43.856] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-25T13:38:43.894] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-25T17:55:17.368] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-25T17:55:17.379] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-25T17:55:17.390] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-25T17:55:17.397] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-25T18:14:02.743] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-25T18:14:02.782] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-25T18:14:02.820] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-25T18:14:02.859] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-26T03:38:39.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-26 03:38:39
+[2024-10-26T07:26:33.949] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-26T07:26:33.959] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-26T07:26:33.964] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-26T07:26:33.971] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-26T07:57:00.446] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-26T07:57:00.483] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-26T07:57:00.518] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-26T07:57:00.554] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-26T17:53:18.832] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-26T17:53:18.843] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-26T17:53:18.848] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-26T17:53:18.853] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-26T18:12:36.902] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-26T18:12:36.938] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-26T18:12:36.975] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-26T18:12:37.011] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-27T03:38:40.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-27 03:38:40
+[2024-10-27T06:16:36.786] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-27T06:16:36.808] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-27T06:16:36.814] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-27T06:16:36.820] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-27T07:00:56.556] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-27T07:00:56.593] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-27T07:00:56.629] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-27T07:00:56.665] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-27T16:54:08.173] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-27T16:54:08.182] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-27T16:54:08.187] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-27T16:54:08.192] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-27T17:10:52.304] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-27T17:10:52.341] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-27T17:10:52.377] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-27T17:10:52.414] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-28T03:38:41.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-28 03:38:41
+[2024-10-28T06:17:27.756] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-28T06:17:27.767] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-28T06:17:27.774] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-28T06:17:27.779] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-28T07:02:31.689] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-28T07:02:31.725] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-28T07:02:31.761] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-28T07:02:31.797] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-28T15:26:18.296] [INFO] monitorLogs - MQTT broker connected
+[2024-10-28T16:53:35.431] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-28T16:53:35.452] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-28T16:53:35.457] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-28T16:53:35.462] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-28T17:09:10.878] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-28T17:09:10.914] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-28T17:09:10.950] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-28T17:09:10.986] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-29T03:38:43.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-29 03:38:43
+[2024-10-29T06:22:09.042] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-29T06:22:09.059] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-29T06:22:09.064] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-29T06:22:09.070] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-29T07:04:06.562] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-29T07:04:06.598] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-29T07:04:06.634] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-29T07:04:06.669] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-29T16:50:26.480] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-29T16:50:26.489] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-29T16:50:26.494] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-29T16:50:26.499] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-29T17:07:28.174] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-29T17:07:28.210] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-29T17:07:28.247] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-29T17:07:28.284] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-30T03:38:44.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-30 03:38:44
+[2024-10-30T06:23:21.115] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-30T06:23:21.133] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-30T06:23:21.138] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-30T06:23:21.143] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-30T07:05:41.963] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-30T07:05:42.005] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-30T07:05:42.041] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-30T07:05:42.076] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-30T09:01:23.520] [INFO] monitorLogs - MQTT broker connected
+[2024-10-30T16:51:20.863] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-30T16:51:20.872] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-30T16:51:20.878] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-30T16:51:20.883] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-30T17:05:47.192] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-30T17:05:47.227] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-30T17:05:47.265] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-30T17:05:47.302] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-31T03:38:45.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-10-31 03:38:45
+[2024-10-31T06:31:26.284] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-31T06:31:26.291] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-31T06:31:26.297] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-31T06:31:26.301] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-10-31T07:07:17.236] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-10-31T07:07:17.273] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-31T07:07:17.308] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-31T07:07:17.344] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-31T16:44:35.785] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-31T16:44:35.795] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-31T16:44:35.800] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-31T16:44:35.805] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-10-31T17:04:07.824] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-10-31T17:04:07.861] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-10-31T17:04:07.897] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-10-31T17:04:07.933] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-01T03:38:46.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-01 03:38:46
+[2024-11-01T06:28:20.065] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-01T06:28:20.073] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-01T06:28:20.077] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-01T06:28:20.089] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-01T07:08:52.860] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-01T07:08:52.896] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-01T07:08:52.932] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-01T07:08:52.968] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-01T16:46:09.719] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-01T16:46:09.736] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-01T16:46:09.741] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-01T16:46:09.746] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-01T17:02:32.262] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-01T17:02:32.298] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-01T17:02:32.334] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-01T17:02:32.370] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-02T03:38:47.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-02 03:38:47
+[2024-11-02T06:36:30.501] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-02T06:36:30.515] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-02T06:36:30.520] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-02T06:36:30.525] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-02T07:10:28.704] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-02T07:10:28.742] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-02T07:10:28.778] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-02T07:10:28.814] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-02T16:43:01.131] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-02T16:43:01.147] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-02T16:43:01.151] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-02T16:43:01.156] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-02T17:00:53.751] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-02T17:00:53.787] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-02T17:00:53.823] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-02T17:00:53.860] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-03T03:38:48.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-03 03:38:48
+[2024-11-03T06:27:44.817] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-03T06:27:44.842] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-03T06:27:44.847] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-03T06:27:44.851] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-03T07:12:04.362] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-03T07:12:04.399] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-03T07:12:04.434] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-03T07:12:04.469] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-03T16:45:32.229] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-03T16:45:32.236] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-03T16:45:32.242] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-03T16:45:32.250] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-03T16:59:18.911] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-03T16:59:18.948] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-03T16:59:18.984] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-03T16:59:19.020] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-04T03:38:49.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-04 03:38:49
+[2024-11-04T06:27:23.396] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-04T06:27:23.406] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-04T06:27:23.411] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-04T06:27:23.417] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-04T07:13:40.278] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-04T07:13:40.315] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-04T07:13:40.350] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-04T07:13:40.385] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-04T14:13:00.271] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-11-04T14:13:00.600] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-11-04T14:13:00.614] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-11-04T14:13:00.620] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-11-04T14:13:00.626] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-11-04T14:13:01.889] [INFO] monitorLogs - MQTT broker connected
+[2024-11-04T14:13:05.637] [INFO] monitorLogs - buildTasks - params undefined
+[2024-11-04T14:13:05.638] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-11-04T14:13:05.639] [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
+}
+[2024-11-04T14:13:05.643] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-04T14:13:05.645] [INFO] monitorLogs - luxOff: turn off line: 1 2024-11-05T06:13:00.644Z
+[2024-11-04T14:13:05.646] [INFO] monitorLogs - luxOn: turn on line: 1 2024-11-04T15:57:00.646Z
+[2024-11-04T14:13:05.647] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:13', name: 'luxOff' },
+ { value: 1, start_time: '16:57', name: 'luxOn' }
+]
+[2024-11-04T14:13:05.649] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-11-04T14:13:05.650] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-11-04T14:13:05.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
+}
+[2024-11-04T14:13:05.653] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-04T14:13:05.653] [INFO] monitorLogs - luxOff: turn off line: 2 2024-11-05T06:13:00.653Z
+[2024-11-04T14:13:05.654] [INFO] monitorLogs - luxOn: turn on line: 2 2024-11-04T15:57:00.654Z
+[2024-11-04T14:13:05.655] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:13', name: 'luxOff' },
+ { value: 1, start_time: '16:57', name: 'luxOn' }
+]
+[2024-11-04T14:13:05.656] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-11-04T14:13:05.657] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-11-04T14:13:05.657] [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
+}
+[2024-11-04T14:13:05.659] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-04T14:13:05.660] [INFO] monitorLogs - luxOff: turn off line: 3 2024-11-05T06:13:00.660Z
+[2024-11-04T14:13:05.661] [INFO] monitorLogs - luxOn: turn on line: 3 2024-11-04T15:57:00.661Z
+[2024-11-04T14:13:05.662] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:13', name: 'luxOff' },
+ { value: 1, start_time: '16:57', name: 'luxOn' }
+]
+[2024-11-04T14:13:05.663] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-11-04T14:13:05.663] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-11-04T14:13:05.664] [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
+}
+[2024-11-04T14:13:05.666] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-04T14:13:05.667] [INFO] monitorLogs - luxOff: turn off line: 4 2024-11-05T06:13:00.667Z
+[2024-11-04T14:13:05.667] [INFO] monitorLogs - luxOn: turn on line: 4 2024-11-04T15:57:00.667Z
+[2024-11-04T14:13:05.668] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:13', name: 'luxOff' },
+ { value: 1, start_time: '16:57', name: 'luxOn' }
+]
+[2024-11-04T14:13:05.669] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-11-04T14:13:05.687] [INFO] monitorLogs - tasks created: 2177
+[2024-11-04T14:13:05.690] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-09-23
+[2024-11-04T14:13:05.999] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-04T14:13:06.038] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-04T14:13:06.077] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-04T14:13:06.116] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-04T16:44:03.698] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-04T16:44:03.709] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-04T16:44:03.715] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-04T16:44:03.721] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-04T16:57:02.511] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-04T16:57:02.550] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-04T16:57:02.588] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-04T16:57:02.631] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-05T03:13:01.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-05 03:13:01
+[2024-11-05T06:29:58.144] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-05T06:29:58.155] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-05T06:29:58.160] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-05T06:29:58.166] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-05T07:13:00.832] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-05T07:13:00.869] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-05T07:13:00.907] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-05T07:13:00.942] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-05T08:06:22.294] [INFO] monitorLogs - MQTT broker connected
+[2024-11-05T08:08:22.120] [INFO] monitorLogs - MQTT broker connected
+[2024-11-05T16:38:21.155] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-05T16:38:21.164] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-05T16:38:21.169] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-05T16:38:21.174] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-05T16:56:15.047] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-05T16:56:15.084] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-05T16:56:15.119] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-05T16:56:15.157] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-05T22:56:02.474] [INFO] monitorLogs - MQTT broker connected
+[2024-11-06T03:13:02.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-06 03:13:02
+[2024-11-06T06:29:36.861] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-06T06:29:36.880] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-06T06:29:36.886] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-06T06:29:36.891] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-06T07:16:52.117] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-06T07:16:52.153] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-06T07:16:52.190] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-06T07:16:52.228] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-06T16:38:23.002] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-06T16:38:23.010] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-06T16:38:23.015] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-06T16:38:23.020] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-06T16:54:47.000] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-06T16:54:47.038] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-06T16:54:47.074] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-06T16:54:47.111] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-07T01:40:50.691] [INFO] monitorLogs - MQTT broker connected
+[2024-11-07T03:13:09.449] [INFO] monitorLogs - setCorrectPlcTimeOnceADay - function error SyntaxError: Unexpected token < in JSON at position 0
+ at JSON.parse ()
+ at /home/unipi/flowserver/flow/cmd_manager.js:2898:26
+ 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
+[2024-11-07T06:33:52.358] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-07T06:33:52.373] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-07T06:33:52.377] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-07T06:33:52.382] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-07T07:18:27.675] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-07T07:18:27.711] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-07T07:18:27.746] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-07T07:18:27.782] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-07T16:36:43.936] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-07T16:36:43.944] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-07T16:36:43.949] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-07T16:36:43.953] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-07T16:53:18.668] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-07T16:53:18.705] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-07T16:53:18.741] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-07T16:53:18.778] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-08T03:13:04.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-08 03:13:04
+[2024-11-08T06:35:12.898] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-08T06:35:12.913] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-08T06:35:12.918] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-08T06:35:12.923] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-08T07:20:03.220] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-08T07:20:03.255] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-08T07:20:03.291] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-08T07:20:03.326] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-08T16:35:41.638] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-08T16:35:41.646] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-08T16:35:41.650] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-08T16:35:41.656] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-08T16:51:53.735] [INFO] monitorLogs - turnOnLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-08T16:51:53.772] [INFO] monitorLogs - turnOnLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-08T16:51:53.808] [INFO] monitorLogs - turnOnLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-08T16:51:53.844] [INFO] monitorLogs - turnOnLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-09T03:13:05.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-09 03:13:05
+[2024-11-09T06:35:02.106] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-09T06:35:02.116] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-09T06:35:02.121] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-09T06:35:02.127] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-09T07:21:38.808] [INFO] monitorLogs - turnOffLine (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-09T07:21:38.844] [INFO] monitorLogs - turnOffLine (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-09T07:21:38.879] [INFO] monitorLogs - turnOffLine (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-09T07:21:38.916] [INFO] monitorLogs - turnOffLine (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-09T11:04:06.036] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-11-09T11:04:11.529] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-11-09T11:04:11.531] [INFO] monitorLogs - turnLine: off pin (relay) relay1_02
+[2024-11-09T11:04:11.544] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-11-09T11:04:11.544] [INFO] monitorLogs - turnLine: off pin (relay) relay1_03
+[2024-11-09T11:04:11.550] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-11-09T11:04:11.551] [INFO] monitorLogs - turnLine: off pin (relay) relay1_04
+[2024-11-09T11:04:11.557] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-11-09T11:04:11.558] [INFO] monitorLogs - turnLine: off pin (relay) relay1_05
+[2024-11-09T11:04:11.677] [INFO] monitorLogs - MQTT client connected
+[2024-11-09T11:04:16.573] [INFO] monitorLogs - buildTasks - params undefined
+[2024-11-09T11:04:16.574] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-11-09T11:04:16.575] [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
+}
+[2024-11-09T11:04:16.579] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T11:04:16.580] [INFO] monitorLogs - luxOff: turn off line: 1 2024-11-10T06:21:00.579Z
+[2024-11-09T11:04:16.582] [INFO] monitorLogs - luxOn: turn on line: 1 2024-11-09T15:50:00.582Z
+[2024-11-09T11:04:16.582] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T11:04:16.583] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-11-09T11:04:16.584] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-11-09T11:04:16.585] [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
+}
+[2024-11-09T11:04:16.587] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T11:04:16.588] [INFO] monitorLogs - luxOff: turn off line: 2 2024-11-10T06:21:00.588Z
+[2024-11-09T11:04:16.589] [INFO] monitorLogs - luxOn: turn on line: 2 2024-11-09T15:50:00.588Z
+[2024-11-09T11:04:16.589] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T11:04:16.590] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-11-09T11:04:16.591] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-11-09T11:04:16.591] [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
+}
+[2024-11-09T11:04:16.593] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T11:04:16.594] [INFO] monitorLogs - luxOff: turn off line: 3 2024-11-10T06:21:00.594Z
+[2024-11-09T11:04:16.595] [INFO] monitorLogs - luxOn: turn on line: 3 2024-11-09T15:50:00.595Z
+[2024-11-09T11:04:16.595] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T11:04:16.596] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-11-09T11:04:16.597] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-11-09T11:04:16.597] [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
+}
+[2024-11-09T11:04:16.600] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T11:04:16.600] [INFO] monitorLogs - luxOff: turn off line: 4 2024-11-10T06:21:00.600Z
+[2024-11-09T11:04:16.601] [INFO] monitorLogs - luxOn: turn on line: 4 2024-11-09T15:50:00.601Z
+[2024-11-09T11:04:16.602] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T11:04:16.603] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-11-09T11:04:16.619] [INFO] monitorLogs - tasks created: 2177
+[2024-11-09T11:04:16.622] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-11-09T11:04:16.930] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-09T11:04:16.968] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-09T11:04:17.007] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-09T11:04:17.044] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-09T13:22:18.007] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-11-09T13:22:23.422] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-11-09T13:22:23.424] [INFO] monitorLogs - turnLine: off pin (relay) relay1_02
+[2024-11-09T13:22:23.438] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-11-09T13:22:23.439] [INFO] monitorLogs - turnLine: off pin (relay) relay1_03
+[2024-11-09T13:22:23.445] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-11-09T13:22:23.446] [INFO] monitorLogs - turnLine: off pin (relay) relay1_04
+[2024-11-09T13:22:23.452] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-11-09T13:22:23.453] [INFO] monitorLogs - turnLine: off pin (relay) relay1_05
+[2024-11-09T13:22:23.538] [INFO] monitorLogs - MQTT client connected
+[2024-11-09T13:22:28.467] [INFO] monitorLogs - buildTasks - params undefined
+[2024-11-09T13:22:28.468] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-11-09T13:22:28.469] [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
+}
+[2024-11-09T13:22:28.473] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T13:22:28.475] [INFO] monitorLogs - luxOff: turn off line: 1 2024-11-10T06:21:00.474Z
+[2024-11-09T13:22:28.476] [INFO] monitorLogs - luxOn: turn on line: 1 2024-11-09T15:50:00.476Z
+[2024-11-09T13:22:28.477] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T13:22:28.478] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-11-09T13:22:28.479] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-11-09T13:22:28.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
+}
+[2024-11-09T13:22:28.482] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T13:22:28.482] [INFO] monitorLogs - luxOff: turn off line: 2 2024-11-10T06:21:00.482Z
+[2024-11-09T13:22:28.483] [INFO] monitorLogs - luxOn: turn on line: 2 2024-11-09T15:50:00.483Z
+[2024-11-09T13:22:28.484] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T13:22:28.485] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-11-09T13:22:28.486] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-11-09T13:22:28.486] [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
+}
+[2024-11-09T13:22:28.488] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T13:22:28.489] [INFO] monitorLogs - luxOff: turn off line: 3 2024-11-10T06:21:00.489Z
+[2024-11-09T13:22:28.490] [INFO] monitorLogs - luxOn: turn on line: 3 2024-11-09T15:50:00.489Z
+[2024-11-09T13:22:28.490] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T13:22:28.491] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-11-09T13:22:28.492] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-11-09T13:22:28.493] [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
+}
+[2024-11-09T13:22:28.495] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-09T13:22:28.496] [INFO] monitorLogs - luxOff: turn off line: 4 2024-11-10T06:21:00.495Z
+[2024-11-09T13:22:28.497] [INFO] monitorLogs - luxOn: turn on line: 4 2024-11-09T15:50:00.496Z
+[2024-11-09T13:22:28.497] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:21', name: 'luxOff' },
+ { value: 1, start_time: '16:50', name: 'luxOn' }
+]
+[2024-11-09T13:22:28.498] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-11-09T13:22:28.517] [INFO] monitorLogs - tasks created: 2177
+[2024-11-09T13:22:28.520] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-11-09T13:22:28.828] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-09T13:22:28.867] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-09T13:22:28.909] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-09T13:22:28.948] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-09T16:34:00.468] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-09T16:34:00.469] [INFO] monitorLogs - turnLine: on pin (relay) relay1_02
+[2024-11-09T16:34:00.482] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-09T16:34:00.483] [INFO] monitorLogs - turnLine: on pin (relay) relay1_03
+[2024-11-09T16:34:00.491] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-09T16:34:00.492] [INFO] monitorLogs - turnLine: on pin (relay) relay1_04
+[2024-11-09T16:34:00.499] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-09T16:34:00.499] [INFO] monitorLogs - turnLine: on pin (relay) relay1_05
+[2024-11-09T16:50:01.021] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-09T16:50:01.072] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-09T16:50:01.110] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-09T16:50:01.149] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-10T03:22:26.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-10 03:22:26
+[2024-11-10T06:37:19.114] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-10T06:37:19.116] [INFO] monitorLogs - turnLine: off pin (relay) relay1_02
+[2024-11-10T06:37:19.129] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-10T06:37:19.130] [INFO] monitorLogs - turnLine: off pin (relay) relay1_03
+[2024-11-10T06:37:19.138] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-10T06:37:19.139] [INFO] monitorLogs - turnLine: off pin (relay) relay1_04
+[2024-11-10T06:37:19.145] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-10T06:37:19.146] [INFO] monitorLogs - turnLine: off pin (relay) relay1_05
+[2024-11-10T07:21:00.531] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-10T07:21:00.567] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-10T07:21:00.604] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-10T07:21:00.640] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-10T16:31:12.516] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-10T16:31:12.518] [INFO] monitorLogs - turnLine: on pin (relay) relay1_02
+[2024-11-10T16:31:12.529] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-10T16:31:12.530] [INFO] monitorLogs - turnLine: on pin (relay) relay1_03
+[2024-11-10T16:31:12.537] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-10T16:31:12.538] [INFO] monitorLogs - turnLine: on pin (relay) relay1_04
+[2024-11-10T16:31:12.544] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-10T16:31:12.544] [INFO] monitorLogs - turnLine: on pin (relay) relay1_05
+[2024-11-10T16:49:05.756] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-10T16:49:05.793] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-10T16:49:05.829] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-10T16:49:05.867] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-11T03:22:27.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-11 03:22:27
+[2024-11-11T06:53:08.623] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-11T06:53:08.625] [INFO] monitorLogs - turnLine: off pin (relay) relay1_02
+[2024-11-11T06:53:08.638] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-11T06:53:08.638] [INFO] monitorLogs - turnLine: off pin (relay) relay1_03
+[2024-11-11T06:53:08.646] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-11T06:53:08.647] [INFO] monitorLogs - turnLine: off pin (relay) relay1_04
+[2024-11-11T06:53:08.653] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-11T06:53:08.654] [INFO] monitorLogs - turnLine: off pin (relay) relay1_05
+[2024-11-11T07:24:49.101] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-11T07:24:49.137] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-11T07:24:49.174] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-11T07:24:49.210] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-11T08:28:13.811] [INFO] monitorLogs - MQTT client connected
+[2024-11-11T08:31:52.025] [INFO] monitorLogs - MQTT client connected
+[2024-11-11T16:19:32.825] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-11T16:19:32.826] [INFO] monitorLogs - turnLine: on pin (relay) relay1_02
+[2024-11-11T16:19:32.853] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-11T16:19:32.853] [INFO] monitorLogs - turnLine: on pin (relay) relay1_03
+[2024-11-11T16:19:32.860] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-11T16:19:32.861] [INFO] monitorLogs - turnLine: on pin (relay) relay1_04
+[2024-11-11T16:19:32.867] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-11T16:19:32.868] [INFO] monitorLogs - turnLine: on pin (relay) relay1_05
+[2024-11-11T16:47:46.491] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-11T16:47:46.529] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-11T16:47:46.565] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-11T16:47:46.601] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-11T23:08:38.787] [INFO] monitorLogs - MQTT client connected
+[2024-11-12T03:22:28.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-12 03:22:28
+[2024-11-12T06:53:07.377] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-12T06:53:07.379] [INFO] monitorLogs - turnLine: off pin (relay) relay1_02
+[2024-11-12T06:53:07.390] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-12T06:53:07.391] [INFO] monitorLogs - turnLine: off pin (relay) relay1_03
+[2024-11-12T06:53:07.399] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-12T06:53:07.400] [INFO] monitorLogs - turnLine: off pin (relay) relay1_04
+[2024-11-12T06:53:07.408] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-12T06:53:07.409] [INFO] monitorLogs - turnLine: off pin (relay) relay1_05
+[2024-11-12T07:02:40.756] [INFO] monitorLogs - MQTT client connected
+[2024-11-12T07:26:23.877] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-12T07:26:23.914] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-12T07:26:23.950] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-12T07:26:23.987] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-12T10:27:31.224] [INFO] monitorLogs - MQTT client connected
+[2024-11-12T16:17:23.741] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-12T16:17:23.741] [INFO] monitorLogs - turnLine: on pin (relay) relay1_02
+[2024-11-12T16:17:23.752] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-12T16:17:23.752] [INFO] monitorLogs - turnLine: on pin (relay) relay1_03
+[2024-11-12T16:17:23.759] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-12T16:17:23.760] [INFO] monitorLogs - turnLine: on pin (relay) relay1_04
+[2024-11-12T16:17:23.766] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-12T16:17:23.766] [INFO] monitorLogs - turnLine: on pin (relay) relay1_05
+[2024-11-12T16:46:27.765] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-12T16:46:27.802] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-12T16:46:27.838] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-12T16:46:27.874] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-13T03:22:29.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-13 03:22:29
+[2024-11-13T06:59:34.672] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-13T06:59:34.673] [INFO] monitorLogs - turnLine: off pin (relay) relay1_02
+[2024-11-13T06:59:34.685] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-13T06:59:34.685] [INFO] monitorLogs - turnLine: off pin (relay) relay1_03
+[2024-11-13T06:59:34.695] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-13T06:59:34.696] [INFO] monitorLogs - turnLine: off pin (relay) relay1_04
+[2024-11-13T06:59:34.704] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-13T06:59:34.705] [INFO] monitorLogs - turnLine: off pin (relay) relay1_05
+[2024-11-13T07:27:58.010] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-11-13T07:27:58.048] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-11-13T07:27:58.085] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-11-13T07:27:58.122] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-11-13T10:12:36.027] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-11-13T10:12:41.358] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-11-13T10:12:41.373] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-11-13T10:12:41.380] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-11-13T10:12:41.388] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-11-13T10:12:41.501] [INFO] monitorLogs - MQTT client connected
+[2024-11-13T10:12:46.402] [INFO] monitorLogs - buildTasks - params undefined
+[2024-11-13T10:12:46.404] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-11-13T10:12:46.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
+}
+[2024-11-13T10:12:46.409] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-13T10:12:46.411] [INFO] monitorLogs - luxOff: turn off line: 1 2024-11-14T06:27:00.410Z
+[2024-11-13T10:12:46.412] [INFO] monitorLogs - luxOn: turn on line: 1 2024-11-13T15:45:00.412Z
+[2024-11-13T10:12:46.413] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:27', name: 'luxOff' },
+ { value: 1, start_time: '16:45', name: 'luxOn' }
+]
+[2024-11-13T10:12:46.414] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-11-13T10:12:46.415] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-11-13T10:12:46.415] [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
+}
+[2024-11-13T10:12:46.418] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-13T10:12:46.419] [INFO] monitorLogs - luxOff: turn off line: 2 2024-11-14T06:27:00.419Z
+[2024-11-13T10:12:46.420] [INFO] monitorLogs - luxOn: turn on line: 2 2024-11-13T15:45:00.420Z
+[2024-11-13T10:12:46.421] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:27', name: 'luxOff' },
+ { value: 1, start_time: '16:45', name: 'luxOn' }
+]
+[2024-11-13T10:12:46.422] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-11-13T10:12:46.422] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-11-13T10:12:46.423] [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
+}
+[2024-11-13T10:12:46.425] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-13T10:12:46.426] [INFO] monitorLogs - luxOff: turn off line: 3 2024-11-14T06:27:00.426Z
+[2024-11-13T10:12:46.426] [INFO] monitorLogs - luxOn: turn on line: 3 2024-11-13T15:45:00.426Z
+[2024-11-13T10:12:46.427] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:27', name: 'luxOff' },
+ { value: 1, start_time: '16:45', name: 'luxOn' }
+]
+[2024-11-13T10:12:46.428] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-11-13T10:12:46.429] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-11-13T10:12:46.429] [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
+}
+[2024-11-13T10:12:46.436] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-13T10:12:46.436] [INFO] monitorLogs - luxOff: turn off line: 4 2024-11-14T06:27:00.436Z
+[2024-11-13T10:12:46.437] [INFO] monitorLogs - luxOn: turn on line: 4 2024-11-13T15:45:00.437Z
+[2024-11-13T10:12:46.438] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:27', name: 'luxOff' },
+ { value: 1, start_time: '16:45', name: 'luxOn' }
+]
+[2024-11-13T10:12:46.439] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-11-13T10:12:46.460] [INFO] monitorLogs - tasks created: 2177
+[2024-11-13T10:12:46.463] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-11-13T16:18:17.494] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-13T16:18:17.507] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-13T16:18:17.514] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-13T16:18:17.521] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-14T03:12:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-14 03:12:42
+[2024-11-14T06:54:24.550] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-14T06:54:24.562] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-14T06:54:24.570] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-14T06:54:24.577] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-14T16:22:19.646] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-14T16:22:19.655] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-14T16:22:19.661] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-14T16:22:19.668] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-15T03:12:43.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-15 03:12:43
+[2024-11-15T06:47:11.689] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-15T06:47:11.702] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-15T06:47:11.711] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-15T06:47:11.718] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-15T15:35:24.114] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-11-15T15:35:29.471] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-11-15T15:35:29.486] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-11-15T15:35:29.493] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-11-15T15:35:29.501] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-11-15T15:35:29.626] [INFO] monitorLogs - MQTT client connected
+[2024-11-15T15:35:34.514] [INFO] monitorLogs - buildTasks - params undefined
+[2024-11-15T15:35:34.516] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-11-15T15:35:34.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
+}
+[2024-11-15T15:35:34.522] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-15T15:35:34.523] [INFO] monitorLogs - luxOff: turn off line: 1 2024-11-16T06:31:00.523Z
+[2024-11-15T15:35:34.525] [INFO] monitorLogs - luxOn: turn on line: 1 2024-11-15T15:42:00.525Z
+[2024-11-15T15:35:34.526] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:31', name: 'luxOff' },
+ { value: 1, start_time: '16:42', name: 'luxOn' }
+]
+[2024-11-15T15:35:34.527] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-11-15T15:35:34.528] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-11-15T15:35:34.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
+}
+[2024-11-15T15:35:34.531] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-15T15:35:34.532] [INFO] monitorLogs - luxOff: turn off line: 2 2024-11-16T06:31:00.532Z
+[2024-11-15T15:35:34.533] [INFO] monitorLogs - luxOn: turn on line: 2 2024-11-15T15:42:00.532Z
+[2024-11-15T15:35:34.533] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:31', name: 'luxOff' },
+ { value: 1, start_time: '16:42', name: 'luxOn' }
+]
+[2024-11-15T15:35:34.534] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-11-15T15:35:34.535] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-11-15T15:35:34.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
+}
+[2024-11-15T15:35:34.538] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-15T15:35:34.538] [INFO] monitorLogs - luxOff: turn off line: 3 2024-11-16T06:31:00.538Z
+[2024-11-15T15:35:34.539] [INFO] monitorLogs - luxOn: turn on line: 3 2024-11-15T15:42:00.539Z
+[2024-11-15T15:35:34.540] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:31', name: 'luxOff' },
+ { value: 1, start_time: '16:42', name: 'luxOn' }
+]
+[2024-11-15T15:35:34.541] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-11-15T15:35:34.542] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-11-15T15:35:34.542] [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
+}
+[2024-11-15T15:35:34.544] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-15T15:35:34.545] [INFO] monitorLogs - luxOff: turn off line: 4 2024-11-16T06:31:00.545Z
+[2024-11-15T15:35:34.546] [INFO] monitorLogs - luxOn: turn on line: 4 2024-11-15T15:42:00.546Z
+[2024-11-15T15:35:34.547] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:31', name: 'luxOff' },
+ { value: 1, start_time: '16:42', name: 'luxOn' }
+]
+[2024-11-15T15:35:34.548] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-11-15T15:35:34.566] [INFO] monitorLogs - tasks created: 2177
+[2024-11-15T15:35:34.570] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-11-15T16:19:07.190] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-15T16:19:07.201] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-15T16:19:07.210] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-15T16:19:07.217] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-16T03:35:31.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-16 03:35:31
+[2024-11-16T06:46:50.682] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-16T06:46:50.694] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-16T06:46:50.702] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-16T06:46:50.709] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-16T16:26:32.811] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-16T16:26:32.819] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-16T16:26:32.826] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-16T16:26:32.831] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-17T03:35:32.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-17 03:35:32
+[2024-11-17T06:51:46.138] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-17T06:51:46.150] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-17T06:51:46.160] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-17T06:51:46.166] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-17T16:25:25.697] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-17T16:25:25.712] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-17T16:25:25.718] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-17T16:25:25.725] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-18T03:35:33.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-18 03:35:33
+[2024-11-18T06:49:56.982] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-18T06:49:56.995] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-18T06:49:57.002] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-18T06:49:57.009] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-18T16:12:34.994] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-18T16:12:35.004] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-18T16:12:35.010] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-18T16:12:35.016] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-19T03:35:44.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-19 03:35:44
+[2024-11-19T06:58:20.098] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-19T06:58:20.110] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-19T06:58:20.116] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-19T06:58:20.124] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-19T14:47:59.001] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false command received from platform
+[2024-11-19T14:48:10.725] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false command received from platform
+[2024-11-19T14:48:19.765] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false command received from platform
+[2024-11-19T14:48:49.213] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false command received from platform
+[2024-11-19T14:53:50.001] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false command received from platform
+[2024-11-19T14:53:55.121] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false command received from platform
+[2024-11-19T14:54:04.402] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false command received from platform
+[2024-11-19T14:54:12.081] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false command received from platform
+[2024-11-19T16:15:46.301] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-19T16:15:46.308] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-19T16:15:46.314] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-19T16:15:46.320] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-20T03:35:35.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-20 03:35:35
+[2024-11-20T07:11:08.585] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-20T07:11:08.597] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-20T07:11:08.604] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-20T07:11:08.611] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-20T16:22:11.207] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-20T16:22:11.218] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-20T16:22:11.225] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-20T16:22:11.231] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-21T03:35:36.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-21 03:35:36
+[2024-11-21T06:58:23.664] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-21T06:58:23.676] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-21T06:58:23.684] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-21T06:58:23.691] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-21T16:17:24.488] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-21T16:17:24.497] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-21T16:17:24.503] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-21T16:17:24.510] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-22T03:35:38.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-22 03:35:38
+[2024-11-22T07:20:58.256] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-22T07:20:58.267] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-22T07:20:58.273] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-22T07:20:58.282] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-22T09:16:21.962] [INFO] monitorLogs - MQTT client connected
+[2024-11-22T16:18:17.943] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-22T16:18:17.954] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-22T16:18:17.960] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-22T16:18:17.966] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-23T03:35:41.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-23 03:35:41
+[2024-11-23T07:01:30.747] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-23T07:01:30.757] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-23T07:01:30.764] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-23T07:01:30.773] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-23T16:20:25.470] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-23T16:20:25.482] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-23T16:20:25.489] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-23T16:20:25.495] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-24T03:35:39.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-24 03:35:39
+[2024-11-24T07:05:19.314] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-24T07:05:19.326] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-24T07:05:19.333] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-24T07:05:19.341] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-24T16:12:34.099] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-24T16:12:34.112] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-24T16:12:34.119] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-24T16:12:34.126] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-24T23:11:31.795] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T01:27:48.010] [INFO] monitorLogs - MQTT client error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-11-25T01:27:49.290] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T02:12:01.745] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T03:35:40.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-25 03:35:40
+[2024-11-25T06:58:10.898] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-25T06:58:10.911] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-25T06:58:10.918] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-25T06:58:10.926] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-25T07:10:02.352] [INFO] monitorLogs - MQTT client error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-11-25T07:10:04.519] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T07:13:33.665] [INFO] monitorLogs - MQTT client error Error: Connection refused: Server unavailable
+ at MqttClient._handleConnack (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:1388:17)
+ at MqttClient._handlePacket (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:549:12)
+ at work (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:438:12)
+ at Writable.writable._write (/home/unipi/flowserver/node_modules/mqtt/lib/client.js:452:5)
+ at doWrite (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)
+ at writeOrBuffer (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)
+ at Writable.write (/home/unipi/flowserver/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)
+ at Socket.ondata (internal/streams/readable.js:731:22)
+ at Socket.emit (events.js:400:28)
+ at addChunk (internal/streams/readable.js:293:12) {
+ code: 3
+}
+[2024-11-25T07:13:35.585] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T08:08:42.479] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T08:10:41.349] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T08:36:01.149] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T08:40:40.075] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T13:56:13.369] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T14:01:12.564] [INFO] monitorLogs - MQTT client connected
+[2024-11-25T16:17:39.174] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-25T16:17:39.186] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-25T16:17:39.194] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-25T16:17:39.201] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-26T03:35:41.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-26 03:35:41
+[2024-11-26T07:05:02.609] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-26T07:05:02.621] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-26T07:05:02.628] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-26T07:05:02.635] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-26T16:09:15.521] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-26T16:09:15.531] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-26T16:09:15.537] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-26T16:09:15.543] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-27T03:35:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-27 03:35:42
+[2024-11-27T07:02:39.237] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-27T07:02:39.250] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-27T07:02:39.259] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-27T07:02:39.266] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-27T15:42:29.461] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-11-27T15:42:34.785] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-11-27T15:42:34.801] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-11-27T15:42:34.807] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-11-27T15:42:34.814] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-11-27T15:42:34.903] [INFO] monitorLogs - MQTT client connected
+[2024-11-27T15:42:39.825] [INFO] monitorLogs - buildTasks - params undefined
+[2024-11-27T15:42:39.826] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-11-27T15:42:39.827] [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
+}
+[2024-11-27T15:42:39.832] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-27T15:42:39.834] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2024-11-28T06:48:00.833Z
+[2024-11-27T15:42:39.835] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2024-11-27T15:31:00.835Z
+[2024-11-27T15:42:39.836] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:48', name: 'luxOff' },
+ { value: 1, start_time: '16:31', name: 'luxOn' }
+]
+[2024-11-27T15:42:39.837] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-11-27T15:42:39.838] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-11-27T15:42:39.838] [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
+}
+[2024-11-27T15:42:39.841] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-27T15:42:39.841] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2024-11-28T06:48:00.841Z
+[2024-11-27T15:42:39.842] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2024-11-27T15:31:00.842Z
+[2024-11-27T15:42:39.843] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:48', name: 'luxOff' },
+ { value: 1, start_time: '16:31', name: 'luxOn' }
+]
+[2024-11-27T15:42:39.844] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-11-27T15:42:39.845] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-11-27T15:42:39.845] [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
+}
+[2024-11-27T15:42:39.847] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-27T15:42:39.848] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2024-11-28T06:48:00.848Z
+[2024-11-27T15:42:39.849] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2024-11-27T15:31:00.849Z
+[2024-11-27T15:42:39.850] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:48', name: 'luxOff' },
+ { value: 1, start_time: '16:31', name: 'luxOn' }
+]
+[2024-11-27T15:42:39.851] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-11-27T15:42:39.851] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-11-27T15:42:39.852] [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
+}
+[2024-11-27T15:42:39.854] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-11-27T15:42:39.855] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2024-11-28T06:48:00.854Z
+[2024-11-27T15:42:39.855] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2024-11-27T15:31:00.855Z
+[2024-11-27T15:42:39.856] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:48', name: 'luxOff' },
+ { value: 1, start_time: '16:31', name: 'luxOn' }
+]
+[2024-11-27T15:42:39.857] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-11-27T15:42:39.875] [INFO] monitorLogs - tasks created: 2177
+[2024-11-27T15:42:39.879] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-11-27T16:15:56.894] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-27T16:15:56.904] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-27T16:15:56.912] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-27T16:15:56.919] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-28T03:42:36.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-28 03:42:36
+[2024-11-28T07:20:19.089] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-28T07:20:19.102] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-28T07:20:19.109] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-28T07:20:19.117] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-28T16:14:45.484] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-28T16:14:45.497] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-28T16:14:45.504] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-28T16:14:45.510] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-29T03:42:37.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-29 03:42:37
+[2024-11-29T07:16:41.811] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-29T07:16:41.830] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-29T07:16:41.839] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-29T07:16:41.847] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-29T16:04:04.717] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-29T16:04:04.727] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-29T16:04:04.738] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-29T16:04:04.745] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-30T03:42:38.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-11-30 03:42:38
+[2024-11-30T07:04:59.066] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-30T07:04:59.079] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-30T07:04:59.085] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-30T07:04:59.096] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-11-30T16:17:07.902] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-30T16:17:07.914] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-30T16:17:07.921] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-11-30T16:17:07.927] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-01T03:42:39.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-01 03:42:39
+[2024-12-01T07:05:51.770] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-01T07:05:51.782] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-01T07:05:51.789] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-01T07:05:51.797] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-01T16:15:06.461] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-01T16:15:06.473] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-01T16:15:06.479] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-01T16:15:06.485] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-02T03:42:40.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-02 03:42:40
+[2024-12-02T07:07:00.949] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-02T07:07:00.961] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-02T07:07:00.969] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-02T07:07:00.976] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-02T16:13:59.962] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-02T16:13:59.975] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-02T16:13:59.981] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-02T16:13:59.988] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-03T03:42:41.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-03 03:42:41
+[2024-12-03T07:09:34.517] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-03T07:09:34.530] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-03T07:09:34.538] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-03T07:09:34.545] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-03T16:08:46.816] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-03T16:08:46.830] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-03T16:08:46.837] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-03T16:08:46.844] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-04T00:19:06.204] [INFO] monitorLogs - MQTT client connected
+[2024-12-04T03:42:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-04 03:42:42
+[2024-12-04T07:21:11.629] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-04T07:21:11.640] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-04T07:21:11.646] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-04T07:21:11.656] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-04T16:07:10.907] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-04T16:07:10.918] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-04T16:07:10.924] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-04T16:07:10.931] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-05T03:42:43.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-05 03:42:43
+[2024-12-05T07:09:53.460] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-05T07:09:53.474] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-05T07:09:53.480] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-05T07:09:53.488] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-05T14:33:05.985] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-12-05T14:33:11.391] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-12-05T14:33:11.405] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-12-05T14:33:11.412] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-12-05T14:33:11.418] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-12-05T14:33:16.430] [INFO] monitorLogs - buildTasks - params undefined
+[2024-12-05T14:33:16.431] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-12-05T14:33:16.432] [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
+}
+[2024-12-05T14:33:16.436] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:33:16.438] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2024-12-06T06:58:00.437Z
+[2024-12-05T14:33:16.439] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2024-12-05T15:27:00.438Z
+[2024-12-05T14:33:16.439] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:33:16.440] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-12-05T14:33:16.441] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-12-05T14:33:16.442] [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
+}
+[2024-12-05T14:33:16.444] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:33:16.445] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2024-12-06T06:58:00.445Z
+[2024-12-05T14:33:16.445] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2024-12-05T15:27:00.445Z
+[2024-12-05T14:33:16.446] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:33:16.447] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-12-05T14:33:16.448] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-12-05T14:33:16.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
+}
+[2024-12-05T14:33:16.450] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:33:16.451] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2024-12-06T06:58:00.451Z
+[2024-12-05T14:33:16.451] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2024-12-05T15:27:00.451Z
+[2024-12-05T14:33:16.452] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:33:16.453] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-12-05T14:33:16.454] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-12-05T14:33:16.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
+}
+[2024-12-05T14:33:16.456] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:33:16.457] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2024-12-06T06:58:00.457Z
+[2024-12-05T14:33:16.458] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2024-12-05T15:27:00.457Z
+[2024-12-05T14:33:16.458] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:33:16.459] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-12-05T14:33:16.473] [INFO] monitorLogs - tasks created: 2177
+[2024-12-05T14:33:16.475] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-12-05T14:40:52.161] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-12-05T14:40:57.571] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-12-05T14:40:57.587] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-12-05T14:40:57.593] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-12-05T14:40:57.600] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-12-05T14:40:57.680] [INFO] monitorLogs - MQTT client connected
+[2024-12-05T14:41:02.611] [INFO] monitorLogs - buildTasks - params undefined
+[2024-12-05T14:41:02.613] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-12-05T14:41:02.613] [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
+}
+[2024-12-05T14:41:02.617] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:41:02.619] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2024-12-06T06:58:00.618Z
+[2024-12-05T14:41:02.620] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2024-12-05T15:27:00.620Z
+[2024-12-05T14:41:02.621] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:41:02.622] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-12-05T14:41:02.623] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-12-05T14:41:02.623] [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
+}
+[2024-12-05T14:41:02.626] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:41:02.626] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2024-12-06T06:58:00.626Z
+[2024-12-05T14:41:02.627] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2024-12-05T15:27:00.627Z
+[2024-12-05T14:41:02.628] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:41:02.629] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-12-05T14:41:02.629] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-12-05T14:41:02.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
+}
+[2024-12-05T14:41:02.632] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:41:02.633] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2024-12-06T06:58:00.632Z
+[2024-12-05T14:41:02.633] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2024-12-05T15:27:00.633Z
+[2024-12-05T14:41:02.634] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:41:02.635] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-12-05T14:41:02.636] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-12-05T14:41:02.636] [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
+}
+[2024-12-05T14:41:02.638] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T14:41:02.639] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2024-12-06T06:58:00.639Z
+[2024-12-05T14:41:02.640] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2024-12-05T15:27:00.640Z
+[2024-12-05T14:41:02.640] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T14:41:02.641] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-12-05T14:41:02.655] [INFO] monitorLogs - tasks created: 2177
+[2024-12-05T14:41:02.658] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-12-05T16:13:25.922] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-05T16:13:25.933] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-05T16:13:25.940] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-05T16:13:25.947] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-05T17:23:08.112] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-12-05T17:23:13.507] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-12-05T17:23:13.521] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-12-05T17:23:13.527] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-12-05T17:23:13.533] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-12-05T17:23:13.671] [INFO] monitorLogs - MQTT client connected
+[2024-12-05T17:23:18.544] [INFO] monitorLogs - buildTasks - params undefined
+[2024-12-05T17:23:18.546] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-12-05T17:23:18.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
+}
+[2024-12-05T17:23:18.551] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T17:23:18.552] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2024-12-06T06:58:00.551Z
+[2024-12-05T17:23:18.553] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2024-12-06T15:27:00.553Z
+[2024-12-05T17:23:18.554] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T17:23:18.555] [INFO] monitorLogs - -->currentValue for relay 1 1
+[2024-12-05T17:23:18.556] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-12-05T17:23:18.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
+}
+[2024-12-05T17:23:18.558] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T17:23:18.559] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2024-12-06T06:58:00.559Z
+[2024-12-05T17:23:18.560] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2024-12-06T15:27:00.560Z
+[2024-12-05T17:23:18.560] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T17:23:18.561] [INFO] monitorLogs - -->currentValue for relay 2 1
+[2024-12-05T17:23:18.562] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-12-05T17:23:18.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
+}
+[2024-12-05T17:23:18.565] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T17:23:18.565] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2024-12-06T06:58:00.565Z
+[2024-12-05T17:23:18.566] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2024-12-06T15:27:00.566Z
+[2024-12-05T17:23:18.566] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T17:23:18.567] [INFO] monitorLogs - -->currentValue for relay 3 1
+[2024-12-05T17:23:18.568] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-12-05T17:23:18.569] [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
+}
+[2024-12-05T17:23:18.571] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-05T17:23:18.571] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2024-12-06T06:58:00.571Z
+[2024-12-05T17:23:18.572] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2024-12-06T15:27:00.572Z
+[2024-12-05T17:23:18.573] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:58', name: 'luxOff' },
+ { value: 1, start_time: '16:27', name: 'luxOn' }
+]
+[2024-12-05T17:23:18.574] [INFO] monitorLogs - -->currentValue for relay 4 1
+[2024-12-05T17:23:18.587] [INFO] monitorLogs - tasks created: 2177
+[2024-12-05T17:23:18.590] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-12-05T17:23:18.897] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2024-12-05T17:23:18.941] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2024-12-05T17:23:18.984] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2024-12-05T17:23:19.027] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2024-12-06T03:23:15.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-06 03:23:15
+[2024-12-06T07:24:08.436] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-06T07:24:08.449] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-06T07:24:08.456] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-06T07:24:08.464] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-06T15:58:15.625] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-06T15:58:15.636] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-06T15:58:15.643] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-06T15:58:15.650] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-07T03:23:16.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-07 03:23:16
+[2024-12-07T07:23:08.447] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-07T07:23:08.460] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-07T07:23:08.467] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-07T07:23:08.475] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-07T16:07:17.126] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-07T16:07:17.139] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-07T16:07:17.146] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-07T16:07:17.153] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-08T03:23:17.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-08 03:23:17
+[2024-12-08T07:27:21.476] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-08T07:27:21.491] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-08T07:27:21.499] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-08T07:27:21.506] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-08T12:48:53.734] [INFO] monitorLogs - websocket onclose, reconnect
+[2024-12-08T12:48:54.822] [INFO] monitorLogs - websocket error, reconnect
+[2024-12-08T12:48:54.824] [INFO] monitorLogs - websocket onclose, reconnect
+[2024-12-08T12:55:33.589] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-12-08T12:55:38.986] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-12-08T12:55:39.001] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-12-08T12:55:39.008] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-12-08T12:55:39.014] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-12-08T12:55:39.140] [INFO] monitorLogs - MQTT client connected
+[2024-12-08T12:55:44.026] [INFO] monitorLogs - buildTasks - params undefined
+[2024-12-08T12:55:44.027] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-12-08T12:55:44.028] [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
+}
+[2024-12-08T12:55:44.034] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-08T12:55:44.036] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2024-12-09T07:02:00.035Z
+[2024-12-08T12:55:44.037] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2024-12-08T15:26:00.037Z
+[2024-12-08T12:55:44.038] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '8:2', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-08T12:55:44.039] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-12-08T12:55:44.041] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-12-08T12:55:44.041] [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
+}
+[2024-12-08T12:55:44.043] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-08T12:55:44.044] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2024-12-09T07:02:00.044Z
+[2024-12-08T12:55:44.045] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2024-12-08T15:26:00.045Z
+[2024-12-08T12:55:44.046] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '8:2', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-08T12:55:44.047] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-12-08T12:55:44.047] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-12-08T12:55:44.048] [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
+}
+[2024-12-08T12:55:44.050] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-08T12:55:44.051] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2024-12-09T07:02:00.050Z
+[2024-12-08T12:55:44.051] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2024-12-08T15:26:00.051Z
+[2024-12-08T12:55:44.052] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '8:2', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-08T12:55:44.053] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-12-08T12:55:44.054] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-12-08T12:55:44.054] [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
+}
+[2024-12-08T12:55:44.056] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-08T12:55:44.057] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2024-12-09T07:02:00.057Z
+[2024-12-08T12:55:44.058] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2024-12-08T15:26:00.058Z
+[2024-12-08T12:55:44.058] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '8:2', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-08T12:55:44.059] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-12-08T12:55:44.077] [INFO] monitorLogs - tasks created: 2177
+[2024-12-08T12:55:44.081] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-12-08T16:11:43.016] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-08T16:11:43.034] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-08T16:11:43.042] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-08T16:11:43.050] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-09T03:55:41.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-09 03:55:41
+[2024-12-09T07:26:55.766] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-09T07:26:55.779] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-09T07:26:55.786] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-09T07:26:55.793] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-09T16:10:37.800] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-09T16:10:37.810] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-09T16:10:37.816] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-09T16:10:37.822] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-10T03:55:42.014] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-10 03:55:42
+[2024-12-10T06:40:58.730] [INFO] monitorLogs - MQTT client connected
+[2024-12-10T07:26:09.001] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-10T07:26:09.014] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-10T07:26:09.023] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-10T07:26:09.030] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-10T16:07:39.330] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-10T16:07:39.341] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-10T16:07:39.347] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-10T16:07:39.353] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-11T03:55:43.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-11 03:55:43
+[2024-12-11T07:25:10.662] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-11T07:25:10.674] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-11T07:25:10.681] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-11T07:25:10.689] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-11T16:03:36.654] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-11T16:03:36.689] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-11T16:03:36.695] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-11T16:03:36.701] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-12T03:55:44.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-12 03:55:44
+[2024-12-12T07:18:50.715] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-12T07:18:50.727] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-12T07:18:50.733] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-12T07:18:50.741] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-12T13:55:42.120] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2024-12-12T13:55:47.455] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2024-12-12T13:55:47.470] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2024-12-12T13:55:47.477] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2024-12-12T13:55:47.483] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2024-12-12T13:55:47.620] [INFO] monitorLogs - MQTT client connected
+[2024-12-12T13:55:52.502] [INFO] monitorLogs - buildTasks - params undefined
+[2024-12-12T13:55:52.503] [INFO] monitorLogs - buildTasks: profile for line 1
+[2024-12-12T13:55:52.504] [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
+}
+[2024-12-12T13:55:52.508] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-12T13:55:52.509] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2024-12-13T07:06:00.509Z
+[2024-12-12T13:55:52.511] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2024-12-12T15:26:00.510Z
+[2024-12-12T13:55:52.511] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '8:6', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-12T13:55:52.513] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2024-12-12T13:55:52.513] [INFO] monitorLogs - buildTasks: profile for line 2
+[2024-12-12T13:55:52.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
+}
+[2024-12-12T13:55:52.516] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-12T13:55:52.517] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2024-12-13T07:06:00.517Z
+[2024-12-12T13:55:52.518] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2024-12-12T15:26:00.518Z
+[2024-12-12T13:55:52.518] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '8:6', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-12T13:55:52.519] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2024-12-12T13:55:52.520] [INFO] monitorLogs - buildTasks: profile for line 3
+[2024-12-12T13:55:52.520] [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
+}
+[2024-12-12T13:55:52.523] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-12T13:55:52.523] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2024-12-13T07:06:00.523Z
+[2024-12-12T13:55:52.524] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2024-12-12T15:26:00.524Z
+[2024-12-12T13:55:52.525] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '8:6', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-12T13:55:52.525] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2024-12-12T13:55:52.526] [INFO] monitorLogs - buildTasks: profile for line 4
+[2024-12-12T13:55:52.527] [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
+}
+[2024-12-12T13:55:52.529] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2024-12-12T13:55:52.529] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2024-12-13T07:06:00.529Z
+[2024-12-12T13:55:52.530] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2024-12-12T15:26:00.530Z
+[2024-12-12T13:55:52.531] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '8:6', name: 'luxOff' },
+ { value: 1, start_time: '16:26', name: 'luxOn' }
+]
+[2024-12-12T13:55:52.532] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2024-12-12T13:55:52.545] [INFO] monitorLogs - tasks created: 2209
+[2024-12-12T13:55:52.549] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2024-11-04
+[2024-12-12T16:05:02.490] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-12T16:05:02.527] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-12T16:05:02.535] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-12T16:05:02.543] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-13T03:55:50.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-13 03:55:50
+[2024-12-13T07:22:48.882] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-13T07:22:48.894] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-13T07:22:48.901] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-13T07:22:48.909] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-13T16:05:55.666] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-13T16:05:55.697] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-13T16:05:55.705] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-13T16:05:55.713] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-14T03:55:51.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-14 03:55:51
+[2024-12-14T07:35:49.856] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-14T07:35:49.879] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-14T07:35:49.887] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-14T07:35:49.896] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-14T16:03:02.387] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-14T16:03:02.398] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-14T16:03:02.405] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-14T16:03:02.411] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-15T03:55:52.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-15 03:55:52
+[2024-12-15T07:30:50.616] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-15T07:30:50.636] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-15T07:30:50.642] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-15T07:30:50.649] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-15T16:06:34.132] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-15T16:06:34.142] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-15T16:06:34.149] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-15T16:06:34.155] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-16T03:55:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-16 03:55:53
+[2024-12-16T07:38:28.511] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-16T07:38:28.523] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-16T07:38:28.530] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-16T07:38:28.538] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-16T08:17:02.788] [INFO] monitorLogs - MQTT client connected
+[2024-12-16T16:02:00.887] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-16T16:02:00.898] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-16T16:02:00.905] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-16T16:02:00.912] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-17T03:55:54.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-17 03:55:54
+[2024-12-17T07:26:39.192] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-17T07:26:39.204] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-17T07:26:39.211] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-17T07:26:39.218] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-17T16:05:38.660] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-17T16:05:38.671] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-17T16:05:38.678] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-17T16:05:38.685] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-18T03:55:55.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-18 03:55:55
+[2024-12-18T07:23:42.922] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-18T07:23:42.934] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-18T07:23:42.941] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-18T07:23:42.949] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-18T16:12:10.946] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-18T16:12:10.961] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-18T16:12:10.966] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-18T16:12:10.972] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-19T03:55:57.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-19 03:55:57
+[2024-12-19T07:24:48.042] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-19T07:24:48.054] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-19T07:24:48.061] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-19T07:24:48.068] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-19T16:08:02.453] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-19T16:08:02.465] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-19T16:08:02.473] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-19T16:08:02.479] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-20T03:55:59.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-20 03:55:59
+[2024-12-20T07:30:17.406] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-20T07:30:17.439] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-20T07:30:17.447] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-20T07:30:17.453] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-20T16:08:53.431] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-20T16:08:53.442] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-20T16:08:53.449] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-20T16:08:53.456] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-21T03:55:58.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-21 03:55:58
+[2024-12-21T07:27:20.699] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-21T07:27:20.710] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-21T07:27:20.717] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-21T07:27:20.726] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-21T16:17:31.095] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-21T16:17:31.138] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-21T16:17:31.146] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-21T16:17:31.152] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-22T03:56:00.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-22 03:56:00
+[2024-12-22T07:34:03.732] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-22T07:34:03.743] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-22T07:34:03.750] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-22T07:34:03.757] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-22T15:50:25.385] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-22T15:50:25.399] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-22T15:50:25.404] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-22T15:50:25.411] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-23T03:56:00.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-23 03:56:00
+[2024-12-23T07:34:42.537] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-23T07:34:42.549] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-23T07:34:42.555] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-23T07:34:42.563] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-23T16:12:14.201] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-23T16:12:14.215] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-23T16:12:14.222] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-23T16:12:14.229] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-24T03:56:01.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-24 03:56:01
+[2024-12-24T07:39:20.044] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-24T07:39:20.056] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-24T07:39:20.064] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-24T07:39:20.072] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-24T16:04:24.963] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-24T16:04:24.973] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-24T16:04:24.981] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-24T16:04:24.987] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-25T03:56:02.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-25 03:56:02
+[2024-12-25T07:25:49.892] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-25T07:25:49.904] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-25T07:25:49.911] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-25T07:25:49.921] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-25T16:19:08.311] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-25T16:19:08.323] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-25T16:19:08.336] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-25T16:19:08.343] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-26T03:56:03.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-26 03:56:03
+[2024-12-26T07:25:44.059] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-26T07:25:44.070] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-26T07:25:44.077] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-26T07:25:44.087] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-26T16:20:03.763] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-26T16:20:03.790] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-26T16:20:03.796] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-26T16:20:03.803] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-27T03:56:04.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-27 03:56:04
+[2024-12-27T07:27:22.824] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-27T07:27:22.836] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-27T07:27:22.842] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-27T07:27:22.849] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-27T16:20:46.201] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-27T16:20:46.230] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-27T16:20:46.237] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-27T16:20:46.242] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-28T03:56:06.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-28 03:56:06
+[2024-12-28T07:27:40.518] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-28T07:27:40.529] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-28T07:27:40.537] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-28T07:27:40.544] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-28T16:21:25.134] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-28T16:21:25.155] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-28T16:21:25.162] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-28T16:21:25.168] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-29T03:56:07.016] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-29 03:56:07
+[2024-12-29T07:26:14.999] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-29T07:26:15.011] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-29T07:26:15.018] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-29T07:26:15.025] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-29T16:21:25.223] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-29T16:21:25.257] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-29T16:21:25.264] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-29T16:21:25.270] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-30T03:56:08.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-30 03:56:08
+[2024-12-30T07:26:24.390] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-30T07:26:24.402] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-30T07:26:24.408] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-30T07:26:24.415] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-30T16:24:55.636] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-30T16:24:55.644] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-30T16:24:55.653] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-30T16:24:55.659] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-31T03:56:09.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2024-12-31 03:56:09
+[2024-12-31T07:33:05.860] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-31T07:33:05.871] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-31T07:33:05.878] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-31T07:33:05.885] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2024-12-31T16:14:57.194] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-31T16:14:57.206] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-31T16:14:57.213] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2024-12-31T16:14:57.218] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-01T03:56:10.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-01 03:56:10
+[2025-01-01T07:34:23.919] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-01T07:34:23.936] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-01T07:34:23.943] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-01T07:34:23.950] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-01T16:21:26.398] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-01T16:21:26.426] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-01T16:21:26.432] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-01T16:21:26.438] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-02T03:56:12.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-02 03:56:12
+[2025-01-02T07:25:50.321] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-02T07:25:50.335] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-02T07:25:50.343] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-02T07:25:50.350] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-02T08:47:39.190] [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-02T11:44:47.179] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-01-02T11:44:52.535] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2025-01-02T11:44:52.551] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2025-01-02T11:44:52.558] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2025-01-02T11:44:52.565] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2025-01-02T11:44:52.621] [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-02T11:44:57.578] [INFO] monitorLogs - buildTasks - params undefined
+[2025-01-02T11:44:57.580] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-01-02T11:44:57.581] [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-02T11:44:57.585] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-02T11:44:57.587] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-03T07:14:00.586Z
+[2025-01-02T11:44:57.588] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-02T15:37:00.587Z
+[2025-01-02T11:44:57.588] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '8:14', name: 'luxOff' },
+ { value: 1, start_time: '16:37', name: 'luxOn' }
+]
+[2025-01-02T11:44:57.590] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-01-02T11:44:57.590] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-01-02T11:44:57.591] [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-02T11:44:57.593] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-02T11:44:57.594] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-03T07:14:00.594Z
+[2025-01-02T11:44:57.595] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-02T15:37:00.595Z
+[2025-01-02T11:44:57.595] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '8:14', name: 'luxOff' },
+ { value: 1, start_time: '16:37', name: 'luxOn' }
+]
+[2025-01-02T11:44:57.596] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-01-02T11:44:57.597] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-01-02T11:44:57.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-01-02T11:44:57.600] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-02T11:44:57.600] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-03T07:14:00.600Z
+[2025-01-02T11:44:57.601] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-02T15:37:00.601Z
+[2025-01-02T11:44:57.602] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '8:14', name: 'luxOff' },
+ { value: 1, start_time: '16:37', name: 'luxOn' }
+]
+[2025-01-02T11:44:57.603] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-01-02T11:44:57.603] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-01-02T11:44:57.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-01-02T11:44:57.606] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-02T11:44:57.607] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-01-03T07:14:00.607Z
+[2025-01-02T11:44:57.607] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-01-02T15:37:00.607Z
+[2025-01-02T11:44:57.608] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '8:14', name: 'luxOff' },
+ { value: 1, start_time: '16:37', name: 'luxOn' }
+]
+[2025-01-02T11:44:57.609] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-01-02T11:44:57.629] [INFO] monitorLogs - tasks created: 2209
+[2025-01-02T11:44:57.632] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-02
+[2025-01-02T16:14:15.052] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-02T16:14:15.065] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-02T16:14:15.074] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-02T16:14:15.081] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-03T03:44:54.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-03 03:44:54
+[2025-01-03T07:28:32.458] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-03T07:28:32.470] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-03T07:28:32.482] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-03T07:28:32.490] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-03T10:13:32.966] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-01-03T10:13:38.312] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2025-01-03T10:13:38.328] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2025-01-03T10:13:38.336] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2025-01-03T10:13:38.344] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2025-01-03T10:13:38.360] [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:13:43.359] [INFO] monitorLogs - buildTasks - params undefined
+[2025-01-03T10:13:43.360] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-01-03T10:13:43.361] [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:13:43.365] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-03T10:13:43.366] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-04T07:14:00.366Z
+[2025-01-03T10:13:43.368] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-03T15:38:00.367Z
+[2025-01-03T10:13:43.368] [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:13:43.369] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-01-03T10:13:43.370] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-01-03T10:13:43.371] [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:13:43.373] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-03T10:13:43.374] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-04T07:14:00.374Z
+[2025-01-03T10:13:43.375] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-03T15:38:00.374Z
+[2025-01-03T10:13:43.375] [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:13:43.376] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-01-03T10:13:43.377] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-01-03T10:13:43.377] [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:13:43.380] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-03T10:13:43.380] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-04T07:14:00.380Z
+[2025-01-03T10:13:43.381] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-03T15:38:00.381Z
+[2025-01-03T10:13:43.382] [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:13:43.383] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-01-03T10:13:43.384] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-01-03T10:13:43.385] [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:13:43.387] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-03T10:13:43.388] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-01-04T07:14:00.388Z
+[2025-01-03T10:13:43.389] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-01-03T15:38:00.389Z
+[2025-01-03T10:13:43.389] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '8:14', name: 'luxOff' },
+ { value: 1, start_time: '16:38', name: 'luxOn' }
+]
+[2025-01-03T10:13:43.390] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-01-03T10:13:43.408] [INFO] monitorLogs - tasks created: 2209
+[2025-01-03T10:13:43.411] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-02
+[2025-01-03T16:24:41.013] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-03T16:24:41.027] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-03T16:24:41.034] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-03T16:24:41.042] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-04T03:13:40.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-04 03:13:40
+[2025-01-04T07:27:47.311] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-04T07:27:47.353] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-04T07:27:47.360] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-04T07:27:47.367] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-04T16:24:12.618] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-04T16:24:12.667] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-04T16:24:12.675] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-04T16:24:12.682] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-05T03:13:41.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-05 03:13:41
+[2025-01-05T07:38:02.733] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-05T07:38:02.747] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-05T07:38:02.756] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-05T07:38:02.764] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-05T16:13:55.170] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-05T16:13:55.272] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-05T16:13:55.281] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-05T16:13:55.288] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-06T03:13:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-06 03:13:42
+[2025-01-06T07:34:17.571] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-06T07:34:17.584] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-06T07:34:17.592] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-06T07:34:17.600] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-06T16:25:18.069] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-06T16:25:18.109] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-06T16:25:18.116] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-06T16:25:18.123] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-07T03:13:43.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-07 03:13:43
+[2025-01-07T07:36:02.307] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-07T07:36:02.320] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-07T07:36:02.328] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-07T07:36:02.339] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-07T16:19:53.088] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-07T16:19:53.128] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-07T16:19:53.136] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-07T16:19:53.142] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-08T03:13:44.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-08 03:13:44
+[2025-01-08T07:30:08.175] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-08T07:30:08.189] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-08T07:30:08.197] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-08T07:30:08.205] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-08T16:27:51.312] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-08T16:27:51.326] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-08T16:27:51.335] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-08T16:27:51.343] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-09T03:13:45.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-09 03:13:45
+[2025-01-09T07:34:20.180] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-09T07:34:20.193] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-09T07:34:20.203] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-09T07:34:20.210] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-09T15:23:06.347] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-01-09T15:23:11.686] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2025-01-09T15:23:11.702] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2025-01-09T15:23:11.709] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2025-01-09T15:23:11.716] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2025-01-09T15:23:11.731] [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:23:16.733] [INFO] monitorLogs - buildTasks - params undefined
+[2025-01-09T15:23:16.734] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-01-09T15:23:16.734] [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:23:16.738] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-09T15:23:16.740] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-10T07:13:00.739Z
+[2025-01-09T15:23:16.741] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-09T15:45:00.741Z
+[2025-01-09T15:23:16.742] [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:23:16.743] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-01-09T15:23:16.744] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-01-09T15:23:16.744] [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:23:16.747] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-09T15:23:16.747] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-10T07:13:00.747Z
+[2025-01-09T15:23:16.748] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-09T15:45:00.748Z
+[2025-01-09T15:23:16.749] [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:23:16.750] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-01-09T15:23:16.750] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-01-09T15:23:16.751] [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:23:16.753] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-09T15:23:16.754] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-10T07:13:00.754Z
+[2025-01-09T15:23:16.754] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-09T15:45:00.754Z
+[2025-01-09T15:23:16.755] [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:23:16.756] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-01-09T15:23:16.757] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-01-09T15:23:16.757] [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:23:16.759] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-09T15:23:16.760] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-01-10T07:13:00.760Z
+[2025-01-09T15:23:16.761] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-01-09T15:45:00.761Z
+[2025-01-09T15:23:16.762] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '8:13', name: 'luxOff' },
+ { value: 1, start_time: '16:45', name: 'luxOn' }
+]
+[2025-01-09T15:23:16.763] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-01-09T15:23:16.782] [INFO] monitorLogs - tasks created: 2209
+[2025-01-09T15:23:16.785] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-02
+[2025-01-09T16:29:43.606] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-09T16:29:43.619] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-09T16:29:43.626] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-09T16:29:43.633] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-10T03:23:13.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-10 03:23:13
+[2025-01-10T07:33:05.403] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-10T07:33:05.417] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-10T07:33:05.424] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-10T07:33:05.431] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-10T14:36:10.556] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-01-10T14:36:15.907] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2025-01-10T14:36:15.924] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2025-01-10T14:36:15.931] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2025-01-10T14:36:15.938] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2025-01-10T14:36:15.995] [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:36:20.951] [INFO] monitorLogs - buildTasks - params undefined
+[2025-01-10T14:36:20.953] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-01-10T14:36:20.953] [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:36:20.958] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-10T14:36:20.959] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-01-11T07:12:00.958Z
+[2025-01-10T14:36:20.960] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-01-10T15:46:00.960Z
+[2025-01-10T14:36:20.961] [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:36:20.962] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-01-10T14:36:20.963] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-01-10T14:36:20.963] [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:36:20.966] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-10T14:36:20.966] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-01-11T07:12:00.966Z
+[2025-01-10T14:36:20.967] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-01-10T15:46:00.967Z
+[2025-01-10T14:36:20.968] [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:36:20.969] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-01-10T14:36:20.969] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-01-10T14:36:20.970] [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:36:20.972] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-10T14:36:20.973] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-01-11T07:12:00.973Z
+[2025-01-10T14:36:20.974] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-01-10T15:46:00.974Z
+[2025-01-10T14:36:20.974] [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:36:20.975] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-01-10T14:36:20.976] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-01-10T14:36:20.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-01-10T14:36:20.979] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-01-10T14:36:20.979] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-01-11T07:12:00.979Z
+[2025-01-10T14:36:20.980] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-01-10T15:46:00.980Z
+[2025-01-10T14:36:20.981] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '8:12', name: 'luxOff' },
+ { value: 1, start_time: '16:46', name: 'luxOn' }
+]
+[2025-01-10T14:36:20.982] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-01-10T14:36:21.000] [INFO] monitorLogs - tasks created: 2209
+[2025-01-10T14:36:21.003] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-09
+[2025-01-10T15:58:14.198] [INFO] monitorLogs - MQTT client connected
+[2025-01-10T16:24:42.541] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-10T16:24:42.553] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-10T16:24:42.560] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-10T16:24:42.567] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-11T03:36:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-11 03:36:18
+[2025-01-11T07:27:51.855] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-11T07:27:51.873] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-11T07:27:51.880] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-11T07:27:51.888] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-11T16:30:03.708] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-11T16:30:03.721] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-11T16:30:03.727] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-11T16:30:03.734] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-12T03:36:19.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-12 03:36:19
+[2025-01-12T07:33:30.914] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-12T07:33:30.932] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-12T07:33:30.940] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-12T07:33:30.947] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-12T16:27:56.467] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-12T16:27:56.481] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-12T16:27:56.487] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-12T16:27:56.495] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-13T03:36:21.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-13 03:36:21
+[2025-01-13T07:41:10.592] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-13T07:41:10.606] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-13T07:41:10.614] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-13T07:41:10.621] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-13T16:35:45.748] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-13T16:35:45.760] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-13T16:35:45.767] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-13T16:35:45.773] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-14T03:36:22.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-14 03:36:22
+[2025-01-14T07:21:16.402] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-14T07:21:16.416] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-14T07:21:16.426] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-14T07:21:16.432] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-14T16:36:13.169] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-14T16:36:13.181] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-14T16:36:13.188] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-14T16:36:13.194] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-15T03:36:23.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-15 03:36:23
+[2025-01-15T07:29:34.232] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-15T07:29:34.244] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-15T07:29:34.251] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-15T07:29:34.257] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-15T16:29:32.996] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-15T16:29:33.012] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-15T16:29:33.019] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-15T16:29:33.025] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-16T03:36:24.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-16 03:36:24
+[2025-01-16T07:24:07.468] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-16T07:24:07.497] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-16T07:24:07.506] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-16T07:24:07.514] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-16T16:31:51.084] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-16T16:31:51.096] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-16T16:31:51.103] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-16T16:31:51.111] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-17T03:36:25.015] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-17 03:36:25
+[2025-01-17T07:31:23.250] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-17T07:31:23.264] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-17T07:31:23.271] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-17T07:31:23.278] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-17T16:37:19.748] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-17T16:37:19.760] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-17T16:37:19.767] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-17T16:37:19.786] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-18T03:36:26.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-18 03:36:26
+[2025-01-18T07:25:52.668] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-18T07:25:52.686] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-18T07:25:52.693] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-18T07:25:52.700] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-18T16:42:03.037] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-18T16:42:03.049] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-18T16:42:03.055] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-18T16:42:03.061] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-19T03:36:27.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-19 03:36:27
+[2025-01-19T07:24:56.651] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-19T07:24:56.663] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-19T07:24:56.670] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-19T07:24:56.678] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-19T16:38:01.348] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-19T16:38:01.360] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-19T16:38:01.368] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-19T16:38:01.374] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-20T03:36:28.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-20 03:36:28
+[2025-01-20T07:27:20.192] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-20T07:27:20.205] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-20T07:27:20.213] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-20T07:27:20.221] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-20T16:38:28.114] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-20T16:38:28.126] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-20T16:38:28.132] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-20T16:38:28.139] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-21T03:36:29.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-21 03:36:29
+[2025-01-21T06:21:43.681] [INFO] monitorLogs - MQTT client connected
+[2025-01-21T06:23:31.502] [INFO] monitorLogs - MQTT client connected
+[2025-01-21T07:33:58.633] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-21T07:33:58.645] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-21T07:33:58.652] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-21T07:33:58.660] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-21T16:40:19.206] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-21T16:40:19.219] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-21T16:40:19.225] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-21T16:40:19.232] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-22T03:36:31.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-22 03:36:31
+[2025-01-22T07:28:41.132] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-22T07:28:41.144] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-22T07:28:41.154] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-22T07:28:41.161] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-22T13:29:49.656] [INFO] monitorLogs - MQTT client connected
+[2025-01-22T13:30:13.718] [INFO] monitorLogs - MQTT client connected
+[2025-01-22T13:30:44.748] [INFO] monitorLogs - MQTT client connected
+[2025-01-22T16:38:18.799] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-22T16:38:18.812] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-22T16:38:18.820] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-22T16:38:18.826] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-23T03:36:32.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-23 03:36:32
+[2025-01-23T07:25:28.189] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-23T07:25:28.204] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-23T07:25:28.213] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-23T07:25:28.220] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-23T16:43:38.676] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-23T16:43:38.688] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-23T16:43:38.694] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-23T16:43:38.700] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-24T03:36:33.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-24 03:36:33
+[2025-01-24T07:16:57.247] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-24T07:16:57.260] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-24T07:16:57.268] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-24T07:16:57.275] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-24T16:51:52.082] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-24T16:51:52.093] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-24T16:51:52.099] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-24T16:51:52.105] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-25T03:36:34.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-25 03:36:34
+[2025-01-25T07:19:34.699] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-25T07:19:34.713] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-25T07:19:34.720] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-25T07:19:34.727] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-25T16:45:49.468] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-25T16:45:49.482] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-25T16:45:49.490] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-25T16:45:49.498] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-26T03:36:35.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-26 03:36:35
+[2025-01-26T07:17:28.385] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-26T07:17:28.397] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-26T07:17:28.405] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-26T07:17:28.412] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-26T16:53:14.706] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-26T16:53:14.719] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-26T16:53:14.726] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-26T16:53:14.732] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-27T03:36:36.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-27 03:36:36
+[2025-01-27T07:10:59.370] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-27T07:10:59.384] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-27T07:10:59.391] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-27T07:10:59.398] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-27T16:56:57.288] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-27T16:56:57.301] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-27T16:56:57.307] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-27T16:56:57.313] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-28T03:36:37.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-28 03:36:37
+[2025-01-28T07:19:19.106] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-28T07:19:19.119] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-28T07:19:19.127] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-28T07:19:19.133] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-28T16:50:12.891] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-28T16:50:12.906] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-28T16:50:12.912] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-28T16:50:12.919] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-29T03:36:38.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-29 03:36:38
+[2025-01-29T07:11:09.482] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-29T07:11:09.495] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-29T07:11:09.502] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-29T07:11:09.508] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-29T17:01:01.500] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-29T17:01:01.513] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-29T17:01:01.520] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-29T17:01:01.526] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-30T03:36:39.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-30 03:36:39
+[2025-01-30T07:08:28.670] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-30T07:08:28.686] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-30T07:08:28.695] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-30T07:08:28.704] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-30T17:02:24.407] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-30T17:02:24.421] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-30T17:02:24.428] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-30T17:02:24.435] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-31T03:36:40.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-01-31 03:36:40
+[2025-01-31T07:07:20.821] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-31T07:07:20.836] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-31T07:07:20.845] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-31T07:07:20.852] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-01-31T08:08:54.336] [INFO] monitorLogs - MQTT client connected
+[2025-01-31T17:03:37.264] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-31T17:03:37.278] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-31T17:03:37.285] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-01-31T17:03:37.291] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-01T03:36:41.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-01 03:36:41
+[2025-02-01T07:05:38.383] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-01T07:05:38.396] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-01T07:05:38.406] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-01T07:05:38.413] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-01T08:59:33.131] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-02-01T08:59:38.473] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2025-02-01T08:59:38.488] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2025-02-01T08:59:38.495] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2025-02-01T08:59:38.502] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2025-02-01T08:59:38.591] [INFO] monitorLogs - MQTT client connected
+[2025-02-01T08:59:43.518] [INFO] monitorLogs - buildTasks - params undefined
+[2025-02-01T08:59:43.519] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-02-01T08:59:43.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-02-01T08:59:43.527] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T08:59:43.529] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-02T06:51:00.528Z
+[2025-02-01T08:59:43.530] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-01T16:19:00.530Z
+[2025-02-01T08:59:43.531] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T08:59:43.532] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-02-01T08:59:43.533] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-02-01T08:59:43.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-02-01T08:59:43.536] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T08:59:43.537] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-02T06:51:00.537Z
+[2025-02-01T08:59:43.538] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-01T16:19:00.538Z
+[2025-02-01T08:59:43.538] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T08:59:43.539] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-02-01T08:59:43.540] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-02-01T08:59:43.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-02-01T08:59:43.543] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T08:59:43.544] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-02T06:51:00.543Z
+[2025-02-01T08:59:43.545] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-01T16:19:00.544Z
+[2025-02-01T08:59:43.545] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T08:59:43.546] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-02-01T08:59:43.547] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-02-01T08:59:43.547] [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-01T08:59:43.550] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T08:59:43.550] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-02-02T06:51:00.550Z
+[2025-02-01T08:59:43.551] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-02-01T16:19:00.551Z
+[2025-02-01T08:59:43.552] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T08:59:43.553] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-02-01T08:59:43.569] [INFO] monitorLogs - tasks created: 2209
+[2025-02-01T08:59:43.573] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-09
+[2025-02-01T09:13:47.167] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-02-01T09:13:52.517] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 true turn off on startup
+[2025-02-01T09:13:52.533] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 true turn off on startup
+[2025-02-01T09:13:52.539] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 true turn off on startup
+[2025-02-01T09:13:52.547] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 true turn off on startup
+[2025-02-01T09:13:52.693] [INFO] monitorLogs - MQTT client connected
+[2025-02-01T09:13:57.561] [INFO] monitorLogs - buildTasks - params undefined
+[2025-02-01T09:13:57.563] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-02-01T09:13:57.564] [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-01T09:13:57.568] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T09:13:57.569] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-02T06:51:00.569Z
+[2025-02-01T09:13:57.571] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-01T16:19:00.571Z
+[2025-02-01T09:13:57.571] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T09:13:57.573] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-02-01T09:13:57.574] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-02-01T09:13:57.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-02-01T09:13:57.577] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T09:13:57.577] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-02T06:51:00.577Z
+[2025-02-01T09:13:57.578] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-01T16:19:00.578Z
+[2025-02-01T09:13:57.579] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T09:13:57.580] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-02-01T09:13:57.580] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-02-01T09:13:57.581] [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-01T09:13:57.583] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T09:13:57.584] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-02T06:51:00.584Z
+[2025-02-01T09:13:57.585] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-01T16:19:00.584Z
+[2025-02-01T09:13:57.585] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T09:13:57.586] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-02-01T09:13:57.587] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-02-01T09:13:57.587] [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-01T09:13:57.590] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-01T09:13:57.590] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-02-02T06:51:00.590Z
+[2025-02-01T09:13:57.591] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-02-01T16:19:00.591Z
+[2025-02-01T09:13:57.592] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:51', name: 'luxOff' },
+ { value: 1, start_time: '17:19', name: 'luxOn' }
+]
+[2025-02-01T09:13:57.593] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-02-01T09:13:57.607] [INFO] monitorLogs - tasks created: 2209
+[2025-02-01T09:13:57.611] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-09
+[2025-02-01T17:05:21.549] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-01T17:05:21.574] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-01T17:05:21.582] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-01T17:05:21.589] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-02T03:13:54.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-02 03:13:54
+[2025-02-02T07:11:02.847] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-02T07:11:02.859] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-02T07:11:02.866] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-02T07:11:02.873] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-02T17:08:08.347] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-02T17:08:08.378] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-02T17:08:08.385] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-02T17:08:08.393] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-03T03:13:55.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-03 03:13:55
+[2025-02-03T07:02:09.650] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-03T07:02:09.681] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-03T07:02:09.687] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-03T07:02:09.694] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-03T07:05:06.186] [INFO] monitorLogs - MQTT client connected
+[2025-02-03T10:36:34.462] [INFO] monitorLogs - MQTT client connected
+[2025-02-03T10:36:56.994] [INFO] monitorLogs - MQTT client connected
+[2025-02-03T15:04:46.856] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-02-03T15:04:52.232] [INFO] monitorLogs - buildTasks - params undefined
+[2025-02-03T15:04:52.237] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-02-03T15:04:52.238] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-02-03T15:04:52.239] [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-03T15:04:52.243] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:04:52.245] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-04T06:49:00.244Z
+[2025-02-03T15:04:52.246] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-03T16:22:00.246Z
+[2025-02-03T15:04:52.247] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:04:52.249] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-02-03T15:04:52.250] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-02-03T15:04:52.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-02-03T15:04:52.253] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:04:52.253] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-04T06:49:00.253Z
+[2025-02-03T15:04:52.254] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-03T16:22:00.254Z
+[2025-02-03T15:04:52.255] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:04:52.256] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-02-03T15:04:52.256] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-02-03T15:04:52.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-02-03T15:04:52.259] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:04:52.260] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-04T06:49:00.260Z
+[2025-02-03T15:04:52.260] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-03T16:22:00.260Z
+[2025-02-03T15:04:52.261] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:04:52.262] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-02-03T15:04:52.262] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-02-03T15:04:52.263] [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-03T15:04:52.265] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:04:52.266] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-02-04T06:49:00.266Z
+[2025-02-03T15:04:52.266] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-02-03T16:22:00.266Z
+[2025-02-03T15:04:52.267] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:04:52.268] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-02-03T15:04:52.279] [INFO] monitorLogs - tasks created: 2072
+[2025-02-03T15:04:52.282] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-30
+[2025-02-03T15:04:52.372] [INFO] monitorLogs - MQTT client connected
+[2025-02-03T15:04:52.599] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-02-03T15:04:52.905] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-02-03T15:04:53.211] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-02-03T15:04:53.517] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-02-03T15:13:07.141] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-02-03T15:13:12.527] [INFO] monitorLogs - buildTasks - params undefined
+[2025-02-03T15:13:12.532] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-02-03T15:13:12.533] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-02-03T15:13:12.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-02-03T15:13:12.538] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:13:12.540] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-04T06:49:00.539Z
+[2025-02-03T15:13:12.542] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-03T16:22:00.541Z
+[2025-02-03T15:13:12.542] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:13:12.544] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-02-03T15:13:12.545] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-02-03T15:13:12.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-02-03T15:13:12.548] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:13:12.548] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-04T06:49:00.548Z
+[2025-02-03T15:13:12.549] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-03T16:22:00.549Z
+[2025-02-03T15:13:12.550] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:13:12.551] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-02-03T15:13:12.552] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-02-03T15:13:12.552] [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-03T15:13:12.555] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:13:12.555] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-04T06:49:00.555Z
+[2025-02-03T15:13:12.556] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-03T16:22:00.556Z
+[2025-02-03T15:13:12.557] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:13:12.558] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-02-03T15:13:12.558] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-02-03T15:13:12.559] [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-03T15:13:12.561] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-03T15:13:12.562] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-02-04T06:49:00.562Z
+[2025-02-03T15:13:12.563] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-02-03T16:22:00.562Z
+[2025-02-03T15:13:12.563] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:49', name: 'luxOff' },
+ { value: 1, start_time: '17:22', name: 'luxOn' }
+]
+[2025-02-03T15:13:12.564] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-02-03T15:13:12.576] [INFO] monitorLogs - tasks created: 2072
+[2025-02-03T15:13:12.579] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-30
+[2025-02-03T15:13:12.663] [INFO] monitorLogs - MQTT client connected
+[2025-02-03T15:13:12.896] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-02-03T15:13:13.202] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-02-03T15:13:13.508] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-02-03T15:13:13.814] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-02-03T17:09:33.273] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-03T17:09:33.277] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-03T17:09:33.279] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-03T17:09:33.282] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-04T03:13:15.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-04 03:13:15
+[2025-02-04T06:59:23.288] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-04T06:59:23.291] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-04T06:59:23.293] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-04T06:59:23.295] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-04T17:11:20.259] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-04T17:11:20.261] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-04T17:11:20.263] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-04T17:11:20.265] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-05T03:13:16.072] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-05 03:13:16
+[2025-02-05T06:59:19.692] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-05T06:59:19.697] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-05T06:59:19.699] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-05T06:59:19.701] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-05T17:12:35.895] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-05T17:12:35.901] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-05T17:12:35.903] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-05T17:12:35.905] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-06T03:13:17.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-06 03:13:17
+[2025-02-06T07:00:36.358] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-06T07:00:36.364] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-06T07:00:36.366] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-06T07:00:36.368] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-06T17:11:10.280] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-06T17:11:10.299] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-06T17:11:10.301] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-06T17:11:10.302] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-07T03:13:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-07 03:13:18
+[2025-02-07T06:58:19.797] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-07T06:58:19.802] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-07T06:58:19.804] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-07T06:58:19.806] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-07T08:40:53.803] [INFO] monitorLogs - MQTT client connected
+[2025-02-07T08:41:41.085] [INFO] monitorLogs - MQTT client connected
+[2025-02-07T08:44:28.883] [INFO] monitorLogs - MQTT client connected
+[2025-02-07T08:45:40.051] [INFO] monitorLogs - MQTT client connected
+[2025-02-07T17:09:20.513] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-07T17:09:20.519] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-07T17:09:20.521] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-07T17:09:20.523] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-08T02:40:39.675] [INFO] monitorLogs - MQTT client connected
+[2025-02-08T03:13:19.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-08 03:13:19
+[2025-02-08T06:56:12.492] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-08T06:56:12.500] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-08T06:56:12.502] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-08T06:56:12.504] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-08T17:17:03.511] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-08T17:17:03.523] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-08T17:17:03.525] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-08T17:17:03.527] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-09T03:13:20.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-09 03:13:20
+[2025-02-09T07:01:31.000] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-09T07:01:31.006] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-09T07:01:31.009] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-09T07:01:31.010] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-09T17:10:33.570] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-09T17:10:33.577] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-09T17:10:33.578] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-09T17:10:33.580] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-10T03:13:21.016] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-10 03:13:21
+[2025-02-10T06:51:05.190] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-10T06:51:05.196] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-10T06:51:05.198] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-10T06:51:05.200] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-10T17:19:10.170] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-10T17:19:10.188] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-10T17:19:10.190] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-10T17:19:10.192] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-11T03:13:22.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-11 03:13:22
+[2025-02-11T06:50:31.922] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-11T06:50:31.927] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-11T06:50:31.929] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-11T06:50:31.930] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-11T17:20:54.427] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-11T17:20:54.438] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-11T17:20:54.440] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-11T17:20:54.442] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-12T03:13:23.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-12 03:13:23
+[2025-02-12T06:59:29.412] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-12T06:59:29.417] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-12T06:59:29.419] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-12T06:59:29.421] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-12T17:13:22.435] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-12T17:13:22.460] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-12T17:13:22.463] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-12T17:13:22.465] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-13T03:13:24.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-13 03:13:24
+[2025-02-13T06:59:13.005] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-13T06:59:13.010] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-13T06:59:13.012] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-13T06:59:13.013] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-13T13:18:04.024] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:18:34.205] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:19:09.038] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:19:57.621] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:21:02.259] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:24:02.077] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:28:49.452] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T13:32:17.606] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T15:22:58.303] [INFO] monitorLogs - MQTT client connected
+[2025-02-13T17:15:31.150] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-13T17:15:31.153] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-13T17:15:31.155] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-13T17:15:31.156] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-14T03:13:25.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-14 03:13:25
+[2025-02-14T06:45:52.230] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-14T06:45:52.236] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-14T06:45:52.238] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-14T06:45:52.240] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-14T17:16:33.565] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-14T17:16:33.579] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-14T17:16:33.581] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-14T17:16:33.583] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-15T03:13:27.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-15 03:13:27
+[2025-02-15T06:47:07.257] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-15T06:47:07.262] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-15T06:47:07.264] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-15T06:47:07.266] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-15T17:22:35.227] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-15T17:22:35.246] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-15T17:22:35.248] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-15T17:22:35.250] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-16T03:13:28.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-16 03:13:28
+[2025-02-16T06:42:38.939] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-16T06:42:38.945] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-16T06:42:38.947] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-16T06:42:38.949] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-16T17:28:18.733] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-16T17:28:18.745] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-16T17:28:18.747] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-16T17:28:18.749] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-17T03:13:29.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-17 03:13:29
+[2025-02-17T06:42:02.910] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-17T06:42:02.915] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-17T06:42:02.990] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-17T06:42:02.992] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-17T07:03:55.767] [INFO] monitorLogs - MQTT client connected
+[2025-02-17T08:02:40.953] [INFO] monitorLogs - MQTT client connected
+[2025-02-17T08:03:58.523] [INFO] monitorLogs - MQTT client connected
+[2025-02-17T08:04:20.047] [INFO] monitorLogs - MQTT client connected
+[2025-02-17T08:44:44.636] [INFO] monitorLogs - MQTT client connected
+[2025-02-17T17:20:42.691] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-17T17:20:42.694] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-17T17:20:42.696] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-17T17:20:42.698] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-18T03:13:30.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-18 03:13:30
+[2025-02-18T06:45:21.346] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-18T06:45:21.352] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-18T06:45:21.354] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-18T06:45:21.356] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-18T06:54:35.369] [INFO] monitorLogs - MQTT client connected
+[2025-02-18T13:03:28.105] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-02-18T13:03:33.498] [INFO] monitorLogs - buildTasks - params undefined
+[2025-02-18T13:03:33.503] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-02-18T13:03:33.505] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-02-18T13:03:33.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-02-18T13:03:33.510] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-18T13:03:33.511] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-02-19T06:25:00.510Z
+[2025-02-18T13:03:33.512] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-02-18T16:47:00.512Z
+[2025-02-18T13:03:33.513] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:25', name: 'luxOff' },
+ { value: 1, start_time: '17:47', name: 'luxOn' }
+]
+[2025-02-18T13:03:33.514] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-02-18T13:03:33.515] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-02-18T13:03:33.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-02-18T13:03:33.518] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-18T13:03:33.519] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-02-19T06:25:00.519Z
+[2025-02-18T13:03:33.520] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-02-18T16:47:00.520Z
+[2025-02-18T13:03:33.521] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:25', name: 'luxOff' },
+ { value: 1, start_time: '17:47', name: 'luxOn' }
+]
+[2025-02-18T13:03:33.522] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-02-18T13:03:33.522] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-02-18T13:03:33.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-02-18T13:03:33.525] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-18T13:03:33.526] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-02-19T06:25:00.526Z
+[2025-02-18T13:03:33.527] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-02-18T16:47:00.527Z
+[2025-02-18T13:03:33.528] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:25', name: 'luxOff' },
+ { value: 1, start_time: '17:47', name: 'luxOn' }
+]
+[2025-02-18T13:03:33.529] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-02-18T13:03:33.529] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-02-18T13:03:33.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-18T13:03:33.532] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-02-18T13:03:33.533] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-02-19T06:25:00.533Z
+[2025-02-18T13:03:33.533] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-02-18T16:47:00.533Z
+[2025-02-18T13:03:33.534] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:25', name: 'luxOff' },
+ { value: 1, start_time: '17:47', name: 'luxOn' }
+]
+[2025-02-18T13:03:33.535] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-02-18T13:03:33.547] [INFO] monitorLogs - tasks created: 2042
+[2025-02-18T13:03:33.550] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-30
+[2025-02-18T13:03:33.631] [INFO] monitorLogs - MQTT client connected
+[2025-02-18T13:03:33.866] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-02-18T13:03:34.172] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-02-18T13:03:34.478] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-02-18T13:03:34.784] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-02-18T17:34:08.684] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-18T17:34:08.688] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-18T17:34:08.690] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-18T17:34:08.692] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-19T03:03:35.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-19 03:03:35
+[2025-02-19T06:34:37.683] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-19T06:34:37.688] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-19T06:34:37.690] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-19T06:34:37.691] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-19T14:18:29.181] [INFO] monitorLogs - MQTT client connected
+[2025-02-19T15:06:37.590] [INFO] monitorLogs - MQTT client connected
+[2025-02-19T15:09:58.141] [INFO] monitorLogs - MQTT client connected
+[2025-02-19T15:12:57.114] [INFO] monitorLogs - MQTT client connected
+[2025-02-19T17:34:03.686] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-19T17:34:03.688] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-19T17:34:03.690] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-19T17:34:03.692] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-20T03:03:36.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-20 03:03:36
+[2025-02-20T06:33:03.161] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-20T06:33:03.164] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-20T06:33:03.166] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-20T06:33:03.168] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-20T09:20:00.347] [INFO] monitorLogs - MQTT client connected
+[2025-02-20T17:35:17.232] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-20T17:35:17.255] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-20T17:35:17.257] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-20T17:35:17.258] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-21T03:03:38.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-21 03:03:38
+[2025-02-21T06:32:18.657] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-21T06:32:18.662] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-21T06:32:18.664] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-21T06:32:18.666] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-21T06:56:29.429] [INFO] monitorLogs - MQTT client connected
+[2025-02-21T17:35:58.323] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-21T17:35:58.345] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-21T17:35:58.348] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-21T17:35:58.350] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-22T03:03:39.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-22 03:03:39
+[2025-02-22T06:30:50.812] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-22T06:30:50.818] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-22T06:30:50.819] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-22T06:30:50.821] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-22T17:39:07.045] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-22T17:39:07.056] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-22T17:39:07.057] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-22T17:39:07.059] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-23T03:03:40.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-23 03:03:40
+[2025-02-23T06:29:01.924] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-23T06:29:01.927] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-23T06:29:01.929] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-23T06:29:01.930] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-23T17:30:55.595] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-23T17:30:55.625] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-23T17:30:55.628] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-23T17:30:55.629] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-24T03:03:41.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-24 03:03:41
+[2025-02-24T06:28:49.601] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-24T06:28:49.606] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-24T06:28:49.609] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-24T06:28:49.611] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-24T14:02:51.017] [INFO] monitorLogs - MQTT client connected
+[2025-02-24T14:15:01.000] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-02-24T14:16:03.715] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-02-24T14:16:56.506] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false command received from platform
+[2025-02-24T14:20:32.390] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-02-24T14:21:23.392] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false command received from platform
+[2025-02-24T14:21:29.594] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-02-24T14:21:35.542] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-02-24T14:21:43.870] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-02-24T17:41:50.929] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-24T17:41:50.931] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-24T17:41:50.933] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-24T17:41:50.935] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-25T03:03:42.017] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-25 03:03:42
+[2025-02-25T06:27:06.721] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-25T06:27:06.726] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-25T06:27:06.728] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-25T06:27:06.730] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-25T06:50:58.915] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T06:51:32.126] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T06:53:25.917] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T06:53:39.483] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T06:55:03.883] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T06:56:16.384] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T06:56:40.990] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:10:48.844] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:11:35.953] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:12:11.979] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:13:27.552] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:14:25.674] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:15:28.265] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:16:14.950] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:17:00.749] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:17:28.910] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T07:18:14.849] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T12:36:39.151] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T12:37:23.341] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T12:38:08.042] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T12:39:13.655] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:05:57.454] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:07:20.807] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:08:26.087] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:09:30.085] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:09:43.671] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:11:56.535] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:12:55.279] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:13:17.563] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T14:20:57.365] [INFO] monitorLogs - MQTT client connected
+[2025-02-25T17:39:50.796] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-25T17:39:50.798] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-25T17:39:50.800] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-25T17:39:50.801] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-26T03:03:43.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-26 03:03:43
+[2025-02-26T06:38:53.295] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-26T06:38:53.301] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-26T06:38:53.303] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-26T06:38:53.304] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-26T17:36:35.372] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-26T17:36:35.384] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-26T17:36:35.386] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-26T17:36:35.388] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-27T03:03:44.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-27 03:03:44
+[2025-02-27T06:31:17.266] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-27T06:31:17.269] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-27T06:31:17.271] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-27T06:31:17.273] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-27T17:37:49.039] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-27T17:37:49.066] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-27T17:37:49.068] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-27T17:37:49.069] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-28T03:03:45.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-02-28 03:03:45
+[2025-02-28T06:21:46.328] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-28T06:21:46.334] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-28T06:21:46.336] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-28T06:21:46.337] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-02-28T12:20:27.277] [INFO] monitorLogs - MQTT client connected
+[2025-02-28T12:26:52.601] [INFO] monitorLogs - MQTT client connected
+[2025-02-28T17:47:30.122] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-28T17:47:30.143] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-28T17:47:30.145] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-02-28T17:47:30.146] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-01T03:03:46.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-01 03:03:46
+[2025-03-01T06:20:48.903] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-01T06:20:48.908] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-01T06:20:48.910] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-01T06:20:48.912] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-01T17:49:13.513] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-01T17:49:13.520] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-01T17:49:13.522] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-01T17:49:13.523] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-02T03:03:47.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-02 03:03:47
+[2025-03-02T06:18:02.709] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-02T06:18:02.715] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-02T06:18:02.718] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-02T06:18:02.719] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-02T17:53:48.296] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-02T17:53:48.298] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-02T17:53:48.300] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-02T17:53:48.302] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-03T03:03:48.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-03 03:03:48
+[2025-03-03T06:13:22.055] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-03T06:13:22.061] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-03T06:13:22.063] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-03T06:13:22.065] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-03T06:48:32.839] [INFO] monitorLogs - MQTT client connected
+[2025-03-03T17:54:58.660] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-03T17:54:58.675] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-03T17:54:58.677] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-03T17:54:58.679] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-04T03:03:49.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-04 03:03:49
+[2025-03-04T06:11:57.720] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-04T06:11:57.723] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-04T06:11:57.725] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-04T06:11:57.727] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-04T07:05:19.797] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:09:39.591] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:12:19.256] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:13:32.591] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:14:47.511] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:15:41.133] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:16:19.995] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:17:00.468] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:21:48.584] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T07:25:31.047] [INFO] monitorLogs - MQTT client connected
+[2025-03-04T17:55:56.922] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-04T17:55:56.934] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-04T17:55:56.936] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-04T17:55:56.937] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-05T03:03:50.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-05 03:03:50
+[2025-03-05T06:10:40.860] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-05T06:10:40.863] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-05T06:10:40.865] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-05T06:10:40.866] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-05T17:56:36.586] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-05T17:56:36.593] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-05T17:56:36.595] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-05T17:56:36.596] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-06T03:03:52.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-06 03:03:52
+[2025-03-06T06:07:39.074] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-06T06:07:39.077] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-06T06:07:39.079] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-06T06:07:39.081] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-06T17:57:19.714] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-06T17:57:19.716] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-06T17:57:19.718] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-06T17:57:19.719] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-07T03:03:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-07 03:03:53
+[2025-03-07T06:07:25.294] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-07T06:07:25.297] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-07T06:07:25.299] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-07T06:07:25.301] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-07T18:00:00.232] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-07T18:00:00.241] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-07T18:00:00.243] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-07T18:00:00.245] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-08T03:03:54.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-08 03:03:54
+[2025-03-08T06:02:52.692] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-08T06:02:52.696] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-08T06:02:52.698] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-08T06:02:52.700] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-08T18:00:37.394] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-08T18:00:37.415] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-08T18:00:37.417] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-08T18:00:37.420] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-09T03:03:55.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-09 03:03:55
+[2025-03-09T06:04:26.449] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-09T06:04:26.452] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-09T06:04:26.454] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-09T06:04:26.456] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-09T18:01:17.034] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-09T18:01:17.045] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-09T18:01:17.046] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-09T18:01:17.048] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-10T03:03:57.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-10 03:03:57
+[2025-03-10T06:04:00.352] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-10T06:04:00.355] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-10T06:04:00.357] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-10T06:04:00.360] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-10T06:44:26.581] [INFO] monitorLogs - MQTT client connected
+[2025-03-10T17:43:12.015] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-10T17:43:12.028] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-10T17:43:12.029] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-10T17:43:12.031] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-10T20:31:54.079] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T03:03:58.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-11 03:03:58
+[2025-03-11T05:59:26.038] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-11T05:59:26.043] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-11T05:59:26.045] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-11T05:59:26.046] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-11T08:18:58.438] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T08:20:33.731] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T08:21:18.851] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T08:23:17.186] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T08:24:02.689] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T08:24:56.429] [INFO] monitorLogs - MQTT client connected
+[2025-03-11T17:58:28.015] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-11T17:58:28.028] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-11T17:58:28.029] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-11T17:58:28.031] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-12T03:03:59.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-12 03:03:59
+[2025-03-12T05:58:33.527] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-12T05:58:33.530] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-12T05:58:33.533] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-12T05:58:33.535] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-12T16:00:56.055] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-03-12T16:01:01.430] [INFO] monitorLogs - buildTasks - params undefined
+[2025-03-12T16:01:01.435] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-03-12T16:01:01.436] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-03-12T16:01:01.437] [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:01:01.441] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-12T16:01:01.442] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-03-13T05:41:00.441Z
+[2025-03-12T16:01:01.444] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-03-12T17:22:00.444Z
+[2025-03-12T16:01:01.445] [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:01:01.446] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-03-12T16:01:01.447] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-03-12T16:01:01.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-12T16:01:01.450] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-12T16:01:01.451] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-03-13T05:41:00.451Z
+[2025-03-12T16:01:01.452] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-03-12T17:22:00.452Z
+[2025-03-12T16:01:01.452] [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:01:01.453] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-03-12T16:01:01.454] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-03-12T16:01:01.455] [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:01:01.457] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-12T16:01:01.458] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-03-13T05:41:00.457Z
+[2025-03-12T16:01:01.458] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-03-12T17:22:00.458Z
+[2025-03-12T16:01:01.459] [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:01:01.460] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-03-12T16:01:01.461] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-03-12T16:01:01.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-03-12T16:01:01.464] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-12T16:01:01.464] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-03-13T05:41:00.464Z
+[2025-03-12T16:01:01.465] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-03-12T17:22:00.465Z
+[2025-03-12T16:01:01.466] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:41', name: 'luxOff' },
+ { value: 1, start_time: '18:22', name: 'luxOn' }
+]
+[2025-03-12T16:01:01.467] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-03-12T16:01:01.478] [INFO] monitorLogs - tasks created: 2042
+[2025-03-12T16:01:01.481] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-30
+[2025-03-12T16:01:01.561] [INFO] monitorLogs - MQTT client connected
+[2025-03-12T16:01:01.798] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-03-12T16:01:02.103] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-03-12T16:01:02.408] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-03-12T16:01:02.714] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-03-12T18:06:20.400] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-12T18:06:20.402] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-12T18:06:20.405] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-12T18:06:20.408] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-13T03:01:03.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-13 03:01:03
+[2025-03-13T06:10:19.097] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-13T06:10:19.105] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-13T06:10:19.107] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-13T06:10:19.109] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-13T09:49:08.053] [INFO] monitorLogs - MQTT client connected
+[2025-03-13T09:50:20.691] [INFO] monitorLogs - MQTT client connected
+[2025-03-13T09:50:42.218] [INFO] monitorLogs - MQTT client connected
+[2025-03-13T10:13:24.940] [INFO] monitorLogs - MQTT client connected
+[2025-03-13T18:06:32.908] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-13T18:06:32.925] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-13T18:06:32.927] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-13T18:06:32.929] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-14T03:01:04.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-14 03:01:04
+[2025-03-14T06:03:38.156] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-14T06:03:38.164] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-14T06:03:38.167] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-14T06:03:38.169] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-14T18:00:47.588] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-14T18:00:47.591] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-14T18:00:47.593] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-14T18:00:47.595] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-15T03:01:05.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-15 03:01:05
+[2025-03-15T06:05:58.853] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-15T06:05:58.860] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-15T06:05:58.863] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-15T06:05:58.865] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-15T18:08:29.055] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-15T18:08:29.058] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-15T18:08:29.059] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-15T18:08:29.061] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-16T03:01:06.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-16 03:01:06
+[2025-03-16T05:51:29.672] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-16T05:51:29.680] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-16T05:51:29.682] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-16T05:51:29.684] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-16T18:15:17.534] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-16T18:15:17.536] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-16T18:15:17.538] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-16T18:15:17.540] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-17T03:01:07.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-17 03:01:07
+[2025-03-17T05:54:46.141] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-17T05:54:46.145] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-17T05:54:46.147] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-17T05:54:46.150] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-17T07:06:15.821] [INFO] monitorLogs - MQTT client connected
+[2025-03-17T18:14:47.547] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-17T18:14:47.551] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-17T18:14:47.554] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-17T18:14:47.556] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-18T03:01:08.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-18 03:01:08
+[2025-03-18T05:42:49.036] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-18T05:42:49.045] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-18T05:42:49.047] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-18T05:42:49.049] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-18T18:19:04.220] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-18T18:19:04.230] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-18T18:19:04.233] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-18T18:19:04.235] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-19T03:01:09.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-19 03:01:09
+[2025-03-19T05:38:34.081] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-19T05:38:34.088] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-19T05:38:34.090] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-19T05:38:34.092] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-19T18:19:04.847] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-19T18:19:04.850] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-19T18:19:04.852] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-19T18:19:04.853] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-20T03:01:10.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-20 03:01:10
+[2025-03-20T05:37:17.292] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-20T05:37:17.299] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-20T05:37:17.301] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-20T05:37:17.303] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-20T18:19:59.629] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-20T18:19:59.638] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-20T18:19:59.640] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-20T18:19:59.642] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-21T03:01:11.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-21 03:01:11
+[2025-03-21T05:34:39.313] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-21T05:34:39.322] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-21T05:34:39.324] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-21T05:34:39.326] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-21T18:19:53.048] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-21T18:19:53.054] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-21T18:19:53.056] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-21T18:19:53.058] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-22T03:01:13.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-22 03:01:13
+[2025-03-22T05:33:43.386] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-22T05:33:43.389] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-22T05:33:43.392] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-22T05:33:43.394] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-22T18:15:04.712] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-22T18:15:04.714] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-22T18:15:04.716] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-22T18:15:04.717] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-23T03:01:14.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-23 03:01:14
+[2025-03-23T05:40:46.834] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-23T05:40:46.844] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-23T05:40:46.846] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-23T05:40:46.848] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-23T18:23:34.067] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-23T18:23:34.078] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-23T18:23:34.080] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-23T18:23:34.082] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-24T03:01:15.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-24 03:01:15
+[2025-03-24T05:35:06.286] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-24T05:35:06.295] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-24T05:35:06.297] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-24T05:35:06.299] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-24T08:09:11.213] [INFO] monitorLogs - MQTT client connected
+[2025-03-24T09:35:01.042] [INFO] monitorLogs - MQTT client connected
+[2025-03-24T12:24:26.590] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-03-24T12:24:31.970] [INFO] monitorLogs - buildTasks - params undefined
+[2025-03-24T12:24:31.975] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-03-24T12:24:31.976] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-03-24T12:24:31.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-03-24T12:24:31.981] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-24T12:24:31.983] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-03-25T05:16:00.982Z
+[2025-03-24T12:24:31.984] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-03-24T17:40:00.984Z
+[2025-03-24T12:24:31.985] [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:24:31.986] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-03-24T12:24:31.987] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-03-24T12:24:31.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-03-24T12:24:31.990] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-24T12:24:31.990] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-03-25T05:16:00.990Z
+[2025-03-24T12:24:31.991] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-03-24T17:40:00.991Z
+[2025-03-24T12:24:31.992] [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:24:31.993] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-03-24T12:24:31.994] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-03-24T12:24:31.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-03-24T12:24:31.996] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-24T12:24:31.997] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-03-25T05:16:00.997Z
+[2025-03-24T12:24:31.998] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-03-24T17:40:00.998Z
+[2025-03-24T12:24:31.998] [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:24:31.999] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-03-24T12:24:32.000] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-03-24T12:24:32.001] [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:24:32.003] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-03-24T12:24:32.004] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-03-25T05:16:00.003Z
+[2025-03-24T12:24:32.004] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-03-24T17:40:00.004Z
+[2025-03-24T12:24:32.005] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:16', name: 'luxOff' },
+ { value: 1, start_time: '18:40', name: 'luxOn' }
+]
+[2025-03-24T12:24:32.006] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-03-24T12:24:32.018] [INFO] monitorLogs - tasks created: 2042
+[2025-03-24T12:24:32.020] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-01-30
+[2025-03-24T12:24:32.142] [INFO] monitorLogs - MQTT client connected
+[2025-03-24T12:24:32.337] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-03-24T12:24:32.643] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-03-24T12:24:32.949] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-03-24T12:24:33.255] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-03-24T18:23:08.374] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-24T18:23:08.377] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-24T18:23:08.380] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-24T18:23:08.382] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-25T03:24:34.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-25 03:24:34
+[2025-03-25T05:33:53.957] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-25T05:33:53.960] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-25T05:33:53.963] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-25T05:33:53.965] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-25T18:27:37.207] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-25T18:27:37.218] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-25T18:27:37.221] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-25T18:27:37.223] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-26T03:24:35.030] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-26 03:24:35
+[2025-03-26T05:26:50.409] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-26T05:26:50.413] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-26T05:26:50.415] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-26T05:26:50.417] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-26T18:27:29.612] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-26T18:27:29.615] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-26T18:27:29.617] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-26T18:27:29.618] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-27T03:24:36.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-27 03:24:36
+[2025-03-27T05:26:09.964] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-27T05:26:09.972] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-27T05:26:09.974] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-27T05:26:09.976] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-27T18:31:39.285] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-27T18:31:39.288] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-27T18:31:39.290] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-27T18:31:39.291] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-28T03:24:37.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-28 03:24:37
+[2025-03-28T05:22:37.785] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-28T05:22:37.789] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-28T05:22:37.794] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-28T05:22:37.795] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-28T07:34:55.527] [INFO] monitorLogs - MQTT client connected
+[2025-03-28T07:35:37.986] [INFO] monitorLogs - MQTT client connected
+[2025-03-28T07:37:46.428] [INFO] monitorLogs - MQTT client connected
+[2025-03-28T07:38:19.847] [INFO] monitorLogs - MQTT client connected
+[2025-03-28T18:19:43.819] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-28T18:19:43.846] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-28T18:19:43.849] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-28T18:19:43.851] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-28T18:30:10.300] [INFO] monitorLogs - MQTT client connected
+[2025-03-29T03:24:38.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-29 03:24:38
+[2025-03-29T05:33:03.104] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-29T05:33:03.108] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-29T05:33:03.110] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-29T05:33:03.112] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-29T18:14:55.382] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-29T18:14:55.385] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-29T18:14:55.387] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-29T18:14:55.389] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-30T03:24:39.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-30 03:24:39
+[2025-03-30T06:30:06.669] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-30T06:30:06.678] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-30T06:30:06.680] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-30T06:30:06.682] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-30T19:22:28.180] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-30T19:22:28.182] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-30T19:22:28.184] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-30T19:22:28.186] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-31T03:24:41.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-03-31 03:24:41
+[2025-03-31T06:16:09.087] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-31T06:16:09.096] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-31T06:16:09.098] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-31T06:16:09.100] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-03-31T06:50:30.486] [INFO] monitorLogs - MQTT client connected
+[2025-03-31T19:35:58.538] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-31T19:35:58.553] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-31T19:35:58.555] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-03-31T19:35:58.557] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-01T03:24:42.017] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-01 03:24:42
+[2025-04-01T06:19:07.283] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-01T06:19:07.287] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-01T06:19:07.289] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-01T06:19:07.290] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-01T07:40:39.558] [INFO] monitorLogs - MQTT client connected
+[2025-04-01T19:35:16.973] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-01T19:35:16.983] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-01T19:35:16.985] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-01T19:35:16.987] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-02T02:17:53.172] [INFO] monitorLogs - MQTT client connected
+[2025-04-02T03:23:56.846] [INFO] monitorLogs - MQTT client connected
+[2025-04-02T03:24:43.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-02 03:24:43
+[2025-04-02T06:13:43.026] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-02T06:13:43.043] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-02T06:13:43.046] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-02T06:13:43.048] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-02T19:37:37.823] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-02T19:37:37.827] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-02T19:37:37.829] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-02T19:37:37.830] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-03T03:24:44.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-03 03:24:44
+[2025-04-03T06:07:00.185] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-03T06:07:00.193] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-03T06:07:00.195] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-03T06:07:00.197] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-03T19:40:33.420] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-03T19:40:33.456] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-03T19:40:33.458] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-03T19:40:33.460] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-04T03:24:45.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-04 03:24:45
+[2025-04-04T06:04:15.024] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-04T06:04:15.028] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-04T06:04:15.030] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-04T06:04:15.032] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-04T19:42:25.328] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-04T19:42:25.343] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-04T19:42:25.345] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-04T19:42:25.346] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-05T03:24:46.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-05 03:24:46
+[2025-04-05T06:05:22.634] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-05T06:05:22.641] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-05T06:05:22.643] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-05T06:05:22.645] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-05T19:43:02.314] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-05T19:43:02.322] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-05T19:43:02.325] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-05T19:43:02.327] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-06T03:24:47.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-06 03:24:47
+[2025-04-06T06:03:08.650] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-06T06:03:08.654] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-06T06:03:08.656] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-06T06:03:08.658] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-06T19:43:11.726] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-06T19:43:11.785] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-06T19:43:11.787] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-06T19:43:11.789] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-07T03:24:48.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-07 03:24:48
+[2025-04-07T06:11:39.808] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-07T06:11:39.811] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-07T06:11:39.814] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-07T06:11:39.816] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-07T08:32:42.621] [INFO] monitorLogs - MQTT client connected
+[2025-04-07T19:32:12.345] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-07T19:32:12.350] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-07T19:32:12.352] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-07T19:32:12.354] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-08T03:24:49.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-08 03:24:49
+[2025-04-08T06:12:06.984] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-08T06:12:06.993] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-08T06:12:06.995] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-08T06:12:06.997] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-08T19:48:22.827] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-08T19:48:22.835] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-08T19:48:22.837] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-08T19:48:22.839] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-09T03:24:50.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-09 03:24:50
+[2025-04-09T05:55:29.114] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-09T05:55:29.118] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-09T05:55:29.120] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-09T05:55:29.122] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-09T19:48:31.190] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-09T19:48:31.196] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-09T19:48:31.198] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-09T19:48:31.200] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-10T03:24:52.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-10 03:24:52
+[2025-04-10T06:02:52.251] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-10T06:02:52.255] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-10T06:02:52.257] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-10T06:02:52.259] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-10T07:09:26.550] [INFO] monitorLogs - MQTT client connected
+[2025-04-10T12:19:17.920] [INFO] monitorLogs - MQTT client connected
+[2025-04-10T19:48:52.281] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-10T19:48:52.292] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-10T19:48:52.294] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-10T19:48:52.295] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-11T00:29:17.296] [INFO] monitorLogs - MQTT client connected
+[2025-04-11T03:24:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-11 03:24:53
+[2025-04-11T05:53:41.329] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-11T05:53:41.337] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-11T05:53:41.339] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-11T05:53:41.341] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-11T19:48:14.507] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-11T19:48:14.509] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-11T19:48:14.511] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-11T19:48:14.513] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-12T03:24:54.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-12 03:24:54
+[2025-04-12T05:55:17.843] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-12T05:55:17.851] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-12T05:55:17.853] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-12T05:55:17.855] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-12T19:55:32.964] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-12T19:55:32.981] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-12T19:55:32.983] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-12T19:55:32.986] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-13T03:24:55.014] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-13 03:24:55
+[2025-04-13T05:46:31.976] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-13T05:46:31.980] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-13T05:46:31.982] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-13T05:46:31.984] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-13T19:48:28.692] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-13T19:48:28.706] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-13T19:48:28.708] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-13T19:48:28.710] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-14T03:24:56.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-14 03:24:56
+[2025-04-14T05:47:35.362] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-14T05:47:35.366] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-14T05:47:35.368] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-14T05:47:35.369] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-14T16:19:21.413] [INFO] monitorLogs - MQTT client connected
+[2025-04-14T19:53:26.600] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-14T19:53:26.602] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-14T19:53:26.604] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-14T19:53:26.606] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-15T03:24:58.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-15 03:24:58
+[2025-04-15T06:02:42.209] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-15T06:02:42.213] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-15T06:02:42.215] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-15T06:02:42.217] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-15T11:19:33.941] [INFO] monitorLogs - MQTT client connected
+[2025-04-15T19:55:09.552] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-15T19:55:09.556] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-15T19:55:09.558] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-15T19:55:09.560] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-16T03:24:59.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-16 03:24:59
+[2025-04-16T05:41:43.669] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-16T05:41:43.673] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-16T05:41:43.676] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-16T05:41:43.678] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-16T19:59:17.974] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-16T19:59:17.981] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-16T19:59:17.983] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-16T19:59:17.985] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-17T03:25:00.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-17 03:25:00
+[2025-04-17T05:42:52.608] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-17T05:42:52.616] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-17T05:42:52.618] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-17T05:42:52.620] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-17T19:44:42.438] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-17T19:44:42.442] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-17T19:44:42.443] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-17T19:44:42.445] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-18T03:25:02.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-18 03:25:02
+[2025-04-18T05:56:06.726] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-18T05:56:06.735] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-18T05:56:06.737] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-18T05:56:06.739] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-18T19:41:08.232] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-18T19:41:08.239] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-18T19:41:08.241] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-18T19:41:08.243] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-19T03:25:03.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-19 03:25:03
+[2025-04-19T05:37:57.963] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-19T05:37:57.970] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-19T05:37:57.972] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-19T05:37:57.975] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-19T20:04:51.090] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-19T20:04:51.098] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-19T20:04:51.100] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-19T20:04:51.101] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-20T03:25:04.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-20 03:25:04
+[2025-04-20T05:35:01.506] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-20T05:35:01.509] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-20T05:35:01.512] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-20T05:35:01.514] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-20T20:04:21.954] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-20T20:04:21.956] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-20T20:04:21.958] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-20T20:04:21.959] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-21T03:25:06.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-21 03:25:06
+[2025-04-21T05:34:29.572] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-21T05:34:29.576] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-21T05:34:29.578] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-21T05:34:29.580] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-21T20:05:36.680] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-21T20:05:36.683] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-21T20:05:36.685] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-21T20:05:36.687] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-22T03:25:07.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-22 03:25:07
+[2025-04-22T05:32:29.910] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-22T05:32:29.914] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-22T05:32:29.916] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-22T05:32:29.918] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-22T20:08:47.425] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-22T20:08:47.433] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-22T20:08:47.435] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-22T20:08:47.437] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-23T03:25:09.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-23 03:25:09
+[2025-04-23T05:38:01.371] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-23T05:38:01.375] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-23T05:38:01.377] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-23T05:38:01.380] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-23T07:05:46.432] [INFO] monitorLogs - MQTT client connected
+[2025-04-23T20:07:25.627] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-23T20:07:25.629] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-23T20:07:25.631] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-23T20:07:25.633] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-24T03:25:10.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-24 03:25:10
+[2025-04-24T05:33:26.810] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-24T05:33:26.817] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-24T05:33:26.819] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-24T05:33:26.821] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-24T18:02:44.367] [INFO] monitorLogs - MQTT client connected
+[2025-04-24T18:04:50.485] [INFO] monitorLogs - MQTT client connected
+[2025-04-24T18:06:10.839] [INFO] monitorLogs - MQTT client connected
+[2025-04-24T20:04:05.522] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-24T20:04:05.527] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-24T20:04:05.529] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-24T20:04:05.531] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-25T03:25:11.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-25 03:25:11
+[2025-04-25T05:47:41.731] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-25T05:47:41.739] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-25T05:47:41.741] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-25T05:47:41.743] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-25T11:23:53.712] [INFO] monitorLogs - MQTT client connected
+[2025-04-25T12:15:01.683] [INFO] monitorLogs - MQTT client connected
+[2025-04-25T20:06:31.409] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-25T20:06:31.412] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-25T20:06:31.414] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-25T20:06:31.416] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-26T03:25:13.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-26 03:25:13
+[2025-04-26T05:28:52.323] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-26T05:28:52.327] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-26T05:28:52.329] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-26T05:28:52.332] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-26T20:14:12.328] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-26T20:14:12.330] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-26T20:14:12.332] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-26T20:14:12.334] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-27T03:25:14.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-27 03:25:14
+[2025-04-27T05:23:36.026] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-27T05:23:36.030] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-27T05:23:36.032] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-27T05:23:36.034] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-27T20:14:50.643] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-27T20:14:50.650] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-27T20:14:50.652] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-27T20:14:50.655] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-28T03:25:15.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-28 03:25:15
+[2025-04-28T05:21:06.872] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-28T05:21:06.880] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-28T05:21:06.883] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-28T05:21:06.884] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-28T20:18:27.770] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-28T20:18:27.778] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-28T20:18:27.780] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-28T20:18:27.782] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-29T03:25:16.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-29 03:25:16
+[2025-04-29T05:21:28.382] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-29T05:21:28.385] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-29T05:21:28.387] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-29T05:21:28.389] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-29T06:46:58.875] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T06:53:27.273] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T06:54:26.143] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T06:56:07.544] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T07:49:21.323] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T07:50:05.216] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T07:52:02.456] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T07:53:25.498] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T07:54:07.815] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T09:12:16.267] [INFO] monitorLogs - MQTT client connected
+[2025-04-29T20:18:50.801] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-29T20:18:50.803] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-29T20:18:50.805] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-29T20:18:50.807] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-30T03:25:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-04-30 03:25:18
+[2025-04-30T05:20:54.878] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-30T05:20:54.882] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-30T05:20:54.884] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-30T05:20:54.886] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-04-30T16:53:09.217] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-04-30T16:53:14.598] [INFO] monitorLogs - buildTasks - params undefined
+[2025-04-30T16:53:14.602] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-04-30T16:53:14.604] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-04-30T16:53:14.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-30T16:53:14.609] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-04-30T16:53:14.610] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-01T04:03:00.609Z
+[2025-04-30T16:53:14.612] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-04-30T18:34:00.611Z
+[2025-04-30T16:53:14.612] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '6:3', name: 'luxOff' },
+ { value: 1, start_time: '20:34', name: 'luxOn' }
+]
+[2025-04-30T16:53:14.613] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-04-30T16:53:14.614] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-04-30T16:53:14.615] [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-30T16:53:14.617] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-04-30T16:53:14.618] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-01T04:03:00.618Z
+[2025-04-30T16:53:14.619] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-04-30T18:34:00.619Z
+[2025-04-30T16:53:14.619] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '6:3', name: 'luxOff' },
+ { value: 1, start_time: '20:34', name: 'luxOn' }
+]
+[2025-04-30T16:53:14.620] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-04-30T16:53:14.621] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-04-30T16:53:14.622] [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-30T16:53:14.624] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-04-30T16:53:14.625] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-01T04:03:00.625Z
+[2025-04-30T16:53:14.625] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-04-30T18:34:00.625Z
+[2025-04-30T16:53:14.626] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '6:3', name: 'luxOff' },
+ { value: 1, start_time: '20:34', name: 'luxOn' }
+]
+[2025-04-30T16:53:14.627] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-04-30T16:53:14.628] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-04-30T16:53:14.628] [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-30T16:53:14.631] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-04-30T16:53:14.632] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-05-01T04:03:00.632Z
+[2025-04-30T16:53:14.633] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-04-30T18:34:00.633Z
+[2025-04-30T16:53:14.634] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:3', name: 'luxOff' },
+ { value: 1, start_time: '20:34', name: 'luxOn' }
+]
+[2025-04-30T16:53:14.635] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-04-30T16:53:14.662] [INFO] monitorLogs - tasks created: 1907
+[2025-04-30T16:53:14.664] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-04-30T16:53:14.759] [INFO] monitorLogs - MQTT client connected
+[2025-04-30T16:53:14.981] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-04-30T16:53:15.286] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-04-30T16:53:15.592] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-04-30T16:53:15.898] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-04-30T20:18:32.671] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-30T20:18:32.674] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-30T20:18:32.677] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-04-30T20:18:32.679] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-01T03:53:16.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-01 03:53:16
+[2025-05-01T05:18:07.241] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-01T05:18:07.249] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-01T05:18:07.251] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-01T05:18:07.253] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-01T20:23:05.437] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-01T20:23:05.446] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-01T20:23:05.448] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-01T20:23:05.450] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-02T03:53:17.033] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-02 03:53:17
+[2025-05-02T05:14:35.576] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-02T05:14:35.579] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-02T05:14:35.581] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-02T05:14:35.583] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-02T20:21:56.901] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-02T20:21:56.909] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-02T20:21:56.911] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-02T20:21:56.914] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-03T03:53:19.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-03 03:53:19
+[2025-05-03T05:14:36.125] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-03T05:14:36.129] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-03T05:14:36.131] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-03T05:14:36.133] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-03T20:07:20.635] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-03T20:07:20.643] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-03T20:07:20.645] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-03T20:07:20.647] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-04T03:53:20.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-04 03:53:20
+[2025-05-04T05:21:10.631] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-04T05:21:10.640] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-04T05:21:10.642] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-04T05:21:10.644] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-04T20:24:43.339] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-04T20:24:43.346] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-04T20:24:43.348] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-04T20:24:43.350] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-05T03:53:22.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-05 03:53:22
+[2025-05-05T05:20:21.911] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-05T05:20:21.915] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-05T05:20:21.917] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-05T05:20:21.919] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-05T20:05:11.658] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-05T20:05:11.661] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-05T20:05:11.663] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-05T20:05:11.665] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-06T03:53:23.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-06 03:53:23
+[2025-05-06T05:18:25.599] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-06T05:18:25.603] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-06T05:18:25.605] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-06T05:18:25.607] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-06T08:24:16.217] [INFO] monitorLogs - MQTT client connected
+[2025-05-06T20:25:06.779] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-06T20:25:06.782] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-06T20:25:06.784] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-06T20:25:06.785] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-07T03:53:24.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-07 03:53:24
+[2025-05-07T05:15:38.337] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-07T05:15:38.341] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-07T05:15:38.343] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-07T05:15:38.346] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-07T19:24:48.167] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-05-07T19:24:53.533] [INFO] monitorLogs - buildTasks - params undefined
+[2025-05-07T19:24:53.537] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-05-07T19:24:53.539] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-05-07T19:24:53.539] [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-07T19:24:53.543] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-07T19:24:53.545] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-08T03:52:00.544Z
+[2025-05-07T19:24:53.546] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-07T18:44:00.546Z
+[2025-05-07T19:24:53.547] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '5:52', name: 'luxOff' },
+ { value: 1, start_time: '20:44', name: 'luxOn' }
+]
+[2025-05-07T19:24:53.548] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-05-07T19:24:53.549] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-05-07T19:24:53.549] [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-07T19:24:53.552] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-07T19:24:53.553] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-08T03:52:00.552Z
+[2025-05-07T19:24:53.553] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-07T18:44:00.553Z
+[2025-05-07T19:24:53.554] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '5:52', name: 'luxOff' },
+ { value: 1, start_time: '20:44', name: 'luxOn' }
+]
+[2025-05-07T19:24:53.555] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-05-07T19:24:53.556] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-05-07T19:24:53.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-07T19:24:53.558] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-07T19:24:53.559] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-08T03:52:00.559Z
+[2025-05-07T19:24:53.560] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-07T18:44:00.560Z
+[2025-05-07T19:24:53.560] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '5:52', name: 'luxOff' },
+ { value: 1, start_time: '20:44', name: 'luxOn' }
+]
+[2025-05-07T19:24:53.561] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-05-07T19:24:53.562] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-05-07T19:24:53.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-07T19:24:53.565] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-07T19:24:53.565] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-05-08T03:52:00.565Z
+[2025-05-07T19:24:53.566] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-05-07T18:44:00.566Z
+[2025-05-07T19:24:53.567] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:52', name: 'luxOff' },
+ { value: 1, start_time: '20:44', name: 'luxOn' }
+]
+[2025-05-07T19:24:53.568] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-05-07T19:24:53.595] [INFO] monitorLogs - tasks created: 1907
+[2025-05-07T19:24:53.599] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-05-07T19:24:53.698] [INFO] monitorLogs - MQTT client connected
+[2025-05-07T19:24:53.914] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-05-07T19:24:54.220] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-05-07T19:24:54.524] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-05-07T19:24:54.830] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-05-07T20:21:52.643] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-07T20:21:52.646] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-07T20:21:52.648] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-07T20:21:52.651] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-08T03:24:56.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-08 03:24:56
+[2025-05-08T05:14:55.017] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-08T05:14:55.021] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-08T05:14:55.024] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-08T05:14:55.026] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-08T20:29:21.036] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-08T20:29:21.046] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-08T20:29:21.049] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-08T20:29:21.051] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-09T03:24:57.024] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-09 03:24:57
+[2025-05-09T05:04:00.477] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-09T05:04:00.481] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-09T05:04:00.484] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-09T05:04:00.487] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-09T08:19:45.153] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-05-09T08:19:50.533] [INFO] monitorLogs - buildTasks - params undefined
+[2025-05-09T08:19:50.538] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-05-09T08:19:50.539] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-05-09T08:19:50.539] [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-09T08:19:50.544] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-09T08:19:50.545] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-10T03:49:00.544Z
+[2025-05-09T08:19:50.547] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-09T18:47:00.546Z
+[2025-05-09T08:19:50.547] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '5:49', name: 'luxOff' },
+ { value: 1, start_time: '20:47', name: 'luxOn' }
+]
+[2025-05-09T08:19:50.548] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-05-09T08:19:50.549] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-05-09T08:19:50.550] [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-09T08:19:50.552] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-09T08:19:50.553] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-10T03:49:00.553Z
+[2025-05-09T08:19:50.554] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-09T18:47:00.554Z
+[2025-05-09T08:19:50.554] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '5:49', name: 'luxOff' },
+ { value: 1, start_time: '20:47', name: 'luxOn' }
+]
+[2025-05-09T08:19:50.555] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-05-09T08:19:50.556] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-05-09T08:19:50.557] [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-09T08:19:50.559] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-09T08:19:50.560] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-10T03:49:00.559Z
+[2025-05-09T08:19:50.560] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-09T18:47:00.560Z
+[2025-05-09T08:19:50.561] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '5:49', name: 'luxOff' },
+ { value: 1, start_time: '20:47', name: 'luxOn' }
+]
+[2025-05-09T08:19:50.562] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-05-09T08:19:50.563] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-05-09T08:19:50.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-09T08:19:50.565] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-09T08:19:50.566] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-05-10T03:49:00.566Z
+[2025-05-09T08:19:50.567] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-05-09T18:47:00.567Z
+[2025-05-09T08:19:50.567] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:49', name: 'luxOff' },
+ { value: 1, start_time: '20:47', name: 'luxOn' }
+]
+[2025-05-09T08:19:50.568] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-05-09T08:19:50.578] [INFO] monitorLogs - tasks created: 1907
+[2025-05-09T08:19:50.581] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-05-09T08:19:50.680] [INFO] monitorLogs - MQTT client connected
+[2025-05-09T08:19:50.897] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-05-09T08:19:51.202] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-05-09T08:19:51.508] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-05-09T08:19:51.814] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-05-09T20:32:58.234] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-09T20:32:58.242] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-09T20:32:58.245] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-09T20:32:58.247] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-10T03:19:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-10 03:19:53
+[2025-05-10T05:01:50.373] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-10T05:01:50.377] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-10T05:01:50.379] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-10T05:01:50.381] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-10T20:29:47.352] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-10T20:29:47.361] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-10T20:29:47.363] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-10T20:29:47.365] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-11T03:19:54.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-11 03:19:54
+[2025-05-11T05:07:03.360] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-11T05:07:03.364] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-11T05:07:03.366] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-11T05:07:03.368] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-11T20:38:45.455] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-11T20:38:45.464] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-11T20:38:45.466] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-11T20:38:45.468] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-12T03:19:55.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-12 03:19:55
+[2025-05-12T04:10:16.170] [INFO] monitorLogs - MQTT client connected
+[2025-05-12T04:59:22.379] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-12T04:59:22.382] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-12T04:59:22.384] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-12T04:59:22.386] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-12T09:49:22.405] [INFO] monitorLogs - MQTT client connected
+[2025-05-12T10:55:47.279] [INFO] monitorLogs - MQTT client connected
+[2025-05-12T20:37:52.478] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-12T20:37:52.482] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-12T20:37:52.484] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-12T20:37:52.487] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-13T03:19:56.017] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-13 03:19:56
+[2025-05-13T04:58:04.061] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-13T04:58:04.065] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-13T04:58:04.068] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-13T04:58:04.070] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-13T20:39:06.980] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-13T20:39:06.988] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-13T20:39:06.991] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-13T20:39:06.993] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-14T03:19:58.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-14 03:19:58
+[2025-05-14T04:57:17.965] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-14T04:57:17.974] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-14T04:57:17.976] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-14T04:57:17.978] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-14T08:40:50.802] [INFO] monitorLogs - MQTT client connected
+[2025-05-14T09:43:33.239] [INFO] monitorLogs - MQTT client connected
+[2025-05-14T10:08:41.651] [INFO] monitorLogs - MQTT client connected
+[2025-05-14T10:49:02.497] [INFO] monitorLogs - MQTT client connected
+[2025-05-14T10:54:51.316] [INFO] monitorLogs - MQTT client connected
+[2025-05-14T10:55:14.939] [INFO] monitorLogs - MQTT client connected
+[2025-05-14T20:35:04.262] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-14T20:35:04.265] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-14T20:35:04.267] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-14T20:35:04.268] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-15T03:19:59.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-15 03:19:59
+[2025-05-15T05:07:00.933] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-15T05:07:00.941] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-15T05:07:00.944] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-15T05:07:00.945] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-15T08:58:52.983] [INFO] monitorLogs - MQTT client connected
+[2025-05-15T20:31:47.301] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-15T20:31:47.318] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-15T20:31:47.320] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-15T20:31:47.322] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-16T03:20:00.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-16 03:20:00
+[2025-05-16T04:54:08.490] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-16T04:54:08.494] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-16T04:54:08.496] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-16T04:54:08.498] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-16T20:44:09.854] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-16T20:44:09.864] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-16T20:44:09.866] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-16T20:44:09.868] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-17T03:20:01.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-17 03:20:01
+[2025-05-17T05:07:41.171] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-17T05:07:41.178] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-17T05:07:41.180] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-17T05:07:41.183] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-17T20:32:24.929] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-17T20:32:24.941] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-17T20:32:24.943] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-17T20:32:24.945] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-18T03:20:02.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-18 03:20:02
+[2025-05-18T05:14:23.212] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-18T05:14:23.215] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-18T05:14:23.218] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-18T05:14:23.220] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-18T13:25:50.521] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-05-18T13:25:55.911] [INFO] monitorLogs - buildTasks - params undefined
+[2025-05-18T13:25:55.916] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-05-18T13:25:55.917] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-05-18T13:25:55.918] [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:55.922] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-18T13:25:55.924] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-19T03:37:00.923Z
+[2025-05-18T13:25:55.925] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-18T19:00:00.925Z
+[2025-05-18T13:25:55.926] [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:55.927] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-05-18T13:25:55.928] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-05-18T13:25:55.928] [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:55.931] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-18T13:25:55.931] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-19T03:37:00.931Z
+[2025-05-18T13:25:55.932] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-18T19:00:00.932Z
+[2025-05-18T13:25:55.933] [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:55.934] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-05-18T13:25:55.935] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-05-18T13:25:55.935] [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:55.937] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-18T13:25:55.938] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-19T03:37:00.938Z
+[2025-05-18T13:25:55.939] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-18T19:00:00.939Z
+[2025-05-18T13:25:55.939] [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:55.940] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-05-18T13:25:55.941] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-05-18T13:25:55.942] [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:55.944] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-18T13:25:55.945] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-05-19T03:37:00.944Z
+[2025-05-18T13:25:55.945] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-05-18T19:00:00.945Z
+[2025-05-18T13:25:55.946] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:37', name: 'luxOff' },
+ { value: 1, start_time: '21:0', name: 'luxOn' }
+]
+[2025-05-18T13:25:55.947] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-05-18T13:25:55.973] [INFO] monitorLogs - tasks created: 1907
+[2025-05-18T13:25:55.975] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-05-18T13:26:00.992] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-05-18T20:40:21.136] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-18T20:40:21.146] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-18T20:40:21.148] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-18T20:40:21.151] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-19T03:25:58.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-19 03:25:58
+[2025-05-19T05:08:51.798] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-19T05:08:51.802] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-19T05:08:51.804] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-19T05:08:51.807] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-19T20:18:45.411] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-19T20:18:45.417] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-19T20:18:45.419] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-19T20:18:45.421] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-20T03:25:59.019] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-20 03:25:59
+[2025-05-20T05:06:50.132] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-20T05:06:50.136] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-20T05:06:50.138] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-20T05:06:50.140] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-20T20:48:28.378] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-20T20:48:28.385] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-20T20:48:28.388] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-20T20:48:28.390] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-21T03:26:00.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-21 03:26:00
+[2025-05-21T04:46:05.523] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-21T04:46:05.531] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-21T04:46:05.534] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-21T04:46:05.536] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-21T20:43:38.976] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-21T20:43:38.984] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-21T20:43:38.986] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-21T20:43:38.988] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-22T03:26:02.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-22 03:26:02
+[2025-05-22T04:49:36.504] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-22T04:49:36.508] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-22T04:49:36.510] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-22T04:49:36.512] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-22T20:38:54.237] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-22T20:38:54.245] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-22T20:38:54.247] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-22T20:38:54.249] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-23T03:26:03.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-23 03:26:03
+[2025-05-23T04:52:25.798] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-23T04:52:25.801] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-23T04:52:25.804] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-23T04:52:25.806] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-23T20:53:54.167] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-23T20:53:54.175] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-23T20:53:54.177] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-23T20:53:54.179] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-24T03:26:04.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-24 03:26:04
+[2025-05-24T04:46:04.037] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-24T04:46:04.041] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-24T04:46:04.043] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-24T04:46:04.046] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-24T20:51:44.412] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-24T20:51:44.420] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-24T20:51:44.422] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-24T20:51:44.424] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-25T03:26:06.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-25 03:26:06
+[2025-05-25T04:42:58.878] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-25T04:42:58.882] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-25T04:42:58.884] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-25T04:42:58.886] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-25T20:54:08.543] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-25T20:54:08.551] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-25T20:54:08.553] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-25T20:54:08.555] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-26T03:26:07.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-26 03:26:07
+[2025-05-26T04:57:06.975] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-26T04:57:06.979] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-26T04:57:06.981] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-26T04:57:06.984] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-26T16:31:31.188] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-05-26T16:31:36.546] [INFO] monitorLogs - buildTasks - params undefined
+[2025-05-26T16:31:36.550] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-05-26T16:31:36.551] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-05-26T16:31:36.552] [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-26T16:31:36.556] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-26T16:31:36.558] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-05-27T03:28:00.557Z
+[2025-05-26T16:31:36.559] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-05-26T19:09:00.559Z
+[2025-05-26T16:31:36.560] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '5:28', name: 'luxOff' },
+ { value: 1, start_time: '21:9', name: 'luxOn' }
+]
+[2025-05-26T16:31:36.561] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-05-26T16:31:36.562] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-05-26T16:31:36.562] [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-26T16:31:36.565] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-26T16:31:36.566] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-05-27T03:28:00.565Z
+[2025-05-26T16:31:36.566] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-05-26T19:09:00.566Z
+[2025-05-26T16:31:36.567] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '5:28', name: 'luxOff' },
+ { value: 1, start_time: '21:9', name: 'luxOn' }
+]
+[2025-05-26T16:31:36.568] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-05-26T16:31:36.569] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-05-26T16:31:36.569] [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-26T16:31:36.572] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-26T16:31:36.572] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-05-27T03:28:00.572Z
+[2025-05-26T16:31:36.573] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-05-26T19:09:00.573Z
+[2025-05-26T16:31:36.574] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '5:28', name: 'luxOff' },
+ { value: 1, start_time: '21:9', name: 'luxOn' }
+]
+[2025-05-26T16:31:36.575] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-05-26T16:31:36.575] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-05-26T16:31:36.576] [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-26T16:31:36.578] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-05-26T16:31:36.579] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-05-27T03:28:00.579Z
+[2025-05-26T16:31:36.579] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-05-26T19:09:00.579Z
+[2025-05-26T16:31:36.580] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:28', name: 'luxOff' },
+ { value: 1, start_time: '21:9', name: 'luxOn' }
+]
+[2025-05-26T16:31:36.581] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-05-26T16:31:36.607] [INFO] monitorLogs - tasks created: 1907
+[2025-05-26T16:31:36.610] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-05-26T16:31:41.627] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-05-26T20:51:56.638] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-26T20:51:56.646] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-26T20:51:56.649] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-26T20:51:56.651] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-27T03:31:38.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-27 03:31:38
+[2025-05-27T04:41:41.860] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-27T04:41:41.869] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-27T04:41:41.871] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-27T04:41:41.873] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-27T20:56:52.155] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-27T20:56:52.163] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-27T20:56:52.165] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-27T20:56:52.167] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-28T03:31:40.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-28 03:31:40
+[2025-05-28T04:40:57.304] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-28T04:40:57.308] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-28T04:40:57.310] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-28T04:40:57.312] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-28T20:56:10.917] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-28T20:56:10.931] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-28T20:56:10.933] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-28T20:56:10.935] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-29T03:31:41.059] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-29 03:31:41
+[2025-05-29T04:41:12.912] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-29T04:41:12.915] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-29T04:41:12.918] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-29T04:41:12.921] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-29T20:57:39.371] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-29T20:57:39.373] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-29T20:57:39.375] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-29T20:57:39.377] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-30T03:31:42.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-30 03:31:42
+[2025-05-30T04:39:41.197] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-30T04:39:41.201] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-30T04:39:41.203] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-30T04:39:41.206] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-30T21:00:18.311] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-30T21:00:18.318] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-30T21:00:18.320] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-30T21:00:18.322] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-31T03:31:44.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-05-31 03:31:44
+[2025-05-31T04:37:03.982] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-31T04:37:03.985] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-31T04:37:03.987] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-31T04:37:03.989] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-05-31T20:51:27.297] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-31T20:51:27.313] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-31T20:51:27.315] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-05-31T20:51:27.317] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-01T03:31:45.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-01 03:31:45
+[2025-06-01T04:39:43.269] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-01T04:39:43.272] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-01T04:39:43.274] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-01T04:39:43.276] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-01T20:55:47.822] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-01T20:55:47.850] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-01T20:55:47.852] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-01T20:55:47.854] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-02T03:31:47.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-02 03:31:47
+[2025-06-02T04:38:53.394] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-02T04:38:53.398] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-02T04:38:53.400] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-02T04:38:53.402] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-02T20:34:19.224] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-02T20:34:19.236] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-02T20:34:19.238] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-02T20:34:19.240] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-03T03:31:48.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-03 03:31:48
+[2025-06-03T04:48:57.007] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-03T04:48:57.011] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-03T04:48:57.013] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-03T04:48:57.015] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-03T21:02:18.360] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-03T21:02:18.367] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-03T21:02:18.369] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-03T21:02:18.371] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-04T03:31:50.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-04 03:31:50
+[2025-06-04T04:37:15.759] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-04T04:37:15.763] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-04T04:37:15.765] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-04T04:37:15.767] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-04T21:01:01.189] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-04T21:01:01.197] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-04T21:01:01.200] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-04T21:01:01.201] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-05T03:31:51.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-05 03:31:51
+[2025-06-05T04:38:32.802] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-05T04:38:32.805] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-05T04:38:32.808] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-05T04:38:32.810] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-05T20:59:18.161] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-05T20:59:18.169] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-05T20:59:18.171] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-05T20:59:18.173] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-06T03:31:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-06 03:31:53
+[2025-06-06T04:38:02.148] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-06T04:38:02.152] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-06T04:38:02.154] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-06T04:38:02.156] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-06T21:06:13.942] [INFO] monitorLogs - turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-06T21:06:13.947] [INFO] monitorLogs - turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-06T21:06:13.949] [INFO] monitorLogs - turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-06T21:06:13.951] [INFO] monitorLogs - turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-07T03:31:54.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-07 03:31:54
+[2025-06-07T04:46:06.866] [INFO] monitorLogs - turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-07T04:46:06.869] [INFO] monitorLogs - turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-07T04:46:06.872] [INFO] monitorLogs - turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-07T04:46:06.874] [INFO] monitorLogs - turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-07T13:58:22.189] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-06-07T13:58:27.550] [INFO] monitorLogs - buildTasks - params undefined
+[2025-06-07T13:58:27.554] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-06-07T13:58:27.555] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-06-07T13:58:27.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-06-07T13:58:27.560] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-07T13:58:27.562] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-06-08T03:20:00.561Z
+[2025-06-07T13:58:27.563] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-06-07T19:21:00.563Z
+[2025-06-07T13:58:27.564] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '5:20', name: 'luxOff' },
+ { value: 1, start_time: '21:21', name: 'luxOn' }
+]
+[2025-06-07T13:58:27.565] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-06-07T13:58:27.566] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-06-07T13:58:27.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-06-07T13:58:27.569] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-07T13:58:27.569] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-06-08T03:20:00.569Z
+[2025-06-07T13:58:27.570] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-06-07T19:21:00.570Z
+[2025-06-07T13:58:27.571] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '5:20', name: 'luxOff' },
+ { value: 1, start_time: '21:21', name: 'luxOn' }
+]
+[2025-06-07T13:58:27.572] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-06-07T13:58:27.573] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-06-07T13:58:27.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-07T13:58:27.575] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-07T13:58:27.576] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-06-08T03:20:00.576Z
+[2025-06-07T13:58:27.577] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-06-07T19:21:00.577Z
+[2025-06-07T13:58:27.578] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '5:20', name: 'luxOff' },
+ { value: 1, start_time: '21:21', name: 'luxOn' }
+]
+[2025-06-07T13:58:27.578] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-06-07T13:58:27.579] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-06-07T13:58:27.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-07T13:58:27.582] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-07T13:58:27.583] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-06-08T03:20:00.582Z
+[2025-06-07T13:58:27.583] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-06-07T19:21:00.583Z
+[2025-06-07T13:58:27.584] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:20', name: 'luxOff' },
+ { value: 1, start_time: '21:21', name: 'luxOn' }
+]
+[2025-06-07T13:58:27.585] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-06-07T13:58:27.612] [INFO] monitorLogs - tasks created: 1907
+[2025-06-07T13:58:27.615] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-06-07T13:58:32.627] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-06-07T20:44:14.344] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-07T20:44:14.351] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-07T20:44:14.353] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-07T20:44:14.355] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-08T03:58:30.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-08 03:58:30
+[2025-06-08T04:33:16.705] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-08T04:33:16.717] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-08T04:33:16.719] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-08T04:33:16.721] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-08T21:06:42.410] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-08T21:06:42.429] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-08T21:06:42.431] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-08T21:06:42.433] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-09T03:58:31.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-09 03:58:31
+[2025-06-09T04:35:07.682] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-09T04:35:07.685] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-09T04:35:07.687] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-09T04:35:07.690] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-09T21:07:52.863] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-09T21:07:52.868] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-09T21:07:52.870] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-09T21:07:52.872] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-10T03:58:33.015] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-10 03:58:33
+[2025-06-10T04:36:01.689] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-10T04:36:01.693] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-10T04:36:01.695] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-10T04:36:01.697] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-10T21:04:12.318] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-10T21:04:12.323] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-10T21:04:12.325] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-10T21:04:12.327] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-11T03:58:34.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-11 03:58:34
+[2025-06-11T04:39:26.735] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-11T04:39:26.739] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-11T04:39:26.741] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-11T04:39:26.743] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-11T21:11:21.667] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-11T21:11:21.672] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-11T21:11:21.674] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-11T21:11:21.676] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-12T03:58:35.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-12 03:58:35
+[2025-06-12T04:32:59.178] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-12T04:32:59.181] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-12T04:32:59.183] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-12T04:32:59.185] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-12T21:11:44.434] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-12T21:11:44.451] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-12T21:11:44.453] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-12T21:11:44.455] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-13T03:58:37.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-13 03:58:37
+[2025-06-13T04:33:38.016] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-13T04:33:38.020] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-13T04:33:38.021] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-13T04:33:38.023] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-13T15:23:00.188] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-06-13T15:23:05.564] [INFO] monitorLogs - buildTasks - params undefined
+[2025-06-13T15:23:05.569] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-06-13T15:23:05.570] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-06-13T15:23:05.570] [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:23:05.574] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-13T15:23:05.576] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-06-14T03:19:00.575Z
+[2025-06-13T15:23:05.577] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-06-13T19:25:00.577Z
+[2025-06-13T15:23:05.578] [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:23:05.579] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-06-13T15:23:05.580] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-06-13T15:23:05.581] [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:23:05.583] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-13T15:23:05.584] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-06-14T03:19:00.583Z
+[2025-06-13T15:23:05.585] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-06-13T19:25:00.584Z
+[2025-06-13T15:23:05.585] [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:23:05.586] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-06-13T15:23:05.587] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-06-13T15:23:05.587] [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:23:05.590] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-13T15:23:05.590] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-06-14T03:19:00.590Z
+[2025-06-13T15:23:05.591] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-06-13T19:25:00.591Z
+[2025-06-13T15:23:05.592] [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:23:05.593] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-06-13T15:23:05.594] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-06-13T15:23:05.594] [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:23:05.596] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-06-13T15:23:05.597] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-06-14T03:19:00.597Z
+[2025-06-13T15:23:05.598] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-06-13T19:25:00.598Z
+[2025-06-13T15:23:05.598] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:19', name: 'luxOff' },
+ { value: 1, start_time: '21:25', name: 'luxOn' }
+]
+[2025-06-13T15:23:05.600] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-06-13T15:23:05.626] [INFO] monitorLogs - tasks created: 1907
+[2025-06-13T15:23:05.629] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-06-13T15:23:10.646] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-06-13T21:12:30.418] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-13T21:12:30.426] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-13T21:12:30.429] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-13T21:12:30.431] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-14T03:23:08.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-14 03:23:08
+[2025-06-14T04:31:32.157] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-14T04:31:32.162] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-14T04:31:32.165] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-14T04:31:32.167] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-14T21:15:02.399] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-14T21:15:02.407] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-14T21:15:02.410] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-14T21:15:02.412] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-15T03:23:17.198] [INFO] monitorLogs - setCorrectPlcTimeOnceADay - function error SyntaxError: Unexpected token < in JSON at position 0
+ at JSON.parse ()
+ at /home/unipi/flowserver/flow/cmd_manager.js:2424: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
+[2025-06-15T04:32:17.565] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-15T04:32:17.570] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-15T04:32:17.573] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-15T04:32:17.575] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-15T21:11:12.761] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-15T21:11:12.779] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-15T21:11:12.781] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-15T21:11:12.783] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-16T03:23:11.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-16 03:23:11
+[2025-06-16T04:30:09.522] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-16T04:30:09.525] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-16T04:30:09.528] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-16T04:30:09.530] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-16T20:48:04.180] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-16T20:48:04.192] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-16T20:48:04.195] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-16T20:48:04.197] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-17T03:23:12.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-17 03:23:12
+[2025-06-17T04:41:00.911] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-17T04:41:00.915] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-17T04:41:00.917] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-17T04:41:00.919] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-17T21:10:11.370] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-17T21:10:11.385] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-17T21:10:11.387] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-17T21:10:11.389] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-18T03:23:13.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-18 03:23:13
+[2025-06-18T04:32:04.122] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-18T04:32:04.126] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-18T04:32:04.129] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-18T04:32:04.132] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-18T21:11:41.791] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-18T21:11:41.803] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-18T21:11:41.806] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-18T21:11:41.808] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-19T03:23:15.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-19 03:23:15
+[2025-06-19T04:33:19.924] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-19T04:33:19.928] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-19T04:33:19.930] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-19T04:33:19.933] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-19T21:15:19.477] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-19T21:15:19.505] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-19T21:15:19.507] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-19T21:15:19.509] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-20T03:23:17.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-20 03:23:17
+[2025-06-20T04:34:19.086] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-20T04:34:19.089] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-20T04:34:19.091] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-20T04:34:19.093] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-20T21:14:03.739] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-20T21:14:03.757] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-20T21:14:03.760] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-20T21:14:03.762] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-21T03:23:18.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-21 03:23:18
+[2025-06-21T04:33:27.394] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-21T04:33:27.398] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-21T04:33:27.400] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-21T04:33:27.402] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-21T21:14:45.877] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-21T21:14:45.903] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-21T21:14:45.905] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-21T21:14:45.907] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-22T03:23:19.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-22 03:23:19
+[2025-06-22T04:34:38.744] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-22T04:34:38.748] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-22T04:34:38.750] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-22T04:34:38.752] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-22T21:13:20.562] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-22T21:13:20.578] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-22T21:13:20.580] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-22T21:13:20.583] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-23T03:23:21.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-23 03:23:21
+[2025-06-23T04:35:17.963] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-23T04:35:17.967] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-23T04:35:17.969] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-23T04:35:17.971] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-23T21:02:47.830] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-23T21:02:47.837] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-23T21:02:47.839] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-23T21:02:47.841] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-24T03:23:23.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-24 03:23:23
+[2025-06-24T04:35:43.662] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-24T04:35:43.665] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-24T04:35:43.667] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-24T04:35:43.669] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-24T21:13:44.898] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-24T21:13:44.905] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-24T21:13:44.907] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-24T21:13:44.909] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-25T03:23:24.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-25 03:23:24
+[2025-06-25T04:35:29.928] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-25T04:35:29.932] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-25T04:35:29.934] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-25T04:35:29.936] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-25T21:14:42.234] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-25T21:14:42.246] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-25T21:14:42.248] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-25T21:14:42.251] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-26T03:23:26.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-26 03:23:26
+[2025-06-26T04:34:32.356] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-26T04:34:32.360] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-26T04:34:32.362] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-26T04:34:32.365] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-26T20:39:47.224] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-26T20:39:47.243] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-26T20:39:47.245] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-26T20:39:47.248] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-27T03:23:28.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-27 03:23:28
+[2025-06-27T04:39:16.233] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-27T04:39:16.237] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-27T04:39:16.239] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-27T04:39:16.241] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-27T21:08:59.320] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-27T21:08:59.344] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-27T21:08:59.347] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-27T21:08:59.349] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-28T03:23:29.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-28 03:23:29
+[2025-06-28T04:46:54.083] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-28T04:46:54.086] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-28T04:46:54.089] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-28T04:46:54.091] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-28T21:15:33.449] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-28T21:15:33.455] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-28T21:15:33.457] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-28T21:15:33.459] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-29T03:23:31.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-29 03:23:31
+[2025-06-29T04:35:21.577] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-29T04:35:21.581] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-29T04:35:21.583] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-29T04:35:21.585] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-29T21:14:47.996] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-29T21:14:48.012] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-29T21:14:48.014] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-29T21:14:48.016] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-30T03:23:32.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-06-30 03:23:32
+[2025-06-30T04:36:42.734] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-30T04:36:42.737] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-30T04:36:42.740] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-30T04:36:42.742] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-06-30T21:17:42.271] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-30T21:17:42.297] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-30T21:17:42.299] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-06-30T21:17:42.301] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-01T03:23:34.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-01 03:23:34
+[2025-07-01T04:37:22.690] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-01T04:37:22.694] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-01T04:37:22.696] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-01T04:37:22.698] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-01T09:49:47.089] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform
+[2025-07-01T09:49:57.922] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-07-01T09:50:10.404] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-07-01T09:50:23.843] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-07-01T09:50:33.441] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-07-01T09:50:40.161] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-07-01T09:54:19.357] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-07-01T09:54:54.877] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-07-01T09:59:05.148] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-07-01T09:59:31.530] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform
+[2025-07-01T10:06:57.427] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform
+[2025-07-01T10:07:10.225] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-07-01T10:07:16.304] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-07-01T10:07:23.344] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-07-01T10:07:42.596] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform
+[2025-07-01T21:16:21.858] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-01T21:16:21.883] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-01T21:16:21.885] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-01T21:16:21.888] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-02T03:23:36.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-02 03:23:36
+[2025-07-02T04:36:52.331] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-02T04:36:52.335] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-02T04:36:52.338] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-02T04:36:52.340] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-02T21:10:53.168] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-07-02T21:10:58.531] [INFO] monitorLogs - buildTasks - params undefined
+[2025-07-02T21:10:58.536] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-07-02T21:10:58.537] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-07-02T21:10:58.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-07-02T21:10:58.541] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-02T21:10:58.543] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-03T03:23:00.542Z
+[2025-07-02T21:10:58.544] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-02T19:28:00.544Z
+[2025-07-02T21:10:58.545] [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:10:58.546] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-07-02T21:10:58.547] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-07-02T21:10:58.547] [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:10:58.550] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-02T21:10:58.550] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-03T03:23:00.550Z
+[2025-07-02T21:10:58.551] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-02T19:28:00.551Z
+[2025-07-02T21:10:58.552] [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:10:58.553] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-07-02T21:10:58.554] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-07-02T21:10:58.554] [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:10:58.557] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-02T21:10:58.557] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-03T03:23:00.557Z
+[2025-07-02T21:10:58.558] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-02T19:28:00.558Z
+[2025-07-02T21:10:58.559] [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:10:58.560] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-07-02T21:10:58.560] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-07-02T21:10:58.561] [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:10:58.563] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-02T21:10:58.564] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-07-03T03:23:00.563Z
+[2025-07-02T21:10:58.564] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-07-02T19:28:00.564Z
+[2025-07-02T21:10:58.565] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:23', name: 'luxOff' },
+ { value: 1, start_time: '21:28', name: 'luxOn' }
+]
+[2025-07-02T21:10:58.566] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-07-02T21:10:58.593] [INFO] monitorLogs - tasks created: 1907
+[2025-07-02T21:10:58.596] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-04-24
+[2025-07-02T21:11:03.612] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-07-02T21:16:28.173] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-02T21:16:28.176] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-02T21:16:28.179] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-02T21:16:28.182] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-03T03:11:01.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-03 03:11:01
+[2025-07-03T04:36:55.874] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-03T04:36:55.877] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-03T04:36:55.879] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-03T04:36:55.881] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-03T21:02:16.885] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-03T21:02:16.892] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-03T21:02:16.894] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-03T21:02:16.896] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-04T03:11:03.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-04 03:11:03
+[2025-07-04T04:57:57.426] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-04T04:57:57.429] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-04T04:57:57.431] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-04T04:57:57.433] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-04T21:12:33.721] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-04T21:12:33.730] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-04T21:12:33.732] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-04T21:12:33.734] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-05T03:11:04.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-05 03:11:04
+[2025-07-05T04:40:15.242] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-05T04:40:15.245] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-05T04:40:15.247] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-05T04:40:15.249] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-05T21:09:18.083] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-05T21:09:18.094] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-05T21:09:18.096] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-05T21:09:18.098] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-06T03:11:06.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-06 03:11:06
+[2025-07-06T04:41:46.867] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-06T04:41:46.870] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-06T04:41:46.872] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-06T04:41:46.874] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-06T20:31:39.720] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-06T20:31:39.727] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-06T20:31:39.729] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-06T20:31:39.730] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-07T03:11:07.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-07 03:11:07
+[2025-07-07T04:54:31.065] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-07T04:54:31.067] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-07T04:54:31.069] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-07T04:54:31.071] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-07T13:19:30.252] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-07-07T13:19:35.615] [INFO] monitorLogs - buildTasks - params undefined
+[2025-07-07T13:19:35.620] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-07-07T13:19:35.621] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-07-07T13:19:35.621] [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:19:35.626] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:19:35.627] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-08T03:27:00.626Z
+[2025-07-07T13:19:35.628] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-07T19:26:00.628Z
+[2025-07-07T13:19:35.629] [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:19:35.630] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-07-07T13:19:35.631] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-07-07T13:19:35.631] [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:19:35.634] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:19:35.635] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-08T03:27:00.634Z
+[2025-07-07T13:19:35.635] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-07T19:26:00.635Z
+[2025-07-07T13:19:35.636] [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:19:35.637] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-07-07T13:19:35.638] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-07-07T13:19:35.638] [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:19:35.641] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:19:35.642] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-08T03:27:00.642Z
+[2025-07-07T13:19:35.643] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-07T19:26:00.643Z
+[2025-07-07T13:19:35.644] [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:19:35.645] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-07-07T13:19:35.645] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-07-07T13:19:35.646] [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:19:35.648] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:19:35.649] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-07-08T03:27:00.649Z
+[2025-07-07T13:19:35.650] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-07-07T19:26:00.649Z
+[2025-07-07T13:19:35.650] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:27', name: 'luxOff' },
+ { value: 1, start_time: '21:26', name: 'luxOn' }
+]
+[2025-07-07T13:19:35.651] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-07-07T13:19:35.679] [INFO] monitorLogs - tasks created: 1907
+[2025-07-07T13:19:35.682] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-07-08
+[2025-07-07T13:19:40.696] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-07-07T13:41:32.130] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-07-07T13:41:37.485] [INFO] monitorLogs - buildTasks - params undefined
+[2025-07-07T13:41:37.490] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-07-07T13:41:37.491] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-07-07T13:41:37.492] [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:41:37.496] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:41:37.497] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-08T03:27:00.496Z
+[2025-07-07T13:41:37.499] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-07T19:26:00.498Z
+[2025-07-07T13:41:37.499] [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:41:37.501] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-07-07T13:41:37.501] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-07-07T13:41:37.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-07-07T13:41:37.504] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:41:37.505] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-08T03:27:00.505Z
+[2025-07-07T13:41:37.506] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-07T19:26:00.506Z
+[2025-07-07T13:41:37.506] [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:41:37.507] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-07-07T13:41:37.508] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-07-07T13:41:37.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-07-07T13:41:37.511] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:41:37.512] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-08T03:27:00.511Z
+[2025-07-07T13:41:37.512] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-07T19:26:00.512Z
+[2025-07-07T13:41:37.513] [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:41:37.514] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-07-07T13:41:37.515] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-07-07T13:41:37.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-07-07T13:41:37.517] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-07T13:41:37.518] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-07-08T03:27:00.518Z
+[2025-07-07T13:41:37.519] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-07-07T19:26:00.519Z
+[2025-07-07T13:41:37.519] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:27', name: 'luxOff' },
+ { value: 1, start_time: '21:26', name: 'luxOn' }
+]
+[2025-07-07T13:41:37.520] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-07-07T13:41:37.548] [INFO] monitorLogs - tasks created: 1907
+[2025-07-07T13:41:37.551] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-07-08
+[2025-07-07T13:41:42.568] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-07-07T21:09:53.527] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-07T21:09:53.540] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-07T21:09:53.543] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-07T21:09:53.546] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-08T03:41:40.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-08 03:41:40
+[2025-07-08T04:59:11.432] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-08T04:59:11.434] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-08T04:59:11.436] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-08T04:59:11.438] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-08T20:45:49.844] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-08T20:45:49.866] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-08T20:45:49.869] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-08T20:45:49.871] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-09T03:41:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-09 03:41:42
+[2025-07-09T05:10:10.781] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-09T05:10:10.784] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-09T05:10:10.786] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-09T05:10:10.788] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-09T21:07:37.616] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-09T21:07:37.623] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-09T21:07:37.625] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-09T21:07:37.627] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-10T02:24:03.632] [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:41:43.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-10 03:41:43
+[2025-07-10T04:47:34.143] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-10T04:47:34.146] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-10T04:47:34.148] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-10T04:47:34.150] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-10T07:31:36.163] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform
+[2025-07-10T21:03:15.594] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-10T21:03:15.614] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-10T21:03:15.617] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-10T21:03:15.619] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-11T03:41:45.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-11 03:41:45
+[2025-07-11T04:49:14.792] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-11T04:49:14.795] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-11T04:49:14.797] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-11T04:49:14.799] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-11T21:06:47.691] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-11T21:06:47.699] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-11T21:06:47.702] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-11T21:06:47.704] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-12T03:41:46.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-12 03:41:46
+[2025-07-12T04:49:40.132] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-12T04:49:40.146] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-12T04:49:40.148] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-12T04:49:40.151] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-12T21:03:58.292] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-12T21:03:58.302] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-12T21:03:58.304] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-12T21:03:58.307] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-13T03:41:48.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-13 03:41:48
+[2025-07-13T04:51:36.578] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-13T04:51:36.581] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-13T04:51:36.584] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-13T04:51:36.586] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-13T21:05:25.619] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-13T21:05:25.638] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-13T21:05:25.640] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-13T21:05:25.642] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-14T03:41:49.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-14 03:41:49
+[2025-07-14T04:50:12.337] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-14T04:50:12.341] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-14T04:50:12.343] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-14T04:50:12.345] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-14T21:04:55.820] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-14T21:04:55.828] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-14T21:04:55.830] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-14T21:04:55.832] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-15T03:41:51.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-15 03:41:51
+[2025-07-15T04:52:11.673] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-15T04:52:11.676] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-15T04:52:11.679] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-15T04:52:11.682] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-15T20:55:51.722] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-15T20:55:51.742] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-15T20:55:51.745] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-15T20:55:51.747] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-16T03:41:52.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-16 03:41:52
+[2025-07-16T04:51:36.791] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-16T04:51:36.793] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-16T04:51:36.795] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-16T04:51:36.798] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-16T20:46:47.159] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-16T20:46:47.168] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-16T20:46:47.170] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-16T20:46:47.172] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-17T03:41:54.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-17 03:41:54
+[2025-07-17T04:57:23.619] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-17T04:57:23.623] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-17T04:57:23.625] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-17T04:57:23.627] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-17T20:56:39.553] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-17T20:56:39.572] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-17T20:56:39.574] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-17T20:56:39.576] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-18T03:41:55.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-18 03:41:55
+[2025-07-18T05:19:09.232] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-18T05:19:09.235] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-18T05:19:09.237] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-18T05:19:09.239] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-18T21:02:38.717] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-18T21:02:38.730] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-18T21:02:38.732] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-18T21:02:38.734] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-19T03:41:57.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-19 03:41:57
+[2025-07-19T05:00:19.288] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-19T05:00:19.291] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-19T05:00:19.293] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-19T05:00:19.296] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-19T21:01:26.207] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-19T21:01:26.215] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-19T21:01:26.217] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-19T21:01:26.219] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-20T03:41:58.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-20 03:41:58
+[2025-07-20T04:57:19.531] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-20T04:57:19.534] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-20T04:57:19.536] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-20T04:57:19.538] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-20T20:57:14.985] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-20T20:57:14.995] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-20T20:57:14.997] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-20T20:57:14.999] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-21T03:42:00.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-21 03:42:00
+[2025-07-21T04:55:57.655] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-21T04:55:57.657] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-21T04:55:57.659] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-21T04:55:57.661] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-21T19:20:06.137] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-07-21T19:20:11.488] [INFO] monitorLogs - buildTasks - params undefined
+[2025-07-21T19:20:11.492] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-07-21T19:20:11.493] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-07-21T19:20:11.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-21T19:20:11.498] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-21T19:20:11.500] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-07-22T03:41:00.499Z
+[2025-07-21T19:20:11.501] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-07-21T19:14:00.501Z
+[2025-07-21T19:20:11.502] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '5:41', name: 'luxOff' },
+ { value: 1, start_time: '21:14', name: 'luxOn' }
+]
+[2025-07-21T19:20:11.503] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-07-21T19:20:11.504] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-07-21T19:20:11.504] [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-21T19:20:11.507] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-21T19:20:11.507] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-07-22T03:41:00.507Z
+[2025-07-21T19:20:11.508] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-07-21T19:14:00.508Z
+[2025-07-21T19:20:11.509] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '5:41', name: 'luxOff' },
+ { value: 1, start_time: '21:14', name: 'luxOn' }
+]
+[2025-07-21T19:20:11.510] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-07-21T19:20:11.511] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-07-21T19:20:11.511] [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-21T19:20:11.514] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-21T19:20:11.514] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-07-22T03:41:00.514Z
+[2025-07-21T19:20:11.515] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-07-21T19:14:00.515Z
+[2025-07-21T19:20:11.516] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '5:41', name: 'luxOff' },
+ { value: 1, start_time: '21:14', name: 'luxOn' }
+]
+[2025-07-21T19:20:11.517] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-07-21T19:20:11.517] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-07-21T19:20:11.518] [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-21T19:20:11.520] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-07-21T19:20:11.521] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-07-22T03:41:00.521Z
+[2025-07-21T19:20:11.521] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-07-21T19:14:00.521Z
+[2025-07-21T19:20:11.522] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '5:41', name: 'luxOff' },
+ { value: 1, start_time: '21:14', name: 'luxOn' }
+]
+[2025-07-21T19:20:11.523] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-07-21T19:20:11.549] [INFO] monitorLogs - tasks created: 1907
+[2025-07-21T19:20:11.552] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-07-08
+[2025-07-21T19:20:16.568] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-07-21T20:30:49.706] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-21T20:30:49.709] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-21T20:30:49.711] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-21T20:30:49.714] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-22T03:20:14.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-22 03:20:14
+[2025-07-22T04:59:17.900] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-22T04:59:17.903] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-22T04:59:17.905] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-22T04:59:17.907] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-22T20:58:22.363] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-22T20:58:22.376] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-22T20:58:22.378] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-22T20:58:22.380] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-23T03:20:16.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-23 03:20:16
+[2025-07-23T04:58:05.146] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-23T04:58:05.149] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-23T04:58:05.151] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-23T04:58:05.154] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-23T20:55:38.508] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-23T20:55:38.516] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-23T20:55:38.518] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-23T20:55:38.520] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-24T03:20:17.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-24 03:20:17
+[2025-07-24T05:03:20.547] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-24T05:03:20.549] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-24T05:03:20.552] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-24T05:03:20.554] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-24T20:42:38.502] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-24T20:42:38.513] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-24T20:42:38.515] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-24T20:42:38.517] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-25T03:20:19.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-25 03:20:19
+[2025-07-25T05:05:52.190] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-25T05:05:52.193] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-25T05:05:52.195] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-25T05:05:52.198] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-25T20:42:48.653] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-25T20:42:48.659] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-25T20:42:48.661] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-25T20:42:48.664] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-26T03:20:20.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-26 03:20:20
+[2025-07-26T05:05:28.786] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-26T05:05:28.788] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-26T05:05:28.790] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-26T05:05:28.792] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-26T20:46:46.825] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-26T20:46:46.854] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-26T20:46:46.857] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-26T20:46:46.861] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-27T03:20:22.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-27 03:20:22
+[2025-07-27T05:09:48.957] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-27T05:09:48.960] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-27T05:09:48.963] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-27T05:09:48.966] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-27T20:31:47.089] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-27T20:31:47.096] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-27T20:31:47.098] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-27T20:31:47.100] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-28T03:20:23.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-28 03:20:23
+[2025-07-28T05:10:46.380] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-28T05:10:46.383] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-28T05:10:46.385] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-28T05:10:46.387] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-28T20:40:41.246] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-28T20:40:41.265] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-28T20:40:41.267] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-28T20:40:41.269] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-29T03:20:25.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-29 03:20:25
+[2025-07-29T05:10:02.900] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-29T05:10:02.903] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-29T05:10:02.905] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-29T05:10:02.907] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-29T12:19:38.732] [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:46:38.810] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-29T20:46:38.818] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-29T20:46:38.820] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-29T20:46:38.822] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-30T03:20:26.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-30 03:20:26
+[2025-07-30T05:09:13.228] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-30T05:09:13.231] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-30T05:09:13.233] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-30T05:09:13.236] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-30T20:41:12.901] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-30T20:41:12.912] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-30T20:41:12.914] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-30T20:41:12.916] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-31T03:20:28.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-07-31 03:20:28
+[2025-07-31T05:09:20.577] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-31T05:09:20.580] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-31T05:09:20.582] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-31T05:09:20.583] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-07-31T20:43:39.852] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-31T20:43:39.859] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-31T20:43:39.861] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-07-31T20:43:39.863] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-01T03:20:29.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-01 03:20:29
+[2025-08-01T05:12:11.935] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-01T05:12:11.937] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-01T05:12:11.939] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-01T05:12:11.941] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-01T20:24:34.963] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-01T20:24:34.970] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-01T20:24:34.978] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-01T20:24:34.980] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-02T03:20:31.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-02 03:20:31
+[2025-08-02T05:14:29.629] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-02T05:14:29.632] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-02T05:14:29.634] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-02T05:14:29.636] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-02T20:34:51.510] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-02T20:34:51.521] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-02T20:34:51.523] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-02T20:34:51.525] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-03T03:20:32.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-03 03:20:32
+[2025-08-03T05:24:43.192] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-03T05:24:43.195] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-03T05:24:43.197] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-03T05:24:43.199] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-03T20:37:36.203] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-03T20:37:36.210] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-03T20:37:36.213] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-03T20:37:36.215] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-04T03:20:34.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-04 03:20:34
+[2025-08-04T05:16:54.078] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-04T05:16:54.082] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-04T05:16:54.084] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-04T05:16:54.085] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-04T20:39:42.525] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-04T20:39:42.537] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-04T20:39:42.540] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-04T20:39:42.542] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-05T03:20:35.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-05 03:20:35
+[2025-08-05T05:21:26.363] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-05T05:21:26.365] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-05T05:21:26.367] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-05T05:21:26.369] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-05T16:10:43.146] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-08-05T16:10:48.521] [INFO] monitorLogs - buildTasks - params undefined
+[2025-08-05T16:10:48.525] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-08-05T16:10:48.526] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-08-05T16:10:48.527] [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:10:48.531] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-05T16:10:48.533] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-06T04:01:00.532Z
+[2025-08-05T16:10:48.534] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-05T18:55:00.534Z
+[2025-08-05T16:10:48.535] [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:10:48.536] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-08-05T16:10:48.537] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-08-05T16:10:48.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-08-05T16:10:48.540] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-05T16:10:48.540] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-06T04:01:00.540Z
+[2025-08-05T16:10:48.541] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-05T18:55:00.541Z
+[2025-08-05T16:10:48.542] [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:10:48.543] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-08-05T16:10:48.544] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-08-05T16:10:48.544] [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:10:48.546] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-05T16:10:48.547] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-06T04:01:00.547Z
+[2025-08-05T16:10:48.548] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-05T18:55:00.548Z
+[2025-08-05T16:10:48.549] [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:10:48.549] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-08-05T16:10:48.550] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-08-05T16:10:48.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-08-05T16:10:48.553] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-05T16:10:48.553] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-08-06T04:01:00.553Z
+[2025-08-05T16:10:48.554] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-08-05T18:55:00.554Z
+[2025-08-05T16:10:48.555] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:1', name: 'luxOff' },
+ { value: 1, start_time: '20:55', name: 'luxOn' }
+]
+[2025-08-05T16:10:48.556] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-08-05T16:10:48.583] [INFO] monitorLogs - tasks created: 1907
+[2025-08-05T16:10:48.585] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-07-08
+[2025-08-05T16:10:53.602] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-08-05T20:34:40.048] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-05T20:34:40.056] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-05T20:34:40.059] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-05T20:34:40.062] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-06T03:10:51.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-06 03:10:51
+[2025-08-06T05:19:56.668] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-06T05:19:56.672] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-06T05:19:56.674] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-06T05:19:56.676] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-06T13:37:29.136] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-08-06T13:37:34.495] [INFO] monitorLogs - buildTasks - params undefined
+[2025-08-06T13:37:34.499] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-08-06T13:37:34.500] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-08-06T13:37:34.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-08-06T13:37:34.505] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-06T13:37:34.506] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-07T04:02:00.505Z
+[2025-08-06T13:37:34.508] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-06T18:53:00.507Z
+[2025-08-06T13:37:34.508] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '6:2', name: 'luxOff' },
+ { value: 1, start_time: '20:53', name: 'luxOn' }
+]
+[2025-08-06T13:37:34.510] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-08-06T13:37:34.510] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-08-06T13:37:34.511] [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-06T13:37:34.514] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-06T13:37:34.515] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-07T04:02:00.515Z
+[2025-08-06T13:37:34.516] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-06T18:53:00.516Z
+[2025-08-06T13:37:34.516] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '6:2', name: 'luxOff' },
+ { value: 1, start_time: '20:53', name: 'luxOn' }
+]
+[2025-08-06T13:37:34.517] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-08-06T13:37:34.518] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-08-06T13:37:34.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-08-06T13:37:34.521] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-06T13:37:34.522] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-07T04:02:00.521Z
+[2025-08-06T13:37:34.522] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-06T18:53:00.522Z
+[2025-08-06T13:37:34.523] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '6:2', name: 'luxOff' },
+ { value: 1, start_time: '20:53', name: 'luxOn' }
+]
+[2025-08-06T13:37:34.524] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-08-06T13:37:34.525] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-08-06T13:37:34.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-08-06T13:37:34.527] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-06T13:37:34.528] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-08-07T04:02:00.528Z
+[2025-08-06T13:37:34.529] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-08-06T18:53:00.529Z
+[2025-08-06T13:37:34.529] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:2', name: 'luxOff' },
+ { value: 1, start_time: '20:53', name: 'luxOn' }
+]
+[2025-08-06T13:37:34.530] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-08-06T13:37:34.557] [INFO] monitorLogs - tasks created: 1907
+[2025-08-06T13:37:34.560] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-08-06T13:37:39.576] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-08-06T20:32:52.553] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-06T20:32:52.562] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-06T20:32:52.565] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-06T20:32:52.567] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-07T03:37:37.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-07 03:37:37
+[2025-08-07T05:22:10.903] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-07T05:22:10.906] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-07T05:22:10.908] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-07T05:22:10.911] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-07T20:33:55.706] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-07T20:33:55.713] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-07T20:33:55.716] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-07T20:33:55.718] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-08T03:37:38.022] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-08 03:37:38
+[2025-08-08T05:20:24.278] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-08T05:20:24.281] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-08T05:20:24.283] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-08T05:20:24.286] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-08T20:32:16.776] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-08T20:32:16.784] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-08T20:32:16.786] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-08T20:32:16.788] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-09T03:37:40.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-09 03:37:40
+[2025-08-09T05:23:40.239] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-09T05:23:40.241] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-09T05:23:40.244] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-09T05:23:40.246] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-09T20:33:32.701] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-09T20:33:32.708] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-09T20:33:32.711] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-09T20:33:32.713] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-10T03:37:41.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-10 03:37:41
+[2025-08-10T05:23:59.603] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-10T05:23:59.605] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-10T05:23:59.607] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-10T05:23:59.610] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-10T20:29:32.935] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-10T20:29:32.943] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-10T20:29:32.946] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-10T20:29:32.948] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-11T03:37:43.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-11 03:37:43
+[2025-08-11T05:26:06.352] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-11T05:26:06.355] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-11T05:26:06.357] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-11T05:26:06.359] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-11T20:30:10.287] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-11T20:30:10.295] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-11T20:30:10.297] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-11T20:30:10.299] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-12T03:37:45.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-12 03:37:45
+[2025-08-12T05:25:57.159] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-12T05:25:57.162] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-12T05:25:57.164] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-12T05:25:57.166] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-12T20:25:55.637] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-12T20:25:55.647] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-12T20:25:55.649] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-12T20:25:55.651] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-13T03:37:46.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-13 03:37:46
+[2025-08-13T05:26:53.557] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-13T05:26:53.560] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-13T05:26:53.562] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-13T05:26:53.564] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-13T20:22:32.750] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-13T20:22:32.757] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-13T20:22:32.760] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-13T20:22:32.762] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-14T03:37:48.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-14 03:37:48
+[2025-08-14T05:30:13.707] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-14T05:30:13.711] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-14T05:30:13.713] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-14T05:30:13.715] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-14T20:21:31.085] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-14T20:21:31.093] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-14T20:21:31.095] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-14T20:21:31.097] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-15T03:37:50.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-15 03:37:50
+[2025-08-15T05:31:00.405] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-15T05:31:00.407] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-15T05:31:00.410] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-15T05:31:00.412] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-15T20:19:29.604] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-15T20:19:29.612] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-15T20:19:29.614] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-15T20:19:29.616] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-16T03:37:51.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-16 03:37:51
+[2025-08-16T05:33:29.448] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-16T05:33:29.450] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-16T05:33:29.453] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-16T05:33:29.455] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-16T20:15:56.915] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-16T20:15:56.922] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-16T20:15:56.925] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-16T20:15:56.927] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-17T03:37:53.007] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-17 03:37:53
+[2025-08-17T05:36:07.053] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-17T05:36:07.056] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-17T05:36:07.058] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-17T05:36:07.060] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-17T20:15:20.427] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-17T20:15:20.435] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-17T20:15:20.437] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-17T20:15:20.439] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-18T03:37:55.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-18 03:37:55
+[2025-08-18T05:36:42.153] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-18T05:36:42.156] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-18T05:36:42.158] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-18T05:36:42.160] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-18T20:17:32.220] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-18T20:17:32.228] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-18T20:17:32.230] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-18T20:17:32.233] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-19T03:37:56.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-19 03:37:56
+[2025-08-19T05:36:03.001] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-19T05:36:03.004] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-19T05:36:03.006] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-19T05:36:03.008] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-19T20:13:57.410] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-19T20:13:57.416] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-19T20:13:57.418] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-19T20:13:57.420] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-20T03:37:58.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-20 03:37:58
+[2025-08-20T05:37:22.885] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-20T05:37:22.888] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-20T05:37:22.891] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-20T05:37:22.893] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-20T08:56:13.214] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-08-20T08:56:18.571] [INFO] monitorLogs - buildTasks - params undefined
+[2025-08-20T08:56:18.576] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-08-20T08:56:18.578] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-08-20T08:56:18.578] [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-20T08:56:18.583] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T08:56:18.584] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-21T04:22:00.583Z
+[2025-08-20T08:56:18.586] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-20T18:29:00.586Z
+[2025-08-20T08:56:18.587] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T08:56:18.588] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-08-20T08:56:18.589] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-08-20T08:56:18.589] [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-20T08:56:18.592] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T08:56:18.593] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-21T04:22:00.593Z
+[2025-08-20T08:56:18.594] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-20T18:29:00.594Z
+[2025-08-20T08:56:18.595] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T08:56:18.596] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-08-20T08:56:18.597] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-08-20T08:56:18.597] [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-20T08:56:18.600] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T08:56:18.601] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-21T04:22:00.600Z
+[2025-08-20T08:56:18.601] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-20T18:29:00.601Z
+[2025-08-20T08:56:18.602] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T08:56:18.603] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-08-20T08:56:18.604] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-08-20T08:56:18.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-08-20T08:56:18.607] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T08:56:18.608] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-08-21T04:22:00.608Z
+[2025-08-20T08:56:18.609] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-08-20T18:29:00.609Z
+[2025-08-20T08:56:18.610] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T08:56:18.611] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-08-20T08:56:18.632] [INFO] monitorLogs - tasks created: 1907
+[2025-08-20T08:56:18.637] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-08-20T08:56:23.650] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-08-20T11:52:17.901] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-08-20T11:52:26.527] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-08-20T11:52:32.286] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-08-20T11:52:37.725] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false command received from platform
+[2025-08-20T11:59:40.117] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-08-20T11:59:45.482] [INFO] monitorLogs - buildTasks - params undefined
+[2025-08-20T11:59:45.487] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-08-20T11:59:45.488] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-08-20T11:59:45.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-08-20T11:59:45.493] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T11:59:45.494] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-21T04:22:00.493Z
+[2025-08-20T11:59:45.495] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-20T18:29:00.495Z
+[2025-08-20T11:59:45.496] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T11:59:45.497] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-08-20T11:59:45.498] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-08-20T11:59:45.499] [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-20T11:59:45.501] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T11:59:45.502] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-21T04:22:00.501Z
+[2025-08-20T11:59:45.502] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-20T18:29:00.502Z
+[2025-08-20T11:59:45.503] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T11:59:45.504] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-08-20T11:59:45.505] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-08-20T11:59:45.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-08-20T11:59:45.508] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T11:59:45.508] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-21T04:22:00.508Z
+[2025-08-20T11:59:45.509] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-20T18:29:00.509Z
+[2025-08-20T11:59:45.510] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T11:59:45.511] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-08-20T11:59:45.511] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-08-20T11:59:45.512] [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-20T11:59:45.514] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-20T11:59:45.515] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-08-21T04:22:00.515Z
+[2025-08-20T11:59:45.515] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-08-20T18:29:00.515Z
+[2025-08-20T11:59:45.516] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:22', name: 'luxOff' },
+ { value: 1, start_time: '20:29', name: 'luxOn' }
+]
+[2025-08-20T11:59:45.517] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-08-20T11:59:45.544] [INFO] monitorLogs - tasks created: 1907
+[2025-08-20T11:59:45.546] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-08-20T11:59:50.563] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-08-20T11:59:50.868] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false aplikovany bod profilu
+[2025-08-20T11:59:51.173] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false aplikovany bod profilu
+[2025-08-20T11:59:51.478] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false aplikovany bod profilu
+[2025-08-20T20:09:56.424] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-20T20:09:56.433] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-20T20:09:56.435] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-20T20:09:56.438] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-21T03:59:47.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-21 03:59:47
+[2025-08-21T05:42:00.604] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-21T05:42:00.607] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-21T05:42:00.609] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-21T05:42:00.611] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-21T15:54:25.171] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-08-21T15:54:30.529] [INFO] monitorLogs - buildTasks - params undefined
+[2025-08-21T15:54:30.534] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-08-21T15:54:30.535] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-08-21T15:54:30.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-08-21T15:54:30.540] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-21T15:54:30.541] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-08-22T04:23:00.540Z
+[2025-08-21T15:54:30.542] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-08-21T18:27:00.542Z
+[2025-08-21T15:54:30.543] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '6:23', name: 'luxOff' },
+ { value: 1, start_time: '20:27', name: 'luxOn' }
+]
+[2025-08-21T15:54:30.544] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-08-21T15:54:30.545] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-08-21T15:54:30.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-08-21T15:54:30.548] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-21T15:54:30.549] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-08-22T04:23:00.549Z
+[2025-08-21T15:54:30.550] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-08-21T18:27:00.550Z
+[2025-08-21T15:54:30.550] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '6:23', name: 'luxOff' },
+ { value: 1, start_time: '20:27', name: 'luxOn' }
+]
+[2025-08-21T15:54:30.551] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-08-21T15:54:30.552] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-08-21T15:54:30.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-08-21T15:54:30.555] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-21T15:54:30.555] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-08-22T04:23:00.555Z
+[2025-08-21T15:54:30.556] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-08-21T18:27:00.556Z
+[2025-08-21T15:54:30.557] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '6:23', name: 'luxOff' },
+ { value: 1, start_time: '20:27', name: 'luxOn' }
+]
+[2025-08-21T15:54:30.558] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-08-21T15:54:30.559] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-08-21T15:54:30.559] [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-21T15:54:30.561] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-08-21T15:54:30.562] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-08-22T04:23:00.562Z
+[2025-08-21T15:54:30.563] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-08-21T18:27:00.563Z
+[2025-08-21T15:54:30.563] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:23', name: 'luxOff' },
+ { value: 1, start_time: '20:27', name: 'luxOn' }
+]
+[2025-08-21T15:54:30.564] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-08-21T15:54:30.591] [INFO] monitorLogs - tasks created: 1907
+[2025-08-21T15:54:30.595] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-08-21T15:54:35.611] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-08-21T19:51:21.806] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-21T19:51:21.814] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-21T19:51:21.817] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-21T19:51:21.820] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-22T03:54:34.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-22 03:54:34
+[2025-08-22T05:47:20.337] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-22T05:47:20.340] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-22T05:47:20.342] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-22T05:47:20.344] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-22T20:06:10.633] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-22T20:06:10.649] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-22T20:06:10.651] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-22T20:06:10.653] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-23T03:54:35.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-23 03:54:35
+[2025-08-23T05:46:08.500] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-23T05:46:08.504] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-23T05:46:08.507] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-23T05:46:08.509] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-23T20:02:50.820] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-23T20:02:50.828] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-23T20:02:50.831] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-23T20:02:50.833] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-24T03:54:37.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-24 03:54:37
+[2025-08-24T05:45:47.112] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-24T05:45:47.116] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-24T05:45:47.119] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-24T05:45:47.121] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-24T20:04:05.986] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-24T20:04:06.004] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-24T20:04:06.007] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-24T20:04:06.009] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-25T03:54:38.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-25 03:54:38
+[2025-08-25T05:48:01.629] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-25T05:48:01.638] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-25T05:48:01.640] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-25T05:48:01.642] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-25T19:59:03.004] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-25T19:59:03.025] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-25T19:59:03.028] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-25T19:59:03.030] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-26T03:54:39.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-26 03:54:39
+[2025-08-26T05:47:36.982] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-26T05:47:36.986] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-26T05:47:36.988] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-26T05:47:36.990] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-26T19:57:47.841] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-26T19:57:47.856] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-26T19:57:47.859] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-26T19:57:47.861] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-27T03:54:41.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-27 03:54:41
+[2025-08-27T05:50:17.368] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-27T05:50:17.372] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-27T05:50:17.374] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-27T05:50:17.376] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-27T19:56:25.065] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-27T19:56:25.083] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-27T19:56:25.085] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-27T19:56:25.087] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-28T03:54:42.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-28 03:54:42
+[2025-08-28T05:48:55.811] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-28T05:48:55.815] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-28T05:48:55.817] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-28T05:48:55.819] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-28T19:52:59.922] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-28T19:52:59.933] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-28T19:52:59.935] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-28T19:52:59.938] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-29T03:54:44.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-29 03:54:44
+[2025-08-29T05:53:39.380] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-29T05:53:39.384] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-29T05:53:39.386] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-29T05:53:39.388] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-29T19:41:17.571] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-29T19:41:17.577] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-29T19:41:17.579] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-29T19:41:17.581] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-30T03:54:46.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-30 03:54:46
+[2025-08-30T05:54:41.370] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-30T05:54:41.373] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-30T05:54:41.375] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-30T05:54:41.377] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-30T19:32:21.311] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-30T19:32:21.318] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-30T19:32:21.320] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-30T19:32:21.322] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-31T03:54:47.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-08-31 03:54:47
+[2025-08-31T06:12:05.542] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-31T06:12:05.545] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-31T06:12:05.547] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-31T06:12:05.550] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-08-31T19:51:04.699] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-31T19:51:04.716] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-31T19:51:04.718] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-08-31T19:51:04.720] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-01T03:54:49.014] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-01 03:54:49
+[2025-09-01T05:59:15.074] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-01T05:59:15.077] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-01T05:59:15.080] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-01T05:59:15.081] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-01T19:46:55.681] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-01T19:46:55.695] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-01T19:46:55.697] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-01T19:46:55.699] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-02T03:54:50.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-02 03:54:50
+[2025-09-02T05:56:05.501] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-02T05:56:05.504] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-02T05:56:05.507] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-02T05:56:05.509] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-02T19:36:40.175] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-02T19:36:40.192] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-02T19:36:40.194] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-02T19:36:40.196] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-03T03:54:52.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-03 03:54:52
+[2025-09-03T06:04:06.594] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-03T06:04:06.598] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-03T06:04:06.600] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-03T06:04:06.602] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-03T19:42:13.923] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-03T19:42:13.936] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-03T19:42:13.938] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-03T19:42:13.941] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-04T03:54:53.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-04 03:54:53
+[2025-09-04T06:01:38.869] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-04T06:01:38.878] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-04T06:01:38.880] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-04T06:01:38.882] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-04T19:40:21.014] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-04T19:40:21.029] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-04T19:40:21.031] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-04T19:40:21.033] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-05T03:54:55.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-05 03:54:55
+[2025-09-05T06:01:59.134] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-05T06:01:59.143] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-05T06:01:59.145] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-05T06:01:59.147] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-05T19:37:16.465] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-05T19:37:16.472] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-05T19:37:16.474] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-05T19:37:16.476] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-06T03:54:57.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-06 03:54:57
+[2025-09-06T06:16:23.728] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-06T06:16:23.735] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-06T06:16:23.738] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-06T06:16:23.740] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-06T18:06:42.142] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-06T18:06:47.511] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-06T18:06:47.516] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-06T18:06:47.517] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-06T18:06:47.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-06T18:06:47.521] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-06T18:06:47.523] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-07T04:46:00.522Z
+[2025-09-06T18:06:47.524] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-06T17:55:00.524Z
+[2025-09-06T18:06:47.525] [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:47.526] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-06T18:06:47.527] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-06T18:06:47.527] [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:47.530] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-06T18:06:47.531] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-07T04:46:00.530Z
+[2025-09-06T18:06:47.531] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-06T17:55:00.531Z
+[2025-09-06T18:06:47.532] [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:47.534] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-06T18:06:47.535] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-06T18:06:47.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-06T18:06:47.538] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-06T18:06:47.538] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-07T04:46:00.538Z
+[2025-09-06T18:06:47.539] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-06T17:55:00.539Z
+[2025-09-06T18:06:47.540] [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:47.541] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-06T18:06:47.541] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-06T18:06:47.542] [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:47.544] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-06T18:06:47.545] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-07T04:46:00.545Z
+[2025-09-06T18:06:47.546] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-06T17:55:00.545Z
+[2025-09-06T18:06:47.546] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:46', name: 'luxOff' },
+ { value: 1, start_time: '19:55', name: 'luxOn' }
+]
+[2025-09-06T18:06:47.547] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-06T18:06:47.550] [INFO] monitorLogs - tasks created: 287
+[2025-09-06T18:06:47.552] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-06T18:06:52.555] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-06T19:35:37.413] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-06T19:35:37.416] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-06T19:35:37.419] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-06T19:35:37.421] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-07T03:06:49.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-07 03:06:49
+[2025-09-07T06:03:44.027] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-07T06:03:44.036] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-07T06:03:44.038] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-07T06:03:44.040] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-07T19:31:47.622] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-07T19:31:47.649] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-07T19:31:47.651] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-07T19:31:47.653] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-07T23:33:43.320] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-07T23:33:48.705] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-07T23:33:48.710] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-07T23:33:48.711] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-07T23:33:48.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-07T23:33:48.717] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:33:48.719] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-08T04:47:00.718Z
+[2025-09-07T23:33:48.720] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-08T17:53:00.720Z
+[2025-09-07T23:33:48.721] [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:33:48.723] [INFO] monitorLogs - -->currentValue for relay 1 1
+[2025-09-07T23:33:48.724] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-07T23:33:48.724] [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:33:48.727] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:33:48.728] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-08T04:47:00.728Z
+[2025-09-07T23:33:48.729] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-08T17:53:00.729Z
+[2025-09-07T23:33:48.729] [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:33:48.731] [INFO] monitorLogs - -->currentValue for relay 2 1
+[2025-09-07T23:33:48.731] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-07T23:33:48.732] [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:33:48.735] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:33:48.735] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-08T04:47:00.735Z
+[2025-09-07T23:33:48.736] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-08T17:53:00.736Z
+[2025-09-07T23:33:48.737] [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:33:48.738] [INFO] monitorLogs - -->currentValue for relay 3 1
+[2025-09-07T23:33:48.739] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-07T23:33:48.740] [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:33:48.742] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:33:48.743] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-08T04:47:00.742Z
+[2025-09-07T23:33:48.744] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-08T17:53:00.744Z
+[2025-09-07T23:33:48.744] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:47', name: 'luxOff' },
+ { value: 1, start_time: '19:53', name: 'luxOn' }
+]
+[2025-09-07T23:33:48.746] [INFO] monitorLogs - -->currentValue for relay 4 1
+[2025-09-07T23:33:48.749] [INFO] monitorLogs - tasks created: 287
+[2025-09-07T23:33:48.752] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-07T23:33:53.755] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-07T23:35:33.911] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-07T23:35:39.309] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-07T23:35:39.314] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-07T23:35:39.315] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-07T23:35:39.316] [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:35:39.321] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:35:39.322] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-08T04:47:00.321Z
+[2025-09-07T23:35:39.324] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-08T17:53:00.323Z
+[2025-09-07T23:35:39.325] [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:35:39.326] [INFO] monitorLogs - -->currentValue for relay 1 1
+[2025-09-07T23:35:39.327] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-07T23:35:39.327] [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:35:39.330] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:35:39.331] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-08T04:47:00.331Z
+[2025-09-07T23:35:39.332] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-08T17:53:00.332Z
+[2025-09-07T23:35:39.333] [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:35:39.334] [INFO] monitorLogs - -->currentValue for relay 2 1
+[2025-09-07T23:35:39.335] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-07T23:35:39.335] [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:35:39.338] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:35:39.339] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-08T04:47:00.339Z
+[2025-09-07T23:35:39.340] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-08T17:53:00.339Z
+[2025-09-07T23:35:39.340] [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:35:39.341] [INFO] monitorLogs - -->currentValue for relay 3 1
+[2025-09-07T23:35:39.342] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-07T23:35:39.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-09-07T23:35:39.345] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-07T23:35:39.346] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-08T04:47:00.346Z
+[2025-09-07T23:35:39.347] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-08T17:53:00.347Z
+[2025-09-07T23:35:39.348] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:47', name: 'luxOff' },
+ { value: 1, start_time: '19:53', name: 'luxOn' }
+]
+[2025-09-07T23:35:39.349] [INFO] monitorLogs - -->currentValue for relay 4 1
+[2025-09-07T23:35:39.353] [INFO] monitorLogs - tasks created: 287
+[2025-09-07T23:35:39.355] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-07T23:35:44.357] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-08T03:35:41.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-08 03:35:41
+[2025-09-08T06:07:04.017] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-08T06:07:04.023] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-08T06:07:04.025] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-08T06:07:04.027] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-08T16:02:31.164] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-08T16:02:36.515] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-08T16:02:36.520] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-08T16:02:36.521] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-08T16:02:36.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-08T16:02:36.526] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-08T16:02:36.527] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-09T04:48:00.526Z
+[2025-09-08T16:02:36.529] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-08T17:51:00.528Z
+[2025-09-08T16:02:36.529] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '6:48', name: 'luxOff' },
+ { value: 1, start_time: '19:51', name: 'luxOn' }
+]
+[2025-09-08T16:02:36.530] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-08T16:02:36.531] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-08T16:02:36.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-09-08T16:02:36.534] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-08T16:02:36.535] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-09T04:48:00.535Z
+[2025-09-08T16:02:36.536] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-08T17:51:00.536Z
+[2025-09-08T16:02:36.537] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '6:48', name: 'luxOff' },
+ { value: 1, start_time: '19:51', name: 'luxOn' }
+]
+[2025-09-08T16:02:36.537] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-08T16:02:36.538] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-08T16:02:36.539] [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-08T16:02:36.541] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-08T16:02:36.542] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-09T04:48:00.541Z
+[2025-09-08T16:02:36.542] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-08T17:51:00.542Z
+[2025-09-08T16:02:36.543] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '6:48', name: 'luxOff' },
+ { value: 1, start_time: '19:51', name: 'luxOn' }
+]
+[2025-09-08T16:02:36.544] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-08T16:02:36.545] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-08T16:02:36.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-09-08T16:02:36.547] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-08T16:02:36.548] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-09T04:48:00.548Z
+[2025-09-08T16:02:36.549] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-08T17:51:00.549Z
+[2025-09-08T16:02:36.549] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:48', name: 'luxOff' },
+ { value: 1, start_time: '19:51', name: 'luxOn' }
+]
+[2025-09-08T16:02:36.550] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-08T16:02:36.576] [INFO] monitorLogs - tasks created: 1907
+[2025-09-08T16:02:36.579] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-08T16:02:41.593] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-08T19:31:14.024] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-08T19:31:14.030] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-08T19:31:14.033] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-08T19:31:14.035] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-09T03:02:39.014] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-09 03:02:39
+[2025-09-09T06:08:27.197] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-09T06:08:27.202] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-09T06:08:27.204] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-09T06:08:27.206] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-09T19:27:01.347] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-09T19:27:01.354] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-09T19:27:01.356] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-09T19:27:01.357] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-10T03:02:41.085] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-10 03:02:41
+[2025-09-10T06:10:47.329] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-10T06:10:47.335] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-10T06:10:47.337] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-10T06:10:47.339] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-10T09:15:32.994] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-10T09:15:38.358] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-10T09:15:38.362] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-10T09:15:38.363] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-10T09:15:38.364] [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:38.368] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T09:15:38.369] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-11T04:51:00.369Z
+[2025-09-10T09:15:38.371] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-10T17:46:00.371Z
+[2025-09-10T09:15:38.371] [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:38.373] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-10T09:15:38.373] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-10T09:15:38.374] [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:38.376] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T09:15:38.377] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-11T04:51:00.377Z
+[2025-09-10T09:15:38.378] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-10T17:46:00.378Z
+[2025-09-10T09:15:38.379] [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:38.380] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-10T09:15:38.380] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-10T09:15:38.381] [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:38.383] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T09:15:38.384] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-11T04:51:00.384Z
+[2025-09-10T09:15:38.384] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-10T17:46:00.384Z
+[2025-09-10T09:15:38.385] [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:38.386] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-10T09:15:38.387] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-10T09:15:38.387] [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:38.390] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T09:15:38.390] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-11T04:51:00.390Z
+[2025-09-10T09:15:38.392] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-10T17:46:00.391Z
+[2025-09-10T09:15:38.393] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:51', name: 'luxOff' },
+ { value: 1, start_time: '19:46', name: 'luxOn' }
+]
+[2025-09-10T09:15:38.394] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-10T09:15:38.421] [INFO] monitorLogs - tasks created: 1907
+[2025-09-10T09:15:38.424] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-10T09:15:43.439] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-10T11:38:11.690] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform
+[2025-09-10T11:38:19.397] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-09-10T11:44:05.272] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-09-10T11:44:12.955] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform
+[2025-09-10T16:28:09.420] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-10T16:28:14.782] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-10T16:28:14.786] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-10T16:28:14.787] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-10T16:28:14.788] [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:28:14.792] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T16:28:14.793] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-11T04:51:00.793Z
+[2025-09-10T16:28:14.795] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-10T17:46:00.795Z
+[2025-09-10T16:28:14.796] [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:28:14.797] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-10T16:28:14.798] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-10T16:28:14.798] [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:28:14.801] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T16:28:14.801] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-11T04:51:00.801Z
+[2025-09-10T16:28:14.802] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-10T17:46:00.802Z
+[2025-09-10T16:28:14.803] [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:28:14.804] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-10T16:28:14.805] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-10T16:28:14.805] [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:28:14.807] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T16:28:14.808] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-11T04:51:00.808Z
+[2025-09-10T16:28:14.809] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-10T17:46:00.809Z
+[2025-09-10T16:28:14.809] [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:28:14.810] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-10T16:28:14.811] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-10T16:28:14.812] [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:28:14.814] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-10T16:28:14.815] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-11T04:51:00.814Z
+[2025-09-10T16:28:14.815] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-10T17:46:00.815Z
+[2025-09-10T16:28:14.816] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:51', name: 'luxOff' },
+ { value: 1, start_time: '19:46', name: 'luxOn' }
+]
+[2025-09-10T16:28:14.818] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-10T16:28:14.844] [INFO] monitorLogs - tasks created: 1907
+[2025-09-10T16:28:14.847] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-10T16:28:19.863] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-10T19:15:40.269] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-10T19:15:40.276] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-10T19:15:40.278] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-10T19:15:40.280] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-11T03:28:17.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-11 03:28:17
+[2025-09-11T06:16:55.310] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-11T06:16:55.327] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-11T06:16:55.329] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-11T06:16:55.331] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-11T19:26:37.019] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-11T19:26:37.029] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-11T19:26:37.032] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-11T19:26:37.034] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-12T03:28:18.018] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-12 03:28:18
+[2025-09-12T06:12:31.567] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-12T06:12:31.573] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-12T06:12:31.575] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-12T06:12:31.577] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-12T19:13:30.563] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-12T19:13:30.577] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-12T19:13:30.579] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-12T19:13:30.588] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-13T03:28:20.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-13 03:28:20
+[2025-09-13T06:28:04.568] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-13T06:28:04.571] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-13T06:28:04.573] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-13T06:28:04.575] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-13T19:16:52.152] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-13T19:16:52.157] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-13T19:16:52.159] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-13T19:16:52.161] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-14T03:28:21.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-14 03:28:21
+[2025-09-14T06:28:09.826] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-14T06:28:09.829] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-14T06:28:09.831] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-14T06:28:09.833] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-14T19:17:47.247] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-14T19:17:47.255] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-14T19:17:47.257] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-14T19:17:47.258] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-14T22:46:14.691] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-14T22:46:20.053] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-14T22:46:20.058] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-14T22:46:20.059] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-14T22:46:20.059] [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:46:20.063] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-14T22:46:20.065] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-15T04:57:00.064Z
+[2025-09-14T22:46:20.066] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-15T17:38:00.066Z
+[2025-09-14T22:46:20.067] [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:46:20.068] [INFO] monitorLogs - -->currentValue for relay 1 1
+[2025-09-14T22:46:20.069] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-14T22:46:20.070] [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:46:20.072] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-14T22:46:20.073] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-15T04:57:00.073Z
+[2025-09-14T22:46:20.074] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-15T17:38:00.073Z
+[2025-09-14T22:46:20.074] [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:46:20.075] [INFO] monitorLogs - -->currentValue for relay 2 1
+[2025-09-14T22:46:20.076] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-14T22:46:20.077] [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:46:20.079] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-14T22:46:20.079] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-15T04:57:00.079Z
+[2025-09-14T22:46:20.080] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-15T17:38:00.080Z
+[2025-09-14T22:46:20.081] [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:46:20.082] [INFO] monitorLogs - -->currentValue for relay 3 1
+[2025-09-14T22:46:20.083] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-14T22:46:20.083] [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:46:20.085] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-14T22:46:20.086] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-15T04:57:00.086Z
+[2025-09-14T22:46:20.087] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-15T17:38:00.087Z
+[2025-09-14T22:46:20.088] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '6:57', name: 'luxOff' },
+ { value: 1, start_time: '19:38', name: 'luxOn' }
+]
+[2025-09-14T22:46:20.089] [INFO] monitorLogs - -->currentValue for relay 4 1
+[2025-09-14T22:46:20.115] [INFO] monitorLogs - tasks created: 1907
+[2025-09-14T22:46:20.117] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-14T22:46:25.130] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-15T03:46:22.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-15 03:46:22
+[2025-09-15T06:15:27.978] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-15T06:15:27.984] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-15T06:15:27.986] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-15T06:15:27.988] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-15T19:17:56.426] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-15T19:17:56.432] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-15T19:17:56.434] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-15T19:17:56.436] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-16T03:46:23.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-16 03:46:23
+[2025-09-16T06:32:33.237] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-16T06:32:33.241] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-16T06:32:33.243] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-16T06:32:33.245] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-16T19:11:59.055] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-16T19:11:59.061] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-16T19:11:59.063] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-16T19:11:59.065] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-17T03:46:25.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-17 03:46:25
+[2025-09-17T06:23:56.514] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-17T06:23:56.517] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-17T06:23:56.519] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-17T06:23:56.521] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-17T19:14:20.335] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-17T19:14:20.344] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-17T19:14:20.346] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-17T19:14:20.348] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-17T20:36:12.586] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-17T20:36:17.942] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-17T20:36:17.947] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-17T20:36:17.948] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-17T20:36:17.949] [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-17T20:36:17.953] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-17T20:36:17.954] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-18T05:01:00.953Z
+[2025-09-17T20:36:17.955] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-18T17:32:00.955Z
+[2025-09-17T20:36:17.956] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:1', name: 'luxOff' },
+ { value: 1, start_time: '19:32', name: 'luxOn' }
+]
+[2025-09-17T20:36:17.957] [INFO] monitorLogs - -->currentValue for relay 1 1
+[2025-09-17T20:36:17.958] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-17T20:36:17.959] [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-17T20:36:17.961] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-17T20:36:17.962] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-18T05:01:00.962Z
+[2025-09-17T20:36:17.963] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-18T17:32:00.962Z
+[2025-09-17T20:36:17.963] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:1', name: 'luxOff' },
+ { value: 1, start_time: '19:32', name: 'luxOn' }
+]
+[2025-09-17T20:36:17.964] [INFO] monitorLogs - -->currentValue for relay 2 1
+[2025-09-17T20:36:17.965] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-17T20:36:17.966] [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-17T20:36:17.968] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-17T20:36:17.968] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-18T05:01:00.968Z
+[2025-09-17T20:36:17.969] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-18T17:32:00.969Z
+[2025-09-17T20:36:17.970] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:1', name: 'luxOff' },
+ { value: 1, start_time: '19:32', name: 'luxOn' }
+]
+[2025-09-17T20:36:17.971] [INFO] monitorLogs - -->currentValue for relay 3 1
+[2025-09-17T20:36:17.971] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-17T20:36:17.972] [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-17T20:36:17.974] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-17T20:36:17.975] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-18T05:01:00.975Z
+[2025-09-17T20:36:17.976] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-18T17:32:00.975Z
+[2025-09-17T20:36:17.976] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:1', name: 'luxOff' },
+ { value: 1, start_time: '19:32', name: 'luxOn' }
+]
+[2025-09-17T20:36:17.977] [INFO] monitorLogs - -->currentValue for relay 4 1
+[2025-09-17T20:36:18.004] [INFO] monitorLogs - tasks created: 1907
+[2025-09-17T20:36:18.006] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-17T20:36:23.023] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-18T03:36:19.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-18 03:36:19
+[2025-09-18T06:21:46.890] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-18T06:21:46.896] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-18T06:21:46.898] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-18T06:21:46.900] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-18T19:11:07.215] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-18T19:11:07.221] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-18T19:11:07.223] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-18T19:11:07.225] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-19T03:36:21.014] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-19 03:36:21
+[2025-09-19T06:20:41.513] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-19T06:20:41.516] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-19T06:20:41.520] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-19T06:20:41.522] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-19T11:15:44.526] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-19T11:15:49.888] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-19T11:15:49.893] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-19T11:15:49.894] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-19T11:15:49.894] [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:15:49.898] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-19T11:15:49.900] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-20T05:04:00.899Z
+[2025-09-19T11:15:49.901] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-19T17:27:00.901Z
+[2025-09-19T11:15:49.902] [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:15:49.903] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-19T11:15:49.904] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-19T11:15:49.904] [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:15:49.907] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-19T11:15:49.907] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-20T05:04:00.907Z
+[2025-09-19T11:15:49.908] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-19T17:27:00.908Z
+[2025-09-19T11:15:49.909] [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:15:49.910] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-19T11:15:49.911] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-19T11:15:49.911] [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:15:49.913] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-19T11:15:49.914] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-20T05:04:00.914Z
+[2025-09-19T11:15:49.915] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-19T17:27:00.915Z
+[2025-09-19T11:15:49.915] [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:15:49.917] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-19T11:15:49.917] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-19T11:15:49.918] [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:15:49.920] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-19T11:15:49.921] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-20T05:04:00.921Z
+[2025-09-19T11:15:49.922] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-19T17:27:00.921Z
+[2025-09-19T11:15:49.922] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:4', name: 'luxOff' },
+ { value: 1, start_time: '19:27', name: 'luxOn' }
+]
+[2025-09-19T11:15:49.923] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-19T11:15:49.950] [INFO] monitorLogs - tasks created: 1907
+[2025-09-19T11:15:49.953] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-19T11:15:54.968] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-19T19:09:49.012] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-19T19:09:49.017] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-19T19:09:49.020] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-19T19:09:49.022] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-20T03:15:52.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-20 03:15:52
+[2025-09-20T06:23:31.385] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-20T06:23:31.391] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-20T06:23:31.393] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-20T06:23:31.395] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-20T19:06:57.551] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-20T19:06:57.558] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-20T19:06:57.560] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-20T19:06:57.561] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-21T01:29:20.998] [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:15:53.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-21 03:15:53
+[2025-09-21T06:24:54.476] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-21T06:24:54.482] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-21T06:24:54.484] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-21T06:24:54.486] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-21T18:08:21.046] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-21T18:08:26.395] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-21T18:08:26.400] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-21T18:08:26.401] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-21T18:08:26.402] [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-21T18:08:26.406] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-21T18:08:26.407] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-22T05:07:00.406Z
+[2025-09-21T18:08:26.409] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-21T17:23:00.408Z
+[2025-09-21T18:08:26.409] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:7', name: 'luxOff' },
+ { value: 1, start_time: '19:23', name: 'luxOn' }
+]
+[2025-09-21T18:08:26.411] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-21T18:08:26.411] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-21T18:08:26.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-09-21T18:08:26.414] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-21T18:08:26.415] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-22T05:07:00.415Z
+[2025-09-21T18:08:26.416] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-21T17:23:00.416Z
+[2025-09-21T18:08:26.417] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:7', name: 'luxOff' },
+ { value: 1, start_time: '19:23', name: 'luxOn' }
+]
+[2025-09-21T18:08:26.418] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-21T18:08:26.418] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-21T18:08:26.419] [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-21T18:08:26.421] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-21T18:08:26.422] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-22T05:07:00.422Z
+[2025-09-21T18:08:26.423] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-21T17:23:00.422Z
+[2025-09-21T18:08:26.423] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:7', name: 'luxOff' },
+ { value: 1, start_time: '19:23', name: 'luxOn' }
+]
+[2025-09-21T18:08:26.424] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-21T18:08:26.425] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-21T18:08:26.426] [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-21T18:08:26.428] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-21T18:08:26.428] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-22T05:07:00.428Z
+[2025-09-21T18:08:26.429] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-21T17:23:00.429Z
+[2025-09-21T18:08:26.430] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:7', name: 'luxOff' },
+ { value: 1, start_time: '19:23', name: 'luxOn' }
+]
+[2025-09-21T18:08:26.431] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-21T18:08:26.457] [INFO] monitorLogs - tasks created: 1907
+[2025-09-21T18:08:26.459] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-21T18:08:31.473] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-21T19:03:27.661] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-21T19:03:27.664] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-21T19:03:27.666] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-21T19:03:27.668] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-22T03:08:29.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-22 03:08:29
+[2025-09-22T06:26:22.577] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-22T06:26:22.583] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-22T06:26:22.585] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-22T06:26:22.588] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-22T18:57:43.372] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-22T18:57:43.379] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-22T18:57:43.381] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-22T18:57:43.383] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-23T03:08:30.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-23 03:08:30
+[2025-09-23T06:31:01.400] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-23T06:31:01.405] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-23T06:31:01.409] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-23T06:31:01.411] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-23T13:03:05.557] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-23T13:03:10.911] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-23T13:03:10.916] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-23T13:03:10.917] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-23T13:03:10.918] [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-23T13:03:10.922] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T13:03:10.923] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-24T05:09:00.922Z
+[2025-09-23T13:03:10.925] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-23T17:19:00.924Z
+[2025-09-23T13:03:10.925] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:9', name: 'luxOff' },
+ { value: 1, start_time: '19:19', name: 'luxOn' }
+]
+[2025-09-23T13:03:10.927] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-23T13:03:10.927] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-23T13:03:10.928] [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-23T13:03:10.930] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T13:03:10.931] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-24T05:09:00.931Z
+[2025-09-23T13:03:10.932] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-23T17:19:00.932Z
+[2025-09-23T13:03:10.933] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:9', name: 'luxOff' },
+ { value: 1, start_time: '19:19', name: 'luxOn' }
+]
+[2025-09-23T13:03:10.934] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-23T13:03:10.934] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-23T13:03:10.935] [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-23T13:03:10.937] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T13:03:10.938] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-24T05:09:00.937Z
+[2025-09-23T13:03:10.938] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-23T17:19:00.938Z
+[2025-09-23T13:03:10.939] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:9', name: 'luxOff' },
+ { value: 1, start_time: '19:19', name: 'luxOn' }
+]
+[2025-09-23T13:03:10.940] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-23T13:03:10.941] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-23T13:03:10.941] [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-23T13:03:10.943] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T13:03:10.944] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-24T05:09:00.944Z
+[2025-09-23T13:03:10.945] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-23T17:19:00.945Z
+[2025-09-23T13:03:10.945] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:9', name: 'luxOff' },
+ { value: 1, start_time: '19:19', name: 'luxOn' }
+]
+[2025-09-23T13:03:10.946] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-23T13:03:10.973] [INFO] monitorLogs - tasks created: 1907
+[2025-09-23T13:03:10.976] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-23T13:03:15.992] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-23T14:29:37.518] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-23T14:29:42.868] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-23T14:29:42.873] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-23T14:29:42.874] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-23T14:29:42.874] [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:29:42.879] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T14:29:42.880] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-24T05:09:00.879Z
+[2025-09-23T14:29:42.882] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-23T17:19:00.881Z
+[2025-09-23T14:29:42.882] [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:29:42.883] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-23T14:29:42.884] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-23T14:29:42.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-23T14:29:42.887] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T14:29:42.888] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-24T05:09:00.888Z
+[2025-09-23T14:29:42.889] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-23T17:19:00.889Z
+[2025-09-23T14:29:42.890] [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:29:42.891] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-23T14:29:42.891] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-23T14:29:42.892] [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:29:42.894] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T14:29:42.895] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-24T05:09:00.895Z
+[2025-09-23T14:29:42.896] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-23T17:19:00.895Z
+[2025-09-23T14:29:42.896] [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:29:42.897] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-23T14:29:42.898] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-23T14:29:42.898] [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:29:42.901] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-23T14:29:42.901] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-24T05:09:00.901Z
+[2025-09-23T14:29:42.902] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-23T17:19:00.902Z
+[2025-09-23T14:29:42.903] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:9', name: 'luxOff' },
+ { value: 1, start_time: '19:19', name: 'luxOn' }
+]
+[2025-09-23T14:29:42.904] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-23T14:29:42.930] [INFO] monitorLogs - tasks created: 1907
+[2025-09-23T14:29:42.933] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-23T14:29:47.946] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-23T18:49:34.210] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-23T18:49:34.217] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-23T18:49:34.220] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-23T18:49:34.222] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-24T03:29:45.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-24 03:29:45
+[2025-09-24T06:45:33.738] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-24T06:45:33.743] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-24T06:45:33.745] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-24T06:45:33.748] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-24T18:48:37.951] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-24T18:48:37.966] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-24T18:48:37.968] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-24T18:48:37.970] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-25T03:29:47.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-25 03:29:47
+[2025-09-25T06:49:04.003] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-25T06:49:04.007] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-25T06:49:04.009] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-25T06:49:04.011] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-25T16:24:53.151] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-25T16:24:58.507] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-25T16:24:58.512] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-25T16:24:58.513] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-25T16:24:58.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-25T16:24:58.518] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:24:58.519] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-26T05:12:00.519Z
+[2025-09-25T16:24:58.521] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-25T17:14:00.521Z
+[2025-09-25T16:24:58.521] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:24:58.523] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-25T16:24:58.524] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-25T16:24:58.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-09-25T16:24:58.527] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:24:58.528] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-26T05:12:00.528Z
+[2025-09-25T16:24:58.529] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-25T17:14:00.529Z
+[2025-09-25T16:24:58.530] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:24:58.531] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-25T16:24:58.531] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-25T16:24:58.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-09-25T16:24:58.534] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:24:58.535] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-26T05:12:00.535Z
+[2025-09-25T16:24:58.535] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-25T17:14:00.535Z
+[2025-09-25T16:24:58.536] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:24:58.537] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-25T16:24:58.538] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-25T16:24:58.538] [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-25T16:24:58.541] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:24:58.541] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-26T05:12:00.541Z
+[2025-09-25T16:24:58.542] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-25T17:14:00.542Z
+[2025-09-25T16:24:58.542] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:24:58.543] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-25T16:24:58.569] [INFO] monitorLogs - tasks created: 1907
+[2025-09-25T16:24:58.571] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-25T16:25:03.586] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-25T16:28:35.806] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-09-25T16:28:41.155] [INFO] monitorLogs - buildTasks - params undefined
+[2025-09-25T16:28:41.160] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-09-25T16:28:41.161] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-09-25T16:28:41.162] [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-25T16:28:41.167] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:28:41.169] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-09-26T05:12:00.168Z
+[2025-09-25T16:28:41.170] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-09-25T17:14:00.170Z
+[2025-09-25T16:28:41.171] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:28:41.172] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-09-25T16:28:41.173] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-09-25T16:28:41.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-09-25T16:28:41.176] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:28:41.177] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-09-26T05:12:00.177Z
+[2025-09-25T16:28:41.178] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-09-25T17:14:00.177Z
+[2025-09-25T16:28:41.178] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:28:41.179] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-09-25T16:28:41.180] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-09-25T16:28:41.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-09-25T16:28:41.183] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:28:41.183] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-09-26T05:12:00.183Z
+[2025-09-25T16:28:41.184] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-09-25T17:14:00.184Z
+[2025-09-25T16:28:41.185] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:28:41.186] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-09-25T16:28:41.186] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-09-25T16:28:41.187] [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-25T16:28:41.189] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-09-25T16:28:41.190] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-09-26T05:12:00.190Z
+[2025-09-25T16:28:41.190] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-09-25T17:14:00.190Z
+[2025-09-25T16:28:41.191] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:12', name: 'luxOff' },
+ { value: 1, start_time: '19:14', name: 'luxOn' }
+]
+[2025-09-25T16:28:41.192] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-09-25T16:28:41.219] [INFO] monitorLogs - tasks created: 1907
+[2025-09-25T16:28:41.221] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-09-25T16:28:46.237] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-09-25T18:30:50.642] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-25T18:30:50.644] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-25T18:30:50.647] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-25T18:30:50.649] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-26T03:28:43.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-26 03:28:43
+[2025-09-26T06:48:07.650] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-26T06:48:07.655] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-26T06:48:07.657] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-26T06:48:07.659] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-26T18:50:37.017] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-26T18:50:37.023] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-26T18:50:37.026] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-26T18:50:37.027] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-27T03:28:44.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-27 03:28:44
+[2025-09-27T06:42:42.847] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-27T06:42:42.853] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-27T06:42:42.856] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-27T06:42:42.857] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-27T18:50:37.543] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-27T18:50:37.553] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-27T18:50:37.555] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-27T18:50:37.557] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-28T03:28:46.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-28 03:28:46
+[2025-09-28T06:38:32.416] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-28T06:38:32.422] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-28T06:38:32.425] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-28T06:38:32.427] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-28T18:50:17.587] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-28T18:50:17.594] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-28T18:50:17.596] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-28T18:50:17.599] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-29T03:28:47.008] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-29 03:28:47
+[2025-09-29T06:35:52.152] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-29T06:35:52.158] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-29T06:35:52.160] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-29T06:35:52.162] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-29T18:46:35.111] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-29T18:46:35.117] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-29T18:46:35.119] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-29T18:46:35.120] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-30T03:28:48.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-09-30 03:28:48
+[2025-09-30T06:36:36.152] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-30T06:36:36.158] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-30T06:36:36.160] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-30T06:36:36.161] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-09-30T18:43:51.234] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-30T18:43:51.239] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-30T18:43:51.241] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-09-30T18:43:51.243] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-01T03:28:49.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-01 03:28:49
+[2025-10-01T06:43:25.401] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-01T06:43:25.406] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-01T06:43:25.409] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-01T06:43:25.410] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-01T18:43:15.244] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-01T18:43:15.246] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-01T18:43:15.248] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-01T18:43:15.250] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-02T03:28:50.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-02 03:28:50
+[2025-10-02T06:41:51.667] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-02T06:41:51.673] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-02T06:41:51.675] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-02T06:41:51.677] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-02T18:42:26.319] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-02T18:42:26.328] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-02T18:42:26.330] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-02T18:42:26.332] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-03T03:28:51.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-03 03:28:51
+[2025-10-03T06:41:38.620] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-03T06:41:38.625] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-03T06:41:38.627] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-03T06:41:38.629] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-03T14:44:19.936] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-10-03T14:44:25.293] [INFO] monitorLogs - buildTasks - params undefined
+[2025-10-03T14:44:25.297] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-10-03T14:44:25.299] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-10-03T14:44:25.299] [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:44:25.303] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-03T14:44:25.305] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-04T05:24:00.304Z
+[2025-10-03T14:44:25.306] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-03T16:58:00.306Z
+[2025-10-03T14:44:25.307] [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:44:25.308] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-10-03T14:44:25.309] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-10-03T14:44:25.309] [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:44:25.312] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-03T14:44:25.312] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-04T05:24:00.312Z
+[2025-10-03T14:44:25.313] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-03T16:58:00.313Z
+[2025-10-03T14:44:25.314] [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:44:25.315] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-10-03T14:44:25.316] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-10-03T14:44:25.316] [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:44:25.318] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-03T14:44:25.319] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-04T05:24:00.319Z
+[2025-10-03T14:44:25.320] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-03T16:58:00.320Z
+[2025-10-03T14:44:25.320] [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:44:25.321] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-10-03T14:44:25.322] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-10-03T14:44:25.323] [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:44:25.325] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-03T14:44:25.325] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-10-04T05:24:00.325Z
+[2025-10-03T14:44:25.326] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-10-03T16:58:00.326Z
+[2025-10-03T14:44:25.327] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:24', name: 'luxOff' },
+ { value: 1, start_time: '18:58', name: 'luxOn' }
+]
+[2025-10-03T14:44:25.328] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-10-03T14:44:25.356] [INFO] monitorLogs - tasks created: 1907
+[2025-10-03T14:44:25.359] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-10-03T14:44:30.374] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-10-03T18:38:58.687] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-03T18:38:58.693] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-03T18:38:58.696] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-03T18:38:58.698] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-04T03:44:27.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-04 03:44:27
+[2025-10-04T06:44:39.788] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-04T06:44:39.793] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-04T06:44:39.795] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-04T06:44:39.797] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-04T18:26:18.192] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-04T18:26:18.198] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-04T18:26:18.200] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-04T18:26:18.202] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-05T03:44:28.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-05 03:44:28
+[2025-10-05T06:45:35.869] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-05T06:45:35.876] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-05T06:45:35.877] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-05T06:45:35.879] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-05T18:32:43.751] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-05T18:32:43.758] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-05T18:32:43.761] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-05T18:32:43.762] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-06T03:44:30.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-06 03:44:30
+[2025-10-06T06:55:38.408] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-06T06:55:38.413] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-06T06:55:38.415] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-06T06:55:38.417] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-06T18:24:12.892] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-06T18:24:12.897] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-06T18:24:12.899] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-06T18:24:12.901] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-07T03:44:31.012] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-07 03:44:31
+[2025-10-07T06:50:43.724] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-07T06:50:43.729] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-07T06:50:43.731] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-07T06:50:43.733] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-07T18:27:37.496] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-07T18:27:37.511] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-07T18:27:37.513] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-07T18:27:37.515] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-08T03:44:32.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-08 03:44:32
+[2025-10-08T06:49:06.339] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-08T06:49:06.343] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-08T06:49:06.346] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-08T06:49:06.348] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-08T18:27:08.752] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-08T18:27:08.758] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-08T18:27:08.760] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-08T18:27:08.761] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-09T03:44:33.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-09 03:44:33
+[2025-10-09T07:04:44.179] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-09T07:04:44.184] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-09T07:04:44.186] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-09T07:04:44.188] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-09T16:36:58.097] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-10-09T16:37:03.465] [INFO] monitorLogs - buildTasks - params undefined
+[2025-10-09T16:37:03.469] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-10-09T16:37:03.470] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-10-09T16:37:03.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-10-09T16:37:03.476] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T16:37:03.477] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.476Z
+[2025-10-09T16:37:03.478] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-09T16:45:00.478Z
+[2025-10-09T16:37:03.479] [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:37:03.480] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-10-09T16:37:03.481] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-10-09T16:37:03.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-10-09T16:37:03.484] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T16:37:03.485] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.485Z
+[2025-10-09T16:37:03.485] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-09T16:45:00.485Z
+[2025-10-09T16:37:03.486] [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:37:03.487] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-10-09T16:37:03.488] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-10-09T16:37:03.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-10-09T16:37:03.491] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T16:37:03.491] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.491Z
+[2025-10-09T16:37:03.492] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-09T16:45:00.492Z
+[2025-10-09T16:37:03.493] [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:37:03.494] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-10-09T16:37:03.494] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-10-09T16:37:03.495] [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:37:03.497] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T16:37:03.498] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-10-10T05:32:00.498Z
+[2025-10-09T16:37:03.499] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-10-09T16:45:00.498Z
+[2025-10-09T16:37:03.499] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:32', name: 'luxOff' },
+ { value: 1, start_time: '18:45', name: 'luxOn' }
+]
+[2025-10-09T16:37:03.500] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-10-09T16:37:03.526] [INFO] monitorLogs - tasks created: 1907
+[2025-10-09T16:37:03.529] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-10-09T16:37:08.545] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-10-09T18:21:22.593] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-09T18:21:22.600] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-09T18:21:22.602] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-09T18:21:22.605] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-09T19:02:00.403] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-10-09T19:02:05.756] [INFO] monitorLogs - buildTasks - params undefined
+[2025-10-09T19:02:05.761] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-10-09T19:02:05.762] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-10-09T19:02:05.763] [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:02:05.767] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T19:02:05.768] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-10T05:32:00.768Z
+[2025-10-09T19:02:05.770] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-10T16:45:00.770Z
+[2025-10-09T19:02:05.771] [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:02:05.772] [INFO] monitorLogs - -->currentValue for relay 1 1
+[2025-10-09T19:02:05.773] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-10-09T19:02:05.773] [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:02:05.776] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T19:02:05.776] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-10T05:32:00.776Z
+[2025-10-09T19:02:05.777] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-10T16:45:00.777Z
+[2025-10-09T19:02:05.778] [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:02:05.779] [INFO] monitorLogs - -->currentValue for relay 2 1
+[2025-10-09T19:02:05.779] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-10-09T19:02:05.780] [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:02:05.782] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T19:02:05.783] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-10T05:32:00.783Z
+[2025-10-09T19:02:05.784] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-10T16:45:00.783Z
+[2025-10-09T19:02:05.784] [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:02:05.785] [INFO] monitorLogs - -->currentValue for relay 3 1
+[2025-10-09T19:02:05.786] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-10-09T19:02:05.786] [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:02:05.789] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-09T19:02:05.789] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-10-10T05:32:00.789Z
+[2025-10-09T19:02:05.790] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-10-10T16:45:00.790Z
+[2025-10-09T19:02:05.791] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:32', name: 'luxOff' },
+ { value: 1, start_time: '18:45', name: 'luxOn' }
+]
+[2025-10-09T19:02:05.792] [INFO] monitorLogs - -->currentValue for relay 4 1
+[2025-10-09T19:02:05.818] [INFO] monitorLogs - tasks created: 1907
+[2025-10-09T19:02:05.820] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-08-08
+[2025-10-09T19:02:10.834] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-10-10T03:02:08.011] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-10 03:02:08
+[2025-10-10T07:00:09.729] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-10T07:00:09.735] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-10T07:00:09.737] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-10T07:00:09.739] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-10T18:15:10.052] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-10T18:15:10.058] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-10T18:15:10.060] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-10T18:15:10.062] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-11T03:02:09.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-11 03:02:09
+[2025-10-11T06:59:52.969] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-11T06:59:52.974] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-11T06:59:52.976] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-11T06:59:52.978] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-11T18:21:47.767] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-11T18:21:47.772] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-11T18:21:47.774] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-11T18:21:47.776] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-12T03:02:10.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-12 03:02:10
+[2025-10-12T06:59:30.821] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-12T06:59:30.827] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-12T06:59:30.829] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-12T06:59:30.831] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-12T18:15:34.930] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-12T18:15:34.936] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-12T18:15:34.938] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-12T18:15:34.940] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-13T03:02:12.010] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-13 03:02:12
+[2025-10-13T06:57:49.794] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-13T06:57:49.799] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-13T06:57:49.801] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-13T06:57:49.803] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-13T18:21:34.515] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-13T18:21:34.518] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-13T18:21:34.520] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-13T18:21:34.522] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-14T03:02:13.013] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-14 03:02:13
+[2025-10-14T07:00:29.121] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-14T07:00:29.133] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-14T07:00:29.136] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-14T07:00:29.138] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-14T18:11:34.724] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-14T18:11:34.749] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-14T18:11:34.751] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-14T18:11:34.753] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-15T03:02:14.009] [INFO] monitorLogs - setCorrectPlcTimeOnceADay() --> Nastaveny cas na: 2025-10-15 03:02:14
+[2025-10-15T07:05:17.808] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-15T07:05:17.814] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-15T07:05:17.817] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-15T07:05:17.818] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false Profile: dawn - turnOff line according to lux sensor
+[2025-10-15T08:12:42.443] [INFO] monitorLogs - turnLine on - (line, SETTINGS.maintenance_mode) 0 true command received from platform
+[2025-10-15T08:13:05.469] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-10-15T08:13:16.661] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-10-15T08:13:30.659] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-10-15T08:13:44.180] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false command received from platform
+[2025-10-15T08:15:39.698] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 4 relay1_05 false command received from platform
+[2025-10-15T08:15:49.618] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 3 relay1_04 false command received from platform
+[2025-10-15T08:15:59.538] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 2 relay1_03 false command received from platform
+[2025-10-15T08:16:10.146] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false command received from platform
+[2025-10-15T08:16:16.187] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false command received from platform
+[2025-10-15T11:40:56.144] [INFO] monitorLogs - DIDO_Relay_Controller installed
+[2025-10-15T11:41:01.525] [INFO] monitorLogs - buildTasks - params undefined
+[2025-10-15T11:41:01.530] [INFO] monitorLogs - turnLine off - (line, SETTINGS.maintenance_mode) 0 false No line profile. Switching it off on startup
+[2025-10-15T11:41:01.531] [INFO] monitorLogs - buildTasks: profile for line 1
+[2025-10-15T11:41:01.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-10-15T11:41:01.536] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-15T11:41:01.538] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 1 2025-10-16T05:41:00.537Z
+[2025-10-15T11:41:01.539] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 1 2025-10-15T16:33:00.539Z
+[2025-10-15T11:41:01.540] [INFO] monitorLogs - -->time_points final 1 [
+ { value: 0, start_time: '7:41', name: 'luxOff' },
+ { value: 1, start_time: '18:33', name: 'luxOn' }
+]
+[2025-10-15T11:41:01.541] [INFO] monitorLogs - -->currentValue for relay 1 0
+[2025-10-15T11:41:01.542] [INFO] monitorLogs - buildTasks: profile for line 2
+[2025-10-15T11:41:01.542] [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-15T11:41:01.545] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-15T11:41:01.545] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 2 2025-10-16T05:41:00.545Z
+[2025-10-15T11:41:01.546] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 2 2025-10-15T16:33:00.546Z
+[2025-10-15T11:41:01.547] [INFO] monitorLogs - -->time_points final 2 [
+ { value: 0, start_time: '7:41', name: 'luxOff' },
+ { value: 1, start_time: '18:33', name: 'luxOn' }
+]
+[2025-10-15T11:41:01.548] [INFO] monitorLogs - -->currentValue for relay 2 0
+[2025-10-15T11:41:01.549] [INFO] monitorLogs - buildTasks: profile for line 3
+[2025-10-15T11:41:01.549] [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-15T11:41:01.551] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-15T11:41:01.552] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 3 2025-10-16T05:41:00.552Z
+[2025-10-15T11:41:01.553] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 3 2025-10-15T16:33:00.553Z
+[2025-10-15T11:41:01.553] [INFO] monitorLogs - -->time_points final 3 [
+ { value: 0, start_time: '7:41', name: 'luxOff' },
+ { value: 1, start_time: '18:33', name: 'luxOn' }
+]
+[2025-10-15T11:41:01.554] [INFO] monitorLogs - -->currentValue for relay 3 0
+[2025-10-15T11:41:01.555] [INFO] monitorLogs - buildTasks: profile for line 4
+[2025-10-15T11:41:01.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-10-15T11:41:01.558] [INFO] monitorLogs - -->comming events turn on/off lines:
+[2025-10-15T11:41:01.558] [INFO] monitorLogs - TimePoint params: luxOff: turn off line: 4 2025-10-16T05:41:00.558Z
+[2025-10-15T11:41:01.559] [INFO] monitorLogs - TimePoint params: luxOn: turn on line: 4 2025-10-15T16:33:00.559Z
+[2025-10-15T11:41:01.560] [INFO] monitorLogs - -->time_points final 4 [
+ { value: 0, start_time: '7:41', name: 'luxOff' },
+ { value: 1, start_time: '18:33', name: 'luxOn' }
+]
+[2025-10-15T11:41:01.561] [INFO] monitorLogs - -->currentValue for relay 4 0
+[2025-10-15T11:41:01.587] [INFO] monitorLogs - tasks created: 1907
+[2025-10-15T11:41:01.590] [INFO] monitorLogs - -->FLOW bol spustený wvKJdZML6mXP4DzWBAXxwBAjxNloa5g23Ve9Y1ry 2025-10-08
+[2025-10-15T11:41:06.606] [INFO] monitorLogs - Dido: turnLine off - (line, pin, force) 1 relay1_02 false aplikovany bod profilu
+[2025-10-15T18:10:05.309] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 1 relay1_02 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-15T18:10:05.315] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 2 relay1_03 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-15T18:10:05.317] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 3 relay1_04 false Profile: dusk - turnOn line according to lux sensor
+[2025-10-15T18:10:05.320] [INFO] monitorLogs - Dido: turnLine on - (line, pin, force) 4 relay1_05 false Profile: dusk - turnOn line according to lux sensor
diff --git a/RVO13/package-lock.json b/RVO13/package-lock.json
new file mode 100755
index 0000000..3c5c1ba
--- /dev/null
+++ b/RVO13/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/RVO13/package.json b/RVO13/package.json
new file mode 100755
index 0000000..7f7c795
--- /dev/null
+++ b/RVO13/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/RVO13/release.js b/RVO13/release.js
new file mode 100755
index 0000000..02d52ff
--- /dev/null
+++ b/RVO13/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/RVO13/release.js.json b/RVO13/release.js.json
new file mode 100755
index 0000000..ad27057
--- /dev/null
+++ b/RVO13/release.js.json
@@ -0,0 +1,34 @@
+{
+ "pid": 402,
+ "stats": [
+ {
+ "id": null,
+ "version": {
+ "node": "v14.18.1",
+ "total": "3.4.13",
+ "app": "1.0.0"
+ },
+ "pid": 402,
+ "thread": "",
+ "mode": "release",
+ "overload": 0,
+ "date": "2025-10-16T00:22:52.336Z",
+ "memory": 27.41,
+ "rm": 0,
+ "fm": 0,
+ "wm": 0,
+ "mm": 0,
+ "om": 8,
+ "em": 0,
+ "dbrm": 0,
+ "dbwm": 0,
+ "usage": 0,
+ "requests": 6,
+ "pending": 0,
+ "errors": 0,
+ "timeouts": 0,
+ "uptime": 883,
+ "online": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/RVO13/report_data.log b/RVO13/report_data.log
new file mode 100755
index 0000000..b584824
--- /dev/null
+++ b/RVO13/report_data.log
@@ -0,0 +1,210 @@
+{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T10:41:07.523Z",
+ "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_13_ip123",
+ "time": "2025-10-15T11:41:07.522Z",
+ "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_13_ip123",
+ "time": "2025-10-15T12:41:07.521Z",
+ "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_13_ip123",
+ "time": "2025-10-15T13:41:07.521Z",
+ "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_13_ip123",
+ "time": "2025-10-15T14:41:07.521Z",
+ "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_13_ip123",
+ "time": "2025-10-15T15:41:07.521Z",
+ "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_13_ip123",
+ "time": "2025-10-15T17:36:09.585Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T18:36:09.576Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T19:36:09.582Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T20:36:09.576Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T21:36:09.582Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T22:36:09.577Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}{
+ "name": "rvo_senica_13_ip123",
+ "time": "2025-10-15T23:36:09.577Z",
+ "report": {
+ "contactor": {
+ "off": [],
+ "on": []
+ },
+ "night_no_data": [
+ "13/118_1L_3866_prechod"
+ ],
+ "night_dimming=0": [],
+ "night_power=0": [],
+ "day_24/7_no_data": [],
+ "day_24/7_dimming>0": [],
+ "day_24/7_power>0": []
+ }
+}
\ No newline at end of file