Testpanel with new thermometer komponent
This commit is contained in:
parent
31b5dbba5c
commit
ba4a11a99a
39 changed files with 6415 additions and 2952 deletions
3
config
3
config
|
|
@ -7,6 +7,7 @@ package#flow (Object) : { url: '/' }
|
|||
|
||||
table.relays : line:number|tbname:string|contactor:number|profile:string
|
||||
table.nodes : node:number|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
|
||||
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|projects_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
|
||||
table.pins : pin:string|type:string|line:number
|
||||
table.notifications : key:string|weight:string|sk:string|en:string
|
||||
table.status : thermometer:string|em:string|twilight_sensor:string
|
||||
|
|
|
|||
|
|
@ -1,43 +0,0 @@
|
|||
print("zaciname")
|
||||
import re, json
|
||||
|
||||
search_str = '|'
|
||||
final = []
|
||||
counter = 1
|
||||
with open("/home/unipi/flowserver/databases/nodes.table", 'r') as file:
|
||||
# with open("/home/rasta5man/dev/oms/flowserver/databases/nodes.table", 'r') as file:
|
||||
# Read each line in the file
|
||||
for line in file:
|
||||
# Print each line
|
||||
line = line.strip()
|
||||
print(line)
|
||||
if counter != 1:
|
||||
i = [m.start() for m in re.finditer(re.escape(search_str), line)]
|
||||
node = line[ i[0] + 1 : i[1] ]
|
||||
tbname = line[ i[1] + 1 : i[2] ]
|
||||
final.append({node:tbname})
|
||||
counter += 1
|
||||
print(json.dumps(final))
|
||||
f = open("/home/unipi/flowserver/databases/nodes_original/nodes_original.table", "w")
|
||||
f.write(json.dumps(final))
|
||||
f.close()
|
||||
|
||||
|
||||
#
|
||||
# # ``d`` has to be replaced with a different character
|
||||
# old_character = "'"
|
||||
#
|
||||
# # ``t`` will replace ``d`
|
||||
# new_character = '"'
|
||||
# resultant_string = 0;
|
||||
# with open("/home/unipi/flowserver/databases/nodes_original/nodes_original.table", 'r') as file:
|
||||
# for line in file:
|
||||
# resultant_string = re.sub("'", '"', line)
|
||||
#
|
||||
# resultant_string = re.sub(" ", "", resultant_string)
|
||||
# print(resultant_string)
|
||||
#
|
||||
# f = open("/home/unipi/flowserver/databases/nodes_original/nodes_original.table", "w")
|
||||
# f.write(str(resultant_string))
|
||||
# f.close()
|
||||
#
|
||||
|
|
@ -1,114 +0,0 @@
|
|||
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 };
|
||||
|
|
@ -1,2 +1,8 @@
|
|||
node:number|tbname:string|line:number|profile:string|processed:boolean|status:boolean|time_of_last_communication:number
|
||||
+|638|rDbQ84xzwgdqEoPm3kbJQWk9anOZY1RXyBv2LVM6|3|{"intervals":[{"cct":3000,"value":20,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":10,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":20,"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":-20,"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}|1|0|1725885127396|............................................................................................................................................................................................................................................................|.................
|
||||
+|637|E6Kg9oDnLWyzPRMva7vrqy7Jxp4VG58qO2w1lZYe|3|{"intervals":[{"cct":3000,"value":10,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":20,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":10,"end_time":"13:00","start_time":"05:30"}],"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":-20,"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}|1|1|1733160546993|...........................................................................................................................................................................................................................................................
|
||||
-|640|pE5X8NQPaow6vlOZxk6gnw7q42ezGBMyWgDVjR3L|2|{"intervals":[{"cct":3000,"value":10,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":20,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":10,"end_time":"13:00","start_time":"05:30"}],"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":-20,"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}|1|1|1730588947491|.............
|
||||
+|692|2O14VBzl8aDmWdNw3A518OAGyZ5qLJoEMpj6R9ng|2|{"intervals":[{"cct":3000,"value":10,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":20,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":10,"end_time":"13:00","start_time":"05:30"}],"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":-20,"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}|1|1|1730674756237|.......
|
||||
+|698|m6EYyZoJ4gWexdjVPARNVLARDOq9wv2N5XzKGplr|1|{"intervals":[{"cct":3000,"value":0,"end_time":"19:40","start_time":"13:00"},{"cct":3000,"value":40,"end_time":"05:30","start_time":"19:40"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|1|1|1729806347930|.............
|
||||
-|638|rDbQ84xzwgdqEoPm3kbJQWk9anOZY1RXyBv2LVM6|3|{"intervals":[{"cct":3000,"value":10,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":20,"end_time":"05:30","start_time":"20:00"},{"cct":3000,"value":10,"end_time":"13:00","start_time":"05:30"}],"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":-20,"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}|1|1|1730376263529|
|
||||
+|640|pE5X8NQPaow6vlOZxk6gnw7q42ezGBMyWgDVjR3L|2|{"intervals":[{"cct":3000,"value":0,"end_time":"14:00","start_time":"13:00"},{"cct":3000,"value":10,"end_time":"14:10","start_time":"14:00"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"},{"cct":3000,"value":30,"end_time":"14:20","start_time":"14:10"},{"cct":3000,"value":40,"end_time":"14:30","start_time":"14:20"},{"cct":3000,"value":50,"end_time":"14:40","start_time":"14:30"},{"cct":3000,"value":10,"end_time":"05:30","start_time":"14:40"}],"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}|1|0|1730674754903|.............
|
||||
+|638|rDbQ84xzwgdqEoPm3kbJQWk9anOZY1RXyBv2LVM6|3|{"intervals":[{"cct":3000,"value":0,"end_time":"14:00","start_time":"13:00"},{"cct":3000,"value":10,"end_time":"14:10","start_time":"14:00"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"},{"cct":3000,"value":30,"end_time":"14:20","start_time":"14:10"},{"cct":3000,"value":40,"end_time":"14:30","start_time":"14:20"},{"cct":3000,"value":50,"end_time":"14:40","start_time":"14:30"},{"cct":3000,"value":10,"end_time":"05:30","start_time":"14:40"}],"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}|1|1|1733160548434|.............
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
[{"3815": "B5EoxeMVp4zwr8nqW0GjjoARjvD1PNamOGbLg63Z"}, {"3799": "roKgWqY95V3mXMRzyAjmmj7bLjexpJPvaGDBw826"}]
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
pin:string|type:string|line:number
|
||||
*|input1_01|door_condition|0|...........
|
||||
*|input1_02|rotary_switch_state|0|...........
|
||||
*|input1_03|rotary_switch_state|0|...........
|
||||
*|intut1_04|power_supply|0|...........
|
||||
*|input1_05|state_of_main_switch|0|...........
|
||||
*|input1_06|state_of_breaker|1|...........
|
||||
*|input1_07|state_of_breaker|2|...........
|
||||
*|input1_08|state_of_breaker|3|...........
|
||||
*|relay1_02|state_of_contactor|1|...........
|
||||
*|relay1_03|state_of_contactor|2|...........
|
||||
*|relay1_04|state_of_contactor|3|...........
|
||||
*|28F46E9D0E00008B|temperature|0|...........
|
||||
*|twilight_sensor|twilight_sensor|0|...........
|
||||
+|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|.........
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
line:number|tbname:string|contactor:number|profile:string
|
||||
+|0|6lQGaY9RDywdVzObj0PadOkPg4NBn3exEK51LWZq|1||...........
|
||||
+|1|JzwxZXOvDj1bVrN4nkWw9Qk8qdyBl3MRKLpGPgaQ|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|g9OxBZ5KRwNznlY6pAp6mxkWXvjdEL4eGQobMDy2|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|OzNMgZ9n43qPbjXmy7zWMJA2DKdYvW5e6pxGRrVa|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}|...........
|
||||
+|0|PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8|1||...........
|
||||
+|3|52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo|9|{"intervals":[{"value":0,"end_time":"19:30","start_time":"13:00"},{"value":1,"end_time":"05:50","start_time":"19:30"},{"value":0,"end_time":"13:00","start_time":"05:50"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}|...........
|
||||
-|2|gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM|9||...........
|
||||
+|1|6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq|9||...........
|
||||
+|2|gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM|9||............
|
||||
|
|
|
|||
|
|
@ -1,2 +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
|
||||
+|rvo_senica_42_10.0.0.118|en|28.427B45920702|48.70826502|17.28455203|192.168.252.1|rvo_senica_42_10.0.0.118|QMvF7etEvbYMMr8Q6baP|1883|0|59|unipi|ttyUSB0|1|20|5|6|3|..............
|
||||
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|projects_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
|
||||
+|testpanel|en|28.427B45920702|48.70826502|17.28455203|192.168.252.1|showroom_test_panel_led|E1QTFLsN4wqyVER5xBaw|1883|0|0|lm|ttymxc4|1|20|5|0.1|3|...............................................
|
||||
|
|
|
|||
2
databases/status.table
Normal file
2
databases/status.table
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
thermometer:string|em:string|twilight_sensor:string
|
||||
+|NOK|OK|OK|............
|
||||
|
|
@ -0,0 +1,287 @@
|
|||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730588333765,"values":{"maintenance_mode":false}}],"id":"2501279001ax71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730588333835,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2501279002ax70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730588333840,"values":{"state_of_main_switch":"closed"}}],"id":"2501279003ax71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730588333845,"values":{"power_supply":"On"}}],"id":"2501279004ax70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730588333851,"values":{"battery":"Off"}}],"id":"2501279005ax71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730588333855,"values":{"door_condition":"closed"}}],"id":"2501279006ax70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730588333867,"values":{"status":"OK"}}],"id":"2501279007ax71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730588333873,"values":{"statecode":2}}],"id":"2501279008ax70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730588333876,"values":{"state_of_breaker":"On"}}],"id":"2501279009ax71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730588333881,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2501279010ax70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730588333885,"values":{"status":"OK"}}],"id":"2501279011ax71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730588333887,"values":{"statecode":2}}],"id":"2501279012ax70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730588333890,"values":{"state_of_breaker":"On"}}],"id":"2501279013ax71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730588333893,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2501279014ax70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730588333896,"values":{"status":"OK"}}],"id":"2501279015ax71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730588333899,"values":{"statecode":2}}],"id":"2501279016ax70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730588333901,"values":{"state_of_breaker":"On"}}],"id":"2501279017ax71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730589728172,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2501302001ny71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730589728240,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2501302002ny70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730589728246,"values":{"state_of_main_switch":"closed"}}],"id":"2501302003ny71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730589728251,"values":{"power_supply":"On"}}],"id":"2501302004ny70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730589728256,"values":{"battery":"Off"}}],"id":"2501302005ny71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730589728260,"values":{"door_condition":"closed"}}],"id":"2501302006ny70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730589728272,"values":{"status":"OK"}}],"id":"2501302007ny71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730589728278,"values":{"statecode":2}}],"id":"2501302008ny70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730589728281,"values":{"state_of_breaker":"On"}}],"id":"2501302009ny71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730589728286,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2501302010ny70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730589728290,"values":{"status":"OK"}}],"id":"2501302011ny71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730589728293,"values":{"statecode":2}}],"id":"2501302012ny70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730589728295,"values":{"state_of_breaker":"On"}}],"id":"2501302013ny71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730589728299,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2501302014ny70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730589728302,"values":{"status":"OK"}}],"id":"2501302015ny71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730589728305,"values":{"statecode":2}}],"id":"2501302016ny70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730589728307,"values":{"state_of_breaker":"On"}}],"id":"2501302017ny71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730590126776,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2501309001xk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730590126844,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2501309002xk70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730590126850,"values":{"state_of_main_switch":"closed"}}],"id":"2501309003xk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730590126855,"values":{"power_supply":"On"}}],"id":"2501309004xk70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730590126860,"values":{"battery":"Off"}}],"id":"2501309005xk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730590126865,"values":{"door_condition":"closed"}}],"id":"2501309006xk70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730590126877,"values":{"status":"OK"}}],"id":"2501309007xk71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730590126883,"values":{"statecode":2}}],"id":"2501309008xk70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730590126886,"values":{"state_of_breaker":"On"}}],"id":"2501309009xk71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730590126891,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2501309010xk70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730590126895,"values":{"status":"OK"}}],"id":"2501309011xk71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730590126897,"values":{"statecode":2}}],"id":"2501309012xk70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730590126900,"values":{"state_of_breaker":"On"}}],"id":"2501309013xk71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730590126903,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2501309014xk70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730590126906,"values":{"status":"OK"}}],"id":"2501309015xk71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730590126909,"values":{"statecode":2}}],"id":"2501309016xk70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730590126911,"values":{"state_of_breaker":"On"}}],"id":"2501309017xk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730591367948,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2501329001ua71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730591368017,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2501329002ua70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730591368022,"values":{"state_of_main_switch":"closed"}}],"id":"2501329003ua71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730591368028,"values":{"power_supply":"On"}}],"id":"2501329004ua70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730591368032,"values":{"battery":"Off"}}],"id":"2501329005ua71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730591368037,"values":{"door_condition":"closed"}}],"id":"2501329006ua70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730591368049,"values":{"status":"OK"}}],"id":"2501329007ua71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730591368055,"values":{"statecode":2}}],"id":"2501329008ua70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730591368058,"values":{"state_of_breaker":"On"}}],"id":"2501329009ua71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105058,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2501342001ch71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105130,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2501342002ch70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105135,"values":{"state_of_main_switch":"closed"}}],"id":"2501342003ch71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105140,"values":{"power_supply":"On"}}],"id":"2501342004ch70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105145,"values":{"battery":"Off"}}],"id":"2501342005ch71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105150,"values":{"door_condition":"closed"}}],"id":"2501342006ch70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730592105162,"values":{"status":"OK"}}],"id":"2501342007ch71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730592105168,"values":{"statecode":2}}],"id":"2501342008ch70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730592105171,"values":{"state_of_breaker":"On"}}],"id":"2501342009ch71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730592105176,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2501342010ch70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730592105180,"values":{"status":"OK"}}],"id":"2501342011ch71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730592105182,"values":{"statecode":2}}],"id":"2501342012ch70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730592105185,"values":{"state_of_breaker":"On"}}],"id":"2501342013ch71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730592105188,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2501342014ch70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730592105191,"values":{"status":"OK"}}],"id":"2501342015ch71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730592105194,"values":{"statecode":2}}],"id":"2501342016ch70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730592105196,"values":{"state_of_breaker":"On"}}],"id":"2501342017ch71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592105200,"values":{"twilight_sensor":31}}],"id":"2501342018ch70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730592420656,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2501347001nd71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730663586542,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502533001gt71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730671706506,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502668001yg71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672433386,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 2 : on","message_data":""}}}],"id":"2502681003ad71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672433494,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is On","message_data":""}}}],"id":"2502681004ad70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672433568,"values":{"statecode":0}}],"id":"2502681005ad71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672433588,"values":{"state_of_contactor":true }}],"id":"2502681006ad70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672433849,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : on","message_data":""}}}],"id":"2502681007ad71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672433892,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is On","message_data":""}}}],"id":"2502681008ad70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672433908,"values":{"statecode":0}}],"id":"2502681009ad71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672433910,"values":{"state_of_contactor":true }}],"id":"2502681010ad70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777712,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502686001di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777782,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2502686002di70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777787,"values":{"state_of_main_switch":"closed"}}],"id":"2502686003di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777792,"values":{"power_supply":"On"}}],"id":"2502686004di70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777798,"values":{"battery":"Off"}}],"id":"2502686005di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777802,"values":{"door_condition":"closed"}}],"id":"2502686006di70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672777814,"values":{"status":"OK"}}],"id":"2502686007di71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672777820,"values":{"statecode":2}}],"id":"2502686008di70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672777824,"values":{"state_of_breaker":"On"}}],"id":"2502686009di71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672777828,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2502686010di70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672777832,"values":{"status":"OK"}}],"id":"2502686011di71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672777835,"values":{"statecode":2}}],"id":"2502686012di70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672777837,"values":{"state_of_breaker":"On"}}],"id":"2502686013di71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672777841,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2502686014di70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672777844,"values":{"status":"OK"}}],"id":"2502686015di71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672777847,"values":{"statecode":2}}],"id":"2502686016di70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672777849,"values":{"state_of_breaker":"On"}}],"id":"2502686017di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777872,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 1 is Off","message_data":""}}}],"id":"2502686018di70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672777883,"values":{"state_of_contactor":false}}],"id":"2502686019di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777888,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is Off","message_data":""}}}],"id":"2502686020di70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672777895,"values":{"state_of_contactor":false}}],"id":"2502686021di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672777899,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is Off","message_data":""}}}],"id":"2502686022di70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672777905,"values":{"state_of_contactor":false}}],"id":"2502686023di71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672922976,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502689001nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923046,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2502689002nu70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923052,"values":{"state_of_main_switch":"closed"}}],"id":"2502689003nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923057,"values":{"power_supply":"On"}}],"id":"2502689004nu70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923062,"values":{"battery":"Off"}}],"id":"2502689005nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923066,"values":{"door_condition":"closed"}}],"id":"2502689006nu70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672923078,"values":{"status":"OK"}}],"id":"2502689007nu71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672923084,"values":{"statecode":2}}],"id":"2502689008nu70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672923088,"values":{"state_of_breaker":"On"}}],"id":"2502689009nu71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672923092,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2502689010nu70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672923096,"values":{"status":"OK"}}],"id":"2502689011nu71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672923099,"values":{"statecode":2}}],"id":"2502689012nu70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672923101,"values":{"state_of_breaker":"On"}}],"id":"2502689013nu71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672923105,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2502689014nu70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672923108,"values":{"status":"OK"}}],"id":"2502689015nu71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672923111,"values":{"statecode":2}}],"id":"2502689016nu70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672923113,"values":{"state_of_breaker":"On"}}],"id":"2502689017nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923136,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 1 is Off","message_data":""}}}],"id":"2502689018nu70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730672923147,"values":{"state_of_contactor":false}}],"id":"2502689019nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923152,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is Off","message_data":""}}}],"id":"2502689020nu70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730672923159,"values":{"state_of_contactor":false}}],"id":"2502689021nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730672923164,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is Off","message_data":""}}}],"id":"2502689022nu70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730672923170,"values":{"state_of_contactor":false}}],"id":"2502689023nu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534730,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502699001wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534807,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2502699002wb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534812,"values":{"state_of_main_switch":"closed"}}],"id":"2502699003wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534818,"values":{"power_supply":"On"}}],"id":"2502699004wb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534823,"values":{"battery":"Off"}}],"id":"2502699005wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534827,"values":{"door_condition":"closed"}}],"id":"2502699006wb70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730673534840,"values":{"status":"OK"}}],"id":"2502699007wb71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730673534846,"values":{"statecode":2}}],"id":"2502699008wb70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730673534849,"values":{"state_of_breaker":"On"}}],"id":"2502699009wb71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730673534854,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2502699010wb70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730673534857,"values":{"status":"OK"}}],"id":"2502699011wb71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730673534860,"values":{"statecode":2}}],"id":"2502699012wb70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730673534863,"values":{"state_of_breaker":"On"}}],"id":"2502699013wb71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730673534866,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2502699014wb70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730673534869,"values":{"status":"OK"}}],"id":"2502699015wb71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730673534872,"values":{"statecode":2}}],"id":"2502699016wb70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730673534875,"values":{"state_of_breaker":"On"}}],"id":"2502699017wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534918,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 1 is Off","message_data":""}}}],"id":"2502699018wb70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730673534942,"values":{"state_of_contactor":false}}],"id":"2502699019wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534956,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is Off","message_data":""}}}],"id":"2502699020wb70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730673534963,"values":{"state_of_contactor":false}}],"id":"2502699021wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730673534968,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is Off","message_data":""}}}],"id":"2502699022wb70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730673534974,"values":{"state_of_contactor":false}}],"id":"2502699023wb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730675467314,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502731001jm71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730676458104,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 2 : off","message_data":""}}}],"id":"2502748003ji71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730676458279,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : off","message_data":""}}}],"id":"2502748004ji70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615197,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2502783001xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615259,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2502783002xe70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615264,"values":{"state_of_main_switch":"closed"}}],"id":"2502783003xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615270,"values":{"power_supply":"On"}}],"id":"2502783004xe70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615276,"values":{"battery":"Off"}}],"id":"2502783005xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615281,"values":{"door_condition":"closed"}}],"id":"2502783006xe70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730678615307,"values":{"status":"OK"}}],"id":"2502783007xe71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730678615313,"values":{"statecode":2}}],"id":"2502783008xe70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730678615316,"values":{"state_of_breaker":"On"}}],"id":"2502783009xe71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730678615321,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2502783010xe70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730678615324,"values":{"status":"OK"}}],"id":"2502783011xe71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730678615327,"values":{"statecode":2}}],"id":"2502783012xe70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730678615329,"values":{"state_of_breaker":"On"}}],"id":"2502783013xe71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730678615333,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2502783014xe70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730678615336,"values":{"status":"OK"}}],"id":"2502783015xe71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730678615338,"values":{"statecode":2}}],"id":"2502783016xe70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730678615340,"values":{"state_of_breaker":"On"}}],"id":"2502783017xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615396,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 1 is Off","message_data":""}}}],"id":"2502783018xe70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730678615433,"values":{"state_of_contactor":false}}],"id":"2502783019xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615453,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is Off","message_data":""}}}],"id":"2502783020xe70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730678615470,"values":{"state_of_contactor":false}}],"id":"2502783021xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615487,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is Off","message_data":""}}}],"id":"2502783022xe70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730678615506,"values":{"state_of_contactor":false}}],"id":"2502783023xe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730678615510,"values":{"twilight_sensor":31}}],"id":"2502783024xe70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730757867671,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2504104001au71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759363143,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : on","message_data":""}}}],"id":"2504129003fe71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759363792,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is On","message_data":""}}}],"id":"2504129004fe70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759363814,"values":{"statecode":0}}],"id":"2504129005fe71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759363817,"values":{"state_of_contactor":true }}],"id":"2504129006fe70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759583799,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2504133001fr71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759583910,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"NOK","statecode":34}}],"id":"2504133002fr70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759583920,"values":{"state_of_main_switch":"closed"}}],"id":"2504133003fr71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759583925,"values":{"power_supply":"On"}}],"id":"2504133004fr70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759583930,"values":{"battery":"Off"}}],"id":"2504133005fr71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759583947,"values":{"door_condition":"closed"}}],"id":"2504133006fr70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730759583960,"values":{"status":"OK"}}],"id":"2504133007fr71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730759583965,"values":{"statecode":2}}],"id":"2504133008fr70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1730759583968,"values":{"state_of_breaker":"On"}}],"id":"2504133009fr71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730759583974,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2504133010fr70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730759583977,"values":{"status":"OK"}}],"id":"2504133011fr71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730759583980,"values":{"statecode":2}}],"id":"2504133012fr70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1730759583982,"values":{"state_of_breaker":"On"}}],"id":"2504133013fr71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759583986,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2504133014fr70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759583989,"values":{"status":"OK"}}],"id":"2504133015fr71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759583991,"values":{"statecode":2}}],"id":"2504133016fr70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759583993,"values":{"state_of_breaker":"On"}}],"id":"2504133017fr71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759985331,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : on","message_data":""}}}],"id":"2504140003mc71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730759985367,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is On","message_data":""}}}],"id":"2504140004mc70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759985398,"values":{"statecode":0}}],"id":"2504140005mc71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1730759985410,"values":{"state_of_contactor":true }}],"id":"2504140006mc70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1730761965548,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2504172001np71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731876994929,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522756001rh71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731877329335,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : on","message_data":""}}}],"id":"2522762003cs71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731877329409,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is On","message_data":""}}}],"id":"2522762004cs70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731877329460,"values":{"statecode":0}}],"id":"2522762005cs71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731877329478,"values":{"state_of_contactor":true }}],"id":"2522762006cs70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106215,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522775001tb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106280,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"OK","statecode":34}}],"id":"2522775002tb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106285,"values":{"state_of_main_switch":"closed"}}],"id":"2522775003tb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106322,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 1 is Off","message_data":""}}}],"id":"2522775004tb70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878106365,"values":{"statecode":3}}],"id":"2522775005tb71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878106370,"values":{"state_of_contactor":false}}],"id":"2522775006tb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106380,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is Off","message_data":""}}}],"id":"2522775007tb71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731878106387,"values":{"statecode":3}}],"id":"2522775008tb70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731878106391,"values":{"state_of_contactor":false}}],"id":"2522775009tb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106398,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is Off","message_data":""}}}],"id":"2522775010tb70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731878106404,"values":{"statecode":3}}],"id":"2522775011tb71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731878106407,"values":{"state_of_contactor":false}}],"id":"2522775012tb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106413,"values":{"power_supply":"On"}}],"id":"2522775013tb71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106417,"values":{"battery":"Off"}}],"id":"2522775014tb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878106420,"values":{"door_condition":"closed"}}],"id":"2522775015tb71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878106425,"values":{"status":"OK"}}],"id":"2522775016tb70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878106428,"values":{"statecode":2}}],"id":"2522775017tb71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878106430,"values":{"state_of_breaker":"On"}}],"id":"2522775018tb70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731878106434,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2522775019tb71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731878106436,"values":{"status":"OK"}}],"id":"2522775020tb70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731878106439,"values":{"statecode":2}}],"id":"2522775021tb71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731878106441,"values":{"state_of_breaker":"On"}}],"id":"2522775022tb70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878260010,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522777001wk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878260073,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"OK","statecode":34}}],"id":"2522777002wk70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878260077,"values":{"state_of_main_switch":"closed"}}],"id":"2522777003wk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878260083,"values":{"power_supply":"On"}}],"id":"2522777004wk70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878260088,"values":{"battery":"Off"}}],"id":"2522777005wk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878260092,"values":{"door_condition":"closed"}}],"id":"2522777006wk70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878260104,"values":{"status":"OK"}}],"id":"2522777007wk71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878260110,"values":{"statecode":2}}],"id":"2522777008wk70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731878260113,"values":{"state_of_breaker":"On"}}],"id":"2522777009wk71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731878386415,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522780001uh71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121143,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522825001pn71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121208,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"OK","statecode":34}}],"id":"2522825002pn70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121213,"values":{"state_of_main_switch":"closed"}}],"id":"2522825003pn71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121226,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 1 is Off","message_data":""}}}],"id":"2522825004pn70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731881121245,"values":{"statecode":3}}],"id":"2522825005pn71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731881121249,"values":{"state_of_contactor":false}}],"id":"2522825006pn70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121256,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 2 is Off","message_data":""}}}],"id":"2522825007pn71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731881121263,"values":{"statecode":3}}],"id":"2522825008pn70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731881121266,"values":{"state_of_contactor":false}}],"id":"2522825009pn71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121273,"values":{"_event":{"type":"informational","status":"new","source":{"func":"switchLogic","component":"1730323243484","component_name":"DIDO_Controller","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: State of contactor for line no. 3 is Off","message_data":""}}}],"id":"2522825010pn70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731881121280,"values":{"statecode":3}}],"id":"2522825011pn71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731881121282,"values":{"state_of_contactor":false}}],"id":"2522825012pn70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121288,"values":{"power_supply":"On"}}],"id":"2522825013pn71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121293,"values":{"battery":"Off"}}],"id":"2522825014pn70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731881121297,"values":{"door_condition":"closed"}}],"id":"2522825015pn71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731881121302,"values":{"status":"OK"}}],"id":"2522825016pn70b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731881121305,"values":{"statecode":2}}],"id":"2522825017pn71b"}
|
||||
-"6lQGaY9RDywdVzObj0P1vrkPg4NBn3exEK51LWZq":[{"ts":1731881121308,"values":{"state_of_breaker":"On"}}],"id":"2522825018pn70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731881121311,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM"},"message":"testpanel: Circuit breaker was turned on - line no. 2","message_data":""}}}],"id":"2522825019pn71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731881121314,"values":{"status":"OK"}}],"id":"2522825020pn70b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731881121316,"values":{"statecode":2}}],"id":"2522825021pn71b"}
|
||||
-"gP1eOZVj3Q9lv5aDEk4EVP7rdpqW8yLm2BbKzJxM":[{"ts":1731881121318,"values":{"state_of_breaker":"On"}}],"id":"2522825022pn70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731881121347,"values":{"_event":{"type":"notice","status":"new","source":{"func":"CMD Manager: onData","component":"1619515097737","component_name":"CMD Manager","edge":"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo"},"message":"testpanel: Circuit breaker was turned on - line no. 3","message_data":""}}}],"id":"2522825023pn71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731881121353,"values":{"status":"OK"}}],"id":"2522825024pn70b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731881121360,"values":{"statecode":2}}],"id":"2522825025pn71b"}
|
||||
-"52dD6ZlV1QaOpRBmbAqK8bkKnGzWMLj4eJq38Pgo":[{"ts":1731881121362,"values":{"state_of_breaker":"On"}}],"id":"2522825026pn70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731884700377,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522885001lo71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731884700441,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"OK","statecode":34}}],"id":"2522885002lo70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731884700446,"values":{"state_of_main_switch":"closed"}}],"id":"2522885003lo71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731884700451,"values":{"power_supply":"On"}}],"id":"2522885004lo70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731884700455,"values":{"battery":"Off"}}],"id":"2522885005lo71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731884854298,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522887001ap71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731885414928,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : off","message_data":""}}}],"id":"2522897013ln71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731885415091,"values":{"_event":{"type":"informational","status":"new","source":{"func":"CMD Manager: process cmd","component":"1619515097737","component_name":"CMD Manager","edge":"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8"},"message":"testpanel: Switching profile point applied to line no. 3 : off","message_data":""}}}],"id":"2522897014ln70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1731885602197,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2522900001jc71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1732040930566,"values":{"edge_fw_version":"2024-10-14","maintenance_mode":false}}],"id":"2525489001lu71b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1732040930629,"values":{"electrometer_status":1,"twilight_sensor_status":1,"thermometer_status":0,"phase_1_status":1,"phase_2_status":1,"phase_3_status":1,"master_node_status":1,"status":"OK","statecode":34}}],"id":"2525489002lu70b"}
|
||||
-"PLBJzmK1r3Gynd6OW0gGYz0e5wV4vx9bDEqNgYR8":[{"ts":1732040930634,"values":{"state_of_main_switch":"closed"}}],"id":"2525489003lu71b"}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
LumDimm;NODE (HEX);NODE (DEC);Line;TB name
|
||||
1;299;665;3;gbv4nzqxW0XGAPKVNk8kr25ZQ2l3O6LRBprM97ew
|
||||
2;28A;650;3;0XYElWeKBNJn1gdoMG8lYdDALkPvj4V3xra2q6mO
|
||||
3;296;662;3;gbv4nzqxW0XGAPKVNk8kW48ZQ2l3O6LRBprM97ew
|
||||
4;297;663;1;LpkVlmq4b3jMwJQxBZ8akayrXAP6o97Ke0aOYEg2
|
||||
5;29C;668;3;lekrmdvO0BQG1ZW4AV8jeZ5M39xnN2wEbRgPjXLp
|
||||
6;2B1;689;3;q0rElBPdL6kxMAjnzVDRl95emNZY7oOv2wK9gb31
|
||||
7;2AB;683;3;XKQbz3WAwY21dGa0R453rWyJm9PZOjqlvpr6Nkeo
|
||||
8;2B0;688;3;PaGbQ3wBAZWOmRvK9VDpvz5endLJYopEqlkzNMxX
|
||||
9;2B9;697;3;joqRYBVL30k9eQWOlZ5qwpD2KJpNEmA6gPxXzwaM
|
||||
10;293;659;3;Ymn9oleRxJ0vw17WzAyGwdyEBk4ObdMXj2VgpNLG
|
||||
11;294;660;3;gj7zbKV46oQ1p2e0AJ8XqZDG3YNWaRrlOEXvBxmM
|
||||
12;295;661;3;laYK7Pomn2bNZXEpedDxAqyOJkQ3WwV49gqxLrAR
|
||||
13;2A0;672;2;0XYElWeKBNJn1gdoMG8lON5ALkPvj4V3xra2q6mO
|
||||
14;2B4;692;2;l9YkRpoB2vVa0mKqEO8ZGGDjW43eXnJML6GxzbwQ
|
||||
15;2B2;690;2;wGjQobgOK0n2YqBZmVDVR3DR9ep6EXA1ka3vzlP7
|
||||
16;27C;636;2;M6ogKQW09bOXewAYvZyvJqyJrV1aRnPGE37p42Nx
|
||||
17;27B;635;2;Vq2JaWpw1OdBKmNeoj8w605XE40l3kgL76Azb9QP
|
||||
18;2B6;694;2;Jm32GR1qpwQxlZza0N5mE15AP96YbOKLogrXVW4e
|
||||
19;2B5;693;2;KjbN4q7JPZmexgdnz2yKdn5YAWwO0Q3BMX6ERLoV
|
||||
20;2B3;691;1;lekrmdvO0BQG1ZW4AV8jzq8M39xnN2wEbRgPjXLp
|
||||
21;27F;639;3;BOjEzGRZ46bnp9wa2A8z76D0JkmW1QPNdrqevXVL
|
||||
22;27E;638;3;9xgzG4Op1BrKZPmoQkDrmj8E73ndJNMjavAwX2Re
|
||||
23;27D;637;3;koW06PeGrLlBp2YJQE5Ogw5RmMaXKzj3wOAZg9n7
|
||||
24;28F;655;2;RMgnK93rkoAazbqdQ4yBYpDZ1YXGx6pmwBeVEP2O
|
||||
25;288;648;2;gaMGN4x1e9JlZz0QPRDd9Rym6dVr3OpvqKnoWBbk
|
||||
26;298;664;1;oGVzxNWP9lrjaQ7vKODQ7g51gqp62YZREmdw3XBM
|
||||
27;29F;671;3;AvVdgzYJZaPx3oMqeED4Oj8NnmKkw716bRO90jLB
|
||||
28;280;640;2;WjBL12pg63eX4N9P7zy0XYyEJKmlbkGwZMx0avQV
|
||||
29;28B;651;2;qaAOzENGrvpbe0VoK7D6Ld519PZmdg3nl24JLQMk
|
||||
30;27A;634;2;NGWamnYqlP1wbgrZQxDAWm5e2X7OVAK69koR04vL
|
||||
31;29E;670;2;dlE1VQjYrNx9gZRmb38g1YyoLBO4qaAk2M6JPnG7
|
||||
32;281;641;2;vnmG4kJxaXWNBgMQq0D7Mz5e9oZzOAlr6LdR3w2V
|
||||
33;278;632;2;LpkVlmq4b3jMwJQxBZ8aM78rXAP6o97Ke0aOYEg2
|
||||
34;29D;669;3;Y9aLW03wOZkABvKXbMyL0lyV1xdNj72r4egqGRzJ
|
||||
35;2A8;680;1;KL2jNOVpdARa9XvoeJDPga8bkmPBxqn7Ww3gzGQ1
|
||||
36;2BA;698;1;mYnBzbeGaAL62jowRv59M35Xq9QpZ0K7O1dg4xVl
|
||||
37;29B;667;1;MzXBoWbEZjO0lrpqnRyoJ4DkmVeaNAGdL9g4QKxP
|
||||
38;289;649;1;0p2rwdP7aGoOQLJNgAynJNy6xWXbmMe3nvZqlzkV
|
||||
39;290;656;1;BrQx3NGKgVMRaXYAo9y1GE8ZzkWnj1le6bdOLE20
|
||||
40;2AA;682;1;vnreBJ6PMqgz20pYEL82XQyG1jkWwdQxZVNAOlmK
|
||||
41;285;645;1;jklN4JpQAx362o9XYZDN6wDgrWw1P7GEbdBM0vRV
|
||||
42;283;643;1;oZmYXEbw9lVWRv1jLxDe9bDdgAMz4PKQnNJ6eB23
|
||||
43;282;642;1;pEonaKBOGbj9034MgJ8W3G8qXvxNWVkAPQz21R6L
|
||||
44;287;647;1;BLQal6Pn9oz1KmNgek5Yqd50vd2MAbqG3OV7Rp4j
|
||||
45;286;646;1;4agVJ9dPQkmp1R2X3EDJKxyrK6ZlNoM0n7qxBOev
|
||||
46;29A;666;1;9PpgLEnvk4WMV6RmOJybMGDaeAXzo2BQNG3K17Zw
|
||||
47;28E;654;1;Mmp93b2nvd7OoqgBeEyEZq5kjlAV1Y4ZNXwW0zLG
|
||||
|
|
|
@ -1,404 +0,0 @@
|
|||
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 = 1;
|
||||
exports.output = 2;
|
||||
exports.options = { host: 'tb-stage.worksys.io', port: 1883, clientid: "", username: "" };
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="host" data-jc-config="placeholder:test.mosquitto.org;required:false" class="m">Hostname or IP address (if not empty - setting will override db setting)</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="port" data-jc-config="placeholder:1883;required:true" class="m">Port</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="clientid">@(Client id)</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="topic" data-jc-config="required:true" class="m">topic</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
|
||||
|
||||
const { promisifyBuilder } = require('./helper/db_helper');
|
||||
const fs = require('fs');
|
||||
const mqtt = require('mqtt');
|
||||
|
||||
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;
|
||||
|
||||
|
||||
const nosql = NOSQL('tbdatacloud');
|
||||
|
||||
|
||||
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;
|
||||
opts = {
|
||||
host: o.host,
|
||||
port: o.port,
|
||||
clientId: o.clientid,
|
||||
username: o.username,
|
||||
rejectUnauthorized: false,
|
||||
resubscribe: false
|
||||
};
|
||||
|
||||
|
||||
console.log("wsmqttpublich -> loadSettings from instance.options", instance.options);
|
||||
|
||||
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() {
|
||||
client.subscribe(`${o.topic}_backward`, (err) => {
|
||||
if (!err) {
|
||||
console.log("MQTT subscribed");
|
||||
}
|
||||
});
|
||||
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(err) {
|
||||
clientReady = false;
|
||||
|
||||
if (err && err.toString().indexOf('Error')) {
|
||||
instance.status("Err: "+err.code, "red");
|
||||
instance.send(SEND_TO.debug, {"message":"Client CLOSE signal received !", "error":err, "opt":opts });
|
||||
} else {
|
||||
instance.status("Disconnected", "red");
|
||||
instance.send(SEND_TO.debug, {"message":"Client CLOSE signal received !", "error":err, "opt":opts });
|
||||
}
|
||||
|
||||
client.reconnect();
|
||||
});
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
if(clientReady)
|
||||
{
|
||||
client.publish(`${o.topic}_forward`, data.data, {qos: 1});
|
||||
//console.log("ondata..",data.data)
|
||||
|
||||
|
||||
// Pokad ten error na 38 chápem tak tento parameter MUSÍ byt string...
|
||||
// Tak to musim dekódovat na strane Cloudu zas
|
||||
|
||||
}
|
||||
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)
|
||||
{
|
||||
try {
|
||||
let d = JSON.parse(data.data);
|
||||
//create new file from tbdata.nosql, if file size exceeds given limit, and clear tbdata.nosql
|
||||
makeBackupFromDbFile();
|
||||
|
||||
//write to tb
|
||||
d.id = UID();
|
||||
nosql.insert(d);
|
||||
} catch(e) {
|
||||
console.log("cloudconnect - unable to parse data from wsmqtt");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
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 o = JSON.parse(JSON.stringify(item));
|
||||
delete o.id;
|
||||
let message = JSON.stringify(o);
|
||||
|
||||
client.publish(`${o.topic}_forward`, message, {qos:1});
|
||||
//console.log("db...", message)
|
||||
//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);
|
||||
main();
|
||||
|
||||
};
|
||||
|
|
@ -1,175 +0,0 @@
|
|||
exports.id = 'csv_import';
|
||||
exports.title = 'CsvImport';
|
||||
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 = 'file-import';
|
||||
exports.options = { edge: "undefined" };
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="edge" data-jc-config="placeholder:undefined;required:true" class="m">CSV Import</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
exports.readme = `# load csv to table db`;
|
||||
|
||||
//config
|
||||
let delimiter = ";";
|
||||
let uniqueColumn = "node";
|
||||
let path = "flow/audit_test_panel.csv";
|
||||
let startFrom = 1;
|
||||
let table = "nodes";
|
||||
let mapImport = {
|
||||
2: "node",
|
||||
4: "tbname",
|
||||
3: "line"
|
||||
};
|
||||
|
||||
//10.0.0.62
|
||||
delimiter = ";";
|
||||
uniqueColumn = "node";
|
||||
path = "flow/audit_rvo14_lampy.csv";
|
||||
startFrom = 1;
|
||||
table = "nodes";
|
||||
mapImport = {
|
||||
1: "node",
|
||||
3: "tbname",
|
||||
2: "line"
|
||||
};
|
||||
|
||||
//notification
|
||||
delimiter = ";";
|
||||
uniqueColumn = undefined;
|
||||
path = "flow/notifikacie.csv";
|
||||
startFrom = 1;
|
||||
table = "notifications";
|
||||
mapImport = {
|
||||
0: "key",
|
||||
1: "weight",
|
||||
2: "en",
|
||||
3: "sk"
|
||||
};
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
//console.log("csv import installed");
|
||||
|
||||
instance.on("close", () => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
instance.on("data", (flowdata) => {
|
||||
|
||||
instance.send(0, "start import");
|
||||
console.log("csv import", flowdata.data);
|
||||
|
||||
//{table: "nodes", startFrom: 1, delimiter: ";", uniqueColumn: "node", path: "flow/audit_rvo14_lampy.csv", mapImport: {1: "node", 3: "tbname", 2: "line"}}
|
||||
|
||||
|
||||
if(typeof flowdata.data === 'object')
|
||||
{
|
||||
console.log("*******************", flowdata.data);
|
||||
|
||||
if(!flowdata.data.hasOwnProperty("table"))
|
||||
{
|
||||
instance.send(0, "!!!!csv import - nedefinovana tabulka");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!flowdata.data.hasOwnProperty("uniqueColumn"))
|
||||
{
|
||||
//instance.send(0, "!!!!csv import - nedefinovane uniqueColumn");
|
||||
//return;
|
||||
}
|
||||
|
||||
if(!flowdata.data.hasOwnProperty("path"))
|
||||
{
|
||||
instance.send(0, "!!!!csv import - nedefinovana cesta k suboru");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!flowdata.data.hasOwnProperty("mapImport"))
|
||||
{
|
||||
instance.send(0, "!!!!csv import - nedefinovany mapImport");
|
||||
return;
|
||||
}
|
||||
|
||||
table = flowdata.data.table;
|
||||
uniqueColumn = flowdata.data.uniqueColumn;
|
||||
if(uniqueColumn === "") uniqueColumn = undefined;
|
||||
|
||||
path = flowdata.data.path;
|
||||
mapImport = flowdata.data.mapImport;
|
||||
|
||||
if(flowdata.data.hasOwnProperty("delimiter")) delimiter = flowdata.data.delimiter;
|
||||
if(flowdata.data.hasOwnProperty("startFrom")) startFrom = flowdata.data.startFrom;
|
||||
}
|
||||
|
||||
|
||||
var db = TABLE(table);
|
||||
db.clear();
|
||||
|
||||
let keys = Object.keys(mapImport);
|
||||
|
||||
try {
|
||||
const data = fs.readFileSync(path, 'utf8')
|
||||
|
||||
let lines = data.split("\n");
|
||||
|
||||
for(let i = startFrom; i < lines.length; i++)
|
||||
{
|
||||
let line = lines[i];
|
||||
if(line === "") continue;
|
||||
|
||||
let data = line.split(delimiter);
|
||||
if(data.length == 0) continue;
|
||||
|
||||
let insertData = {};
|
||||
|
||||
keys.map(function(key){
|
||||
let k = mapImport[key];
|
||||
|
||||
//console.log("importineg", i, key, k);
|
||||
|
||||
if(data[key] != undefined) insertData[k] = data[key].trim();
|
||||
else{
|
||||
console.log("undefined", key, data);
|
||||
}
|
||||
});
|
||||
|
||||
console.log("insertData", insertData);
|
||||
|
||||
if(uniqueColumn != undefined)
|
||||
{
|
||||
db.insert(insertData, true).where(uniqueColumn, insertData[uniqueColumn]);
|
||||
}
|
||||
else
|
||||
{
|
||||
db.insert(insertData);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
console.log("csv import finished");
|
||||
instance.send(0, "csv import finished");
|
||||
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
instance.send(0, err);
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -40,6 +40,7 @@ exports.install = async function(instance) {
|
|||
const dbNodes = TABLE("nodes");
|
||||
const dbRelays = TABLE("relays");
|
||||
const dbSettings = TABLE("settings");
|
||||
const dbStatus = TABLE("status");
|
||||
const dbPins = TABLE("pins");
|
||||
const dbNotifications = TABLE("notifications");
|
||||
|
||||
|
|
@ -49,12 +50,14 @@ exports.install = async function(instance) {
|
|||
const responseSettings = await promisifyBuilder(dbSettings.find());
|
||||
const responseNodes = await promisifyBuilder(dbNodes.find());
|
||||
const responsePins = await promisifyBuilder(dbPins.find());
|
||||
const responseStatus = await promisifyBuilder(dbStatus.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.statusData = responseStatus[0];
|
||||
dbs.notificationsData = makeMapFromDbResult(response, "key");
|
||||
|
||||
//+|354|nodesdata.....+|482|nodesdata....
|
||||
|
|
@ -64,7 +67,7 @@ exports.install = async function(instance) {
|
|||
if(dbs.nodesData.hasOwnProperty("0")) delete dbs.nodesData["0"];
|
||||
|
||||
dbs.settings = {
|
||||
edge_fw_version : "2024-11-04", //rok-mesiac-den
|
||||
edge_fw_version : "2024-10-14", //rok-mesiac-den
|
||||
language : responseSettings[0]["lang"],
|
||||
rvo_name : responseSettings[0]["rvo_name"],
|
||||
project_id : responseSettings[0]["project_id"],
|
||||
|
|
@ -83,7 +86,6 @@ exports.install = async function(instance) {
|
|||
mqtt_clientid : responseSettings[0]["mqtt_clientid"],
|
||||
mqtt_username : responseSettings[0]["mqtt_username"],
|
||||
mqtt_port : responseSettings[0]["mqtt_port"],
|
||||
phases: responseSettings[0]["phases"],
|
||||
|
||||
//dynamic values
|
||||
masterNodeIsResponding : true, //cmd_manager
|
||||
|
|
|
|||
2266
flow/designer.json
2266
flow/designer.json
File diff suppressed because it is too large
Load diff
1654
flow/di_do_controller.js
Normal file
1654
flow/di_do_controller.js
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -621,6 +621,8 @@ exports.install = function(instance) {
|
|||
sendTelemetry(values, rvoTbName);
|
||||
}
|
||||
|
||||
console.log("-----from data")
|
||||
console.log(flowdata.data)
|
||||
sendRvoStatus();
|
||||
})
|
||||
|
||||
|
|
@ -797,7 +799,8 @@ exports.install = function(instance) {
|
|||
|
||||
async function sendRvoStatus() {
|
||||
|
||||
if(SETTINGS === undefined) return;
|
||||
if(!FLOW.dbLoaded) return;
|
||||
//if(SETTINGS === undefined) return;
|
||||
|
||||
const table = {
|
||||
"OK": 1,
|
||||
|
|
@ -819,7 +822,7 @@ exports.install = function(instance) {
|
|||
dataToTb["status"] = checkRvoStatus();
|
||||
dataToTb["statecode"] = calculateStateCode();
|
||||
|
||||
//console.log(dataToTb);
|
||||
console.log(dataToTb);
|
||||
sendTelemetry(dataToTb, rvoTbName);
|
||||
}
|
||||
|
||||
|
|
@ -854,7 +857,7 @@ exports.install = function(instance) {
|
|||
if(!SETTINGS.masterNodeIsResponding) status = "NOK";
|
||||
if(SETTINGS.no_voltage.size > 0) status = "NOK";
|
||||
|
||||
// console.log("rvo status",status)
|
||||
console.log("rvo status",status)
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
|||
43
flow/empty.js
Normal file
43
flow/empty.js
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
exports.id = 'id_bez_pomlcky';
|
||||
exports.title = 'nazov';
|
||||
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.npm = ['serialport'];
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="edge" data-jc-config="placeholder:undefined;required:true" class="m">CSV Import</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
exports.readme = `# readme`;
|
||||
|
||||
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
|
||||
|
||||
instance.on("close", () => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
instance.on("data", (flowdata) => {
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
151
flow/gettemperature.txt
Normal file
151
flow/gettemperature.txt
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
exports.id = 'gettemperature';
|
||||
exports.title = 'Thermometer';
|
||||
exports.group = 'Worksys';
|
||||
exports.color = '#5CB36D';
|
||||
exports.version = '1.0.2';
|
||||
exports.input = 1;
|
||||
exports.output = ["red", "white", "blue"];
|
||||
exports.author = 'Rastislav Kovac';
|
||||
exports.icon = 'thermometer-three-quarters';
|
||||
|
||||
exports.readme = `# Getting temperature values from RVO`;
|
||||
|
||||
const { errLogger, logger, monitor } = require('./helper/logger');
|
||||
|
||||
const SEND_TO = {
|
||||
debug: 0,
|
||||
tb: 1,
|
||||
di_do_controller: 2
|
||||
}
|
||||
|
||||
//read temperature - frequency
|
||||
let timeoutMin = 5;//minutes
|
||||
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
const { exec } = require('child_process');
|
||||
const { sendNotification } = require('./helper/notification_reporter.js');
|
||||
|
||||
let startRead;
|
||||
let dataToTb;
|
||||
let counter = 0;
|
||||
|
||||
let SETTINGS;
|
||||
let temperatureAddress = "";
|
||||
let rvoTbName = "";
|
||||
|
||||
|
||||
logger.debug(exports.title, "installed");
|
||||
|
||||
instance.on("close", function(){
|
||||
clearInterval(startRead);
|
||||
})
|
||||
|
||||
|
||||
const main = function(){
|
||||
|
||||
try {
|
||||
|
||||
if(SETTINGS.controller_type === "unipi")
|
||||
{
|
||||
clearInterval(startRead);
|
||||
return;
|
||||
}
|
||||
|
||||
if(temperatureAddress === "") throw "gettemperature: temperatureAddress is not defined";
|
||||
|
||||
exec(`owread -C ${temperatureAddress}/temperature`, (error, stdout, stderr) => {
|
||||
|
||||
if(!error)
|
||||
{
|
||||
parseData(stdout)
|
||||
return;
|
||||
}
|
||||
|
||||
sendNotification("main", rvoTbName, "thermometer_is_not_responding", {}, {"Error": error}, SEND_TO.tb, instance, "thermometer");
|
||||
logger.debug("gettemparature", error);
|
||||
monitor.info("Thermometer is not responding", error);
|
||||
|
||||
dataToTb = {
|
||||
[rvoTbName]: [
|
||||
{
|
||||
"ts": Date.now(),
|
||||
"values": {
|
||||
"status": "NOK"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
instance.send(SEND_TO.tb, dataToTb);
|
||||
instance.send(SEND_TO.di_do_controller, {sender: "gettemperature", status: "NOK"});
|
||||
});
|
||||
|
||||
}
|
||||
catch(err) {
|
||||
errLogger.error(exports.title, err);
|
||||
clearInterval(startRead);
|
||||
}
|
||||
}
|
||||
|
||||
const parseData = function(data) {
|
||||
|
||||
data = parseFloat(data);
|
||||
logger.debug("gettemperature", data);
|
||||
|
||||
if (!isNaN(data)){
|
||||
|
||||
|
||||
if(counter > 290)
|
||||
{
|
||||
instance.send(SEND_TO.debug, "[Get temperature component] - temperature data are comming again from RVO after more than 1 day break");
|
||||
sendNotification("parseData", rvoTbName, "thermometer_is_responding_again", {}, "", SEND_TO.tb, instance, "thermometer");
|
||||
}
|
||||
|
||||
logger.debug("gettemperature", data);
|
||||
|
||||
dataToTb = {
|
||||
[rvoTbName]: [
|
||||
{
|
||||
"ts": Date.now(),
|
||||
"values": {
|
||||
"temperature": Number(data.toFixed(2)),
|
||||
"status": "OK"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
instance.send(SEND_TO.tb, dataToTb);
|
||||
instance.send(SEND_TO.di_do_controller, {sender: "gettemperature", status: "OK"});
|
||||
|
||||
counter = 0;
|
||||
|
||||
} else {
|
||||
|
||||
counter++;
|
||||
monitor.info("gettemperature err", counter, data);
|
||||
|
||||
//ked je problem 1 den
|
||||
let day = 24 * 60 / timeoutMin;
|
||||
if(counter > day && counter < day + 2) {
|
||||
sendNotification("parseData", rvoTbName, "thermometer_sends_invalid_data", {}, "", SEND_TO.tb, instance, "thermometer");
|
||||
|
||||
instance.send(SEND_TO.debug, "[Get temperature component] - no temperature data from RVO for more than 1 day");
|
||||
instance.send(SEND_TO.di_do_controller, {sender: "gettemperature", status: "NOK"});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
instance.on("data", _ => {
|
||||
SETTINGS = FLOW.GLOBALS.settings;
|
||||
temperatureAddress = SETTINGS.temperature_address;
|
||||
rvoTbName = SETTINGS.rvoTbName;
|
||||
startRead = setInterval(main, timeoutMin * 1000 * 60);
|
||||
main();
|
||||
})
|
||||
|
||||
};
|
||||
|
|
@ -97,7 +97,9 @@ class ErrorToServiceHandler
|
|||
console.log("ErrorToServiceHandler------------------------>send to service", dataToInfoSender);
|
||||
|
||||
//TODO UGLY!!!
|
||||
if(this.projects_id === undefined) this.projects_id = FLOW.GLOBALS.settings.project_id;
|
||||
// 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)
|
||||
|
|
|
|||
1127
flow/modbus_citysys.js
Normal file
1127
flow/modbus_citysys.js
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,363 +0,0 @@
|
|||
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 500. 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 > 600 && 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 <= 600 && 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();
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
107
flow/monitorcpu.js
Normal file
107
flow/monitorcpu.js
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
exports.id = 'monitorcpu';
|
||||
exports.title = 'CPU';
|
||||
exports.version = '1.0.0';
|
||||
exports.author = 'Peter Širka';
|
||||
exports.group = 'Monitoring';
|
||||
exports.color = '#F6BB42';
|
||||
exports.output = 1;
|
||||
exports.icon = 'microchip';
|
||||
exports.options = { enabled: true };
|
||||
exports.click = true;
|
||||
exports.readme = `# CPU monitoring
|
||||
|
||||
This component monitors CPU \`% percentage\` consumption in Linux systems. It uses \`mpstat\` command.
|
||||
|
||||
__Data Example__:
|
||||
|
||||
\`\`\`javascript
|
||||
{
|
||||
cpu: 30, // percentage
|
||||
cores: [4, 60, 0], // percentage
|
||||
count: 3 // count of cores
|
||||
}
|
||||
\`\`\``;
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-3 m">
|
||||
<div data---="textbox__interval__placeholder:10000;increment:true;type:number;required:true;maxlength:10;align:center">@(Interval in milliseconds)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
var fields = ['CPU', '%idle'];
|
||||
var current = { cores: [], cpu: 0, count: 0 };
|
||||
var proc = null;
|
||||
var tproc = null;
|
||||
|
||||
instance.custom.kill = function() {
|
||||
if (proc) {
|
||||
proc.kill('SIGKILL');
|
||||
proc = null;
|
||||
}
|
||||
};
|
||||
|
||||
instance.custom.run = function() {
|
||||
|
||||
if (tproc) {
|
||||
clearTimeout(tproc);
|
||||
tproc = null;
|
||||
}
|
||||
|
||||
instance.custom.kill();
|
||||
proc = require('child_process').spawn('mpstat', ['-P', 'ALL', 10]);
|
||||
proc.stdout.on('data', U.streamer('\n\n', instance.custom.process));
|
||||
proc.stdout.on('error', function(e) {
|
||||
instance.error(e);
|
||||
instance.custom.kill();
|
||||
tproc = setTimeout(instance.custom.run, instance.options.interval || 5000);
|
||||
});
|
||||
};
|
||||
|
||||
instance.custom.process = function(chunk) {
|
||||
current.cpu = 0;
|
||||
chunk.toString('utf8').parseTerminal(fields, instance.custom.parse);
|
||||
current.count = current.cores.length;
|
||||
if (current.count) {
|
||||
instance.send2(current);
|
||||
instance.custom.status();
|
||||
}
|
||||
};
|
||||
|
||||
instance.custom.parse = function(values) {
|
||||
var val = 100 - values[1].parseFloat2();
|
||||
if (values[0] === 'all')
|
||||
current.cpu = val;
|
||||
else
|
||||
current.cores[+values[0]] = val;
|
||||
};
|
||||
|
||||
instance.custom.status = function() {
|
||||
if (instance.options.enabled)
|
||||
instance.status(current.cpu.floor(1) + '%');
|
||||
else
|
||||
instance.status('Disabled', 'red');
|
||||
};
|
||||
|
||||
instance.on('click', function() {
|
||||
instance.options.enabled = !instance.options.enabled;
|
||||
instance.custom.status();
|
||||
if (instance.options.enabled)
|
||||
instance.custom.run();
|
||||
else
|
||||
instance.custom.kill();
|
||||
});
|
||||
|
||||
instance.on('close', function() {
|
||||
instance.custom.kill();
|
||||
if (tproc) {
|
||||
clearTimeout(tproc);
|
||||
tproc = null;
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(instance.custom.run, 1000);
|
||||
};
|
||||
441
flow/mqtt.js
Normal file
441
flow/mqtt.js
Normal file
|
|
@ -0,0 +1,441 @@
|
|||
exports.id = 'mqtt';
|
||||
exports.title = 'MQTT broker';
|
||||
exports.group = 'MQTT';
|
||||
exports.color = '#888600';
|
||||
exports.version = '1.0.1';
|
||||
exports.icon = 'exchange';
|
||||
exports.input = true;
|
||||
exports.output = 0;
|
||||
exports.author = 'Martin Smola';
|
||||
exports.variables = true;
|
||||
exports.options = { host: '127.0.0.1', port: 1883 };
|
||||
exports.traffic = false;
|
||||
exports.npm = ['mqtt'];
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="host" data-jc-config="placeholder:test.mosquitto.org;required:true" class="m">Hostname or IP address</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="port" data-jc-config="placeholder:1883;required:true" class="m">Port</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="clientid">@(Client id)</div>
|
||||
<div class="help m">@(Supports variables, example: \`client_{device-id}\`)</div>
|
||||
<div data-jc="checkbox" data-jc-path="secure" class="m">@(Secure (ssl))</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="checkbox" data-jc-path="auth" class="m">@(Require Authorization)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-bind="?.auth__show:value">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="username" class="m">@(Username)</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="password" data-jc-config="type:password" class="m">@(Password)</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="checkbox" data-jc-path="lwt" class="m">@(LWT)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-bind="?.lwt__show:value">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="lwttopic">@(Last will topic)</div>
|
||||
<div class="help m">@(Supports variables, example: \`lwt/{device-id}\`)</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="lwtmessage">@(Last will message)</div>
|
||||
<div class="help m">@(Supports variables, example: \`{device-id} is offline\`)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
ON('save.mqtt', function(component, options) {
|
||||
!component.name && (component.name = '{0} @ {1}:{2}'.format(options.username || '', options.host, options.port || '1883'));
|
||||
});
|
||||
</script>`;
|
||||
|
||||
exports.readme = `
|
||||
# MQTT Broker
|
||||
|
||||
## Input
|
||||
Allows to change connection programaticaly
|
||||
\`\`\`javascipt
|
||||
{
|
||||
host: '1.2.3.4',
|
||||
port: '',
|
||||
secure: true/false,
|
||||
username: 'john',
|
||||
password: 'X',
|
||||
lwttopic: '',
|
||||
lwtmessage: '',
|
||||
clientid: ''
|
||||
}
|
||||
\`\`\`
|
||||
`;
|
||||
|
||||
var MQTT_BROKERS = [];
|
||||
var mqtt;
|
||||
|
||||
global.MQTT = {};
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
var broker;
|
||||
|
||||
mqtt = require('mqtt');
|
||||
|
||||
instance.on('data', function(flowdata){
|
||||
var data= flowdata.data;
|
||||
var options = instance.options;
|
||||
|
||||
if (data.host && data.port)
|
||||
return instance.custom.reconfigure(data, options);
|
||||
|
||||
if (data.close === true)
|
||||
instance.close(NOOP);
|
||||
});
|
||||
|
||||
instance.custom.reconfigure = function(o, old_options) {
|
||||
|
||||
if (old_options)
|
||||
MQTT_BROKERS = MQTT_BROKERS.remove(function(b){
|
||||
return b.id === old_options.id;
|
||||
});
|
||||
|
||||
var options = instance.options;
|
||||
|
||||
if (!options.host || !options.port) {
|
||||
instance.status('Not configured', 'red');
|
||||
return;
|
||||
}
|
||||
|
||||
options.id = (options.username || '') + '@' + options.host + ':' + options.port;
|
||||
|
||||
if (broker) {
|
||||
broker.close();
|
||||
EMIT('mqtt.brokers.status', 'reconfigured', old_options.id, options.id);
|
||||
}
|
||||
|
||||
instance.custom.createBroker();
|
||||
};
|
||||
|
||||
instance.custom.createBroker = function() {
|
||||
|
||||
ON('mqtt.brokers.status', brokerstatus);
|
||||
|
||||
var o = instance.options;
|
||||
var opts = {
|
||||
host: o.host,
|
||||
port: o.port,
|
||||
id: o.id,
|
||||
secure: o.secure,
|
||||
rejectUnauthorized: false,
|
||||
reconnectPeriod: 3000,
|
||||
resubscribe: false
|
||||
};
|
||||
|
||||
if (o.auth) {
|
||||
opts.username = o.username;
|
||||
opts.password = o.password;
|
||||
}
|
||||
|
||||
if (o.lwt) {
|
||||
opts.will = {
|
||||
topic: instance.arg(o.lwttopic),
|
||||
payload: instance.arg(o.lwtmessage)
|
||||
}
|
||||
}
|
||||
|
||||
if (o.clientid)
|
||||
opts.clientId = instance.arg(o.clientid);
|
||||
|
||||
broker = new Broker(opts);
|
||||
MQTT_BROKERS.push(broker);
|
||||
|
||||
instance.status('Ready');
|
||||
};
|
||||
|
||||
instance.close = function(done) {
|
||||
|
||||
broker && broker.close(function() {
|
||||
MQTT_BROKERS = MQTT_BROKERS.remove('id', instance.options.id);
|
||||
EMIT('mqtt.brokers.status', 'removed', instance.options.id);
|
||||
});
|
||||
|
||||
OFF('mqtt.brokers.status', brokerstatus);
|
||||
|
||||
done();
|
||||
};
|
||||
|
||||
function brokerstatus(status, brokerid, err) {
|
||||
if (brokerid !== instance.options.id)
|
||||
return;
|
||||
|
||||
switch (status) {
|
||||
case 'connecting':
|
||||
instance.status('Connecting', '#a6c3ff');
|
||||
break;
|
||||
case 'connected':
|
||||
instance.status('Connected', 'green');
|
||||
break;
|
||||
case 'disconnected':
|
||||
instance.status('Disconnected', 'red');
|
||||
break;
|
||||
case 'connectionfailed':
|
||||
instance.status('Connection failed', 'red');
|
||||
break;
|
||||
case 'error':
|
||||
instance.error('MQTT Error, ID: ' + instance.id + '\n ' + err);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
instance.on('options', instance.custom.reconfigure);
|
||||
instance.custom.reconfigure();
|
||||
};
|
||||
|
||||
FLOW.trigger('mqtt.brokers', function(next) {
|
||||
var brokers = [''];
|
||||
MQTT_BROKERS.forEach(n => brokers.push(n.id));
|
||||
next(brokers);
|
||||
});
|
||||
|
||||
MQTT.add = function(brokerid, componentid) {
|
||||
var broker = MQTT_BROKERS.findItem('id', brokerid);
|
||||
|
||||
if (broker)
|
||||
broker.add(componentid);
|
||||
};
|
||||
|
||||
MQTT.remove = function(brokerid, componentid) {
|
||||
var broker = MQTT_BROKERS.findItem('id', brokerid);
|
||||
broker && broker.remove(componentid);
|
||||
};
|
||||
|
||||
MQTT.publish = function(brokerid, topic, data, options) {
|
||||
var broker = MQTT_BROKERS.findItem('id', brokerid);
|
||||
if (broker)
|
||||
broker.publish(topic, data, options);
|
||||
else
|
||||
EMIT('mqtt.brokers.status', 'error', brokerid, 'No such broker');
|
||||
};
|
||||
|
||||
MQTT.subscribe = function(brokerid, componentid, topic, qos) {
|
||||
var broker = MQTT_BROKERS.findItem('id', brokerid);
|
||||
|
||||
if (!broker)
|
||||
return;
|
||||
|
||||
broker.add(componentid);
|
||||
broker.subscribe(componentid, topic, qos);
|
||||
};
|
||||
|
||||
MQTT.unsubscribe = function(brokerid, componentid, topic, qos) {
|
||||
var broker = MQTT_BROKERS.findItem('id', brokerid);
|
||||
if (!broker)
|
||||
return;
|
||||
|
||||
broker.unsubscribe(componentid, topic);
|
||||
broker.remove(componentid);
|
||||
};
|
||||
|
||||
MQTT.broker = function(brokerid) {
|
||||
return MQTT_BROKERS.findItem('id', brokerid);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
https://github.com/mqttjs/MQTT.js/blob/master/examples/client/secure-client.js
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
TODO
|
||||
|
||||
- add `birth` and `last will and testament` messages
|
||||
- add options to self.client.connect(broker [,options]); - credentials, certificate etc.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
function Broker(options) {
|
||||
var self = this;
|
||||
|
||||
if (!options.host || !options.port)
|
||||
return false;
|
||||
|
||||
self.connecting = false;
|
||||
self.connected = false;
|
||||
self.closing = false;
|
||||
self.components = [];
|
||||
self.subscribtions = {};
|
||||
self.id = options.id;
|
||||
self.options = options;
|
||||
setTimeout(function() {
|
||||
EMIT('mqtt.brokers.status', 'new', self.id);
|
||||
}, 500);
|
||||
return self;
|
||||
}
|
||||
|
||||
Broker.prototype.connect = function() {
|
||||
|
||||
var self = this;
|
||||
if (self.connected || self.connecting)
|
||||
return EMIT('mqtt.brokers.status', self.connected ? 'connected' : 'connecting', self.id);
|
||||
|
||||
self.connecting = true;
|
||||
var broker = self.options.secure ? 'mqtts://' : 'mqtt://' + self.options.host + ':' + self.options.port;
|
||||
|
||||
EMIT('mqtt.brokers.status', 'connecting', self.id);
|
||||
|
||||
self.client = mqtt.connect(broker, self.options);
|
||||
|
||||
self.client.on('connect', function() {
|
||||
self.connecting = false;
|
||||
self.connected = true;
|
||||
if (self.reconnecting) {
|
||||
EMIT('mqtt.brokers.status', 'reconnected', self.id);
|
||||
self.reconnecting = false;
|
||||
self.resubscribe();
|
||||
}
|
||||
EMIT('mqtt.brokers.status', 'connected', self.id);
|
||||
});
|
||||
|
||||
self.client.on('reconnect', function() {
|
||||
self.connecting = true;
|
||||
self.connected = false;
|
||||
self.reconnecting = true;
|
||||
EMIT('mqtt.brokers.status', 'connecting', self.id);
|
||||
});
|
||||
|
||||
self.client.on('message', function(topic, message) {
|
||||
message = message.toString();
|
||||
if (message[0] === '{') {
|
||||
TRY(function() {
|
||||
message = JSON.parse(message);
|
||||
}, () => FLOW.debug('MQTT: Error parsing data', message));
|
||||
}
|
||||
EMIT('mqtt.brokers.message', self.id, topic, message);
|
||||
});
|
||||
|
||||
self.client.on('close', function(err) {
|
||||
if (err && err.toString().indexOf('Error')) {
|
||||
self.connecting = false;
|
||||
self.connected = false;
|
||||
EMIT('mqtt.brokers.status', 'error', self.id, err.code);
|
||||
}
|
||||
|
||||
if (self.connected || !self.connecting) {
|
||||
self.connected = false;
|
||||
EMIT('mqtt.brokers.status', 'disconnected', self.id);
|
||||
} else if (self.connecting) {
|
||||
self.connecting = false;
|
||||
EMIT('mqtt.brokers.status', 'connectionfailed', self.id);
|
||||
}
|
||||
});
|
||||
|
||||
self.client.on('error', function(err) {
|
||||
|
||||
if (self.connecting) {
|
||||
self.client.end();
|
||||
self.connecting = false;
|
||||
EMIT('mqtt.brokers.status', 'error', self.id, err);
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
Broker.prototype.disconnect = function(reconnect) {
|
||||
var self = this;
|
||||
if (!self.closing)
|
||||
self.close(function(){
|
||||
reconnect && self.connect();
|
||||
});
|
||||
};
|
||||
|
||||
Broker.prototype.close = function(callback) {
|
||||
var self = this;
|
||||
self.closing = true;
|
||||
|
||||
if ((self.connected || self.connecting) && self.client && self.client.end)
|
||||
self.client.end(true, cb);
|
||||
else
|
||||
cb();
|
||||
|
||||
function cb() {
|
||||
EMIT('mqtt.brokers.status', 'disconnected', self.id);
|
||||
self.client && self.client.removeAllListeners();
|
||||
self.components = [];
|
||||
self.client = null;
|
||||
callback && callback();
|
||||
}
|
||||
};
|
||||
|
||||
Broker.prototype.subscribe = function(componentid, topic) {
|
||||
var self = this;
|
||||
self.subscribtions[topic] = self.subscribtions[topic] || [];
|
||||
if (self.subscribtions[topic].indexOf(componentid) > -1)
|
||||
return;
|
||||
self.client.subscribe(topic);
|
||||
self.subscribtions[topic].push(componentid);
|
||||
};
|
||||
|
||||
Broker.prototype.resubscribe = function() {
|
||||
var self = this;
|
||||
var topics = Object.keys(self.subscribtions);
|
||||
for (var i = 0; i < topics.length; i++)
|
||||
self.client.subscribe(topics[i]);
|
||||
};
|
||||
|
||||
Broker.prototype.unsubscribe = function(componentid, topic) {
|
||||
var self = this;
|
||||
var sub = self.subscribtions[topic];
|
||||
if (sub) {
|
||||
self.subscribtions[topic] = sub.remove(componentid);
|
||||
self.client.connected && !self.subscribtions[topic].length && self.client.unsubscribe(topic);
|
||||
}
|
||||
};
|
||||
|
||||
Broker.prototype.publish = function(topic, data, options) {
|
||||
var self = this;
|
||||
if (!self.connected)
|
||||
return;
|
||||
|
||||
if (typeof(data) === 'object') {
|
||||
options.qos = parseInt(data.qos || options.qos);
|
||||
options.retain = data.retain || options.retain;
|
||||
topic = data.topic || topic;
|
||||
data.payload && (data = typeof(data.payload) === 'string' ? data.payload : JSON.stringify(data.payload));
|
||||
}
|
||||
|
||||
if (options.qos !== 0 || options.qos !== 1 || options.qos !== 2)
|
||||
options.qos = null;
|
||||
|
||||
if (typeof(data) !== 'string')
|
||||
data = JSON.stringify(data);
|
||||
|
||||
self.client.publish(topic, data || '', options);
|
||||
};
|
||||
|
||||
Broker.prototype.add = function(componentid) {
|
||||
var self = this;
|
||||
self.components.indexOf(componentid) === -1 && self.components.push(componentid);
|
||||
self.connect();
|
||||
};
|
||||
|
||||
Broker.prototype.remove = function(componentid) {
|
||||
var self = this;
|
||||
self.components = self.components.remove(componentid);
|
||||
!self.components.length && self.disconnect();
|
||||
};
|
||||
171
flow/mqtt_listener.js
Normal file
171
flow/mqtt_listener.js
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
exports.id = 'mqttlistener';
|
||||
exports.title = 'MQTT listener';
|
||||
exports.group = 'MQTT';
|
||||
exports.color = '#888600';
|
||||
exports.version = '1.0.0';
|
||||
exports.icon = 'sign-out';
|
||||
exports.input = 1;
|
||||
exports.output = ["red", "white"];
|
||||
exports.author = 'Rastislav Kovac';
|
||||
exports.options = { host: "", port: 1883, clientid: "", username: "" };
|
||||
//exports.npm = ['mqtt', 'streamroller'];
|
||||
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="host" data-jc-config="placeholder:test.mosquitto.org;required:false" class="m">Hostname or IP address</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="port" data-jc-config="placeholder:1883;required:true" class="m">Port</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="clientid">@(Client id)</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="username" class="m">@(Username)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
|
||||
exports.readme = `
|
||||
# MQTT processor
|
||||
|
||||
Version 1.0.0
|
||||
|
||||
It serves as a client and subscribes to 'rpc' topic. It receives rpc calls from kovobel-prod01, which receives it from platform.
|
||||
|
||||
`;
|
||||
|
||||
const instanceSendTo = {
|
||||
debug: 0,
|
||||
rpcCall: 1,
|
||||
}
|
||||
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
|
||||
const mqtt = require("mqtt");
|
||||
|
||||
instance.on('options', loadNodes);
|
||||
|
||||
|
||||
function loadNodes()
|
||||
{
|
||||
|
||||
if(instance.options.host == "")
|
||||
{
|
||||
instance.status('No configuration', 'red');
|
||||
}
|
||||
else
|
||||
{
|
||||
var o = instance.options;
|
||||
opts = {
|
||||
host: o.host,
|
||||
port: o.port,
|
||||
clientId: o.clientid,
|
||||
rejectUnauthorized: false,
|
||||
resubscribe: true
|
||||
};
|
||||
|
||||
connectToServer();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function connectToServer()
|
||||
{
|
||||
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");
|
||||
client.subscribe('rpc', function (err) {
|
||||
if (!err) {
|
||||
client.publish('rpc', 'Hello mqtt');
|
||||
console.log('message published');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
client.on('reconnect', function() {
|
||||
instance.status("Reconnecting", "yellow");
|
||||
});
|
||||
|
||||
client.on('message', function(topic, message) {
|
||||
// message is type of buffer
|
||||
message = message.toString();
|
||||
|
||||
// instance.send(1, message);
|
||||
// return;
|
||||
|
||||
if (message[0] === '{') {
|
||||
|
||||
try {
|
||||
message = JSON.parse(message);
|
||||
|
||||
if (Object.keys(message).length < 2 || !Object.keys(message).includes("message")) return;
|
||||
|
||||
message.message = JSON.parse(message.message);
|
||||
instance.send(instanceSendTo.rpcCall, message);
|
||||
|
||||
} catch (e) {
|
||||
instance.debug(`MQTT: Error parsing data, ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
client.on('close', function(err) {
|
||||
if (err && err.toString().indexOf('Error')) {
|
||||
instance.status("Err: "+err.code, "red");
|
||||
instance.send(instanceSendTo.debug, {"message":"Broker CLOSE signal received !", "error":err, "opt":opts });
|
||||
} else {
|
||||
instance.status("Disconnected", "red");
|
||||
instance.send(instanceSendTo.debug, {"message":"Broker CLOSE signal received !", "error":err, "opt":opts });
|
||||
}
|
||||
});
|
||||
|
||||
client.on('error', function(err) {
|
||||
instance.status("Err: "+ err.code, "red");
|
||||
instance.send(instanceSendTo.debug, {"message":"Broker ERROR signal received !", "error":err, "opt":opts });
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//set opts accortding to options
|
||||
instance.reconfigure = function() {
|
||||
|
||||
var o = instance.options;
|
||||
opts = {
|
||||
host: o.host,
|
||||
port: o.port,
|
||||
clientId: o.clientid,
|
||||
rejectUnauthorized: false,
|
||||
resubscribe: true
|
||||
};
|
||||
|
||||
connectToServer();
|
||||
};
|
||||
|
||||
instance.close = function(done) {
|
||||
client.end();
|
||||
};
|
||||
|
||||
|
||||
loadNodes();
|
||||
|
||||
instance.on('options', instance.reconfigure);
|
||||
instance.reconfigure();
|
||||
};
|
||||
|
||||
|
||||
|
||||
317
flow/mqttprocessor.js
Normal file
317
flow/mqttprocessor.js
Normal file
|
|
@ -0,0 +1,317 @@
|
|||
exports.id = 'mqttprocessor';
|
||||
exports.title = 'MQTT processor';
|
||||
exports.group = 'MQTT';
|
||||
exports.color = '#888600';
|
||||
exports.version = '1.0.0';
|
||||
exports.icon = 'sign-out';
|
||||
exports.input = 1;
|
||||
exports.output = ["red", "white", "blue"];
|
||||
exports.author = 'Rastislav Kovac';
|
||||
exports.options = { host: "", port: 1883, clientid: "", username: "" };
|
||||
//exports.npm = ['mqtt', 'streamroller'];
|
||||
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="host" data-jc-config="placeholder:test.mosquitto.org;required:false" class="m">Hostname or IP address</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="port" data-jc-config="placeholder:1883;required:true" class="m">Port</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="clientid">@(Client id)</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="username" class="m">@(Username)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
|
||||
exports.readme = `
|
||||
# MQTT processor
|
||||
|
||||
Version 1.0.0
|
||||
|
||||
It serves as a client, listens and subscribes to nodes in citysys configuration.
|
||||
Is able to send messages to flow (as rpc calls from platform)
|
||||
|
||||
Added:
|
||||
- database collections,
|
||||
- rpc response
|
||||
`;
|
||||
|
||||
const instanceSendTo = {
|
||||
debug: 0,
|
||||
rpcCall: 1,
|
||||
cmdManager: 2
|
||||
}
|
||||
|
||||
const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper.js');
|
||||
const mqtt = require('mqtt');
|
||||
|
||||
|
||||
//topics = {joqRYBVL30k9eQWOlZ5qwpD2KJpNEmA6gPxXzwaM: 'lamp_697/brightness'} --> to get topic from dataToTb tb name.
|
||||
const topics = {};
|
||||
//tbNames = {'lamp_697/brightness': joqRYBVL30k9eQWOlZ5qwpD2KJpNEmA6gPxXzwaM }
|
||||
const tbNames = {};
|
||||
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
let client = null;
|
||||
let opts = null;
|
||||
|
||||
instance.on('options', loadNodes);
|
||||
|
||||
|
||||
async function loadNodes()
|
||||
{
|
||||
const nodes = TABLE("nodes");
|
||||
let nodesData = await promisifyBuilder(nodes.find());
|
||||
|
||||
nodesData.map(item => {
|
||||
const value = 'lamp_' + item.node + '/brightness';
|
||||
const key = item.tbname;
|
||||
topics[key] = value;
|
||||
tbNames[value] = key;
|
||||
})
|
||||
|
||||
// console.log('******* -------- ', topics);
|
||||
// console.log('******* -------- ', tbNames);
|
||||
|
||||
if(instance.options.host == "")
|
||||
{
|
||||
instance.status('No configuration', 'red');
|
||||
}
|
||||
else
|
||||
{
|
||||
var o = instance.options;
|
||||
opts = {
|
||||
host: o.host,
|
||||
port: o.port,
|
||||
clientId: o.clientid,
|
||||
rejectUnauthorized: false,
|
||||
resubscribe: true
|
||||
};
|
||||
|
||||
connectToServer();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function connectToServer()
|
||||
{
|
||||
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");
|
||||
// array of subscribed topics ==> Object.values(topics)
|
||||
client.subscribe(Object.values(topics), function (err) {
|
||||
if (!err) {
|
||||
client.publish('presence', 'Hello mqtt');
|
||||
console.log('message published');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
client.on('reconnect', function() {
|
||||
instance.status("Reconnecting", "yellow");
|
||||
});
|
||||
|
||||
client.on('message', function(topic, message) {
|
||||
// message is type of buffer
|
||||
message = message.toString();
|
||||
|
||||
if (message[0] === '{') {
|
||||
|
||||
try {
|
||||
message = JSON.parse(message);
|
||||
|
||||
// we ensure to process messages only with 1 key ==> {'lamp_698/brightness': 20 } and if topic is in topics
|
||||
if (Object.keys(message).length > 1 || !Object.values(topics).includes(topic)) return;
|
||||
|
||||
instance.send(0, {message:message, topic:topic})
|
||||
|
||||
const date = Date.now();
|
||||
const tbName = tbNames[topic];
|
||||
|
||||
|
||||
const transformToRpc = {
|
||||
"topic": "v1/gateway/rpc",
|
||||
"content": {
|
||||
// 'device' is not needed here in 3rd party systems
|
||||
"device": "KjbN4q7JPZmexgdnz2yKQ98YAWwO0Q3BMX6ERLoV",
|
||||
"data": {
|
||||
// 'id' is not needed here
|
||||
"id": 5,
|
||||
"method": "set_command",
|
||||
"params": {
|
||||
"entities": [
|
||||
{
|
||||
"entity_type": "street_luminaire",
|
||||
"tb_name": tbName
|
||||
}
|
||||
],
|
||||
"command": "dimming",
|
||||
"payload": {
|
||||
"value": message[topic]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
instance.send(instanceSendTo.cmdManager, transformToRpc);
|
||||
|
||||
} catch (e) {
|
||||
instance.debug(`MQTT: Error parsing data, ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
client.on('close', function(err) {
|
||||
if (err && err.toString().indexOf('Error')) {
|
||||
instance.status("Err: "+err.code, "red");
|
||||
instance.send(instanceSendTo.debug, {"message":"Broker CLOSE signal received !", "error":err, "opt":opts });
|
||||
} else {
|
||||
instance.status("Disconnected", "red");
|
||||
instance.send(instanceSendTo.debug, {"message":"Broker CLOSE signal received !", "error":err, "opt":opts });
|
||||
}
|
||||
});
|
||||
|
||||
client.on('error', function(err) {
|
||||
instance.status("Err: "+ err.code, "red");
|
||||
instance.send(instanceSendTo.debug, {"message":"Broker ERROR signal received !", "error":err, "opt":opts });
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//set opts accortding to options
|
||||
instance.reconfigure = function() {
|
||||
|
||||
var o = instance.options;
|
||||
opts = {
|
||||
host: o.host,
|
||||
port: o.port,
|
||||
clientId: o.clientid,
|
||||
rejectUnauthorized: false,
|
||||
resubscribe: true
|
||||
};
|
||||
|
||||
connectToServer();
|
||||
};
|
||||
|
||||
|
||||
instance.on('data', function(data) {
|
||||
const value = data.data;
|
||||
const nodeTbName = Object.keys(value)[0];
|
||||
|
||||
// tbnames of all lamps
|
||||
const nodes = Object.values(tbNames);
|
||||
|
||||
if(nodes.includes(nodeTbName))
|
||||
{
|
||||
|
||||
if(value[nodeTbName][0].values.hasOwnProperty('dimming'))
|
||||
{
|
||||
const key = nodeTbName;
|
||||
const tbValues = value[key][0].values;
|
||||
|
||||
Object.keys(tbValues).map(item => {
|
||||
if(item != 'dimming')
|
||||
{
|
||||
delete tbValues[item];
|
||||
}
|
||||
})
|
||||
|
||||
const topic = topics[key];
|
||||
// console.log('---- ***********', key, topic)
|
||||
// console.log('^^^^^^^^^^^^^^', value);
|
||||
|
||||
// transform data to send to 3rd party
|
||||
const v = value[key][0];
|
||||
v[topic] = v.values['dimming'];
|
||||
delete v.values;
|
||||
|
||||
client.publish(topic, JSON.stringify(v));
|
||||
}
|
||||
else if(value[nodeTbName][0].values.hasOwnProperty('status'))
|
||||
{
|
||||
const key = nodeTbName;
|
||||
const tbValues = value[key][0].values;
|
||||
|
||||
Object.keys(tbValues).map(item => {
|
||||
if(item != 'status')
|
||||
{
|
||||
delete tbValues[item];
|
||||
}
|
||||
})
|
||||
|
||||
// we expect topic to be 'lamp_000/brightness'. we must make 'lamp_000/status'
|
||||
const topic = topics[key].slice(0, 8) + '/status';
|
||||
// console.log('---- ***********', key, topic)
|
||||
// console.log('^^^^^^^^^^^^^^', value);
|
||||
|
||||
// transform data to send to 3rd party
|
||||
const v = value[key][0];
|
||||
v[topic] = v.values['status'];
|
||||
delete v.values;
|
||||
|
||||
client.publish(topic, JSON.stringify(v));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
instance.close = function(done) {
|
||||
client.end();
|
||||
};
|
||||
|
||||
|
||||
|
||||
loadNodes();
|
||||
|
||||
instance.on('options', instance.reconfigure);
|
||||
instance.reconfigure();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
[ {
|
||||
node: 683,
|
||||
tbname: 'XKQbz3WAwY21dGa0R453rWyJm9PZOjqlvpr6Nkeo',
|
||||
line: 3,
|
||||
profile: '{"intervals":[{"cct":3000,"value":0,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":100,"end_time":"21:20","start_time":"20:00"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"},{"cct":3000,"value":80,"end_time":"22:20","start_time":"21:50"},{"cct":3000,"value":70,"end_time":"22:50","start_time":"22:20"},{"cct":3000,"value":60,"end_time":"23:20","start_time":"22:50"},{"cct":3000,"value":50,"end_time":"23:50","start_time":"23:20"},{"cct":3000,"value":40,"end_time":"00:20","start_time":"23:50"},{"cct":3000,"value":100,"end_time":"05:30","start_time":"03:20"},{"cct":3000,"value":30,"end_time":"00:50","start_time":"00:20"},{"cct":3000,"value":20,"end_time":"01:20","start_time":"00:50"},{"cct":3000,"value":90,"end_time":"21:50","start_time":"21:20"},{"cct":3000,"value":30,"end_time":"01:50","start_time":"01:20"},{"cct":3000,"value":40,"end_time":"02:20","start_time":"01:50"},{"cct":3000,"value":50,"end_time":"02:50","start_time":"02:20"},{"cct":3000,"value":60,"end_time":"03:20","start_time":"02:50"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}',
|
||||
processed: true,
|
||||
status: true
|
||||
},
|
||||
{
|
||||
node: 688,
|
||||
tbname: 'PaGbQ3wBAZWOmRvK9VDpvz5endLJYopEqlkzNMxX',
|
||||
line: 3,
|
||||
profile: '{"intervals":[{"cct":3000,"value":0,"end_time":"20:00","start_time":"13:00"},{"cct":3000,"value":100,"end_time":"21:20","start_time":"20:00"},{"cct":3000,"value":0,"end_time":"13:00","start_time":"05:30"},{"cct":3000,"value":80,"end_time":"22:20","start_time":"21:50"},{"cct":3000,"value":70,"end_time":"22:50","start_time":"22:20"},{"cct":3000,"value":60,"end_time":"23:20","start_time":"22:50"},{"cct":3000,"value":50,"end_time":"23:50","start_time":"23:20"},{"cct":3000,"value":40,"end_time":"00:20","start_time":"23:50"},{"cct":3000,"value":100,"end_time":"05:30","start_time":"03:20"},{"cct":3000,"value":30,"end_time":"00:50","start_time":"00:20"},{"cct":3000,"value":20,"end_time":"01:20","start_time":"00:50"},{"cct":3000,"value":90,"end_time":"21:50","start_time":"21:20"},{"cct":3000,"value":30,"end_time":"01:50","start_time":"01:20"},{"cct":3000,"value":40,"end_time":"02:20","start_time":"01:50"},{"cct":3000,"value":50,"end_time":"02:50","start_time":"02:20"},{"cct":3000,"value":60,"end_time":"03:20","start_time":"02:50"}],"astro_clock":true,"dawn_lux_sensor":false,"dusk_lux_sensor":false,"dawn_lux_sensor_value":5,"dusk_lux_sensor_value":5,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"dawn_lux_sensor_time_window":30,"dusk_lux_sensor_time_window":30,"dawn_astro_clock_time_window":60,"dusk_astro_clock_time_window":60}',
|
||||
processed: true,
|
||||
status: true
|
||||
}
|
||||
]
|
||||
*/
|
||||
|
||||
|
||||
|
||||
134
flow/mqttpublish.js
Normal file
134
flow/mqttpublish.js
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
exports.id = 'mqttpublish';
|
||||
exports.title = 'MQTT publish';
|
||||
exports.group = 'MQTT';
|
||||
exports.color = '#888600';
|
||||
exports.version = '1.1.0';
|
||||
exports.icon = 'sign-out';
|
||||
exports.input = true;
|
||||
exports.output = 1;
|
||||
exports.author = 'Martin Smola';
|
||||
exports.options = {};
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div data-jc="dropdown" data-jc-path="broker" data-jc-config="datasource:mqttconfig.brokers;required:true" class="m">@(Brokers)</div>
|
||||
<div data-jc="textbox" data-jc-path="topic" data-jc-config="placeholder:hello/world">Topic</div>
|
||||
<div class="help m">@(Supports variables, example: \`device/{device-id}\`)</div>
|
||||
<div data-jc="textbox" data-jc-path="staticmessage" data-jc-config="placeholder:123">Static message(string)</div>
|
||||
<div class="help m">@(Supports variables), @(If specified then incoming data are ignored and this message is sent instead. Topic is required if static message is defined.)</div>
|
||||
<div data-jc="dropdown" data-jc-path="qos" data-jc-config="items:,0,1,2" class="m">@(QoS)</div>
|
||||
<div data-jc="checkbox" data-jc-path="retain" class="m">@(Retain)</div>
|
||||
</div>
|
||||
<script>
|
||||
var mqttconfig = { brokers: [] };
|
||||
ON('open.mqttpublish', function(component, options) {
|
||||
TRIGGER('mqtt.brokers', 'mqttconfig.brokers');
|
||||
});
|
||||
ON('save.mqttpublish', function(component, options) {
|
||||
!component.name && (component.name = options.broker + (options.topic ? ' -> ' + options.topic : ''));
|
||||
});
|
||||
</script>`;
|
||||
|
||||
exports.readme = `# MQTT publish
|
||||
|
||||
If the topic field is left empty and the data object does not have a 'topic' property then nothing is send.
|
||||
Also if data object has a valid topic property it is assumed the object also have data property which is send as a payload;
|
||||
Example:
|
||||
\`\`\`javacsript
|
||||
{
|
||||
topic: '/topic',
|
||||
data: {
|
||||
hello: 'world'
|
||||
}
|
||||
}
|
||||
// in above case only { hello: 'world' } is published
|
||||
\`\`\`
|
||||
|
||||
If the topic field is not empty then the entire incomming data object is passed to the output.`;
|
||||
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
var PUBLISH_OPTIONS = {};
|
||||
|
||||
var ready = false;
|
||||
|
||||
instance.custom.reconfigure = function() {
|
||||
|
||||
ready = false;
|
||||
|
||||
if (!MQTT.broker(instance.options.broker))
|
||||
return instance.status('No broker', 'red');
|
||||
|
||||
if (instance.options.broker) {
|
||||
|
||||
MQTT.add(instance.options.broker, instance.id);
|
||||
ready = true;
|
||||
PUBLISH_OPTIONS.retain = instance.options.retain || false;
|
||||
PUBLISH_OPTIONS.qos = parseInt(instance.options.qos || 0);
|
||||
return;
|
||||
}
|
||||
|
||||
instance.status('Not configured', 'red');
|
||||
};
|
||||
|
||||
instance.on('options', instance.custom.reconfigure);
|
||||
|
||||
instance.on('data', function(flowdata) {
|
||||
if (!ready)
|
||||
return;
|
||||
var msg = instance.options.staticmessage ? instance.arg(instance.options.staticmessage) : flowdata.data;
|
||||
var topic = instance.arg(instance.options.topic || msg.topic);
|
||||
if (topic) {
|
||||
if (msg.topic)
|
||||
msg = msg.data;
|
||||
MQTT.publish(instance.options.broker, topic, msg, PUBLISH_OPTIONS);
|
||||
} else
|
||||
instance.debug('MQTT publish no topic');
|
||||
|
||||
instance.send(flowdata);
|
||||
});
|
||||
|
||||
instance.on('close', function() {
|
||||
MQTT.remove(instance.options.broker, instance.id);
|
||||
OFF('mqtt.brokers.status', instance.custom.brokerstatus);
|
||||
});
|
||||
|
||||
|
||||
instance.custom.brokerstatus = function(status, brokerid, msg) {
|
||||
if (brokerid !== instance.options.broker)
|
||||
return;
|
||||
|
||||
switch (status) {
|
||||
case 'connecting':
|
||||
instance.status('Connecting', '#a6c3ff');
|
||||
break;
|
||||
case 'connected':
|
||||
instance.status('Connected', 'green');
|
||||
break;
|
||||
case 'disconnected':
|
||||
instance.status('Disconnected', 'red');
|
||||
break;
|
||||
case 'connectionfailed':
|
||||
instance.status('Connection failed', 'red');
|
||||
break;
|
||||
case 'new':
|
||||
!ready && instance.custom.reconfigure();
|
||||
break;
|
||||
case 'removed':
|
||||
instance.custom.reconfigure();
|
||||
break;
|
||||
case 'error':
|
||||
instance.status(msg, 'red');
|
||||
break;
|
||||
case 'reconfigured':
|
||||
instance.options.broker = msg;
|
||||
instance.reconfig();
|
||||
instance.custom.reconfigure();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ON('mqtt.brokers.status', instance.custom.brokerstatus);
|
||||
|
||||
instance.custom.reconfigure();
|
||||
};
|
||||
168
flow/mqttsubscribe.js
Normal file
168
flow/mqttsubscribe.js
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
exports.id = 'mqttsubscribe';
|
||||
exports.title = 'MQTT subscribe';
|
||||
exports.group = 'MQTT';
|
||||
exports.color = '#888600';
|
||||
exports.version = '1.1.0';
|
||||
exports.icon = 'sign-in';
|
||||
exports.output = 1;
|
||||
exports.variables = true;
|
||||
exports.author = 'Martin Smola';
|
||||
exports.options = {};
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div data-jc="dropdown" data-jc-path="broker" data-jc-config="datasource:mqttconfig.brokers;required:true" class="m">@(Select a broker)</div>
|
||||
<div data-jc="textbox" data-jc-path="topic" data-jc-config="placeholder:hello/world;required:true">Topic</div>
|
||||
<div class="help m">@(Supports variables, example: \`device/{device-id}\`)</div>
|
||||
<div data-jc="dropdown" data-jc-path="qos" data-jc-config="items:,0,1,2" class="m">@(QoS)</div>
|
||||
</div>
|
||||
<script>
|
||||
var mqttconfig = { brokers: [] };
|
||||
ON('open.mqttsubscribe', function(component, options) {
|
||||
TRIGGER('mqtt.brokers', 'mqttconfig.brokers');
|
||||
});
|
||||
ON('save.mqttsubscribe', function(component, options) {
|
||||
!component.name && (component.name = options.broker + (options.topic ? ' -> ' + options.topic : ''));
|
||||
});
|
||||
</script>`;
|
||||
|
||||
exports.readme = `
|
||||
# MQTT subscribe
|
||||
|
||||
The data recieved are passed to the output as follows:
|
||||
\`\`\`javascript
|
||||
{
|
||||
topic: '/lights/on',
|
||||
data: 'kitchen'
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
If the topic is wildcard then there's an array of matches in flowdata repository which can be used in Function component like so:
|
||||
\`\`\`javascript
|
||||
// wildcard -> /+/status
|
||||
// topic -> /devicename/status
|
||||
|
||||
var match = flowdata.get('mqtt_wildcard');
|
||||
// match === ['devicename']
|
||||
\`\`\`
|
||||
|
||||
More on wildcard topics [here](https://mosquitto.org/man/mqtt-7.html)
|
||||
`;
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
var old_topic;
|
||||
var ready = false;
|
||||
|
||||
instance.custom.reconfigure = function(o, old_options) {
|
||||
|
||||
|
||||
ready = false;
|
||||
|
||||
if (!MQTT.broker(instance.options.broker))
|
||||
return instance.status('No broker', 'red');
|
||||
|
||||
if (instance.options.broker && instance.options.topic) {
|
||||
|
||||
if (old_topic)
|
||||
MQTT.unsubscribe(instance.options.broker, instance.id, old_topic);
|
||||
|
||||
old_topic = instance.arg(instance.options.topic);
|
||||
MQTT.subscribe(instance.options.broker, instance.id, old_topic);
|
||||
ready = true;
|
||||
return;
|
||||
}
|
||||
|
||||
instance.status('Not configured', 'red');
|
||||
};
|
||||
|
||||
instance.on('options', instance.custom.reconfigure);
|
||||
|
||||
instance.on('close', function() {
|
||||
MQTT.unsubscribe(instance.options.broker, instance.id, instance.options.topic);
|
||||
OFF('mqtt.brokers.message', instance.custom.message);
|
||||
OFF('mqtt.brokers.status', instance.custom.brokerstatus);
|
||||
});
|
||||
|
||||
instance.custom.brokerstatus = function(status, brokerid, msg) {
|
||||
if (brokerid !== instance.options.broker)
|
||||
return;
|
||||
|
||||
switch (status) {
|
||||
case 'connecting':
|
||||
instance.status('Connecting', '#a6c3ff');
|
||||
break;
|
||||
case 'connected':
|
||||
instance.status('Connected', 'green');
|
||||
break;
|
||||
case 'disconnected':
|
||||
instance.status('Disconnected', 'red');
|
||||
break;
|
||||
case 'connectionfailed':
|
||||
instance.status('Connection failed', 'red');
|
||||
break;
|
||||
case 'new':
|
||||
!ready && instance.custom.reconfigure();
|
||||
break;
|
||||
case 'removed':
|
||||
instance.custom.reconfigure();
|
||||
break;
|
||||
case 'error':
|
||||
instance.status(msg, 'red');
|
||||
break;
|
||||
case 'reconfigured':
|
||||
instance.options.broker = msg;
|
||||
instance.reconfig();
|
||||
instance.custom.reconfigure();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
instance.custom.message = function(brokerid, topic, message) {
|
||||
if (brokerid !== instance.options.broker)
|
||||
return;
|
||||
|
||||
var match = mqttWildcard(topic, old_topic);
|
||||
if (match) {
|
||||
var flowdata = instance.make({ topic: topic, data: message })
|
||||
flowdata.set('mqtt_wildcard', match);
|
||||
instance.send2(flowdata);
|
||||
}
|
||||
}
|
||||
|
||||
ON('mqtt.brokers.message', instance.custom.message);
|
||||
ON('mqtt.brokers.status', instance.custom.brokerstatus);
|
||||
|
||||
instance.custom.reconfigure();
|
||||
};
|
||||
|
||||
// https://github.com/hobbyquaker/mqtt-wildcard
|
||||
function mqttWildcard(topic, wildcard) {
|
||||
if (topic === wildcard) {
|
||||
return [];
|
||||
} else if (wildcard === '#') {
|
||||
return [topic];
|
||||
}
|
||||
|
||||
var res = [];
|
||||
|
||||
var t = String(topic).split('/');
|
||||
var w = String(wildcard).split('/');
|
||||
|
||||
var i = 0;
|
||||
for (var lt = t.length; i < lt; i++) {
|
||||
if (w[i] === '+') {
|
||||
res.push(t[i]);
|
||||
} else if (w[i] === '#') {
|
||||
res.push(t.slice(i).join('/'));
|
||||
return res;
|
||||
} else if (w[i] !== t[i]) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (w[i] === '#') {
|
||||
i += 1;
|
||||
}
|
||||
|
||||
return (i === w.length) ? res : null;
|
||||
}
|
||||
191
flow/nosql.js
Normal file
191
flow/nosql.js
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
exports.id = 'nosql';
|
||||
exports.title = 'NoSQL';
|
||||
exports.version = '1.2.1';
|
||||
exports.group = 'Databases';
|
||||
exports.author = 'Martin Smola';
|
||||
exports.color = '#D770AD';
|
||||
exports.icon = 'database';
|
||||
exports.input = true;
|
||||
exports.output = 2;
|
||||
exports.options = {};
|
||||
exports.readme = `# NoSQL embedded
|
||||
|
||||
## Outputs
|
||||
|
||||
First output is response from nosql engine and second is the data passed in.
|
||||
|
||||
## Collection
|
||||
|
||||
if the collection field is left empty, then we try to look at \`flowdata.get('collection')\`, to set this value you need to use \`flowdata.set('collection', '<collection-name>')\` in previous component (currently only \`function\` can be used)
|
||||
|
||||
## Insert
|
||||
|
||||
- will insert recieved data
|
||||
- expects data to be an Object
|
||||
- returns error, success, id
|
||||
|
||||
## Read
|
||||
|
||||
- will read a document by id
|
||||
- expects data to be an Object with an \`id\` property
|
||||
- returns error, response
|
||||
|
||||
## Update
|
||||
|
||||
- will update document by id
|
||||
- expects data to be an Object with \`id\` property and all the props to be updated
|
||||
- returns error, response
|
||||
- if response is 0 then update failed
|
||||
|
||||
## Remove
|
||||
|
||||
- will remove document by id
|
||||
- expects data to be an Object with an \`id\` property
|
||||
- returns error, response
|
||||
- if response is 0 then remove failed
|
||||
|
||||
## Query
|
||||
|
||||
- will query DB
|
||||
- expects data to be an Array as shown bellow
|
||||
- returns error, response
|
||||
|
||||
\`\`\`javascript
|
||||
[
|
||||
['where', 'sensor', 'temp'], // builder.where('sensor', 'temp');
|
||||
['limit', 2] // builder.limit(2);
|
||||
]
|
||||
\`\`\``;
|
||||
|
||||
exports.html = `
|
||||
<div class="padding">
|
||||
<div data-jc="textbox" data-jc-path="collection" class="m mt10">DB collection name</div>
|
||||
<div data-jc="dropdown" data-jc-path="method" data-jc-config="required:true;items:insert,update,read,query,remove" class="m">@(Method)</div>
|
||||
<div data-jc="visible" data-jc-path="method" data-jc-config="if:value === 'insert'">
|
||||
<div data-jc="checkbox" data-jc-path="addid">Add unique ID to data before insert</div>
|
||||
</div>
|
||||
<div data-jc="visible" data-jc-path="method" data-jc-config="if:value === 'update'">
|
||||
<div data-jc="checkbox" data-jc-path="upsert">Insert document if it doesn't exist</div>
|
||||
<div data-jc="checkbox" data-jc-path="upsertid">Add unique ID to data before insert (only if it doesn't exist)</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
instance.on('data', function(flowdata, next) {
|
||||
|
||||
instance.send2(1, flowdata.clone());
|
||||
|
||||
var options = instance.options;
|
||||
var collection = options.collection || flowdata.get('collection');
|
||||
if (!collection) {
|
||||
flowdata.data = { err: '[DB] No collection specified' };
|
||||
next(0, flowdata);
|
||||
instance.error('[DB] No collection specified');
|
||||
return;
|
||||
}
|
||||
|
||||
var nosql = NOSQL(collection);
|
||||
var builder;
|
||||
|
||||
if (options.method === 'read') {
|
||||
|
||||
if (!flowdata.data.id) {
|
||||
flowdata.data = { err: '[DB] Cannot get record by id: `undefined`' };
|
||||
next(0, flowdata);
|
||||
instance.error('[DB] Cannot get record by id: `undefined`');
|
||||
return;
|
||||
}
|
||||
|
||||
builder = nosql.find();
|
||||
builder.where('id', flowdata.data.id);
|
||||
builder.first();
|
||||
builder.callback(function(err, response) {
|
||||
if (err) {
|
||||
instance.throw(err);
|
||||
} else {
|
||||
flowdata.data = { response: response };
|
||||
next(0, flowdata);
|
||||
}
|
||||
});
|
||||
|
||||
} else if (options.method === 'insert') {
|
||||
|
||||
options.addid && (flowdata.data.id = UID());
|
||||
nosql.insert(flowdata.data).callback(function(err) {
|
||||
if (err)
|
||||
instance.throw(err);
|
||||
else {
|
||||
flowdata.data = { success: err ? false : true, id: flowdata.data.id };
|
||||
next(0, flowdata);
|
||||
}
|
||||
});
|
||||
|
||||
} else if (options.method === 'query') {
|
||||
|
||||
var query = flowdata.data;
|
||||
builder = nosql.find();
|
||||
|
||||
query && query instanceof Array && query.forEach(function(q) {
|
||||
if (q instanceof Array) {
|
||||
var m = q[0];
|
||||
var args = q.splice(1);
|
||||
builder[m] && (builder[m].apply(builder, args));
|
||||
}
|
||||
});
|
||||
|
||||
builder.callback(function(err, response) {
|
||||
if (err) {
|
||||
instance.throw(err);
|
||||
} else {
|
||||
flowdata.data = { response: response || [] };
|
||||
next(0, flowdata);
|
||||
}
|
||||
});
|
||||
|
||||
} else if (options.method === 'update') {
|
||||
|
||||
if (!options.upsert && !flowdata.data.id) {
|
||||
flowdata.data = { err: '[DB] Cannot update record by id: `undefined`' };
|
||||
next(0, flowdata);
|
||||
instance.error('[DB] Cannot update record by id: `undefined`');
|
||||
return;
|
||||
}
|
||||
|
||||
if (options.upsert && (options.upsertid && !flowdata.data.id)) {
|
||||
flowdata.data.id = UID();
|
||||
builder = nosql.modify(flowdata.data, options.upsert);
|
||||
builder.where('id', flowdata.data.id);
|
||||
builder.callback(function(err, count) {
|
||||
if (err)
|
||||
instance.throw(err);
|
||||
else {
|
||||
flowdata.data = { response: count || 0 };
|
||||
next(0, flowdata);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
} else if (options.method === 'remove') {
|
||||
|
||||
if (!flowdata.data.id) {
|
||||
flowdata.data = { err: '[DB] Cannot remove record by id: `undefined`' };
|
||||
next(0, flowdata);
|
||||
instance.error('[DB] Cannot remove record by id: `undefined`');
|
||||
return;
|
||||
}
|
||||
|
||||
builder = nosql.remove();
|
||||
builder.where('id', flowdata.data.id);
|
||||
builder.callback(function(err, count) {
|
||||
if (err)
|
||||
instance.throw(err);
|
||||
else {
|
||||
flowdata.data = { response: count || 0 };
|
||||
next(0, flowdata);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
};
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
key;weight;en;sk
|
||||
switching_profile_point_applied_to_line;INFO;Switching profile point applied to line no. ${line} : ${value};Aplikovaný bod spínacieho profilu na línií č. ${line} : ${value}
|
||||
dusk_has_occured;INFO;Dusk has occured;Nastal súmrak
|
||||
dawn_has_occured;INFO;Dawn has occured;Nastal úsvit
|
||||
dimming_profile_was_successfully_received_by_node;NOTICE;Dimming profile was successfully received by node no. ${node};Stmievací profil bol úspešne prijatý nodom č. ${node}
|
||||
master_node_is_responding_again;NOTICE;Master node is responding again;Master node začal znovu odpovedať
|
||||
command_was_sent_from_terminal_interface;DEBUG;A command was sent from terminal interface;Z terminálu bol odoslaný príkaz
|
||||
master_node_is_not_responding;ALERT;Master node is not responding;Master node neodpovedá
|
||||
configuration_of_dimming_profile_to_node_failed;ALERT;Configuration of dimming profile to node no. ${node} has failed;Konfigurácia stmievacieho profilu pre node č. ${node} zlyhala
|
||||
circuit_breaker_was_turned_on_line;NOTICE;Circuit breaker was turned on - line no. ${line};Zapnutie ističa na línii č. ${line}
|
||||
circuit_breaker_was_turned_off_line;ERROR;Circuit breaker was turned off - line no. ${line};Vypnutie ističa na línií č. ${line}
|
||||
dimming_profile_was_processed_for_node;INFO;Dimming profile was processed for node no. ${node};Stmievací profil bol spracovaný pre node č. ${node}
|
||||
switching_profile_was_processed_for_line;INFO;Switching profile was processed for line no. ${line};Spínací profil bol spracovaný pre líniu č. ${line}
|
||||
thermometer_is_not_responding;WARNING;Thermometer is not responding;Teplomer neodpovedá
|
||||
thermometer_is_responding_again;NOTICE;Thermometer is responding again;Teplomer znovu odpovedá
|
||||
thermometer_sends_invalid_data;WARNING;Thermometer sends invalid data;Teplomer posiela neplatné hodnoty
|
||||
main_switch_has_been_turned_off;CRITICAL;Main switch has been turned off;Hlavný vypínač bol vypnutý
|
||||
main_switch_has_been_turned_on;NOTICE;Main switch has been turned on;Hlavný vypínač bol zapnutý
|
||||
power_supply_has_disconnected_input;ALERT;Power supply has disconnected input;Napájací zdroj nemá napätie na vstupe
|
||||
power_supply_works_correctly;NOTICE;Power supply works correctly ;Napájací zdroj pracuje správne
|
||||
battery_level_is_low;ERROR;Battery level is low;Batéria má nízku úroveň napätia
|
||||
battery_level_is_ok;NOTICE;Battery level is OK;Batéria má správnu úroveň napätia
|
||||
door_has_been_open;NOTICE;Door has been open;Dvere boli otvorené
|
||||
door_has_been_closed;NOTICE;Door has been closed;Dvere boli zatvorené
|
||||
door_has_been_open_without_permision_alarm_is_on;WARNING;Door has been open without permision - alarm is on;Dvere boli otvorené bez povolania - zapnutá siréna
|
||||
state_of_contactor_for_line;INFO;State of contactor for line no. ${line} is ${value};Stav stýkača pre líniu č. ${line} je ${value}
|
||||
local_database_is_corrupted;CRITICAL;;
|
||||
electrometer_is_not_responding;ERROR;Electrometer is not responding;Elektromer neodpovedá
|
||||
no_voltage_detected_on_phase;CRITICAL;No voltage detected on phase no. ${phase};Na fáze č. ${phase} nie je napätie
|
||||
electrometer_is_responding_again;NOTICE;Electrometer is responding again;Elektromer znovu odpovedá
|
||||
voltaga_on_phase_has_been_restored;NOTICE;Voltaga on phase no. ${phase} has been restored;Napätie na fáze č. ${phase} bolo obnovené
|
||||
|
595
flow/operations_error.csv
Normal file
595
flow/operations_error.csv
Normal file
|
|
@ -0,0 +1,595 @@
|
|||
Production line;Operation;Error type;Error code;Orig Message (EN);User defined error
|
||||
CMFB;OP10;C_STOP;121;Machine Not At Home Position;
|
||||
CMFB;OP10;C_STOP;122;Auto Mode Not Selected;
|
||||
CMFB;OP10;C_STOP;125;Part NOK;
|
||||
CMFB;OP10;C_STOP;140;Left Shift Conduit Contact Detect Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;141;Left Select Conduit Contact Detect Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;142;Right Shift Conduit Contact Detect Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;143;Right Select Conduit Contact Detect Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;144;Left Shift Conduit In Place Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;145;Left Select Conduit In Place Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;146;Right Select Conduit In Place Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;147;Left Shift Conduit In Place Sensor Backcheck Error;
|
||||
CMFB;OP10;C_STOP;148;Left_Shift_Conduit_Placed_In_Place Sensors Backcheck Error;
|
||||
CMFB;OP10;C_STOP;149;Left_Select_Conduit_Placed_In_Place Sensors Backcheck Error;
|
||||
CMFB;OP10;C_STOP;150;Right_Shift_Conduit_Placed_In_Place Sensors Backcheck Error;
|
||||
CMFB;OP10;C_STOP;151;Right_Select_Conduit_Placed_In_Place Sensors Backcheck Error;
|
||||
CMFB;OP10;I_STOP;101;Left Clampping Conduit Cylinder Home Position Timeout Error [I3.1&I3.3,Q3.3],;
|
||||
CMFB;OP10;I_STOP;102;Left Clampping Conduit Cylinder Work Position Timeout Error [I3.0&I3.2,Q3.2],;
|
||||
CMFB;OP10;I_STOP;103;Left Clampping Conduit Cylinder Sensors Miscompare [I3.1&I3.3,I3.0&I3.2],;
|
||||
CMFB;OP10;I_STOP;104;Right Clampping Conduit Cylinder Work Position Timeout Error [I4.0&I4.2,Q3.4],;
|
||||
CMFB;OP10;I_STOP;105;Right Clampping Conduit Cylinder Home Position Timeout Error [I4.1&I4.3,Q3.5],;
|
||||
CMFB;OP10;I_STOP;106;Right Clampping Conduit Cylinder Sensors Miscompare [I4.1&I4.3,I4.0&I4.2],;
|
||||
CMFB;OP10;I_STOP;107;Right Clipping Conduit Cylinder Work Position Timeout Error [I5.2,Q3.6],;
|
||||
CMFB;OP10;I_STOP;108;Right Clipping Conduit Cylinder Home Position Timeout Error [I5.3,Q3.7],;
|
||||
CMFB;OP10;I_STOP;109;Right Clipping Cylinder Sensors Miscompare [I3.1&I3.3,I3.0&I3.2],;
|
||||
CMFB;OP10;I_STOP;110;Left Clipping Cylinder Work Position Timeout Error [I6.2,Q5.2],;
|
||||
CMFB;OP10;I_STOP;111;Left Clipping Cylinder Home Position Timeout Error [I6.3,Q5.3],;
|
||||
CMFB;OP10;I_STOP;112;Left Clipping Cylinder Sensors Miscompare [I6.2,I6.3],;
|
||||
CMFB;OP10;I_STOP;113;Right Striping Cylinder Work Position Timeout Error [I5.0,Q4.0],;
|
||||
CMFB;OP10;I_STOP;114;Right Striping Cylinder Home Position Timeout Error [I3.1&I3.3,Q3.3],;
|
||||
CMFB;OP10;I_STOP;115;Right Striping Cylinder Sensors Miscompare [I3.1&I3.3,I3.0&I3.2],;
|
||||
CMFB;OP10;I_STOP;116;Left Striping Cylinder Work Position Timeout Error [I6.0,Q5.4],;
|
||||
CMFB;OP10;I_STOP;117;Left Stripping Cylinder Work Position Timeout Error [I6.1,Q5.5],;
|
||||
CMFB;OP10;I_STOP;118;Left Stripping Cylinder Sensors Miscompare [I6.0,I6.1],;
|
||||
CMFB;OP10;I_STOP;119;Left Escaping Cylinder Work Position Timeout Error [I6.4,Q5.6],;
|
||||
CMFB;OP10;I_STOP;120;Left Escaping Cylinder Home Position Timeout Error [I6.5,Q5.7],;
|
||||
CMFB;OP10;I_STOP;121;Left Escaping Cylinder Sensors Miscompare [I6.4,I6.5],;
|
||||
CMFB;OP10;I_STOP;122;Right Escaping Cylinder Work Position Timeout Error [I5.4,Q4.2],;
|
||||
CMFB;OP10;I_STOP;123;Right Escaping Cylinder Home Position Timeout Error [I5.5,Q4.3],;
|
||||
CMFB;OP10;I_STOP;124;Right Escaping Cylinder Sensors Miscompare [I5.4,I5.5],;
|
||||
CMFB;OP10;I_STOP;125;UP Clamping End of Conduit Cylinder Work Position Timeout Error [I8.0&I8.4,Q4.7],;
|
||||
CMFB;OP10;I_STOP;126;UP Clamping End of Conduit Cylinder Home Position Timeout Error [I8.1&I8.5,Q4.6],;
|
||||
CMFB;OP10;I_STOP;127;UP Clamping End of Conduit Cylinder Sensors Miscompare [I8.0&I8.4,I8.1&I8.5],;
|
||||
CMFB;OP10;I_STOP;128;DOWN Clamping End of Conduit Cylinder Work Position Timeout Error [I8.2&I8.6,Q4.4],;
|
||||
CMFB;OP10;I_STOP;129;DOWN Clamping End of Conduit Cylinder Home Position Timeout Error [I8.3&I8.7,Q4.5],;
|
||||
CMFB;OP10;I_STOP;130;DOWN Clamping End of Conduit Cylinder Sensors Miscompare [I8.2&I8.6,I8.3&I8.7],;
|
||||
CMFB;OP10;I_STOP;131;Fixture Moving Cylinder Work Position Timeout Error [I7.0,Q5.0],;
|
||||
CMFB;OP10;I_STOP;132;Fixture Moving Cylinder Home Position Timeout Error [I7.1,Q5.1],;
|
||||
CMFB;OP10;I_STOP;133;Fixture Moving Cylinder Sensors Miscompare Error[I7.0,I7.1],;
|
||||
CMFB;OP10;I_STOP;134;Hydraulic Cylinder Work Positio Timeout Error,;
|
||||
CMFB;OP10;I_STOP;135;Hydraulic Cylinder Home Position Timeout Error[I7.2],;
|
||||
CMFB;OP10;I_STOP;136;Hydraulic Cylinder Sensors Miscompare Error,;
|
||||
CMFB;OP10;I_STOP;137;Left Press Conduit Cylinder Work Positio Timeout Error[I10.3],;
|
||||
CMFB;OP10;I_STOP;138;Left Press Conduit Cylinder Home Positio Timeout Error[I10.2],;
|
||||
CMFB;OP10;I_STOP;139;Left Press Conduit Cylinder Sensors Miscompare Error[I10.2,I10.3],;
|
||||
CMFB;OP10;I_STOP;140;Right Press Conduit Cylinder Work Positio Timeout Error[I10.5],;
|
||||
CMFB;OP10;I_STOP;141;Right Press Conduit Cylinder Home Positio Timeout Error[I10.4],;
|
||||
CMFB;OP10;I_STOP;142;Right Press Conduit Cylinder Sensors Miscompare Error[I10.4,I10.5],;
|
||||
CMFB;OP10;I_STOP;151;Emergency Stop Relay Not ON,Pls Press Reset Button.,;
|
||||
CMFB;OP10;I_STOP;152;Emergency Stop Button Pressed;
|
||||
CMFB;OP20A;C_STOP;101;Light Curtain Blocked(I2.0),;
|
||||
CMFB;OP20A;C_STOP;121;Machine Not At Home Position,;
|
||||
CMFB;OP20A;C_STOP;122;Auto Mode Not Selected,;
|
||||
CMFB;OP20A;C_STOP;125;The Part Is NOK,;
|
||||
CMFB;OP20A;C_STOP;140;Grommet Assembly_PositionLeft sensor backcheck fault[I8.0],;
|
||||
CMFB;OP20A;C_STOP;141;Grommet Assembly_PositionRight sensor backcheck fault[I8.1],;
|
||||
CMFB;OP20A;C_STOP;142;AssemblyOK_Left_Front sensor backcheck fault[I8.2],;
|
||||
CMFB;OP20A;C_STOP;143;AssemblyOK_Left_Back sensor backcheck fault[I8.3],;
|
||||
CMFB;OP20A;C_STOP;144;AssemblyOK_Right_Front sensor backcheck fault[I8.4],;
|
||||
CMFB;OP20A;C_STOP;145;AssemblyOK_Right_Back sensor backcheck fault[I8.5],;
|
||||
CMFB;OP20A;C_STOP;146;Grommet present sensor backcheck fault[I5.6],;
|
||||
CMFB;OP20A;C_STOP;147;Clip check_front sensor backcheck fault[I9.6],;
|
||||
CMFB;OP20A;C_STOP;148;Clip check_back sensor backcheck fault[9.7],;
|
||||
CMFB;OP20A;C_STOP;149;Gromment left sensor backcheck fault[I8.6],;
|
||||
CMFB;OP20A;C_STOP;150;Check Sensor 11 Backcheck Error,;
|
||||
CMFB;OP20A;C_STOP;151;Check Sensor 12 Backcheck Error,;
|
||||
CMFB;OP20A;C_STOP;152;Check Sensor 13 Backcheck Error;
|
||||
CMFB;OP20A;I_STOP;100;Pressing cylinder Sensor Miscompare[I4.4,I4.5],;
|
||||
CMFB;OP20A;I_STOP;101;Clip ClampCylinder_front Work Position Timeout Errror[I9.1],;
|
||||
CMFB;OP20A;I_STOP;102;Clip ClampCylinder_front Home Position Timeout Errror[I9.0],;
|
||||
CMFB;OP20A;I_STOP;103;Clip ClampCylinder_front Sensor Miscompare[I9.0,I9.1],;
|
||||
CMFB;OP20A;I_STOP;104;Clip ClampCylinder_back Work Position Timeout Errror[I9.3],;
|
||||
CMFB;OP20A;I_STOP;105;Clip ClampCylinder_back Home Position Timeout Errror[I9.2],;
|
||||
CMFB;OP20A;I_STOP;106;Clip ClampCylinder_back Sensor Miscompare[I9.2,I9.3],;
|
||||
CMFB;OP20A;I_STOP;107;Clip Assembly Cylinder Work Position Timeout Errror[I9.5],;
|
||||
CMFB;OP20A;I_STOP;116;Clip Assembly Cylinder Home Position Timeout Errror[I9.4],;
|
||||
CMFB;OP20A;I_STOP;117;Clip Assembly Cylinder Sensor Miscompare[I9.4,I9.5],;
|
||||
CMFB;OP20A;I_STOP;151;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP20A;I_STOP;152;Emergency Stop Button Pressed;
|
||||
CMFB;OP20B;C_STOP;100;Load Material cylinder Work Position Timeout Errror[I4.1],;
|
||||
CMFB;OP20B;C_STOP;101;Load Material cylinder Home Position Timeout Errror[I4.0],;
|
||||
CMFB;OP20B;C_STOP;102;Load Material cylinder Sensor Miscompare[I4.0,I4.1],;
|
||||
CMFB;OP20B;C_STOP;103;The Assembly of cylinder Work Position Timeout Errror[I4.3],;
|
||||
CMFB;OP20B;C_STOP;104;The Assembly of cylinder Home Position Timeout Errror[I4.2],;
|
||||
CMFB;OP20B;C_STOP;105;The Assembly of cylinder Sensor Miscompare[I4.2,I4.3],;
|
||||
CMFB;OP20B;C_STOP;106;Pressing cylinder Work Position Timeout Errror[I4.5],;
|
||||
CMFB;OP20B;C_STOP;107;Pressing cylinder Home Position Timeout Errror[I4.4],;
|
||||
CMFB;OP20B;C_STOP;108;Pressing cylinder Sensor Miscompare[I4.4,I4.5],;
|
||||
CMFB;OP20B;C_STOP;109;Clip ClampCylinder_front Work Position Timeout Errror[I9.1],;
|
||||
CMFB;OP20B;C_STOP;110;Clip ClampCylinder_front Home Position Timeout Errror[I9.0],;
|
||||
CMFB;OP20B;C_STOP;111;Clip ClampCylinder_front Sensor Miscompare[I9.0,I9.1],;
|
||||
CMFB;OP20B;C_STOP;112;Clip ClampCylinder_back Work Position Timeout Errror[I9.3],;
|
||||
CMFB;OP20B;C_STOP;113;Clip ClampCylinder_back Home Position Timeout Errror[I9.2],;
|
||||
CMFB;OP20B;C_STOP;114;Clip ClampCylinder_back Sensor Miscompare[I9.2,I9.3],;
|
||||
CMFB;OP20B;C_STOP;115;Clip Assembly Cylinder Work Position Timeout Errror[I9.5],;
|
||||
CMFB;OP20B;C_STOP;126;Clip Assembly NOK!,;
|
||||
CMFB;OP20B;C_STOP;140;Select Damper Prestretching sensor backcheck fault[I5.0],;
|
||||
CMFB;OP20B;C_STOP;141;Select Omgea Prestretching sensor backcheck fault[I5.1],;
|
||||
CMFB;OP20B;C_STOP;142;Shift Damper Prestretching sensor backcheck fault[I5.2],;
|
||||
CMFB;OP20B;C_STOP;143;Shift Omgea Prestretching sensor backcheck fault[I5.3],;
|
||||
CMFB;OP20B;C_STOP;144;Gromment ASSY Postion1 sensor backcheck fault[I5.4],;
|
||||
CMFB;OP20B;C_STOP;145;Gromment ASSY Postion2 sensor backcheck fault[I5.5],;
|
||||
CMFB;OP20B;C_STOP;146;Grommet present_Right sensor backcheck fault[I5.6];
|
||||
CMFB;OP20B;I_STOP;100;Rotating Pressure cylinder Sensor Miscompare[I7.2,I7.3],;
|
||||
CMFB;OP20B;I_STOP;101;Cover Cylinder Work Position Timeout Errror[I7.1],;
|
||||
CMFB;OP20B;I_STOP;102;Cover Cylinder Home Position Timeout Errror[I7.0],;
|
||||
CMFB;OP20B;I_STOP;103;Cover Cylinder Sensor Miscompare[I7.0,I7.1],;
|
||||
CMFB;OP20B;I_STOP;108;Remodel cylinder Work Position Timeout Errror[I7.7],;
|
||||
CMFB;OP20B;I_STOP;109;Remodel cylinder Home Position Timeout Errror[I7.6],;
|
||||
CMFB;OP20B;I_STOP;110;Remodel cylinder Sensor Miscompare[I7.6,I7.7],;
|
||||
CMFB;OP20B;I_STOP;111;Limit cylinder Work Position Timeout Errror[I7.5],;
|
||||
CMFB;OP20B;I_STOP;112;Limit cylinder Home Position Timeout Errror[I7.4],;
|
||||
CMFB;OP20B;I_STOP;113;Limit cylinder Sensor Miscompare[I7.4,I7.5],;
|
||||
CMFB;OP20B;I_STOP;114;Rotating Pressure cylinder Work Position Timeout Errror[I7.3],;
|
||||
CMFB;OP20B;I_STOP;115;Rotating Pressure cylinder Home Position Timeout Errror[I7.2];
|
||||
CMFB;OP30A;C_STOP;101; Left Station Light Curtain Blocked(I2.0),;
|
||||
CMFB;OP30A;C_STOP;121; Machine Not At Home Position_L,;
|
||||
CMFB;OP30A;C_STOP;122; Auto Mode Not Selected_L,;
|
||||
CMFB;OP30A;C_STOP;125; The Part Of Station Is NOK,;
|
||||
CMFB;OP30A;C_STOP;140; left front select swivetube present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;141; left front select swivetube assy present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;142; left front select omgea present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;143; left inside select swivetube present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;144; left inside select swivetube assy present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;145; left inside select omgea present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;146; right outside shift omgea present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;147; right outside shift swiveltube assy present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;148; right outside shift swiveltube present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;149; right inside shift omgea present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;150; right inside shift swiveltube assy present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;151; right inside shift swiveltube present sensor backcheck fault,;
|
||||
CMFB;OP30A;C_STOP;152; romemet assy present sensor backcheck fault;
|
||||
CMFB;OP30A;I_STOP;100;left front select rotating cylinder Work Position Timeout Errror[I3.1],;
|
||||
CMFB;OP30A;I_STOP;101;left front select rotating cylinder Home Position Timeout Errror[I3.0],;
|
||||
CMFB;OP30A;I_STOP;102;left front select rotating cylinder Sensor Miscompare[I3.0,I3.1],;
|
||||
CMFB;OP30A;I_STOP;103;left front select pull in cylinder Work Position Timeout Errror[I3.3],;
|
||||
CMFB;OP30A;I_STOP;104;left front select pull in cylinder Home Position Timeout Errror[I3.2],;
|
||||
CMFB;OP30A;I_STOP;105;left front select pull in cylinder Sensor Miscompare[I3.2,I3.3],;
|
||||
CMFB;OP30A;I_STOP;106;outside select prepull testing force not reach 1000N,;
|
||||
CMFB;OP30A;I_STOP;107;outside select prepull testing cylinder Home Position Timeout Errror[I3.4],;
|
||||
CMFB;OP30A;I_STOP;108;outside select prepull testing cylinder Sensor Miscompare[I3.4,I3.5],;
|
||||
CMFB;OP30A;I_STOP;109;left outside lifting release cylinder Work Position Timeout Errror[I3.7],;
|
||||
CMFB;OP30A;I_STOP;110;left outside lifting release cylinder Home Position Timeout Errror[I3.6],;
|
||||
CMFB;OP30A;I_STOP;111;left outside lifting release cylinder Cylinder Sensor Miscompare[I3.6,I3.7],;
|
||||
CMFB;OP30A;I_STOP;112;left outside select griping cylinder Work Position Timeout Errror[I4.1],;
|
||||
CMFB;OP30A;I_STOP;113;left outside select griping cylinder Home Position Timeout Errror[I4.0],;
|
||||
CMFB;OP30A;I_STOP;114;left outside select griping cylinder Sensor Miscompare[I4.0,I4.1],;
|
||||
CMFB;OP30A;I_STOP;115;outside pullout testing cylinder Work Position Timeout Errror[I4.3],;
|
||||
CMFB;OP30A;I_STOP;116;outside pullout testing cylinder Home Position Timeout Errror[I4.2],;
|
||||
CMFB;OP30A;I_STOP;117;outside pullout testing cylinder Sensor Miscompare[I4.2,I4.3],;
|
||||
CMFB;OP30A;I_STOP;118;left inside shift rotating cylinder Work Position Timeout Errror[I5.1],;
|
||||
CMFB;OP30A;I_STOP;119;left inside shift rotating cylinder Home Position Timeout Errror[I5.0],;
|
||||
CMFB;OP30A;I_STOP;120;left inside shift rotating cylinder Sensor Miscompare[I5.0,I5.1],;
|
||||
CMFB;OP30A;I_STOP;121;left inside shift pull in cylinder Work Position Timeout Errror[I5.3],;
|
||||
CMFB;OP30A;I_STOP;122;left inside shift pull in cylinder Home Position Timeout Errror[I5.2],;
|
||||
CMFB;OP30A;I_STOP;123;left inside shift pull in cylinder Sensor Miscompare[I5.2,I5.3],;
|
||||
CMFB;OP30A;I_STOP;124;Inside select prepull testing force not reach 1000N,;
|
||||
CMFB;OP30A;I_STOP;125;Inside select prepull testing cylinder Home Position Timeout Errror[I5.4],;
|
||||
CMFB;OP30A;I_STOP;126;Inside select prepull testing cylinder Sensor Miscompare[I5.4,I5.5],;
|
||||
CMFB;OP30A;I_STOP;127;left inside lifting release cylinder Work Position Timeout Errror[I5.7],;
|
||||
CMFB;OP30A;I_STOP;128;left inside lifting release cylinder Home Position Timeout Errror[I5.6],;
|
||||
CMFB;OP30A;I_STOP;129;left inside lifting release cylinder Sensor Miscompare[I5.6,I5.7],;
|
||||
CMFB;OP30A;I_STOP;130;left inside shift griping cylinder Work Position Timeout Errror[I6.1],;
|
||||
CMFB;OP30A;I_STOP;131;left inside shift griping cylinder Home Position Timeout Errror[I6.0],;
|
||||
CMFB;OP30A;I_STOP;132;left inside shift griping cylinder Sensor Miscompare[I6.0,I6.1],;
|
||||
CMFB;OP30A;I_STOP;133;inside pullout testing cylinder Work Position Timeout Errror[I6.3],;
|
||||
CMFB;OP30A;I_STOP;134;inside pullout testing cylinder Home Position Timeout Errror[I6.2],;
|
||||
CMFB;OP30A;I_STOP;135;inside pullout testing cylinder Sensor Miscompare[I6.2,I6.3],;
|
||||
CMFB;OP30A;I_STOP;136;right outside select pull in cylinder Work Position Timeout Errror[I7.1],;
|
||||
CMFB;OP30A;I_STOP;137;right outside select pull in cylinder Home Position Timeout Errror[I7.0],;
|
||||
CMFB;OP30A;I_STOP;138;right outside select pull in cylinder Sensor Miscompare[I7.0,I7.1],;
|
||||
CMFB;OP30A;I_STOP;139;right outside lifting release cylinder Work Position Timeout Errror[I7.3],;
|
||||
CMFB;OP30A;I_STOP;140;right outside lifting release cylinder Home Position Timeout Errror[I7.2],;
|
||||
CMFB;OP30A;I_STOP;141;right outside lifting release cylinder Sensor Miscompare[I7.2,I7.3],;
|
||||
CMFB;OP30A;I_STOP;142;right outside select griping the cylinder Work Position Timeout Errror[I7.5],;
|
||||
CMFB;OP30A;I_STOP;143;right outside select griping the cylinder Home Position Timeout Errror[I7.4],;
|
||||
CMFB;OP30A;I_STOP;144;right outside select griping the cylinder Sensor Miscompare[I7.4,I7.5],;
|
||||
CMFB;OP30A;I_STOP;145;right outside select rotating cylinder Work Position Timeout Errror[I7.7],;
|
||||
CMFB;OP30A;I_STOP;146;right outside select rotating cylinder Home Position Timeout Errror[I7.6],;
|
||||
CMFB;OP30A;I_STOP;147;right outside select rotating cylinder Sensor Miscompare[I7.6,I7.7],;
|
||||
CMFB;OP30A;I_STOP;148;left outside positioning cylinder Work Position Timeout Errror[I8.1],;
|
||||
CMFB;OP30A;I_STOP;149;left outside positioning cylinder Home Position Timeout Errror[I8.0],;
|
||||
CMFB;OP30A;I_STOP;150;left outside positioning cylinder Sensor Miscompare[I8.0,I8.1],;
|
||||
CMFB;OP30A;I_STOP;151;right outside positioning cylinder Work Position Timeout Errror[I8.3],;
|
||||
CMFB;OP30A;I_STOP;152;right outside positioning cylinder Home Position Timeout Errror[I8.2],;
|
||||
CMFB;OP30A;I_STOP;153;right outside positioning cylinder Sensor Miscompare[I8.2,I8.3],;
|
||||
CMFB;OP30A;I_STOP;154;right inside select rotating cylinder Work Position Timeout Errror[I9.1],;
|
||||
CMFB;OP30A;I_STOP;155;right inside select rotating cylinder Home Position Timeout Errror[I9.0],;
|
||||
CMFB;OP30A;I_STOP;156;right inside shift rotating cylinder Sensor Miscompare[I9.0,I9.1],;
|
||||
CMFB;OP30A;I_STOP;157;right inside shift pull in cylinder Work Position Timeout Errror[I9.3],;
|
||||
CMFB;OP30A;I_STOP;158;right inside shift pull in cylinder Home Position Timeout Errror[I9.2],;
|
||||
CMFB;OP30A;I_STOP;159;right inside shift pull in cylinder Sensor Miscompare[I9.2,I9.3],;
|
||||
CMFB;OP30A;I_STOP;160;right inside lifting release cylinder Work Position Timeout Errror[I9.5],;
|
||||
CMFB;OP30A;I_STOP;161;right inside lifting release cylinder Home Position Timeout Errror[I9.4],;
|
||||
CMFB;OP30A;I_STOP;162;right inside lifting release cylinder Sensor Miscompare[I9.4,I9.5],;
|
||||
CMFB;OP30A;I_STOP;163;right inside shift griping the cylinder Work Position Timeout Errror[I9.7],;
|
||||
CMFB;OP30A;I_STOP;164;right inside shift griping the cylinder Home Position Timeout Errror[I9.6],;
|
||||
CMFB;OP30A;I_STOP;165;right inside shift griping the cylinder Sensor Miscompare[I9.6,I9.7],;
|
||||
CMFB;OP30A;I_STOP;166;left inside postiton cylinder Work Position Timeout Errror[I10.1],;
|
||||
CMFB;OP30A;I_STOP;167;left inside postiton cylinder Home Position Timeout Errror[I10.0],;
|
||||
CMFB;OP30A;I_STOP;168;left inside postiton cylinder Sensor Miscompare[I10.0,I10.1],;
|
||||
CMFB;OP30A;I_STOP;169;right inside positioning cylinder Work Position Timeout Errror[I10.3],;
|
||||
CMFB;OP30A;I_STOP;170;right inside positioning cylinder Home Position Timeout Errror[I10.2],;
|
||||
CMFB;OP30A;I_STOP;171;right inside positioning cylinder Sensor Miscompare[I10.2,I10.3];
|
||||
CMFB;OP30B;C_STOP;101;" Left Station Light Curtain Blocked(I2.0),";
|
||||
CMFB;OP30B;C_STOP;121;" Machine Not At Home Position_L,";
|
||||
CMFB;OP30B;C_STOP;122;" Auto Mode Not Selected_L,";
|
||||
CMFB;OP30B;C_STOP;125;" The Part Of Station Is NOK,";
|
||||
CMFB;OP30B;C_STOP;140;" left front select swivetube present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;141;" left front select swivetube assy present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;142;" left front select omgea present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;143;" left inside select swivetube present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;144;" left inside select swivetube assy present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;145;" left inside select omgea present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;146;" right outside shift omgea present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;147;" right outside shift swiveltube assy present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;148;" right outside shift swiveltube present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;149;" right inside shift omgea present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;150;" right inside shift swiveltube assy present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;151;" right inside shift swiveltube present sensor backcheck fault,";
|
||||
CMFB;OP30B;C_STOP;152;" romemet assy present sensor backcheck fault";
|
||||
CMFB;OP30B;I_STOP;100;" left front select rotating cylinder Work Position Timeout Errror[I3.1],";
|
||||
CMFB;OP30B;I_STOP;101;" left front select rotating cylinder Home Position Timeout Errror[I3.0],";
|
||||
CMFB;OP30B;I_STOP;102;" left front select rotating cylinder Sensor Miscompare[I3.0,I3.1],";
|
||||
CMFB;OP30B;I_STOP;103;" left front select pull in cylinder Work Position Timeout Errror[I3.3],";
|
||||
CMFB;OP30B;I_STOP;104;" left front select pull in cylinder Home Position Timeout Errror[I3.2],";
|
||||
CMFB;OP30B;I_STOP;105;" left front select pull in cylinder Sensor Miscompare[I3.2,I3.3],";
|
||||
CMFB;OP30B;I_STOP;106;" outside select prepull testing force not reach 1000N,";
|
||||
CMFB;OP30B;I_STOP;107;" outside select prepull testing cylinder Home Position Timeout Errror[I3.4],";
|
||||
CMFB;OP30B;I_STOP;108;" outside select prepull testing cylinder Sensor Miscompare[I3.4,I3.5],";
|
||||
CMFB;OP30B;I_STOP;109;" left outside lifting release cylinder Work Position Timeout Errror[I3.7],";
|
||||
CMFB;OP30B;I_STOP;110;" left outside lifting release cylinder Home Position Timeout Errror[I3.6],";
|
||||
CMFB;OP30B;I_STOP;111;" left outside lifting release cylinder Cylinder Sensor Miscompare[I3.6,I3.7],";
|
||||
CMFB;OP30B;I_STOP;112;" left outside select griping cylinder Work Position Timeout Errror[I4.1],";
|
||||
CMFB;OP30B;I_STOP;113;" left outside select griping cylinder Home Position Timeout Errror[I4.0],";
|
||||
CMFB;OP30B;I_STOP;114;" left outside select griping cylinder Sensor Miscompare[I4.0,I4.1],";
|
||||
CMFB;OP30B;I_STOP;115;" outside pullout testing cylinder Work Position Timeout Errror[I4.3],";
|
||||
CMFB;OP30B;I_STOP;116;" outside pullout testing cylinder Home Position Timeout Errror[I4.2],";
|
||||
CMFB;OP30B;I_STOP;117;" outside pullout testing cylinder Sensor Miscompare[I4.2,I4.3],";
|
||||
CMFB;OP30B;I_STOP;118;" left inside shift rotating cylinder Work Position Timeout Errror[I5.1],";
|
||||
CMFB;OP30B;I_STOP;119;" left inside shift rotating cylinder Home Position Timeout Errror[I5.0],";
|
||||
CMFB;OP30B;I_STOP;120;" left inside shift rotating cylinder Sensor Miscompare[I5.0,I5.1],";
|
||||
CMFB;OP30B;I_STOP;121;" left inside shift pull in cylinder Work Position Timeout Errror[I5.3],";
|
||||
CMFB;OP30B;I_STOP;122;" left inside shift pull in cylinder Home Position Timeout Errror[I5.2],";
|
||||
CMFB;OP30B;I_STOP;123;" left inside shift pull in cylinder Sensor Miscompare[I5.2,I5.3],";
|
||||
CMFB;OP30B;I_STOP;124;" Inside select prepull testing force not reach 1000N,";
|
||||
CMFB;OP30B;I_STOP;125;" Inside select prepull testing cylinder Home Position Timeout Errror[I5.4],";
|
||||
CMFB;OP30B;I_STOP;126;" Inside select prepull testing cylinder Sensor Miscompare[I5.4,I5.5],";
|
||||
CMFB;OP30B;I_STOP;127;" left inside lifting release cylinder Work Position Timeout Errror[I5.7],";
|
||||
CMFB;OP30B;I_STOP;128;" left inside lifting release cylinder Home Position Timeout Errror[I5.6],";
|
||||
CMFB;OP30B;I_STOP;129;" left inside lifting release cylinder Sensor Miscompare[I5.6,I5.7],";
|
||||
CMFB;OP30B;I_STOP;130;" left inside shift griping cylinder Work Position Timeout Errror[I6.1],";
|
||||
CMFB;OP30B;I_STOP;131;" left inside shift griping cylinder Home Position Timeout Errror[I6.0],";
|
||||
CMFB;OP30B;I_STOP;132;" left inside shift griping cylinder Sensor Miscompare[I6.0,I6.1],";
|
||||
CMFB;OP30B;I_STOP;133;" inside pullout testing cylinder Work Position Timeout Errror[I6.3],";
|
||||
CMFB;OP30B;I_STOP;134;" inside pullout testing cylinder Home Position Timeout Errror[I6.2],";
|
||||
CMFB;OP30B;I_STOP;135;" inside pullout testing cylinder Sensor Miscompare[I6.2,I6.3],";
|
||||
CMFB;OP30B;I_STOP;136;" right outside select pull in cylinder Work Position Timeout Errror[I7.1],";
|
||||
CMFB;OP30B;I_STOP;137;" right outside select pull in cylinder Home Position Timeout Errror[I7.0],";
|
||||
CMFB;OP30B;I_STOP;138;" right outside select pull in cylinder Sensor Miscompare[I7.0,I7.1],";
|
||||
CMFB;OP30B;I_STOP;139;" right outside lifting release cylinder Work Position Timeout Errror[I7.3],";
|
||||
CMFB;OP30B;I_STOP;140;" right outside lifting release cylinder Home Position Timeout Errror[I7.2],";
|
||||
CMFB;OP30B;I_STOP;141;" right outside lifting release cylinder Sensor Miscompare[I7.2,I7.3],";
|
||||
CMFB;OP30B;I_STOP;142;" right outside select griping the cylinder Work Position Timeout Errror[I7.5],";
|
||||
CMFB;OP30B;I_STOP;143;" right outside select griping the cylinder Home Position Timeout Errror[I7.4],";
|
||||
CMFB;OP30B;I_STOP;144;" right outside select griping the cylinder Sensor Miscompare[I7.4,I7.5],";
|
||||
CMFB;OP30B;I_STOP;145;" right outside select rotating cylinder Work Position Timeout Errror[I7.7],";
|
||||
CMFB;OP30B;I_STOP;146;" right outside select rotating cylinder Home Position Timeout Errror[I7.6],";
|
||||
CMFB;OP30B;I_STOP;147;" right outside select rotating cylinder Sensor Miscompare[I7.6,I7.7],";
|
||||
CMFB;OP30B;I_STOP;148;" left outside positioning cylinder Work Position Timeout Errror[I8.1],";
|
||||
CMFB;OP30B;I_STOP;149;" left outside positioning cylinder Home Position Timeout Errror[I8.0],";
|
||||
CMFB;OP30B;I_STOP;150;" left outside positioning cylinder Sensor Miscompare[I8.0,I8.1],";
|
||||
CMFB;OP30B;I_STOP;151;" right outside positioning cylinder Work Position Timeout Errror[I8.3],";
|
||||
CMFB;OP30B;I_STOP;152;" right outside positioning cylinder Home Position Timeout Errror[I8.2],";
|
||||
CMFB;OP30B;I_STOP;153;" right outside positioning cylinder Sensor Miscompare[I8.2,I8.3],";
|
||||
CMFB;OP30B;I_STOP;154;" right inside select rotating cylinder Work Position Timeout Errror[I9.1],";
|
||||
CMFB;OP30B;I_STOP;155;" right inside select rotating cylinder Home Position Timeout Errror[I9.0],";
|
||||
CMFB;OP30B;I_STOP;156;" right inside shift rotating cylinder Sensor Miscompare[I9.0,I9.1],";
|
||||
CMFB;OP30B;I_STOP;157;" right inside shift pull in cylinder Work Position Timeout Errror[I9.3],";
|
||||
CMFB;OP30B;I_STOP;158;" right inside shift pull in cylinder Home Position Timeout Errror[I9.2],";
|
||||
CMFB;OP30B;I_STOP;159;" right inside shift pull in cylinder Sensor Miscompare[I9.2,I9.3],";
|
||||
CMFB;OP30B;I_STOP;160;" right inside lifting release cylinder Work Position Timeout Errror[I9.5],";
|
||||
CMFB;OP30B;I_STOP;161;" right inside lifting release cylinder Home Position Timeout Errror[I9.4],";
|
||||
CMFB;OP30B;I_STOP;162;" right inside lifting release cylinder Sensor Miscompare[I9.4,I9.5],";
|
||||
CMFB;OP30B;I_STOP;163;" right inside shift griping the cylinder Work Position Timeout Errror[I9.7],";
|
||||
CMFB;OP30B;I_STOP;164;" right inside shift griping the cylinder Home Position Timeout Errror[I9.6],";
|
||||
CMFB;OP30B;I_STOP;165;" right inside shift griping the cylinder Sensor Miscompare[I9.6,I9.7],";
|
||||
CMFB;OP30B;I_STOP;166;" left inside postiton cylinder Work Position Timeout Errror[I10.1],";
|
||||
CMFB;OP30B;I_STOP;167;" left inside postiton cylinder Home Position Timeout Errror[I10.0],";
|
||||
CMFB;OP30B;I_STOP;168;" left inside postiton cylinder Sensor Miscompare[I10.0,I10.1],";
|
||||
CMFB;OP30B;I_STOP;169;" right inside positioning cylinder Work Position Timeout Errror[I10.3],";
|
||||
CMFB;OP30B;I_STOP;170;" right inside positioning cylinder Home Position Timeout Errror[I10.2],";
|
||||
CMFB;OP30B;I_STOP;171;" right inside positioning cylinder Sensor Miscompare[I10.2,I10.3]";
|
||||
CMFB;OP40A;C_STOP;101;Left Station Light Curtain Blocked(I2.0),;
|
||||
CMFB;OP40A;C_STOP;121;Machine Not At Home Position_L,;
|
||||
CMFB;OP40A;C_STOP;122;Auto Mode Not Selected_L,;
|
||||
CMFB;OP40A;C_STOP;125;The Part Of Left Station Is NOK,;
|
||||
CMFB;OP40A;C_STOP;140;detection pressure 1 sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;141;detection pressure 2 sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;142;shift terminal type sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;143;shift boot present sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;144;shift terminal present sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;145;shift terminal no present sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;146;select terminal present sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;147;select terminal no present sensor backcheck fault,;
|
||||
CMFB;OP40A;C_STOP;148;select boot present Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;149;Shift Terminal Type Confirmation Sensor_1 Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;150;Shift Terminal Type Confirmation Sensor_2 Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;151;Select Terminal Type Confirmation Sensor_1 Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;152;Select Terminal Type Confirmation Sensor_2 Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;153;select termianl type Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;154;detect steel wire present1 Backcheck Error,;
|
||||
CMFB;OP40A;C_STOP;155;detect steel wire present2 Backcheck Error;
|
||||
CMFB;OP40A;I_STOP;100;front clamping wire cylinder Work Position Timeout Errror[I3.1],;
|
||||
CMFB;OP40A;I_STOP;101;front clamping wire cylinder Home Position Timeout Errror[I3.0],;
|
||||
CMFB;OP40A;I_STOP;102;front clamping wire cylinder Sensor Miscompare[I3.0,I3.1],;
|
||||
CMFB;OP40A;I_STOP;103;back clamping wire cylinder Work Position Timeout Errror[I3.3],;
|
||||
CMFB;OP40A;I_STOP;104;back clamping wire cylinder Home Position Timeout Errror[I3.2],;
|
||||
CMFB;OP40A;I_STOP;105;back clamping wire cylinder Sensor Miscompare[I3.2,I3.3],;
|
||||
CMFB;OP40A;I_STOP;106;Select Wire Not Put Well[I3.5],;
|
||||
CMFB;OP40A;I_STOP;107;pushing select wire cylinder Home Position Timeout Errror[I3.4],;
|
||||
CMFB;OP40A;I_STOP;108;pushing select wire cylinder Sensor Miscompare[I3.4,I3.5],;
|
||||
CMFB;OP40A;I_STOP;109;crimping cylinder Work Position Timeout Errror[I5.0],;
|
||||
CMFB;OP40A;I_STOP;110;crimping cylinder Home Position Timeout Errror[I4.2],;
|
||||
CMFB;OP40A;I_STOP;111;crimping cylinder Cylinder Sensor Miscompare[I3.6,I3.7],;
|
||||
CMFB;OP40A;I_STOP;112;Shift Wire Not Put Well[I4.1],;
|
||||
CMFB;OP40A;I_STOP;113;pushing shift wire cylinder Home Position Timeout Errror[I4.0],;
|
||||
CMFB;OP40A;I_STOP;114;pushing shift wire cylinder Sensor Miscompare[I4.0,I4.1],;
|
||||
CMFB;OP40A;I_STOP;115;front cliping wire cylinder Work Position Timeout Errror[I4.3],;
|
||||
CMFB;OP40A;I_STOP;116;front cliping wire cylinder Home Position Timeout Errror[I4.2],;
|
||||
CMFB;OP40A;I_STOP;117;front cliping wire cylinder Sensor Miscompare[I4.2,I4.3],;
|
||||
CMFB;OP40A;I_STOP;118;back cliping wire cylinder Work Position Timeout Errror[I4.5],;
|
||||
CMFB;OP40A;I_STOP;119;back cliping wire cylinder Home Position Timeout Errror[I4.4],;
|
||||
CMFB;OP40A;I_STOP;120;back cliping wire cylinder Sensor Miscompare[I4.4,I4.5],;
|
||||
CMFB;OP40A;I_STOP;121;Grease Pump Pressure Alarm For Terminal[I8.7],;
|
||||
CMFB;OP40A;I_STOP;122;Grease valve1Home Position Timeout Errror[],;
|
||||
CMFB;OP40A;I_STOP;123;Grease valve1Sensor Miscompare[],;
|
||||
CMFB;OP40A;I_STOP;124;Grease Pump Pressure Alarm For Inner Member,;
|
||||
CMFB;OP40A;I_STOP;125;Grease valve2 Home Position Timeout Errror[],;
|
||||
CMFB;OP40A;I_STOP;126;Grease valve2 Sensor Miscompare[],;
|
||||
CMFB;OP40A;I_STOP;151;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP40A;I_STOP;152;Emergency Stop Button Pressed;
|
||||
CMFB;OP40B;C_STOP;101;Right Station Light Curtain Blocked(I2.6),;
|
||||
CMFB;OP40B;C_STOP;121;Machine Not At Home Position_R,;
|
||||
CMFB;OP40B;C_STOP;122;Auto Mode Not Selected_R,;
|
||||
CMFB;OP40B;C_STOP;125;The Part Of Right Station Is NOK,;
|
||||
CMFB;OP40B;C_STOP;140;shift omega present sensor backcheck fault,;
|
||||
CMFB;OP40B;C_STOP;141;select omega present sensor backcheck fault,;
|
||||
CMFB;OP40B;C_STOP;142;gromment present sensor backcheck fault,;
|
||||
CMFB;OP40B;C_STOP;143;detect steel wire present3 sensor backcheck fault,;
|
||||
CMFB;OP40B;C_STOP;144;detect steel wire present4 sensor backcheck fault,;
|
||||
CMFB;OP40B;C_STOP;148;Check Shift Wire Exists R sensor backcheck failure,;
|
||||
CMFB;OP40B;C_STOP;149;Check Select Wire Exists R sensor backcheck failure;
|
||||
CMFB;OP40B;I_STOP;100;Horizontal cylinder Work Position Timeout Error[I6.1],;
|
||||
CMFB;OP40B;I_STOP;101;Horizontal cylinder Home Position Timeout Error[I6.0],;
|
||||
CMFB;OP40B;I_STOP;102;Horizontal cylinder Sensors Miscompare Error[6.0,I6.1],;
|
||||
CMFB;OP40B;I_STOP;103;front Pressing wire cylinder Work Position Timeout Error[I6.3],;
|
||||
CMFB;OP40B;I_STOP;104;front Pressing wire cylinder Home Position Timeout Error[I6.2],;
|
||||
CMFB;OP40B;I_STOP;105;front Pressing wire cylinder Sensors Miscompare Error[I6.2,I6.3],;
|
||||
CMFB;OP40B;I_STOP;106;back Pressing wire cylinder Work Position Timeout Error[I6.5],;
|
||||
CMFB;OP40B;I_STOP;107;back Pressing wire cylinder Home Position Timeout Error[I6.4],;
|
||||
CMFB;OP40B;I_STOP;108;back Pressing wire cylinder Sensors Miscompare Error[6.4,I6.5],;
|
||||
CMFB;OP40B;I_STOP;109;Vertical Cylinder Work Position Timeout Error[I6.7],;
|
||||
CMFB;OP40B;I_STOP;110;Vertical Cylinder Home Position Timeout Error[I6.6],;
|
||||
CMFB;OP40B;I_STOP;111;Vertical Cylinder Sensors Miscompare Error[I6.6,I6.7],;
|
||||
CMFB;OP40B;I_STOP;112;Grease valve 3 Work Position Timeout Error[],;
|
||||
CMFB;OP40B;I_STOP;113;Grease valve 3 Home Position Timeout Error[],;
|
||||
CMFB;OP40B;I_STOP;114;Grease valve 3 Sensors Miscompare Error[],;
|
||||
CMFB;OP40B;I_STOP;115;Grease valve 4 Work Position Timeout Error[],;
|
||||
CMFB;OP40B;I_STOP;116;Grease valve 4 Home Position Timeout Error[],;
|
||||
CMFB;OP40B;I_STOP;117;Grease valve 4 Sensors Miscompare Error[],;
|
||||
CMFB;OP40B;I_STOP;151;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP40B;I_STOP;152;Emergency Stop Button Pressed;
|
||||
CMFB;OP50;C_STOP;101;Light Curtain Blocked(I2.0),;
|
||||
CMFB;OP50;C_STOP;121;Machine Not At Home Position,;
|
||||
CMFB;OP50;C_STOP;122;Auto Mode Not Selected,;
|
||||
CMFB;OP50;C_STOP;125;The Part Is NOK,;
|
||||
CMFB;OP50;C_STOP;132;select conduit present left Sensor Backcheck Error[7.6],;
|
||||
CMFB;OP50;C_STOP;133;select conduit present right Sensor Backcheck Error[7.7],;
|
||||
CMFB;OP50;C_STOP;134;terminal present Sensor Backcheck Error[8.2],;
|
||||
CMFB;OP50;C_STOP;140;check shift omega Sensor Backcheck Error[I3.2],;
|
||||
CMFB;OP50;C_STOP;141;check select omega Sensor Backcheck Error[I3.3],;
|
||||
CMFB;OP50;C_STOP;142;check shift rodt Sensor Backcheck Error[I3.4],;
|
||||
CMFB;OP50;C_STOP;143;check select rod Sensor Backcheck Error[I3.5],;
|
||||
CMFB;OP50;C_STOP;144;shift check omega Sensor Backcheck Error[I5.7],;
|
||||
CMFB;OP50;C_STOP;145;select check omega Sensor Backcheck Error[I6.7],;
|
||||
CMFB;OP50;C_STOP;146;shift conduit present left Sensor Backcheck Error[7.4],;
|
||||
CMFB;OP50;C_STOP;147;shift conduit present right Sensor Backcheck Error[7.5],;
|
||||
CMFB;OP50;C_STOP;148;Shift Terminal Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;149;Select Terminal Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;150;Heavy Mass Check Sensor 1 Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;151;Heavy Mass Check Sensor 2 Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;152;Shift Swivel Tube Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;153;Select Swivel Tube Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;154;Shift Adjust Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;155;Select Adjust Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;156;Shift Star Sleve Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;157;Select Star Sleve Check Sensor Backcheck Error,;
|
||||
CMFB;OP50;C_STOP;158;Gromment Detect Check Sensor Backcheck Error;
|
||||
CMFB;OP50;I_STOP;100;crimping cylinder Work Position Timeout Errror[I3.1],;
|
||||
CMFB;OP50;I_STOP;101;crimping cylinder Home Position Timeout Errror[I3.0],;
|
||||
CMFB;OP50;I_STOP;102;crimping cylinderSensor Miscompare[I3.0,I3.1],;
|
||||
CMFB;OP50;I_STOP;103;left front location cylinder Work Position Timeout Errror[I4.1],;
|
||||
CMFB;OP50;I_STOP;104;left front location cylinder Home Position Timeout Errror[I4.0],;
|
||||
CMFB;OP50;I_STOP;105;left front location cylinder Sensor Miscompare[I4.0,I4.1],;
|
||||
CMFB;OP50;I_STOP;106;left back location cylinder Work Position Timeout Errror[I4.3],;
|
||||
CMFB;OP50;I_STOP;107;left back location cylinder Home Position Timeout Errror[I4.2],;
|
||||
CMFB;OP50;I_STOP;108;left back location cylinder Sensor Miscompare[I4.2,I4.3],;
|
||||
CMFB;OP50;I_STOP;109;right front location cylinder Work Position Timeout Errror[I4.5],;
|
||||
CMFB;OP50;I_STOP;110;right front location cylinder Home Position Timeout Errror[I4.4],;
|
||||
CMFB;OP50;I_STOP;111;right front location cylinder Sensor Miscompare[I4.4,I4.5],;
|
||||
CMFB;OP50;I_STOP;112;right back location cylinder Work Position Timeout Errror[I4.7],;
|
||||
CMFB;OP50;I_STOP;113;right back location cylinder Home Position Timeout Errror[I4.6],;
|
||||
CMFB;OP50;I_STOP;114;right back location cylinder Sensor Miscompare[I4.6,I4.7],;
|
||||
CMFB;OP50;I_STOP;115;select terminal pullout test cylinder Work Position Timeout Errror[I5.1],;
|
||||
CMFB;OP50;I_STOP;116;select terminal pullout test cylinder Not Reach 500N,;
|
||||
CMFB;OP50;I_STOP;117;select terminal pullout test cylinder Sensor Miscompare[I5.0,I5.1],;
|
||||
CMFB;OP50;I_STOP;118;selcet terminal fixed cylinder Work Position Timeout Errror[I5.3],;
|
||||
CMFB;OP50;I_STOP;119;selcet terminal fixed cylinder Home Position Timeout Errror[I5.2],;
|
||||
CMFB;OP50;I_STOP;120;selcet terminal fixed cylinder Sensor Miscompare[I5.2,I5.3],;
|
||||
CMFB;OP50;I_STOP;121;pulling select cable cylinder Work Position Timeout Errror[I5.5],;
|
||||
CMFB;OP50;I_STOP;122;pulling select cable cylinder Home Position Timeout Errror[I5.4],;
|
||||
CMFB;OP50;I_STOP;123;pulling select cable cylinder Sensor Miscompare[I5.4,I5.5],;
|
||||
CMFB;OP50;I_STOP;124;shift terminal pullout test cylinder Work Position Timeout Errror[I6.1],;
|
||||
CMFB;OP50;I_STOP;125;shift terminal pullout test cylinder Not Reach 500N,;
|
||||
CMFB;OP50;I_STOP;126;shift terminal pullout test cylinder Sensor Miscompare[I6.0,I6.1],;
|
||||
CMFB;OP50;I_STOP;127;shift terminal fixed cylinder Work Position Timeout Errror[I6.3],;
|
||||
CMFB;OP50;I_STOP;128;shift terminal fixed cylinder Home Position Timeout Errror[I6.2],;
|
||||
CMFB;OP50;I_STOP;129;shift terminal fixed cylinder Sensor Miscompare[I6.2,I6.3],;
|
||||
CMFB;OP50;I_STOP;130;pulling shift cable cylinder Work Position Timeout Errror[I6.5],;
|
||||
CMFB;OP50;I_STOP;131;pulling shift cable cylinder Home Position Timeout Errror[I6.4],;
|
||||
CMFB;OP50;I_STOP;132;pulling shift cable cylinder Sensor Miscompare[I6.4,I6.5],;
|
||||
CMFB;OP50;I_STOP;133;prepull shift cable cylinder Work Position Timeout Errror[I7.1],;
|
||||
CMFB;OP50;I_STOP;134;prepull shift cable cylinder Home Position Timeout Errror[I7.0],;
|
||||
CMFB;OP50;I_STOP;135;prepull shift cable cylinder Sensor Miscompare[I7.0,I7.1],;
|
||||
CMFB;OP50;I_STOP;136;prepull select cable cylinder Work Position Timeout Errror[I7.3],;
|
||||
CMFB;OP50;I_STOP;137;prepull select cable cylinder Home Position Timeout Errror[I7.2],;
|
||||
CMFB;OP50;I_STOP;138;prepull select cable cylinder Sensor Miscompare[I7.2,I7.3],;
|
||||
CMFB;OP50;I_STOP;139;terminal greasing valve Work Position Timeout Errror[I8.1],;
|
||||
CMFB;OP50;I_STOP;140;terminal greasing valve Home Position Timeout Errror[I8.0],;
|
||||
CMFB;OP50;I_STOP;141;terminal greasing valve Sensor Miscompare[I8.0,I8.1],;
|
||||
CMFB;OP50;I_STOP;161;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP50;I_STOP;162;Emergency Stop Button Pressed;
|
||||
CMFB;OP55;C_STOP;102;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP55;C_STOP;121;Machine Not At Home Position,;
|
||||
CMFB;OP55;C_STOP;122;Auto Mode Not Selected,;
|
||||
CMFB;OP55;C_STOP;125;Part NOK,;
|
||||
CMFB;OP55;C_STOP;140;Shift check1 Sensors Backcheck Error,;
|
||||
CMFB;OP55;C_STOP;141;Shift check2 Sensors Backcheck Error,;
|
||||
CMFB;OP55;C_STOP;142;Select check1 Sensors Backcheck Error,;
|
||||
CMFB;OP55;C_STOP;143;Select check1 Sensors Backcheck Error,;
|
||||
CMFB;OP55;C_STOP;149;Left_Select_Conduit_Placed_In_Place Sensors Backcheck Error,;
|
||||
CMFB;OP55;C_STOP;150;Right_Shift_Conduit_Placed_In_Place Sensors Backcheck Error,;
|
||||
CMFB;OP55;C_STOP;151;Right_Select_Conduit_Placed_In_Place Sensors Backcheck Error;
|
||||
CMFB;OP55;I_STOP;101;Shift bushing assy cylinder Work Position Timeout Error [I3.3,Q3.1],;
|
||||
CMFB;OP55;I_STOP;102;Shift bushing assy cylinder Home Position Timeout Error [I3.2,Q3.0],;
|
||||
CMFB;OP55;I_STOP;103;Shift bushing assy cylinder Sensors Miscompare [I3.2,I3.3],;
|
||||
CMFB;OP55;I_STOP;104;Select bushing assy cylinder Work Position Timeout Error [I4.3,Q3.3],;
|
||||
CMFB;OP55;I_STOP;105;Select bushing assy cylinder Home Position Timeout Error [I4.2,Q3.2],;
|
||||
CMFB;OP55;I_STOP;106;Select bushing assy cylinder Sensors Miscompare [I4.2,I4.3],;
|
||||
CMFB;OP55;I_STOP;107;Shift test cylinder Work Position Timeout Error [I3.5,Q4.1],;
|
||||
CMFB;OP55;I_STOP;108;Shift test cylinder Home Position Timeout Error [I3.4,Q4.0],;
|
||||
CMFB;OP55;I_STOP;109;Shift test cylinder Sensors Miscompare [I3.4,I3.5],;
|
||||
CMFB;OP55;I_STOP;110;Select test cylinder Work Position Timeout Error [I4.3,Q4.3],;
|
||||
CMFB;OP55;I_STOP;111;Select test cylinder Home Position Timeout Error [I4.2,Q4.2],;
|
||||
CMFB;OP55;I_STOP;112;Select test cylinder Sensors Miscompare [I4.2,I4.3],;
|
||||
CMFB;OP55;I_STOP;113;Conduit clamp cylinder Work Position Timeout Error [I4.7,Q4.5],;
|
||||
CMFB;OP55;I_STOP;114;Conduit clamp cylinder Home Position Timeout Error [I4.6,Q4.4],;
|
||||
CMFB;OP55;I_STOP;115;Conduit clamp cylinderCylinder Sensors Miscompare [I4.6,I4.7],;
|
||||
CMFB;OP55;I_STOP;116;Screw feeder cylinder Work Position Timeout Error [5.1,Q7.3],;
|
||||
CMFB;OP55;I_STOP;117;Screw feeder cylinder Home Position Timeout Error [I5.0,Q7.2],;
|
||||
CMFB;OP55;I_STOP;118;Screw feeder cylinder Cylinder Sensors Miscompare [I5.0,I5.1],;
|
||||
CMFB;OP55;I_STOP;124;Screw NOK,;
|
||||
CMFB;OP55;I_STOP;125;IAI Error,;
|
||||
CMFB;OP55;I_STOP;126;Shift Screw test Error,;
|
||||
CMFB;OP55;I_STOP;127;Select Screw test Error,;
|
||||
CMFB;OP55;I_STOP;128;Shift washer assembly not correct,;
|
||||
CMFB;OP55;I_STOP;129;Selcet washer assembly not correct,;
|
||||
CMFB;OP55;I_STOP;130;Part Pullout Testing Not OK,;
|
||||
CMFB;OP55;I_STOP;131;Screw operation Timeout Error,;
|
||||
CMFB;OP55;I_STOP;151;Emergency Stop Relay Not ON,Pls Press Reset Button.,;
|
||||
CMFB;OP55;I_STOP;152;Emergency Stop Button Pressed;
|
||||
CMFB;OP60;C_STOP;121;Machine Not At Home Position,;
|
||||
CMFB;OP60;C_STOP;122;Auto Mode Not Selected,;
|
||||
CMFB;OP60;C_STOP;123;No Model Selected,;
|
||||
CMFB;OP60;C_STOP;125;Outside select terminal check1 Sensor Backcheck Error[I3.2],;
|
||||
CMFB;OP60;C_STOP;126;Outside select terminal check2 Sensor Backcheck Error[I3.3],;
|
||||
CMFB;OP60;C_STOP;127;Outside select termianl present1 Sensor Backcheck Error[I3.4],;
|
||||
CMFB;OP60;C_STOP;128;Outside select termianl present2 Sensor Backcheck Error[I3.5],;
|
||||
CMFB;OP60;C_STOP;129;Outside select omega present1 Sensor Backcheck Error[I3.6],;
|
||||
CMFB;OP60;C_STOP;130;Outside shift terminal check1 Sensor Backcheck Error[I4.2],;
|
||||
CMFB;OP60;C_STOP;131;Outside shift terminal check2 Sensor Backcheck Error[I4.3],;
|
||||
CMFB;OP60;C_STOP;132;Outside shift termianl present1 Sensor Backcheck Error[I4.4],;
|
||||
CMFB;OP60;C_STOP;133;Outside shift omega present1 Sensor Backcheck Error[I4.5],;
|
||||
CMFB;OP60;C_STOP;134;Outside shift conduit present Sensor Backcheck Error[I5.2],;
|
||||
CMFB;OP60;C_STOP;135;Outside select conduit present Sensor Backcheck Error[I5.3],;
|
||||
CMFB;OP60;C_STOP;136;Inside shift conduit present Sensor Insidecheck Error[I5.6],;
|
||||
CMFB;OP60;C_STOP;137;Inside select conduit present Sensor Backcheck Error[I5.7],;
|
||||
CMFB;OP60;C_STOP;138;Outside select omega present Sensor Backcheck Error[I6.0],;
|
||||
CMFB;OP60;C_STOP;139;Outside select tube present Sensor Backcheck Error[I6.1],;
|
||||
CMFB;OP60;C_STOP;140;Outside select adjuster check1 Sensor Backcheck Error[I6.2],;
|
||||
CMFB;OP60;C_STOP;141;Outside select adjuster check2 Sensor Backcheck [I6.3],;
|
||||
CMFB;OP60;C_STOP;142;Outside shift omega present Sensor Backcheck Error[I6.4],;
|
||||
CMFB;OP60;C_STOP;143;Outside shift tube present Sensor Backcheck Error[I6.5],;
|
||||
CMFB;OP60;C_STOP;144;Outside shift adjuster check1 Sensor Backcheck Error[I6.6],;
|
||||
CMFB;OP60;C_STOP;145;Outside shift adjuster check2 Sensor Backcheck Error[I6.7],;
|
||||
CMFB;OP60;C_STOP;146;Inside select terminal check1 Sensor Backcheck Error[I7.2],;
|
||||
CMFB;OP60;C_STOP;147;Inside select terminal check2 Sensor Backcheck Error[I7.3],;
|
||||
CMFB;OP60;C_STOP;148;Inside select termianl present1 Sensor Backcheck Error[I7.4],;
|
||||
CMFB;OP60;C_STOP;149;Inside select termianl present2 Sensor Backcheck [I7.5],;
|
||||
CMFB;OP60;C_STOP;150;Inside select omega present1 Sensor Backcheck Error[I7.6],;
|
||||
CMFB;OP60;C_STOP;151;Inside shift terminal check1 Sensor Insidecheck Error[I8.2],;
|
||||
CMFB;OP60;C_STOP;152;Inside shift terminal check2 Sensor Insidecheck Error[I8.3],;
|
||||
CMFB;OP60;C_STOP;153;Inside shift termianl present Sensor Insidecheck Error[I8.4],;
|
||||
CMFB;OP60;C_STOP;154;Inside shift omega present1 Sensor Insidecheck Error[I8.5],;
|
||||
CMFB;OP60;C_STOP;155;Inside select omega present2 Sensor Backcheck Error[I9.0],;
|
||||
CMFB;OP60;C_STOP;156;Inside select tube present Sensor Backcheck Error[I9.1],;
|
||||
CMFB;OP60;C_STOP;157;Insideselect adjuster check1 Sensor Backcheck Error[I9.2],;
|
||||
CMFB;OP60;C_STOP;158;Inside select adjuster check2 Sensor Backcheck Error[I9.3],;
|
||||
CMFB;OP60;C_STOP;159;Inside shift omega present2 Sensor Insidecheck Error[I9.4],;
|
||||
CMFB;OP60;C_STOP;160;Inside shift tube present Sensor Insidecheck Error[I9.5],;
|
||||
CMFB;OP60;C_STOP;161;Inside shift adjuster check1 Sensor Insidecheck Error[I9.6],;
|
||||
CMFB;OP60;C_STOP;162;Inside shift adjuster check2 Sensor Insidecheck Error[I9.7];
|
||||
CMFB;OP60;I_STOP;101;Outside select release cylinder Work Position Timeout[I3.1],;
|
||||
CMFB;OP60;I_STOP;102;Outside select release cylinder Home Position Timeout[I3.0],;
|
||||
CMFB;OP60;I_STOP;103;Outside select release cylinder Sensors Miscompare[I3.0,I3.1],;
|
||||
CMFB;OP60;I_STOP;104;Outside shift release cylinder Work Position Timeout[I4.1],;
|
||||
CMFB;OP60;I_STOP;105;Outside shift release cylinder Home Position Timeout[I4.0],;
|
||||
CMFB;OP60;I_STOP;106;Outside shift release cylinder Sensors Miscompare[I4.0,I4.1],;
|
||||
CMFB;OP60;I_STOP;107;Outside clamp conduit cylinder Work Position Timeout[I5.1],;
|
||||
CMFB;OP60;I_STOP;108;Outside clamp conduit cylinder Home Position Timeout[I5.0],;
|
||||
CMFB;OP60;I_STOP;109;Outside clamp conduit cylinder Sensors Miscompare[I5.0,I5.1],;
|
||||
CMFB;OP60;I_STOP;110;Inside select release cylinder Work Position Timeout[I5.5],;
|
||||
CMFB;OP60;I_STOP;111;Inside select release cylinder Home Position Timeout[I5.4],;
|
||||
CMFB;OP60;I_STOP;112;Inside select release cylinder Sensors Miscompare[I5.4,I5.5],;
|
||||
CMFB;OP60;I_STOP;113;Inside shift release cylinder Work Position Timeout[I7.1],;
|
||||
CMFB;OP60;I_STOP;114;Inside shift release cylinder Home Position Timeout[I7.0],;
|
||||
CMFB;OP60;I_STOP;115;Inside shift release cylinder Sensors Miscompare[I7.0,I7.1],;
|
||||
CMFB;OP60;I_STOP;116;Inside clamp conduit cylinder Work Position Timeout[I8.1],;
|
||||
CMFB;OP60;I_STOP;117;Inside clamp conduit cylinder Home Position Timeout[I8.0],;
|
||||
CMFB;OP60;I_STOP;118;Inside clamp conduit cylinder Sensors Miscompare[I8.0,I8.1],;
|
||||
CMFB;OP60;I_STOP;119;Outside Selectlength_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;120;Outside Shiftlength_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;121;Outside SelectA+B_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;122;Outside ShiftA+B_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;123;Inside Selectlength_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;124;Inside Shiftlength_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;125;Inside SelectA+B_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;126;Inside ShiftA+B_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;127;Lazer_Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;135;Light Curtain Blocked In Cycle,;
|
||||
CMFB;OP60;I_STOP;136;Before Select Cable A+B Test, Force Reach Stop Force, Please Check,;
|
||||
CMFB;OP60;I_STOP;137;Before Shift Cable A+B Test, Force Reach Stop Force, Please Check,;
|
||||
CMFB;OP60;I_STOP;140;Select Cable Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;141;Shift Cable Axis Alarm,;
|
||||
CMFB;OP60;I_STOP;142;Outside Part Select Cable Friction Test Failed,Please Check,;
|
||||
CMFB;OP60;I_STOP;143;Outside Part Shift Cable Friction Test Failed,Please Check,;
|
||||
CMFB;OP60;I_STOP;144;Inside Part Select Cable Friction Test Failed,Please Check,;
|
||||
CMFB;OP60;I_STOP;145;Inside Part Shift Cable Friction Test Failed,Please Check,;
|
||||
CMFB;OP60;I_STOP;151;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP60;I_STOP;152;Emergency Stop Button Pressed;
|
||||
CMFB;OP70;C_STOP;102;Emergency Stop Relay Not ON,;
|
||||
CMFB;OP70;C_STOP;121;Machine Not At Home Position,;
|
||||
CMFB;OP70;C_STOP;122;Auto Mode Not Selected,;
|
||||
CMFB;OP70;C_STOP;125;Part NOK,;
|
||||
CMFB;OP70;C_STOP;133;select adjuster present Sensors Backcheck Error[I5.4],;
|
||||
CMFB;OP70;C_STOP;134;shift right omega present Sensors Backcheck Error[I5.5],;
|
||||
CMFB;OP70;C_STOP;135;shift right clip present Sensors Backcheck Error[I5.6],;
|
||||
CMFB;OP70;C_STOP;136;slect adjuster locker present Sensors Backcheck Error[I5.7],;
|
||||
CMFB;OP70;C_STOP;137;gromment present Sensors Backcheck Error[I6.0],;
|
||||
CMFB;OP70;C_STOP;141;select omega present Sensors Backcheck Error[I3.4],;
|
||||
CMFB;OP70;C_STOP;142;select clip present Sensors Backcheck Error[I3.5],;
|
||||
CMFB;OP70;C_STOP;143;shift clip present Sensors Backcheck Error[I3.6],;
|
||||
CMFB;OP70;C_STOP;144;shift omega present Sensors Backcheck Error[I3.7],;
|
||||
CMFB;OP70;C_STOP;145;select star sleeve present Sensors Backcheck Error[I4.6],;
|
||||
CMFB;OP70;C_STOP;146;shift star sleeve present Sensors Backcheck Error[I4.7],;
|
||||
CMFB;OP70;C_STOP;147;select right omega present Sensors Backcheck Error[I5.2],;
|
||||
CMFB;OP70;C_STOP;148;select right clip present Sensors Backcheck Error[I5.3];
|
||||
CMFB;;MANUAL;;;Zoradenie
|
||||
CMFB;;MANUAL;;;Zmena_typu
|
||||
CMFB;;MANUAL;;;Chyba_material
|
||||
CMFB;;MANUAL;;;Zastavene_QE
|
||||
CMFB;;MANUAL;;;Zastavene_PE
|
||||
CMFB;;MANUAL;;;Nedostatok_operatorov
|
||||
CMFB;;MANUAL;;;Odstavka
|
||||
|
1
flow/repository.json
Normal file
1
flow/repository.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"$1634465281992ram":[{"timestamp":1634480076668,"ram":60.69,"ram_max":249}]}
|
||||
|
|
@ -4,12 +4,11 @@ exports.group = 'Worksys';
|
|||
exports.color = '#888600';
|
||||
exports.version = '1.0.2';
|
||||
exports.icon = 'sign-out';
|
||||
exports.input = 7;
|
||||
exports.input = 5;
|
||||
exports.output = 1;
|
||||
|
||||
const { exec } = require('child_process');
|
||||
|
||||
exports.install = function(instance) {
|
||||
exports.install = async function(instance) {
|
||||
|
||||
instance.on("0", _ => {
|
||||
instance.send(0, FLOW.GLOBALS.settings);
|
||||
|
|
@ -26,18 +25,6 @@ exports.install = function(instance) {
|
|||
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);
|
||||
})
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,124 +0,0 @@
|
|||
exports.id = 'slack_connector';
|
||||
exports.title = 'Slack_Connector';
|
||||
exports.version = '1.0.0';
|
||||
exports.group = 'Worksys';
|
||||
exports.color = '#888600';
|
||||
exports.input = 1;
|
||||
exports.output = 1;
|
||||
exports.click = false;
|
||||
exports.author = 'Jakub Klena';
|
||||
exports.icon = 'sign-out';
|
||||
exports.options = { slack_channel: "C071KN2Q8SK", api_key: "", bot_name: "Flow DEMO", bot_icon: ":totaljs:" };
|
||||
// Slack channel - where to post the messages, can be name like "backend-alerts"
|
||||
// Bot Name - Name of the "user" that will post these messages, it should be based on which server it is running on.
|
||||
// Bot Icon - We can use any slack icon (even custom ones uploaded by us) as the "user" profile picture
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="slack_channel" data-jc-config="placeholder:name or id;required:true" class="m">Slack Channel</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="api_key" data-jc-config="placeholder:api key;required:true" class="m">API Key:</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="bot_name" data-jc-config="placeholder:Flow DEMO;required:false" class="m">Bot Name</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-jc="textbox" data-jc-path="bot_icon" data-jc-config="placeholder:\:totaljs\:;required:true" class="m">Bot Icon</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
exports.readme = `Sends any string received on input to Slack Channel.`;
|
||||
|
||||
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");
|
||||
|
||||
exports.install = function(instance) {
|
||||
var can = false;
|
||||
|
||||
process.on('uncaughtException', function (err) {
|
||||
errLogger.error('uncaughtException:', err.message);
|
||||
errLogger.error(err.stack);
|
||||
instance.error(err);
|
||||
});
|
||||
|
||||
instance.on('data', function(data) {
|
||||
if (!can) return;
|
||||
|
||||
let str = String(data.data); // Ensuring data get converted to string
|
||||
let message = {
|
||||
'channel': instance.options.slack_channel,
|
||||
'username': instance.options.bot_name,
|
||||
'icon_emoji': instance.options.bot_icon,
|
||||
'text': str
|
||||
};
|
||||
let headers = {
|
||||
'Content-type': `application/json`,
|
||||
'Authorization': `Bearer ${instance.options.api_key}`
|
||||
};
|
||||
|
||||
if (F.is4) {
|
||||
let opt = {
|
||||
'method': 'post',
|
||||
'url': 'https://slack.com/api/chat.postMessage',
|
||||
'headers': headers,
|
||||
'body': JSON.stringify(message),
|
||||
'type': 'json',
|
||||
'callback': function(err, response) {
|
||||
if (response && !err) {
|
||||
var msg = { data: response.body, status: response.status, headers: response.headers, host: response.host, cookies: response.cookies };
|
||||
instance.send2(msg);
|
||||
} else if (err) {
|
||||
errLogger.error('Slack post failed - err:', err, '\n - response was:', response);
|
||||
instance.error(err, response);
|
||||
}
|
||||
}
|
||||
};
|
||||
REQUEST(opt);
|
||||
|
||||
} else {
|
||||
U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], JSON.stringify(message), 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) {
|
||||
errLogger.error('Slack post failed - err:', err, '\n - response was:', response);
|
||||
instance.error(err, response);
|
||||
}
|
||||
}, null, headers);
|
||||
}
|
||||
});
|
||||
|
||||
instance.reconfigure = function() {
|
||||
var options = instance.options;
|
||||
can = options.slack_channel && options.bot_name && options.bot_icon && options.api_key ? true : false;
|
||||
instance.status(can ? '' : 'Not configured', can ? undefined : 'red');
|
||||
};
|
||||
|
||||
instance.on('options', instance.reconfigure);
|
||||
instance.reconfigure();
|
||||
}
|
||||
|
|
@ -1,187 +0,0 @@
|
|||
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 = `<div class="padding">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div data-jc="textbox" data-jc-path="slack_channel" data-jc-config="required:false">@(Slack channel to receive the alerts)</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div data-jc="textbox" data-jc-path="types" data-jc-config="required:false">@(Watch these types, comma separated names)</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div data-jc="textbox" data-jc-path="message_includes" data-jc-config="required:false">@(Watch messages that include any of the following strings)</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div data-jc="textbox" data-jc-path="tag_on_include" data-jc-config="required:false">@(Tag people if message includes something)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
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);
|
||||
|
||||
|
||||
};
|
||||
120
flow/test.js
Normal file
120
flow/test.js
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
const getTimezoneOffset = (timeZone, date = new Date()) => {
|
||||
const tz = date.toLocaleString("en", {timeZone, timeStyle: "long"}).split(" ").slice(-1)[0];
|
||||
const dateString = date.toString();
|
||||
const offset = Date.parse(`${dateString} UTC`) - Date.parse(`${dateString} ${tz}`);
|
||||
|
||||
// return UTC offset in millis
|
||||
return offset;
|
||||
}
|
||||
|
||||
let profile = {
|
||||
"time_points": [
|
||||
{
|
||||
"start_time": "13:00",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"start_time": "16:00",
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"astro_clock": true,
|
||||
"dusk_astro_clock_offset": 0,
|
||||
"dawn_astro_clock_offset": 0,
|
||||
"dusk_lux_sensor": false,
|
||||
"dawn_lux_sensor": false,
|
||||
"dusk_lux_sensor_value": 5,
|
||||
"dawn_lux_sensor_value": 5,
|
||||
"dusk_lux_sensor_time_window": 30,
|
||||
"dawn_lux_sensor_time_window": 30,
|
||||
}
|
||||
|
||||
let now = new Date(); // Creates a Date Object using the clients current time
|
||||
console.log(now, now.getTime());
|
||||
|
||||
//let [hours, minutes, seconds] = "18:19:02".split(':');
|
||||
//d.setHours(+hours); // Set the hours, using implicit type coercion
|
||||
//d.setMinutes(minutes); // You can pass Number or String. It doesn't really matter
|
||||
//d.setSeconds(seconds);
|
||||
|
||||
let time_points = profile.time_points;
|
||||
time_points.push( {"start_time": "1:00", "value": 1} );
|
||||
|
||||
time_points.sort(function (a, b) {
|
||||
|
||||
let [ahours, aminutes, aseconds] = a.start_time.split(':');
|
||||
let [bhours, bminutes, bseconds] = b.start_time.split(':');
|
||||
|
||||
let ad = new Date();
|
||||
ad.setHours( parseInt(ahours) );
|
||||
ad.setMinutes( parseInt(aminutes) );
|
||||
ad.setSeconds(0);
|
||||
|
||||
let bd = new Date();
|
||||
bd.setHours( parseInt(bhours) );
|
||||
bd.setMinutes( parseInt(bminutes) );
|
||||
ad.setSeconds(0);
|
||||
|
||||
return ad.getTime() - bd.getTime();
|
||||
});
|
||||
|
||||
console.log(time_points);
|
||||
|
||||
let value = time_points[ time_points.length - 1].value;
|
||||
|
||||
for(let i = 0; i < time_points.length; i++)
|
||||
{
|
||||
let [hours, minutes, seconds] = time_points[i].start_time.split(':');
|
||||
|
||||
let start_time = new Date();
|
||||
start_time.setHours( parseInt(hours) );
|
||||
start_time.setMinutes( parseInt(minutes) );
|
||||
start_time.setSeconds(0);
|
||||
|
||||
if(now.getTime() > start_time.getTime())
|
||||
{
|
||||
value = time_points[i].value;
|
||||
}
|
||||
|
||||
//console.log(start_time);
|
||||
}
|
||||
|
||||
console.log(value);
|
||||
|
||||
const offset = getTimezoneOffset("Europe/Bratislava");
|
||||
console.log(offset);
|
||||
|
||||
|
||||
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;
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function convertUTCDateToLocalDate(date) {
|
||||
var newDate = new Date(date);
|
||||
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
|
||||
return newDate;
|
||||
}
|
||||
|
||||
let d = convertUTCDateToLocalDate(new Date("2022-04-26T06:56:54.000Z"));
|
||||
|
||||
console.log(d, d.getHours());
|
||||
|
|
@ -18,8 +18,8 @@ const SEND_TO = {
|
|||
}
|
||||
|
||||
//read temperature - frequency
|
||||
let timeoutMin = 5;//minutes
|
||||
let NUMBER_OF_FAILURES_TO_SEND_ERROR = 13;
|
||||
let timeoutMin = 1;//minutes
|
||||
let NUMBER_OF_FAILURES_TO_SEND_ERROR = 3;
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
|
|
@ -45,7 +45,8 @@ exports.install = function(instance) {
|
|||
if(temperatureAddress === "") throw "Thermometer: temperatureAddress is not defined";
|
||||
|
||||
exec(`owread -C ${temperatureAddress}/temperature`, (error, stdout, stderr) => {
|
||||
|
||||
debugger;
|
||||
error = 1;
|
||||
if(!error)
|
||||
{
|
||||
parseData(stdout)
|
||||
|
|
@ -93,6 +94,6 @@ exports.install = function(instance) {
|
|||
temperatureAddress = FLOW.GLOBALS.settings.temperature_address;
|
||||
rvoTbName = FLOW.GLOBALS.settings.rvoTbName;
|
||||
startRead = setInterval(main, timeoutMin * 1000 * 60);
|
||||
setTimeout(main, 20000);
|
||||
main();
|
||||
})
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ exports.color = '#888600';
|
|||
exports.version = '1.0.2';
|
||||
exports.icon = 'sign-out';
|
||||
exports.input = 2;
|
||||
exports.output = 4;
|
||||
exports.output = ["red", "white", "blue"];
|
||||
exports.author = 'Daniel Segeš';
|
||||
exports.options = { host: 'tb-stage.worksys.io', port: 1883, clientid: "", username: "" };
|
||||
|
||||
exports.html = `<div class="padding">
|
||||
|
|
@ -198,6 +199,7 @@ exports.install = function(instance) {
|
|||
TRY(function() {
|
||||
|
||||
message = JSON.parse(message);
|
||||
console.log("ooooo------x", 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}});
|
||||
|
|
@ -261,8 +263,6 @@ exports.install = function(instance) {
|
|||
let stringifiedJson = JSON.stringify(data.data);
|
||||
client.publish("v1/gateway/telemetry", stringifiedJson, {qos: 1});
|
||||
|
||||
instance.send(3, stringifiedJson);
|
||||
|
||||
//backup telemetry
|
||||
if(createTelemetryBackup)
|
||||
{
|
||||
|
|
@ -450,7 +450,6 @@ exports.install = function(instance) {
|
|||
let message = JSON.stringify(o);
|
||||
|
||||
client.publish("v1/gateway/telemetry", message, {qos:1});
|
||||
instance.send(3, message);
|
||||
|
||||
//remove from database
|
||||
await promisifyBuilder(nosql.remove().where("id", id));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue