Compare commits

...
Sign in to create a new pull request.

9 commits

45 changed files with 9377 additions and 5797 deletions

5
config
View file

@ -6,7 +6,8 @@ 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
table.settings : rvo_name:string|lang:string|temperature_adress: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
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|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

View file

@ -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 };

View file

@ -1,31 +1,8 @@
node:number|tbname:string|line:number|profile:string|processed:boolean|status:boolean
+|3522|RO8rjaBDy21qPQJzW7oD96ApK3xmNleVZg9Ed4Gw|1||1|1|...........
+|4018|3JjOWdylwgNLzxVab7NEznkZ2vG64rq8PEB5QmDo|1||1|1|...........
+|4019|Z5KyJe9nEg1QNbWlX0wWRB0oDjBLdqzR83VGv624|1||1|1|...........
+|4154|1JMYvnx2RzKEo4aWQ7DmN5AL8yZV3m9NBePXbrdj|1||1|0|...........
+|3907|PjLblDgRBO6WQqnxmkJ59r0Jv3ewZN4p5a89yKdY|1||1|1|...........
+|4148|dz4ojlpP85JMgDLZWkQOoGAaKYqQexEr62GXRV1y|1||1|1|...........
+|4153|d5xjWYMwEJon6rLlK7yBYmAqgV4DaOeNB9ZX3Gzb|1||1|1|...........
+|3938|gRoJEyXVx4qD9er287LP1v7wBzGldaPjLWQKm3Mv|1||1|1|...........
+|3802|K94XLav1glVRnyQ6r01BNzkme3YJwBxM5oOzdP2j|1||1|1|...........
+|4015|d9x2V5LGYBzXp4mMRAOBDj7PloaqJwnQj6DgrNe3|1||1|0|...........
+|3929|B5EoxeMVp4zwr8nqW0GjDpARjvD1PNamOGbLg63Z|1||1|1|...........
+|3946|aw4eELG2DlPMdn1JW0B1DnAqQXOZRN3xB5yp8VKr|1||1|1|...........
+|4014|ZmRwd93QL4gaezxEbAxW5971prn2XjlPvGyqJ6BO|1||1|1|...........
+|4155|eod9aRWLVl34Gx1Dn7VoaaA2rz6qjgmpEXwQJN5Z|1||1|1|...........
+|4149|3a5oqJN1bgnx4Ol9dk86NBAByE6jQ8mKDWMpGrLV|1||1|1|...........
+|3642|EjgWGnXaLy9opPOz20n694086BlYM3w1deVQvbKr|1||1|1|...........
+|3636|wvKJdZML6mXP4DzWBAXWNW7jxNloa5g23Ve9Y1ry|1||1|1|...........
+|3991|Nzp2OoJlqn6r1ZgvdA3GWdAabBwP5G4eE3RQmyxD|1||1|1|...........
+|3994|PLBJzmK1r3Gynd6OW0gGdM0e5wV4vx9bDEqNgYR8|1||1|1|...........
+|3990|52dD6ZlV1QaOpRBmbAqKZgkKnGzWMLj4eJq38Pgo|1||1|1|...........
+|3967|rDbQ84xzwgdqEoPm3kbJw3k9anOZY1RXyBv2LVM6|1||1|1|...........
+|3977|E6Kg9oDnLWyzPRMva7vrwa7Jxp4VG58qO2w1lZYe|1||1|1|...........
+|3757|roKgWqY95V3mXMRzyAjm8D7bLjexpJPvaGDBw826|1||1|1|...........
+|3633|nJL5lPMwBx23YpqRe0rlKV7damXvWVbOrD4gNzy8|1||1|1|...........
+|3744|ZmRwd93QL4gaezxEbAxW5O71prn2XjlPvGyqJ6BO|1||1|1|...........
+|4023|eod9aRWLVl34Gx1Dn7VoaMA2rz6qjgmpEXwQJN5Z|1||1|1|...........
+|3720|3a5oqJN1bgnx4Ol9dk86NZAByE6jQ8mKDWMpGrLV|1||1|1|...........
+|3734|EjgWGnXaLy9opPOz20n69V086BlYM3w1deVQvbKr|1||1|1|...........
+|3741|wvKJdZML6mXP4DzWBAXWN17jxNloa5g23Ve9Y1ry|1||1|1|...........
+|3721|Nzp2OoJlqn6r1ZgvdA3GWKAabBwP5G4eE3RQmyxD|1||0|0|...........
node:number|tbname:string|line:number|profile:string|processed:boolean|status:boolean|time_of_last_communication:number
+|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|.............

View file

@ -20,9 +20,9 @@ key:string|weight:string|sk:string|en:string
+|power_supply_works_correctly|NOTICE|Napájací zdroj pracuje správne|Power supply works correctly|...............
+|battery_level_is_low|ERROR|Batéria má nízku úroveň napätia|Battery level is low|...............
+|battery_level_is_ok|NOTICE|Batéria má správnu úroveň napätia|Battery level is OK|...............
+|door_has_been_open|NOTICE|Dvere boli otvorené|Door has been open|...............
+|door_has_been_closed|NOTICE|Dvere boli zatvorené|Door has been closed|...............
+|door_has_been_open_without_permision_alarm_is_on|WARNING|Dvere boli otvorené bez povolania - zapnutá siréna|Door has been open without permision - alarm is on|...............
+|door_opened|NOTICE|Dvere boli otvorené|Door has been opeed|...............
+|door_closed|NOTICE|Dvere boli zatvorené|Door has been closed|...............
+|door_opened_without_permission|WARNING|Dvere boli otvorené bez povoeania - zapnutá siréna|Door has been oed without permision - alarm is on|...............
+|state_of_contactor_for_line|INFORMATIONAL|Stav stýkača pre líniu č. ${line} je ${value}|State of contactor for line no. ${line} is ${value}|...............
+|local_database_is_corrupted|CRITICAL|||...............
+|electrometer_nok|ERROR|Elektromer neodpovedá|Electrometer is not responding|...............
@ -35,3 +35,4 @@ key:string|weight:string|sk:string|en:string
+|lamps_have_turned_on|NOTICE|Lampy sa zapli|Lamps have turned on|...............
+|lamps_have_turned_off|NOTICE|Lampy sa vypli|Lamps have turned off|...............
+|flow_restart|NOTICE|Restart flowu|Flow has been restarted|...............
+|nodes_db_changed|NOTICE|Zmena v node databaze|Node db has changed|...............

View file

@ -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|.........

View file

@ -1,5 +1,6 @@
line:number|tbname:string|contactor:number|profile:string
+|0|6lQGaY9RDywdVzObj0PadOkPg4NBn3exEK51LWZq|1||...........
+|1|JzwxZXOvDj1bVrN4nkWw9Qk8qdyBl3MRKLpGPgaQ|1|{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"08:00","start_time":"20:00"},{"value":0,"end_time":"13:00","start_time":"08:00"}],"astro_clock":true,"dawn_lux_sensor":true,"dusk_lux_sensor":true,"dawn_lux_sensor_value":15,"dusk_lux_sensor_value":15,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"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|1|{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"08:00","start_time":"20:00"},{"value":0,"end_time":"13:00","start_time":"08:00"}],"astro_clock":true,"dawn_lux_sensor":true,"dusk_lux_sensor":true,"dawn_lux_sensor_value":15,"dusk_lux_sensor_value":15,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"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|1|{"intervals":[{"value":0,"end_time":"20:00","start_time":"13:00"},{"value":1,"end_time":"08:00","start_time":"20:00"},{"value":0,"end_time":"13:00","start_time":"08:00"}],"astro_clock":true,"dawn_lux_sensor":true,"dusk_lux_sensor":true,"dawn_lux_sensor_value":15,"dusk_lux_sensor_value":15,"dawn_astro_clock_offset":0,"dusk_astro_clock_offset":0,"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||............

View file

@ -1,2 +1,2 @@
rvo_name:string|lang:string|temperature_adress: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
+|rvo_senica_39_10.0.0.132|en|28.427B45920702|48.70826502|17.28455203|192.168.252.1|rvo_senica_39_10.0.0.132|qzSNuCNrLP4OL1v47YEe|1883|0|68|unipi|ttyUSB0|1|20|5|...........................................
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
View file

@ -0,0 +1,2 @@
thermometer:string|em:string|twilight_sensor:string
+|NOK|OK|OK|............

View file

@ -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"}

View file

@ -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 LumDimm NODE (HEX) NODE (DEC) Line TB name
2 1 299 665 3 gbv4nzqxW0XGAPKVNk8kr25ZQ2l3O6LRBprM97ew
3 2 28A 650 3 0XYElWeKBNJn1gdoMG8lYdDALkPvj4V3xra2q6mO
4 3 296 662 3 gbv4nzqxW0XGAPKVNk8kW48ZQ2l3O6LRBprM97ew
5 4 297 663 1 LpkVlmq4b3jMwJQxBZ8akayrXAP6o97Ke0aOYEg2
6 5 29C 668 3 lekrmdvO0BQG1ZW4AV8jeZ5M39xnN2wEbRgPjXLp
7 6 2B1 689 3 q0rElBPdL6kxMAjnzVDRl95emNZY7oOv2wK9gb31
8 7 2AB 683 3 XKQbz3WAwY21dGa0R453rWyJm9PZOjqlvpr6Nkeo
9 8 2B0 688 3 PaGbQ3wBAZWOmRvK9VDpvz5endLJYopEqlkzNMxX
10 9 2B9 697 3 joqRYBVL30k9eQWOlZ5qwpD2KJpNEmA6gPxXzwaM
11 10 293 659 3 Ymn9oleRxJ0vw17WzAyGwdyEBk4ObdMXj2VgpNLG
12 11 294 660 3 gj7zbKV46oQ1p2e0AJ8XqZDG3YNWaRrlOEXvBxmM
13 12 295 661 3 laYK7Pomn2bNZXEpedDxAqyOJkQ3WwV49gqxLrAR
14 13 2A0 672 2 0XYElWeKBNJn1gdoMG8lON5ALkPvj4V3xra2q6mO
15 14 2B4 692 2 l9YkRpoB2vVa0mKqEO8ZGGDjW43eXnJML6GxzbwQ
16 15 2B2 690 2 wGjQobgOK0n2YqBZmVDVR3DR9ep6EXA1ka3vzlP7
17 16 27C 636 2 M6ogKQW09bOXewAYvZyvJqyJrV1aRnPGE37p42Nx
18 17 27B 635 2 Vq2JaWpw1OdBKmNeoj8w605XE40l3kgL76Azb9QP
19 18 2B6 694 2 Jm32GR1qpwQxlZza0N5mE15AP96YbOKLogrXVW4e
20 19 2B5 693 2 KjbN4q7JPZmexgdnz2yKdn5YAWwO0Q3BMX6ERLoV
21 20 2B3 691 1 lekrmdvO0BQG1ZW4AV8jzq8M39xnN2wEbRgPjXLp
22 21 27F 639 3 BOjEzGRZ46bnp9wa2A8z76D0JkmW1QPNdrqevXVL
23 22 27E 638 3 9xgzG4Op1BrKZPmoQkDrmj8E73ndJNMjavAwX2Re
24 23 27D 637 3 koW06PeGrLlBp2YJQE5Ogw5RmMaXKzj3wOAZg9n7
25 24 28F 655 2 RMgnK93rkoAazbqdQ4yBYpDZ1YXGx6pmwBeVEP2O
26 25 288 648 2 gaMGN4x1e9JlZz0QPRDd9Rym6dVr3OpvqKnoWBbk
27 26 298 664 1 oGVzxNWP9lrjaQ7vKODQ7g51gqp62YZREmdw3XBM
28 27 29F 671 3 AvVdgzYJZaPx3oMqeED4Oj8NnmKkw716bRO90jLB
29 28 280 640 2 WjBL12pg63eX4N9P7zy0XYyEJKmlbkGwZMx0avQV
30 29 28B 651 2 qaAOzENGrvpbe0VoK7D6Ld519PZmdg3nl24JLQMk
31 30 27A 634 2 NGWamnYqlP1wbgrZQxDAWm5e2X7OVAK69koR04vL
32 31 29E 670 2 dlE1VQjYrNx9gZRmb38g1YyoLBO4qaAk2M6JPnG7
33 32 281 641 2 vnmG4kJxaXWNBgMQq0D7Mz5e9oZzOAlr6LdR3w2V
34 33 278 632 2 LpkVlmq4b3jMwJQxBZ8aM78rXAP6o97Ke0aOYEg2
35 34 29D 669 3 Y9aLW03wOZkABvKXbMyL0lyV1xdNj72r4egqGRzJ
36 35 2A8 680 1 KL2jNOVpdARa9XvoeJDPga8bkmPBxqn7Ww3gzGQ1
37 36 2BA 698 1 mYnBzbeGaAL62jowRv59M35Xq9QpZ0K7O1dg4xVl
38 37 29B 667 1 MzXBoWbEZjO0lrpqnRyoJ4DkmVeaNAGdL9g4QKxP
39 38 289 649 1 0p2rwdP7aGoOQLJNgAynJNy6xWXbmMe3nvZqlzkV
40 39 290 656 1 BrQx3NGKgVMRaXYAo9y1GE8ZzkWnj1le6bdOLE20
41 40 2AA 682 1 vnreBJ6PMqgz20pYEL82XQyG1jkWwdQxZVNAOlmK
42 41 285 645 1 jklN4JpQAx362o9XYZDN6wDgrWw1P7GEbdBM0vRV
43 42 283 643 1 oZmYXEbw9lVWRv1jLxDe9bDdgAMz4PKQnNJ6eB23
44 43 282 642 1 pEonaKBOGbj9034MgJ8W3G8qXvxNWVkAPQz21R6L
45 44 287 647 1 BLQal6Pn9oz1KmNgek5Yqd50vd2MAbqG3OV7Rp4j
46 45 286 646 1 4agVJ9dPQkmp1R2X3EDJKxyrK6ZlNoM0n7qxBOev
47 46 29A 666 1 9PpgLEnvk4WMV6RmOJybMGDaeAXzo2BQNG3K17Zw
48 47 28E 654 1 Mmp93b2nvd7OoqgBeEyEZq5kjlAV1Y4ZNXwW0zLG

File diff suppressed because it is too large Load diff

View file

@ -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);
}
})
}

107
flow/db_init.js Normal file
View file

@ -0,0 +1,107 @@
exports.id = 'db_init';
exports.title = 'DB Initialization';
exports.group = 'Worksys';
exports.color = '#888600';
exports.version = '1.0.2';
exports.icon = 'sign-out';
exports.input = 1;
exports.output = ["blue"];
exports.html = `<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="username" class="m">@(Username)</div>
</div>
</div>
</div>`;
exports.readme = `
# DB initialization
`;
const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper.js');
const { initNotification } = require('./helper/notification_reporter');
exports.install = async function(instance) {
const dbNodes = TABLE("nodes");
const dbRelays = TABLE("relays");
const dbSettings = TABLE("settings");
const dbStatus = TABLE("status");
const dbPins = TABLE("pins");
const dbNotifications = TABLE("notifications");
FLOW.GLOBALS = {};
const dbs = FLOW.GLOBALS;
const responseSettings = await promisifyBuilder(dbSettings.find());
const responseNodes = await promisifyBuilder(dbNodes.find());
const responsePins = await promisifyBuilder(dbPins.find());
const 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....
//for some reason, if last line in nodes.table is not empty, flow wrote more nodes data in one row,
//so we have to add empty line at the bottom of nodes table to avoid this.
//now, remove empty lines from nodesData database:
if(dbs.nodesData.hasOwnProperty("0")) delete dbs.nodesData["0"];
dbs.settings = {
edge_fw_version : "2024-10-14", //rok-mesiac-den
language : responseSettings[0]["lang"],
rvo_name : responseSettings[0]["rvo_name"],
project_id : responseSettings[0]["project_id"],
rvoTbName : dbs.relaysData[0]["tbname"],
temperature_address : responseSettings[0]["temperature_address"],
controller_type : responseSettings[0]["controller_type"],
serial_port : responseSettings[0]["serial_port"],
node_status_nok_time : responseSettings[0]["node_status_nok_time"] * 60 * 60 * 1000 ,// hour * minutes *
latitude : responseSettings[0]["latitude"],
longitude : responseSettings[0]["longitude"],
no_voltage : new Set(),//modbus_citysys - elektromer
backup_on_failure : responseSettings[0]["backup_on_failure"],
restore_from_backup : responseSettings[0]["restore_from_backup"],
restore_backup_wait : responseSettings[0]["restore_backup_wait"],
mqtt_host : responseSettings[0]["mqtt_host"],
mqtt_clientid : responseSettings[0]["mqtt_clientid"],
mqtt_username : responseSettings[0]["mqtt_username"],
mqtt_port : responseSettings[0]["mqtt_port"],
//dynamic values
masterNodeIsResponding : true, //cmd_manager
maintenance_mode : false,
}
FLOW.dbLoaded = true;
initNotification();
setTimeout(()=> {
console.log("DB_INIT - data loaded");
instance.send(0, "_")
}, 5000)
};

File diff suppressed because it is too large Load diff

1654
flow/di_do_controller.js Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

43
flow/empty.js Normal file
View 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
View 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();
})
};

View file

@ -1,8 +1,11 @@
class DataToTbHandler
{
class DataToTbHandler {
constructor(index) {
this.index = index;
// time, after new value for the given key will be resend to tb (e.g. {status: "OK"})
this.timeToHoldTbValue = 30*60; //30 minutes
this.previousValues = {};
this.debug = false;
this.messageCounter = 0;
@ -10,42 +13,33 @@ class DataToTbHandler
this.sender = "";
}
dump()
{
dump() {
console.log("----------------------------");
console.log("previousValues", this.previousValues);
console.log("----------------------------");
}
setSender(sender)
{
setSender(sender) {
this.sender = sender;
}
isEmptyObject( obj ) {
for ( var name in obj ) {
return false;
isEmptyObject(obj) {
for (var name in obj) {
return false;
}
return true;
}
sendToTb(dataToTb, instance)
{
if(!FLOW.OMS_brokerready)
{
return dataToTb;
}
sendToTb(dataToTb, instance) {
let keys = Object.keys(dataToTb);
if(keys.length == 0)
{
if(this.debug) console.log("sendToTb received epty object", dataToTb);
if(this.debug) console.log("sendToTb received empty object", dataToTb);
return;
}
let tbname = keys[0];
let ts;
@ -55,16 +49,11 @@ class DataToTbHandler
for(let i = 0; i < arrayOfValues.length; i++)
{
ts = arrayOfValues[i].ts;
//console.log("sendToTb------------>before", arrayOfValues[i].values, tbname);
let values = this.prepareValuesForTb(tbname, ts, arrayOfValues[i].values);
//console.log("sendToTb------------>after", values);
if(!this.isEmptyObject(values))
{
arrayOfValuesToSend.push({ts: ts, values: values});
arrayOfValuesToSend.push({ts: ts, values: values});
}
}
@ -74,17 +63,6 @@ class DataToTbHandler
return;
}
/*
let dataToTb = {
[tbname]: [
{
"ts": Date.now(),
"values": values
}
]
}
*/
this.messageCounter++;
let dataToTbModified = {
@ -92,26 +70,18 @@ class DataToTbHandler
}
//console.log(this.sender + " DATA SEND TO TB ", tbname, this.messageCounter, new Date(ts), dataToTbModified[tbname][0].values, this.instance);
if(this.debug) console.log(this.sender + " DATA SEND TO TB ", this.index, tbname, arrayOfValuesToSend);
//if(this.debug) console.log(this.sender + " DATA SEND TO TB ", this.index, tbname, arrayOfValuesToSend);
instance.send(this.index, dataToTbModified);
}
getDiffTimestamp(key)
{
let seconds = 60*60;//1h
//seconds = 1;//for testing
getDiffTimestamp(key) {
//TODO set different value for given key!!!
//if(key == "status") seconds = 2*60*60;//2h
let timestampDiffToRemoveKey = seconds*1000;
return timestampDiffToRemoveKey;
//if(key == "status") this.timeToHoldTbValue = 2*60*60;//2h
return this.timeToHoldTbValue * 1000;
}
prepareValuesForTb(tbname, timestamp, values)
{
prepareValuesForTb(tbname, timestamp, values) {
let keys = Object.keys(values);
if(!this.previousValues.hasOwnProperty(tbname))
{
@ -160,4 +130,4 @@ class DataToTbHandler
}
}
module.exports = DataToTbHandler;
module.exports = DataToTbHandler;

View file

@ -97,7 +97,9 @@ class ErrorToServiceHandler
console.log("ErrorToServiceHandler------------------------>send to service", dataToInfoSender);
//TODO UGLY!!!
if(this.projects_id === undefined) this.projects_id = FLOW.OMS_projects_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)

View file

@ -1,72 +0,0 @@
//key is device, value = str
let sentValues= {};
function sendError(func, device, weight, str, extra, tb_output, instance, type) {
// if ((weight === ERRWEIGHT.DEBUG) && (instance.CONFIG.debug === false)){
// return; // Allow debug messages only if CONFIG.debug is active
// }
let key = device;
if(type != undefined) key = type;
if(sentValues.hasOwnProperty(key))
{
if(sentValues[key] == str)
{
return;
}
}
sentValues[key] = str;
let content = {
"type": weight,
"status": "new",
"source": {
"func":func,
"component":instance.id,
"component_name":instance.name,
"edge":device
},
"message":str,
"message_data": extra
};
let msg = {};
msg[device] = [
{
"ts": Date.now(),
"values": {
"_event":content
}
}
];
// Msg can be outputted from components only after configuration
/*if (canSendErrData()){
sendBufferedErrors();
} else {
bufferError(msg);
}*/
instance.send(tb_output, msg); // Even if error server is unavailable, send this message to output, for other possible component connections
}
let ERRWEIGHT = {
EMERGENCY: "emergency", // System unusable
ALERT: "alert", // Action must be taken immidiately
CRITICAL: "critical", // Component unable to function
ERROR: "error", // Error, but component able to recover from it
WARNING: "warning", // Possibility of error, system running futher
NOTICE: "notice", // Significant message but not an error, things user might want to know about
INFO: "informational", // Info
DEBUG: "debug" // Debug - only if CONFIG.debug is enabled
};
module.exports = {
sendError,
ERRWEIGHT
}

View file

@ -1,56 +0,0 @@
const ERRWEIGHT = {
EMERGENCY: "emergency", // System unusable
ALERT: "alert", // Action must be taken immidiately
CRITICAL: "critical", // Component unable to function
ERROR: "error", // Error, but component able to recover from it
WARNING: "warning", // Possibility of error, system running futher
NOTICE: "notice", // Significant message but not an error, things user might want to know about
INFO: "informational", // Info
DEBUG: "debug" // Debug - only if CONFIG.debug is enabled
};
function sendError(func, device, weight, str, extra){
if ((weight === ERRWEIGHT.DEBUG) && (instance.CONFIG.debug === false)){
return; // Allow debug messages only if CONFIG.debug is active
}
let content = {
"type": weight,
"status": "new",
"source": {
"func":func,
"component":instance.id,
"component_name":instance.name,
"edge":myEdge
},
"message":str,
"message_data": extra
};
let msg = {};
msg[device] = [
{
"ts": Date.now(),
"values": {
"_event":content
}
}
];
// Msg can be outputted from components only after configuration
/*if (canSendErrData()){
sendBufferedErrors();
} else {
bufferError(msg);
}*/
instance.send(0, msg); // Even if error server is unavailable, send this message to output, for other possible component connections
}
module.exports = {
sendError,
ERRWEIGHT,
}

30
flow/helper/logger.js Normal file
View file

@ -0,0 +1,30 @@
//https://github.com/log4js-node/log4js-node/blob/master/examples/example.js
//file: { type: 'file', filename: path.join(__dirname, 'log/file.log') }
var log4js = require("log4js");
var path = require('path');
log4js.configure({
appenders: {
errLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../../", 'err.txt') },
monitorLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../../", 'monitor.txt') },
console: { type: 'console' }
},
categories: {
errLogs: { appenders: ['console', 'errLogs'], level: 'error' },
monitorLogs: { appenders: ['console', 'monitorLogs'], level: 'trace' },
//another: { appenders: ['console'], level: 'trace' },
default: { appenders: ['console'], level: 'trace' }
}
});
const errLogger = log4js.getLogger("errLogs");
const logger = log4js.getLogger();
const monitor = log4js.getLogger("monitorLogs");
//USAGE
//logger.debug("text")
//monitor.info('info');
//errLogger.error("some error");
module.exports = { errLogger, logger, monitor };

View file

@ -1,10 +1,6 @@
const { promisifyBuilder, makeMapFromDbResult } = require('./db_helper.js');
const dbNotifications = TABLE("notifications");
//key is device, value = str
let sentValues= {};
let notificationsData = {};
let notificationsData = null;
let ERRWEIGHT = {
EMERGENCY: "emergency", // System unusable
@ -24,12 +20,9 @@ function getKey(map, val) {
//https://stackoverflow.com/questions/41117799/string-interpolation-on-variable
var template = (tpl, args) => tpl.replace(/\${(\w+)}/g, (_, v) => args[v]);
async function initNotifications()
{
let response = await promisifyBuilder(dbNotifications.find());
notificationsData = makeMapFromDbResult(response, "key");
console.log("initNotifications done" );
function initNotification() {
notificationsData = FLOW.GLOBALS.notificationsData;
}
function sendNotification(func, device, key, params, extra, tb_output, instance, saveKey) {
@ -39,7 +32,7 @@ function sendNotification(func, device, key, params, extra, tb_output, instance,
let storeToSendValues = true;
if(saveKey == undefined) storeToSendValues = false;
let lang = FLOW.OMS_language;
let lang = FLOW.GLOBALS.settings.language;
if(lang != "en" || lang != "sk") lang = "en";
let tpl = key;
@ -55,7 +48,8 @@ function sendNotification(func, device, key, params, extra, tb_output, instance,
}
else
{
console.error("sendNotification: Notifications: undefined key", key, func, notificationsData);
//console.error("sendNotification: Notifications: undefined key", key, func, notificationsData);
console.error("sendNotification: Notifications: undefined key", key, func );
return false;
}
@ -91,7 +85,7 @@ function sendNotification(func, device, key, params, extra, tb_output, instance,
if(storeToSendValues) sentValues[saveKey] = tpl;
let str = FLOW.OMS_rvo_name;
let str = FLOW.GLOBALS.settings.rvo_name;
if(str != "") str = str + ": ";
str = str + tpl;
@ -132,6 +126,6 @@ function sendNotification(func, device, key, params, extra, tb_output, instance,
module.exports = {
sendNotification,
initNotifications,
ERRWEIGHT
}
ERRWEIGHT,
initNotification
}

View file

@ -1,94 +1,100 @@
const { exec } = require('child_process');
function openPort(port){
return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
var callbackError = function(err) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackError);
var callbackError = function(err) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackError);
reject(err.message);
};
reject(err.message);
};
var callbackOpen = function(data) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackOpen);
var callbackOpen = function(data) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackOpen);
resolve("port open: ok");
};
resolve("port open: ok");
};
port.on('error', callbackError);
port.on('open', callbackOpen);
port.on('error', callbackError);
port.on('open', callbackOpen);
port.open();
port.open();
})
}
})
}
function runSyncExec(command){
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if(error == null) resolve(stdout);
reject(error);
});
})
}
function runSyncExec(command){
return new Promise((resolve, reject) => {
async function writeData(port, data, readbytes, timeout){
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if(error == null) resolve(stdout);
reject(error);
});
//readbytes = 0 = broadcast
if(readbytes == undefined) readbytes = 0;
if(timeout == undefined) timeout = 10000;//10s, default timeout MASTERA je 3s
})
}
//cmd-manager mame http route POST / terminal a tomu sa tiez nastavuje timeout!!!
var callback = function(data) {
rsPortReceivedData.push(...data);
let l = rsPortReceivedData.length;
async function writeData(port, data, readbytes, timeout){
return new Promise((resolve, reject) => {
if(l >= readbytes)
{
port.removeListener('data', callback);
clearTimeout(t);
resolve(rsPortReceivedData);
}
};
port.removeListener('data', callback);
let t = setTimeout(() => {
port.removeListener('data', callback);
console.log("serialport helper: writeData TIMEOUT READING", rsPortReceivedData);
reject("TIMEOUT READING");
}, timeout);
let rsPortReceivedData = [];
if(readbytes > 0) port.on('data', callback);
// If first item in data array is 255, we just write broadcast command to rsPort
// We wait 3 seconds and resolve(["broadcast"])
// It is important to resolve with array
if(data[0] == 255) {
port.write(Buffer.from(data), function(err) {
if (err) {
port.removeListener('data', callback);
reject(err.message);
}
if(readbytes == 0)
{
resolve(rsPortReceivedData);
}
});
})
setTimeout(resolve, 3000, ["broadcast"]);
return;
}
//cmd-manager mame http route POST / terminal a tomu sa tiez nastavuje timeout!!!
var callback = function(data) {
rsPortReceivedData.push(...data);
let l = rsPortReceivedData.length;
if(l >= readbytes)
{
port.removeListener('data', callback);
clearTimeout(t);
resolve(rsPortReceivedData);
}
};
port.removeListener('data', callback);
let t = setTimeout(() => {
port.removeListener('data', callback);
console.log("serialport helper: writeData TIMEOUT READING", rsPortReceivedData);
reject("TIMEOUT READING");
}, timeout);
let rsPortReceivedData = [];
port.on('data', callback);
port.write(Buffer.from(data), function(err) {
if (err) {
port.removeListener('data', callback);
reject(err.message);
}
});
})
}
module.exports = {
openPort,
runSyncExec,
writeData
}
}

View file

@ -3,12 +3,9 @@ exports.title = 'Info sender';
exports.version = '1.0.0';
exports.group = 'Worksys';
exports.color = '#2134B0';
exports.input = 1;
exports.input = 2;
exports.output = 1
exports.click = false;
exports.author = 'oms-is';
exports.icon = 'bolt';
exports.options = { edge: "undefined" };
const { networkInterfaces } = require('os');
@ -22,13 +19,12 @@ exports.html = `<div class="padding">
exports.readme = `# send all data to projects.worksys.io, required to monitor status of controller(unipi)`;
const fs = require('fs');
var path = require('path');
exports.install = function(instance) {
exports.install = async function(instance) {
let id;
let allValues = {};
let sendAllValuesInterval;
let configured = false;
let now = new Date();
console.log(exports.title, "INSTALLED", now.toLocaleString("sk-SK"));
@ -47,23 +43,19 @@ exports.install = async function(instance) {
}
}
}
function sendValues()
{
const id = FLOW.OMS_projects_id;
if(!configured) return;
if(Object.keys(allValues).length > 0)
{
if(id !== undefined)
if(id)
{
delete allValues.__force__;
let dataToSend = {...allValues};
dataToSend.id = id;
dataToSend.ipAddresses = ipAddresses;
//dataToSend.notify_date = new Date().toISOString().slice(0, 19).replace('T', ' ');
//console.log(exports.title, "------------>sendValues", dataToSend);
instance.send(0, dataToSend);
@ -71,7 +63,7 @@ exports.install = async function(instance) {
}
else
{
console.log(exports.title, "unable to send data, id is undefined");
console.log(exports.title, "unable to send data, no id");
}
}
@ -81,10 +73,14 @@ exports.install = async function(instance) {
clearInterval(sendAllValuesInterval);
})
instance.on("data", (flowdata) => {
instance.on("0", _ => {
id = FLOW.GLOBALS.settings.project_id;
configured = true;
})
instance.on("1", flowdata => {
allValues = { ...allValues, ...flowdata.data};
//console.log("DATA RECEIVED", flowdata.data);
//__force__

1127
flow/modbus_citysys.js Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,348 +0,0 @@
exports.id = 'modbus_reader';
exports.title = 'Modbus reader';
exports.version = '2.0.0';
exports.group = 'Worksys';
exports.color = '#2134B0';
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;
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.startSocket();
}
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 (["Phase_1_voltage", "Phase_2_voltage", "Phase_3_voltage"].includes(singleValue))
{
let l = singleValue.split("_");
let phase = parseInt(l[1]);
if(FLOW.OMS_no_voltage == undefined) FLOW.OMS_no_voltage = new Set();
// console.log(values[singleValue], tbName);
if(values[singleValue] == 0)
{
FLOW.OMS_no_voltage.add(phase);
sendNotification("modbus_reader: checkNullVoltage", tbName, "no_voltage_on_phase", {phase: phase}, "", SEND_TO.tb, instance, "voltage" + phase );
// console.log('no voltage')
}
else
{
FLOW.OMS_no_voltage.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;
}
setTimeout(() => {
mainSocket = new SocketWithClients();
tbName = FLOW.OMS_rvo_tbname;
// this notification is to show, that flow (unipi) has been restarted
sendNotification("modbus_reader", tbName, "flow_restart", {}, "", SEND_TO.slack, instance);
}, 25000);
}

107
flow/monitorcpu.js Normal file
View 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
View 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
View 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
View 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
View 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
View 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;
}

View file

@ -0,0 +1,70 @@
exports.id = 'nodesdb_change_check';
exports.title = 'Nodes DB change check';
exports.group = 'Worksys';
exports.color = '#888600';
exports.version = '1.0.2';
exports.icon = 'sign-out';
exports.input = 1;
exports.output = 1;
exports.readme = `Check, if nodes.table db changed compared to original database`;
const fs = require('fs');
const path = require('path');
const { sendNotification } = require('./helper/notification_reporter');
const nodesOriginalFile = path.join(__dirname, '../databases/nodes_original/', 'nodes_original.table');
exports.install = function(instance) {
function compareArrays(array1, array2) {
let message = "";
let areEqual = true;
let zmenene = []
if (array1.length !== array2.length) {
message += "Nezhoda v pocte nodov. "
}
const set1 = new Set(array1.map(obj => JSON.stringify(obj)));
const set2 = new Set(array2.map(obj => JSON.stringify(obj)));
for (const objStr of set1) {
if (!set2.has(objStr)) {
zmenene.push(objStr)
areEqual = false;
} else {
set2.delete(objStr);
}
}
if(!areEqual) {
message += `Aktualne nody: ${zmenene.toString()}. Zmenene proti originalu: ${Array.from(set2).join(' ')}`;
sendNotification("Nodesdb_changecheck", FLOW.GLOBALS.settings.rvoTbName, "nodes_db_changed", "", message, 0, instance);
}
else console.log("Arrays are equal.");
console.log(message)
}
instance.on("data", _ => {
let nodesData = FLOW.GLOBALS.nodesData;
// we check if nodes.table has changed compared to nodes_original.table (we have array of nodes e.g. [{node:255, tbname: "agruhuwhgursuhgo34hgsdiguhrr"}]
const nodes_actual = Object.keys(nodesData).map(node => ({[node]: nodesData[node].tbname}))
let nodes_original = fs.readFileSync(nodesOriginalFile, { encoding: 'utf8', flag: 'r' });
try {
nodes_original = JSON.parse(nodes_original);
} catch(e) {
console.log(e)
}
setTimeout(() => compareArrays(nodes_actual, nodes_original),10000);
})
}

191
flow/nosql.js Normal file
View 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);
}
});
}
});
};

View file

@ -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é
1 key weight en sk
2 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}
3 dusk_has_occured INFO Dusk has occured Nastal súmrak
4 dawn_has_occured INFO Dawn has occured Nastal úsvit
5 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}
6 master_node_is_responding_again NOTICE Master node is responding again Master node začal znovu odpovedať
7 command_was_sent_from_terminal_interface DEBUG A command was sent from terminal interface Z terminálu bol odoslaný príkaz
8 master_node_is_not_responding ALERT Master node is not responding Master node neodpovedá
9 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
10 circuit_breaker_was_turned_on_line NOTICE Circuit breaker was turned on - line no. ${line} Zapnutie ističa na línii č. ${line}
11 circuit_breaker_was_turned_off_line ERROR Circuit breaker was turned off - line no. ${line} Vypnutie ističa na línií č. ${line}
12 dimming_profile_was_processed_for_node INFO Dimming profile was processed for node no. ${node} Stmievací profil bol spracovaný pre node č. ${node}
13 switching_profile_was_processed_for_line INFO Switching profile was processed for line no. ${line} Spínací profil bol spracovaný pre líniu č. ${line}
14 thermometer_is_not_responding WARNING Thermometer is not responding Teplomer neodpovedá
15 thermometer_is_responding_again NOTICE Thermometer is responding again Teplomer znovu odpovedá
16 thermometer_sends_invalid_data WARNING Thermometer sends invalid data Teplomer posiela neplatné hodnoty
17 main_switch_has_been_turned_off CRITICAL Main switch has been turned off Hlavný vypínač bol vypnutý
18 main_switch_has_been_turned_on NOTICE Main switch has been turned on Hlavný vypínač bol zapnutý
19 power_supply_has_disconnected_input ALERT Power supply has disconnected input Napájací zdroj nemá napätie na vstupe
20 power_supply_works_correctly NOTICE Power supply works correctly Napájací zdroj pracuje správne
21 battery_level_is_low ERROR Battery level is low Batéria má nízku úroveň napätia
22 battery_level_is_ok NOTICE Battery level is OK Batéria má správnu úroveň napätia
23 door_has_been_open NOTICE Door has been open Dvere boli otvorené
24 door_has_been_closed NOTICE Door has been closed Dvere boli zatvorené
25 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
26 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}
27 local_database_is_corrupted CRITICAL
28 electrometer_is_not_responding ERROR Electrometer is not responding Elektromer neodpovedá
29 no_voltage_detected_on_phase CRITICAL No voltage detected on phase no. ${phase} Na fáze č. ${phase} nie je napätie
30 electrometer_is_responding_again NOTICE Electrometer is responding again Elektromer znovu odpovedá
31 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
View 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 Production line Operation Error type Error code Orig Message (EN) User defined error
2 CMFB OP10 C_STOP 121 Machine Not At Home Position
3 CMFB OP10 C_STOP 122 Auto Mode Not Selected
4 CMFB OP10 C_STOP 125 Part NOK
5 CMFB OP10 C_STOP 140 Left Shift Conduit Contact Detect Sensor Backcheck Error
6 CMFB OP10 C_STOP 141 Left Select Conduit Contact Detect Sensor Backcheck Error
7 CMFB OP10 C_STOP 142 Right Shift Conduit Contact Detect Sensor Backcheck Error
8 CMFB OP10 C_STOP 143 Right Select Conduit Contact Detect Sensor Backcheck Error
9 CMFB OP10 C_STOP 144 Left Shift Conduit In Place Sensor Backcheck Error
10 CMFB OP10 C_STOP 145 Left Select Conduit In Place Sensor Backcheck Error
11 CMFB OP10 C_STOP 146 Right Select Conduit In Place Sensor Backcheck Error
12 CMFB OP10 C_STOP 147 Left Shift Conduit In Place Sensor Backcheck Error
13 CMFB OP10 C_STOP 148 Left_Shift_Conduit_Placed_In_Place Sensors Backcheck Error
14 CMFB OP10 C_STOP 149 Left_Select_Conduit_Placed_In_Place Sensors Backcheck Error
15 CMFB OP10 C_STOP 150 Right_Shift_Conduit_Placed_In_Place Sensors Backcheck Error
16 CMFB OP10 C_STOP 151 Right_Select_Conduit_Placed_In_Place Sensors Backcheck Error
17 CMFB OP10 I_STOP 101 Left Clampping Conduit Cylinder Home Position Timeout Error [I3.1&I3.3,Q3.3],
18 CMFB OP10 I_STOP 102 Left Clampping Conduit Cylinder Work Position Timeout Error [I3.0&I3.2,Q3.2],
19 CMFB OP10 I_STOP 103 Left Clampping Conduit Cylinder Sensors Miscompare [I3.1&I3.3,I3.0&I3.2],
20 CMFB OP10 I_STOP 104 Right Clampping Conduit Cylinder Work Position Timeout Error [I4.0&I4.2,Q3.4],
21 CMFB OP10 I_STOP 105 Right Clampping Conduit Cylinder Home Position Timeout Error [I4.1&I4.3,Q3.5],
22 CMFB OP10 I_STOP 106 Right Clampping Conduit Cylinder Sensors Miscompare [I4.1&I4.3,I4.0&I4.2],
23 CMFB OP10 I_STOP 107 Right Clipping Conduit Cylinder Work Position Timeout Error [I5.2,Q3.6],
24 CMFB OP10 I_STOP 108 Right Clipping Conduit Cylinder Home Position Timeout Error [I5.3,Q3.7],
25 CMFB OP10 I_STOP 109 Right Clipping Cylinder Sensors Miscompare [I3.1&I3.3,I3.0&I3.2],
26 CMFB OP10 I_STOP 110 Left Clipping Cylinder Work Position Timeout Error [I6.2,Q5.2],
27 CMFB OP10 I_STOP 111 Left Clipping Cylinder Home Position Timeout Error [I6.3,Q5.3],
28 CMFB OP10 I_STOP 112 Left Clipping Cylinder Sensors Miscompare [I6.2,I6.3],
29 CMFB OP10 I_STOP 113 Right Striping Cylinder Work Position Timeout Error [I5.0,Q4.0],
30 CMFB OP10 I_STOP 114 Right Striping Cylinder Home Position Timeout Error [I3.1&I3.3,Q3.3],
31 CMFB OP10 I_STOP 115 Right Striping Cylinder Sensors Miscompare [I3.1&I3.3,I3.0&I3.2],
32 CMFB OP10 I_STOP 116 Left Striping Cylinder Work Position Timeout Error [I6.0,Q5.4],
33 CMFB OP10 I_STOP 117 Left Stripping Cylinder Work Position Timeout Error [I6.1,Q5.5],
34 CMFB OP10 I_STOP 118 Left Stripping Cylinder Sensors Miscompare [I6.0,I6.1],
35 CMFB OP10 I_STOP 119 Left Escaping Cylinder Work Position Timeout Error [I6.4,Q5.6],
36 CMFB OP10 I_STOP 120 Left Escaping Cylinder Home Position Timeout Error [I6.5,Q5.7],
37 CMFB OP10 I_STOP 121 Left Escaping Cylinder Sensors Miscompare [I6.4,I6.5],
38 CMFB OP10 I_STOP 122 Right Escaping Cylinder Work Position Timeout Error [I5.4,Q4.2],
39 CMFB OP10 I_STOP 123 Right Escaping Cylinder Home Position Timeout Error [I5.5,Q4.3],
40 CMFB OP10 I_STOP 124 Right Escaping Cylinder Sensors Miscompare [I5.4,I5.5],
41 CMFB OP10 I_STOP 125 UP Clamping End of Conduit Cylinder Work Position Timeout Error [I8.0&I8.4,Q4.7],
42 CMFB OP10 I_STOP 126 UP Clamping End of Conduit Cylinder Home Position Timeout Error [I8.1&I8.5,Q4.6],
43 CMFB OP10 I_STOP 127 UP Clamping End of Conduit Cylinder Sensors Miscompare [I8.0&I8.4,I8.1&I8.5],
44 CMFB OP10 I_STOP 128 DOWN Clamping End of Conduit Cylinder Work Position Timeout Error [I8.2&I8.6,Q4.4],
45 CMFB OP10 I_STOP 129 DOWN Clamping End of Conduit Cylinder Home Position Timeout Error [I8.3&I8.7,Q4.5],
46 CMFB OP10 I_STOP 130 DOWN Clamping End of Conduit Cylinder Sensors Miscompare [I8.2&I8.6,I8.3&I8.7],
47 CMFB OP10 I_STOP 131 Fixture Moving Cylinder Work Position Timeout Error [I7.0,Q5.0],
48 CMFB OP10 I_STOP 132 Fixture Moving Cylinder Home Position Timeout Error [I7.1,Q5.1],
49 CMFB OP10 I_STOP 133 Fixture Moving Cylinder Sensors Miscompare Error[I7.0,I7.1],
50 CMFB OP10 I_STOP 134 Hydraulic Cylinder Work Positio Timeout Error,
51 CMFB OP10 I_STOP 135 Hydraulic Cylinder Home Position Timeout Error[I7.2],
52 CMFB OP10 I_STOP 136 Hydraulic Cylinder Sensors Miscompare Error,
53 CMFB OP10 I_STOP 137 Left Press Conduit Cylinder Work Positio Timeout Error[I10.3],
54 CMFB OP10 I_STOP 138 Left Press Conduit Cylinder Home Positio Timeout Error[I10.2],
55 CMFB OP10 I_STOP 139 Left Press Conduit Cylinder Sensors Miscompare Error[I10.2,I10.3],
56 CMFB OP10 I_STOP 140 Right Press Conduit Cylinder Work Positio Timeout Error[I10.5],
57 CMFB OP10 I_STOP 141 Right Press Conduit Cylinder Home Positio Timeout Error[I10.4],
58 CMFB OP10 I_STOP 142 Right Press Conduit Cylinder Sensors Miscompare Error[I10.4,I10.5],
59 CMFB OP10 I_STOP 151 Emergency Stop Relay Not ON,Pls Press Reset Button.,
60 CMFB OP10 I_STOP 152 Emergency Stop Button Pressed
61 CMFB OP20A C_STOP 101 Light Curtain Blocked(I2.0),
62 CMFB OP20A C_STOP 121 Machine Not At Home Position,
63 CMFB OP20A C_STOP 122 Auto Mode Not Selected,
64 CMFB OP20A C_STOP 125 The Part Is NOK,
65 CMFB OP20A C_STOP 140 Grommet Assembly_PositionLeft sensor backcheck fault[I8.0],
66 CMFB OP20A C_STOP 141 Grommet Assembly_PositionRight sensor backcheck fault[I8.1],
67 CMFB OP20A C_STOP 142 AssemblyOK_Left_Front sensor backcheck fault[I8.2],
68 CMFB OP20A C_STOP 143 AssemblyOK_Left_Back sensor backcheck fault[I8.3],
69 CMFB OP20A C_STOP 144 AssemblyOK_Right_Front sensor backcheck fault[I8.4],
70 CMFB OP20A C_STOP 145 AssemblyOK_Right_Back sensor backcheck fault[I8.5],
71 CMFB OP20A C_STOP 146 Grommet present sensor backcheck fault[I5.6],
72 CMFB OP20A C_STOP 147 Clip check_front sensor backcheck fault[I9.6],
73 CMFB OP20A C_STOP 148 Clip check_back sensor backcheck fault[9.7],
74 CMFB OP20A C_STOP 149 Gromment left sensor backcheck fault[I8.6],
75 CMFB OP20A C_STOP 150 Check Sensor 11 Backcheck Error,
76 CMFB OP20A C_STOP 151 Check Sensor 12 Backcheck Error,
77 CMFB OP20A C_STOP 152 Check Sensor 13 Backcheck Error
78 CMFB OP20A I_STOP 100 Pressing cylinder Sensor Miscompare[I4.4,I4.5],
79 CMFB OP20A I_STOP 101 Clip ClampCylinder_front Work Position Timeout Errror[I9.1],
80 CMFB OP20A I_STOP 102 Clip ClampCylinder_front Home Position Timeout Errror[I9.0],
81 CMFB OP20A I_STOP 103 Clip ClampCylinder_front Sensor Miscompare[I9.0,I9.1],
82 CMFB OP20A I_STOP 104 Clip ClampCylinder_back Work Position Timeout Errror[I9.3],
83 CMFB OP20A I_STOP 105 Clip ClampCylinder_back Home Position Timeout Errror[I9.2],
84 CMFB OP20A I_STOP 106 Clip ClampCylinder_back Sensor Miscompare[I9.2,I9.3],
85 CMFB OP20A I_STOP 107 Clip Assembly Cylinder Work Position Timeout Errror[I9.5],
86 CMFB OP20A I_STOP 116 Clip Assembly Cylinder Home Position Timeout Errror[I9.4],
87 CMFB OP20A I_STOP 117 Clip Assembly Cylinder Sensor Miscompare[I9.4,I9.5],
88 CMFB OP20A I_STOP 151 Emergency Stop Relay Not ON,
89 CMFB OP20A I_STOP 152 Emergency Stop Button Pressed
90 CMFB OP20B C_STOP 100 Load Material cylinder Work Position Timeout Errror[I4.1],
91 CMFB OP20B C_STOP 101 Load Material cylinder Home Position Timeout Errror[I4.0],
92 CMFB OP20B C_STOP 102 Load Material cylinder Sensor Miscompare[I4.0,I4.1],
93 CMFB OP20B C_STOP 103 The Assembly of cylinder Work Position Timeout Errror[I4.3],
94 CMFB OP20B C_STOP 104 The Assembly of cylinder Home Position Timeout Errror[I4.2],
95 CMFB OP20B C_STOP 105 The Assembly of cylinder Sensor Miscompare[I4.2,I4.3],
96 CMFB OP20B C_STOP 106 Pressing cylinder Work Position Timeout Errror[I4.5],
97 CMFB OP20B C_STOP 107 Pressing cylinder Home Position Timeout Errror[I4.4],
98 CMFB OP20B C_STOP 108 Pressing cylinder Sensor Miscompare[I4.4,I4.5],
99 CMFB OP20B C_STOP 109 Clip ClampCylinder_front Work Position Timeout Errror[I9.1],
100 CMFB OP20B C_STOP 110 Clip ClampCylinder_front Home Position Timeout Errror[I9.0],
101 CMFB OP20B C_STOP 111 Clip ClampCylinder_front Sensor Miscompare[I9.0,I9.1],
102 CMFB OP20B C_STOP 112 Clip ClampCylinder_back Work Position Timeout Errror[I9.3],
103 CMFB OP20B C_STOP 113 Clip ClampCylinder_back Home Position Timeout Errror[I9.2],
104 CMFB OP20B C_STOP 114 Clip ClampCylinder_back Sensor Miscompare[I9.2,I9.3],
105 CMFB OP20B C_STOP 115 Clip Assembly Cylinder Work Position Timeout Errror[I9.5],
106 CMFB OP20B C_STOP 126 Clip Assembly NOK!,
107 CMFB OP20B C_STOP 140 Select Damper Prestretching sensor backcheck fault[I5.0],
108 CMFB OP20B C_STOP 141 Select Omgea Prestretching sensor backcheck fault[I5.1],
109 CMFB OP20B C_STOP 142 Shift Damper Prestretching sensor backcheck fault[I5.2],
110 CMFB OP20B C_STOP 143 Shift Omgea Prestretching sensor backcheck fault[I5.3],
111 CMFB OP20B C_STOP 144 Gromment ASSY Postion1 sensor backcheck fault[I5.4],
112 CMFB OP20B C_STOP 145 Gromment ASSY Postion2 sensor backcheck fault[I5.5],
113 CMFB OP20B C_STOP 146 Grommet present_Right sensor backcheck fault[I5.6]
114 CMFB OP20B I_STOP 100 Rotating Pressure cylinder Sensor Miscompare[I7.2,I7.3],
115 CMFB OP20B I_STOP 101 Cover Cylinder Work Position Timeout Errror[I7.1],
116 CMFB OP20B I_STOP 102 Cover Cylinder Home Position Timeout Errror[I7.0],
117 CMFB OP20B I_STOP 103 Cover Cylinder Sensor Miscompare[I7.0,I7.1],
118 CMFB OP20B I_STOP 108 Remodel cylinder Work Position Timeout Errror[I7.7],
119 CMFB OP20B I_STOP 109 Remodel cylinder Home Position Timeout Errror[I7.6],
120 CMFB OP20B I_STOP 110 Remodel cylinder Sensor Miscompare[I7.6,I7.7],
121 CMFB OP20B I_STOP 111 Limit cylinder Work Position Timeout Errror[I7.5],
122 CMFB OP20B I_STOP 112 Limit cylinder Home Position Timeout Errror[I7.4],
123 CMFB OP20B I_STOP 113 Limit cylinder Sensor Miscompare[I7.4,I7.5],
124 CMFB OP20B I_STOP 114 Rotating Pressure cylinder Work Position Timeout Errror[I7.3],
125 CMFB OP20B I_STOP 115 Rotating Pressure cylinder Home Position Timeout Errror[I7.2]
126 CMFB OP30A C_STOP 101 Left Station Light Curtain Blocked(I2.0),
127 CMFB OP30A C_STOP 121 Machine Not At Home Position_L,
128 CMFB OP30A C_STOP 122 Auto Mode Not Selected_L,
129 CMFB OP30A C_STOP 125 The Part Of Station Is NOK,
130 CMFB OP30A C_STOP 140 left front select swivetube present sensor backcheck fault,
131 CMFB OP30A C_STOP 141 left front select swivetube assy present sensor backcheck fault,
132 CMFB OP30A C_STOP 142 left front select omgea present sensor backcheck fault,
133 CMFB OP30A C_STOP 143 left inside select swivetube present sensor backcheck fault,
134 CMFB OP30A C_STOP 144 left inside select swivetube assy present sensor backcheck fault,
135 CMFB OP30A C_STOP 145 left inside select omgea present sensor backcheck fault,
136 CMFB OP30A C_STOP 146 right outside shift omgea present sensor backcheck fault,
137 CMFB OP30A C_STOP 147 right outside shift swiveltube assy present sensor backcheck fault,
138 CMFB OP30A C_STOP 148 right outside shift swiveltube present sensor backcheck fault,
139 CMFB OP30A C_STOP 149 right inside shift omgea present sensor backcheck fault,
140 CMFB OP30A C_STOP 150 right inside shift swiveltube assy present sensor backcheck fault,
141 CMFB OP30A C_STOP 151 right inside shift swiveltube present sensor backcheck fault,
142 CMFB OP30A C_STOP 152 romemet assy present sensor backcheck fault
143 CMFB OP30A I_STOP 100 left front select rotating cylinder Work Position Timeout Errror[I3.1],
144 CMFB OP30A I_STOP 101 left front select rotating cylinder Home Position Timeout Errror[I3.0],
145 CMFB OP30A I_STOP 102 left front select rotating cylinder Sensor Miscompare[I3.0,I3.1],
146 CMFB OP30A I_STOP 103 left front select pull in cylinder Work Position Timeout Errror[I3.3],
147 CMFB OP30A I_STOP 104 left front select pull in cylinder Home Position Timeout Errror[I3.2],
148 CMFB OP30A I_STOP 105 left front select pull in cylinder Sensor Miscompare[I3.2,I3.3],
149 CMFB OP30A I_STOP 106 outside select prepull testing force not reach 1000N,
150 CMFB OP30A I_STOP 107 outside select prepull testing cylinder Home Position Timeout Errror[I3.4],
151 CMFB OP30A I_STOP 108 outside select prepull testing cylinder Sensor Miscompare[I3.4,I3.5],
152 CMFB OP30A I_STOP 109 left outside lifting release cylinder Work Position Timeout Errror[I3.7],
153 CMFB OP30A I_STOP 110 left outside lifting release cylinder Home Position Timeout Errror[I3.6],
154 CMFB OP30A I_STOP 111 left outside lifting release cylinder Cylinder Sensor Miscompare[I3.6,I3.7],
155 CMFB OP30A I_STOP 112 left outside select griping cylinder Work Position Timeout Errror[I4.1],
156 CMFB OP30A I_STOP 113 left outside select griping cylinder Home Position Timeout Errror[I4.0],
157 CMFB OP30A I_STOP 114 left outside select griping cylinder Sensor Miscompare[I4.0,I4.1],
158 CMFB OP30A I_STOP 115 outside pullout testing cylinder Work Position Timeout Errror[I4.3],
159 CMFB OP30A I_STOP 116 outside pullout testing cylinder Home Position Timeout Errror[I4.2],
160 CMFB OP30A I_STOP 117 outside pullout testing cylinder Sensor Miscompare[I4.2,I4.3],
161 CMFB OP30A I_STOP 118 left inside shift rotating cylinder Work Position Timeout Errror[I5.1],
162 CMFB OP30A I_STOP 119 left inside shift rotating cylinder Home Position Timeout Errror[I5.0],
163 CMFB OP30A I_STOP 120 left inside shift rotating cylinder Sensor Miscompare[I5.0,I5.1],
164 CMFB OP30A I_STOP 121 left inside shift pull in cylinder Work Position Timeout Errror[I5.3],
165 CMFB OP30A I_STOP 122 left inside shift pull in cylinder Home Position Timeout Errror[I5.2],
166 CMFB OP30A I_STOP 123 left inside shift pull in cylinder Sensor Miscompare[I5.2,I5.3],
167 CMFB OP30A I_STOP 124 Inside select prepull testing force not reach 1000N,
168 CMFB OP30A I_STOP 125 Inside select prepull testing cylinder Home Position Timeout Errror[I5.4],
169 CMFB OP30A I_STOP 126 Inside select prepull testing cylinder Sensor Miscompare[I5.4,I5.5],
170 CMFB OP30A I_STOP 127 left inside lifting release cylinder Work Position Timeout Errror[I5.7],
171 CMFB OP30A I_STOP 128 left inside lifting release cylinder Home Position Timeout Errror[I5.6],
172 CMFB OP30A I_STOP 129 left inside lifting release cylinder Sensor Miscompare[I5.6,I5.7],
173 CMFB OP30A I_STOP 130 left inside shift griping cylinder Work Position Timeout Errror[I6.1],
174 CMFB OP30A I_STOP 131 left inside shift griping cylinder Home Position Timeout Errror[I6.0],
175 CMFB OP30A I_STOP 132 left inside shift griping cylinder Sensor Miscompare[I6.0,I6.1],
176 CMFB OP30A I_STOP 133 inside pullout testing cylinder Work Position Timeout Errror[I6.3],
177 CMFB OP30A I_STOP 134 inside pullout testing cylinder Home Position Timeout Errror[I6.2],
178 CMFB OP30A I_STOP 135 inside pullout testing cylinder Sensor Miscompare[I6.2,I6.3],
179 CMFB OP30A I_STOP 136 right outside select pull in cylinder Work Position Timeout Errror[I7.1],
180 CMFB OP30A I_STOP 137 right outside select pull in cylinder Home Position Timeout Errror[I7.0],
181 CMFB OP30A I_STOP 138 right outside select pull in cylinder Sensor Miscompare[I7.0,I7.1],
182 CMFB OP30A I_STOP 139 right outside lifting release cylinder Work Position Timeout Errror[I7.3],
183 CMFB OP30A I_STOP 140 right outside lifting release cylinder Home Position Timeout Errror[I7.2],
184 CMFB OP30A I_STOP 141 right outside lifting release cylinder Sensor Miscompare[I7.2,I7.3],
185 CMFB OP30A I_STOP 142 right outside select griping the cylinder Work Position Timeout Errror[I7.5],
186 CMFB OP30A I_STOP 143 right outside select griping the cylinder Home Position Timeout Errror[I7.4],
187 CMFB OP30A I_STOP 144 right outside select griping the cylinder Sensor Miscompare[I7.4,I7.5],
188 CMFB OP30A I_STOP 145 right outside select rotating cylinder Work Position Timeout Errror[I7.7],
189 CMFB OP30A I_STOP 146 right outside select rotating cylinder Home Position Timeout Errror[I7.6],
190 CMFB OP30A I_STOP 147 right outside select rotating cylinder Sensor Miscompare[I7.6,I7.7],
191 CMFB OP30A I_STOP 148 left outside positioning cylinder Work Position Timeout Errror[I8.1],
192 CMFB OP30A I_STOP 149 left outside positioning cylinder Home Position Timeout Errror[I8.0],
193 CMFB OP30A I_STOP 150 left outside positioning cylinder Sensor Miscompare[I8.0,I8.1],
194 CMFB OP30A I_STOP 151 right outside positioning cylinder Work Position Timeout Errror[I8.3],
195 CMFB OP30A I_STOP 152 right outside positioning cylinder Home Position Timeout Errror[I8.2],
196 CMFB OP30A I_STOP 153 right outside positioning cylinder Sensor Miscompare[I8.2,I8.3],
197 CMFB OP30A I_STOP 154 right inside select rotating cylinder Work Position Timeout Errror[I9.1],
198 CMFB OP30A I_STOP 155 right inside select rotating cylinder Home Position Timeout Errror[I9.0],
199 CMFB OP30A I_STOP 156 right inside shift rotating cylinder Sensor Miscompare[I9.0,I9.1],
200 CMFB OP30A I_STOP 157 right inside shift pull in cylinder Work Position Timeout Errror[I9.3],
201 CMFB OP30A I_STOP 158 right inside shift pull in cylinder Home Position Timeout Errror[I9.2],
202 CMFB OP30A I_STOP 159 right inside shift pull in cylinder Sensor Miscompare[I9.2,I9.3],
203 CMFB OP30A I_STOP 160 right inside lifting release cylinder Work Position Timeout Errror[I9.5],
204 CMFB OP30A I_STOP 161 right inside lifting release cylinder Home Position Timeout Errror[I9.4],
205 CMFB OP30A I_STOP 162 right inside lifting release cylinder Sensor Miscompare[I9.4,I9.5],
206 CMFB OP30A I_STOP 163 right inside shift griping the cylinder Work Position Timeout Errror[I9.7],
207 CMFB OP30A I_STOP 164 right inside shift griping the cylinder Home Position Timeout Errror[I9.6],
208 CMFB OP30A I_STOP 165 right inside shift griping the cylinder Sensor Miscompare[I9.6,I9.7],
209 CMFB OP30A I_STOP 166 left inside postiton cylinder Work Position Timeout Errror[I10.1],
210 CMFB OP30A I_STOP 167 left inside postiton cylinder Home Position Timeout Errror[I10.0],
211 CMFB OP30A I_STOP 168 left inside postiton cylinder Sensor Miscompare[I10.0,I10.1],
212 CMFB OP30A I_STOP 169 right inside positioning cylinder Work Position Timeout Errror[I10.3],
213 CMFB OP30A I_STOP 170 right inside positioning cylinder Home Position Timeout Errror[I10.2],
214 CMFB OP30A I_STOP 171 right inside positioning cylinder Sensor Miscompare[I10.2,I10.3]
215 CMFB OP30B C_STOP 101 Left Station Light Curtain Blocked(I2.0),
216 CMFB OP30B C_STOP 121 Machine Not At Home Position_L,
217 CMFB OP30B C_STOP 122 Auto Mode Not Selected_L,
218 CMFB OP30B C_STOP 125 The Part Of Station Is NOK,
219 CMFB OP30B C_STOP 140 left front select swivetube present sensor backcheck fault,
220 CMFB OP30B C_STOP 141 left front select swivetube assy present sensor backcheck fault,
221 CMFB OP30B C_STOP 142 left front select omgea present sensor backcheck fault,
222 CMFB OP30B C_STOP 143 left inside select swivetube present sensor backcheck fault,
223 CMFB OP30B C_STOP 144 left inside select swivetube assy present sensor backcheck fault,
224 CMFB OP30B C_STOP 145 left inside select omgea present sensor backcheck fault,
225 CMFB OP30B C_STOP 146 right outside shift omgea present sensor backcheck fault,
226 CMFB OP30B C_STOP 147 right outside shift swiveltube assy present sensor backcheck fault,
227 CMFB OP30B C_STOP 148 right outside shift swiveltube present sensor backcheck fault,
228 CMFB OP30B C_STOP 149 right inside shift omgea present sensor backcheck fault,
229 CMFB OP30B C_STOP 150 right inside shift swiveltube assy present sensor backcheck fault,
230 CMFB OP30B C_STOP 151 right inside shift swiveltube present sensor backcheck fault,
231 CMFB OP30B C_STOP 152 romemet assy present sensor backcheck fault
232 CMFB OP30B I_STOP 100 left front select rotating cylinder Work Position Timeout Errror[I3.1],
233 CMFB OP30B I_STOP 101 left front select rotating cylinder Home Position Timeout Errror[I3.0],
234 CMFB OP30B I_STOP 102 left front select rotating cylinder Sensor Miscompare[I3.0,I3.1],
235 CMFB OP30B I_STOP 103 left front select pull in cylinder Work Position Timeout Errror[I3.3],
236 CMFB OP30B I_STOP 104 left front select pull in cylinder Home Position Timeout Errror[I3.2],
237 CMFB OP30B I_STOP 105 left front select pull in cylinder Sensor Miscompare[I3.2,I3.3],
238 CMFB OP30B I_STOP 106 outside select prepull testing force not reach 1000N,
239 CMFB OP30B I_STOP 107 outside select prepull testing cylinder Home Position Timeout Errror[I3.4],
240 CMFB OP30B I_STOP 108 outside select prepull testing cylinder Sensor Miscompare[I3.4,I3.5],
241 CMFB OP30B I_STOP 109 left outside lifting release cylinder Work Position Timeout Errror[I3.7],
242 CMFB OP30B I_STOP 110 left outside lifting release cylinder Home Position Timeout Errror[I3.6],
243 CMFB OP30B I_STOP 111 left outside lifting release cylinder Cylinder Sensor Miscompare[I3.6,I3.7],
244 CMFB OP30B I_STOP 112 left outside select griping cylinder Work Position Timeout Errror[I4.1],
245 CMFB OP30B I_STOP 113 left outside select griping cylinder Home Position Timeout Errror[I4.0],
246 CMFB OP30B I_STOP 114 left outside select griping cylinder Sensor Miscompare[I4.0,I4.1],
247 CMFB OP30B I_STOP 115 outside pullout testing cylinder Work Position Timeout Errror[I4.3],
248 CMFB OP30B I_STOP 116 outside pullout testing cylinder Home Position Timeout Errror[I4.2],
249 CMFB OP30B I_STOP 117 outside pullout testing cylinder Sensor Miscompare[I4.2,I4.3],
250 CMFB OP30B I_STOP 118 left inside shift rotating cylinder Work Position Timeout Errror[I5.1],
251 CMFB OP30B I_STOP 119 left inside shift rotating cylinder Home Position Timeout Errror[I5.0],
252 CMFB OP30B I_STOP 120 left inside shift rotating cylinder Sensor Miscompare[I5.0,I5.1],
253 CMFB OP30B I_STOP 121 left inside shift pull in cylinder Work Position Timeout Errror[I5.3],
254 CMFB OP30B I_STOP 122 left inside shift pull in cylinder Home Position Timeout Errror[I5.2],
255 CMFB OP30B I_STOP 123 left inside shift pull in cylinder Sensor Miscompare[I5.2,I5.3],
256 CMFB OP30B I_STOP 124 Inside select prepull testing force not reach 1000N,
257 CMFB OP30B I_STOP 125 Inside select prepull testing cylinder Home Position Timeout Errror[I5.4],
258 CMFB OP30B I_STOP 126 Inside select prepull testing cylinder Sensor Miscompare[I5.4,I5.5],
259 CMFB OP30B I_STOP 127 left inside lifting release cylinder Work Position Timeout Errror[I5.7],
260 CMFB OP30B I_STOP 128 left inside lifting release cylinder Home Position Timeout Errror[I5.6],
261 CMFB OP30B I_STOP 129 left inside lifting release cylinder Sensor Miscompare[I5.6,I5.7],
262 CMFB OP30B I_STOP 130 left inside shift griping cylinder Work Position Timeout Errror[I6.1],
263 CMFB OP30B I_STOP 131 left inside shift griping cylinder Home Position Timeout Errror[I6.0],
264 CMFB OP30B I_STOP 132 left inside shift griping cylinder Sensor Miscompare[I6.0,I6.1],
265 CMFB OP30B I_STOP 133 inside pullout testing cylinder Work Position Timeout Errror[I6.3],
266 CMFB OP30B I_STOP 134 inside pullout testing cylinder Home Position Timeout Errror[I6.2],
267 CMFB OP30B I_STOP 135 inside pullout testing cylinder Sensor Miscompare[I6.2,I6.3],
268 CMFB OP30B I_STOP 136 right outside select pull in cylinder Work Position Timeout Errror[I7.1],
269 CMFB OP30B I_STOP 137 right outside select pull in cylinder Home Position Timeout Errror[I7.0],
270 CMFB OP30B I_STOP 138 right outside select pull in cylinder Sensor Miscompare[I7.0,I7.1],
271 CMFB OP30B I_STOP 139 right outside lifting release cylinder Work Position Timeout Errror[I7.3],
272 CMFB OP30B I_STOP 140 right outside lifting release cylinder Home Position Timeout Errror[I7.2],
273 CMFB OP30B I_STOP 141 right outside lifting release cylinder Sensor Miscompare[I7.2,I7.3],
274 CMFB OP30B I_STOP 142 right outside select griping the cylinder Work Position Timeout Errror[I7.5],
275 CMFB OP30B I_STOP 143 right outside select griping the cylinder Home Position Timeout Errror[I7.4],
276 CMFB OP30B I_STOP 144 right outside select griping the cylinder Sensor Miscompare[I7.4,I7.5],
277 CMFB OP30B I_STOP 145 right outside select rotating cylinder Work Position Timeout Errror[I7.7],
278 CMFB OP30B I_STOP 146 right outside select rotating cylinder Home Position Timeout Errror[I7.6],
279 CMFB OP30B I_STOP 147 right outside select rotating cylinder Sensor Miscompare[I7.6,I7.7],
280 CMFB OP30B I_STOP 148 left outside positioning cylinder Work Position Timeout Errror[I8.1],
281 CMFB OP30B I_STOP 149 left outside positioning cylinder Home Position Timeout Errror[I8.0],
282 CMFB OP30B I_STOP 150 left outside positioning cylinder Sensor Miscompare[I8.0,I8.1],
283 CMFB OP30B I_STOP 151 right outside positioning cylinder Work Position Timeout Errror[I8.3],
284 CMFB OP30B I_STOP 152 right outside positioning cylinder Home Position Timeout Errror[I8.2],
285 CMFB OP30B I_STOP 153 right outside positioning cylinder Sensor Miscompare[I8.2,I8.3],
286 CMFB OP30B I_STOP 154 right inside select rotating cylinder Work Position Timeout Errror[I9.1],
287 CMFB OP30B I_STOP 155 right inside select rotating cylinder Home Position Timeout Errror[I9.0],
288 CMFB OP30B I_STOP 156 right inside shift rotating cylinder Sensor Miscompare[I9.0,I9.1],
289 CMFB OP30B I_STOP 157 right inside shift pull in cylinder Work Position Timeout Errror[I9.3],
290 CMFB OP30B I_STOP 158 right inside shift pull in cylinder Home Position Timeout Errror[I9.2],
291 CMFB OP30B I_STOP 159 right inside shift pull in cylinder Sensor Miscompare[I9.2,I9.3],
292 CMFB OP30B I_STOP 160 right inside lifting release cylinder Work Position Timeout Errror[I9.5],
293 CMFB OP30B I_STOP 161 right inside lifting release cylinder Home Position Timeout Errror[I9.4],
294 CMFB OP30B I_STOP 162 right inside lifting release cylinder Sensor Miscompare[I9.4,I9.5],
295 CMFB OP30B I_STOP 163 right inside shift griping the cylinder Work Position Timeout Errror[I9.7],
296 CMFB OP30B I_STOP 164 right inside shift griping the cylinder Home Position Timeout Errror[I9.6],
297 CMFB OP30B I_STOP 165 right inside shift griping the cylinder Sensor Miscompare[I9.6,I9.7],
298 CMFB OP30B I_STOP 166 left inside postiton cylinder Work Position Timeout Errror[I10.1],
299 CMFB OP30B I_STOP 167 left inside postiton cylinder Home Position Timeout Errror[I10.0],
300 CMFB OP30B I_STOP 168 left inside postiton cylinder Sensor Miscompare[I10.0,I10.1],
301 CMFB OP30B I_STOP 169 right inside positioning cylinder Work Position Timeout Errror[I10.3],
302 CMFB OP30B I_STOP 170 right inside positioning cylinder Home Position Timeout Errror[I10.2],
303 CMFB OP30B I_STOP 171 right inside positioning cylinder Sensor Miscompare[I10.2,I10.3]
304 CMFB OP40A C_STOP 101 Left Station Light Curtain Blocked(I2.0),
305 CMFB OP40A C_STOP 121 Machine Not At Home Position_L,
306 CMFB OP40A C_STOP 122 Auto Mode Not Selected_L,
307 CMFB OP40A C_STOP 125 The Part Of Left Station Is NOK,
308 CMFB OP40A C_STOP 140 detection pressure 1 sensor backcheck fault,
309 CMFB OP40A C_STOP 141 detection pressure 2 sensor backcheck fault,
310 CMFB OP40A C_STOP 142 shift terminal type sensor backcheck fault,
311 CMFB OP40A C_STOP 143 shift boot present sensor backcheck fault,
312 CMFB OP40A C_STOP 144 shift terminal present sensor backcheck fault,
313 CMFB OP40A C_STOP 145 shift terminal no present sensor backcheck fault,
314 CMFB OP40A C_STOP 146 select terminal present sensor backcheck fault,
315 CMFB OP40A C_STOP 147 select terminal no present sensor backcheck fault,
316 CMFB OP40A C_STOP 148 select boot present Backcheck Error,
317 CMFB OP40A C_STOP 149 Shift Terminal Type Confirmation Sensor_1 Backcheck Error,
318 CMFB OP40A C_STOP 150 Shift Terminal Type Confirmation Sensor_2 Backcheck Error,
319 CMFB OP40A C_STOP 151 Select Terminal Type Confirmation Sensor_1 Backcheck Error,
320 CMFB OP40A C_STOP 152 Select Terminal Type Confirmation Sensor_2 Backcheck Error,
321 CMFB OP40A C_STOP 153 select termianl type Backcheck Error,
322 CMFB OP40A C_STOP 154 detect steel wire present1 Backcheck Error,
323 CMFB OP40A C_STOP 155 detect steel wire present2 Backcheck Error
324 CMFB OP40A I_STOP 100 front clamping wire cylinder Work Position Timeout Errror[I3.1],
325 CMFB OP40A I_STOP 101 front clamping wire cylinder Home Position Timeout Errror[I3.0],
326 CMFB OP40A I_STOP 102 front clamping wire cylinder Sensor Miscompare[I3.0,I3.1],
327 CMFB OP40A I_STOP 103 back clamping wire cylinder Work Position Timeout Errror[I3.3],
328 CMFB OP40A I_STOP 104 back clamping wire cylinder Home Position Timeout Errror[I3.2],
329 CMFB OP40A I_STOP 105 back clamping wire cylinder Sensor Miscompare[I3.2,I3.3],
330 CMFB OP40A I_STOP 106 Select Wire Not Put Well[I3.5],
331 CMFB OP40A I_STOP 107 pushing select wire cylinder Home Position Timeout Errror[I3.4],
332 CMFB OP40A I_STOP 108 pushing select wire cylinder Sensor Miscompare[I3.4,I3.5],
333 CMFB OP40A I_STOP 109 crimping cylinder Work Position Timeout Errror[I5.0],
334 CMFB OP40A I_STOP 110 crimping cylinder Home Position Timeout Errror[I4.2],
335 CMFB OP40A I_STOP 111 crimping cylinder Cylinder Sensor Miscompare[I3.6,I3.7],
336 CMFB OP40A I_STOP 112 Shift Wire Not Put Well[I4.1],
337 CMFB OP40A I_STOP 113 pushing shift wire cylinder Home Position Timeout Errror[I4.0],
338 CMFB OP40A I_STOP 114 pushing shift wire cylinder Sensor Miscompare[I4.0,I4.1],
339 CMFB OP40A I_STOP 115 front cliping wire cylinder Work Position Timeout Errror[I4.3],
340 CMFB OP40A I_STOP 116 front cliping wire cylinder Home Position Timeout Errror[I4.2],
341 CMFB OP40A I_STOP 117 front cliping wire cylinder Sensor Miscompare[I4.2,I4.3],
342 CMFB OP40A I_STOP 118 back cliping wire cylinder Work Position Timeout Errror[I4.5],
343 CMFB OP40A I_STOP 119 back cliping wire cylinder Home Position Timeout Errror[I4.4],
344 CMFB OP40A I_STOP 120 back cliping wire cylinder Sensor Miscompare[I4.4,I4.5],
345 CMFB OP40A I_STOP 121 Grease Pump Pressure Alarm For Terminal[I8.7],
346 CMFB OP40A I_STOP 122 Grease valve1Home Position Timeout Errror[],
347 CMFB OP40A I_STOP 123 Grease valve1Sensor Miscompare[],
348 CMFB OP40A I_STOP 124 Grease Pump Pressure Alarm For Inner Member,
349 CMFB OP40A I_STOP 125 Grease valve2 Home Position Timeout Errror[],
350 CMFB OP40A I_STOP 126 Grease valve2 Sensor Miscompare[],
351 CMFB OP40A I_STOP 151 Emergency Stop Relay Not ON,
352 CMFB OP40A I_STOP 152 Emergency Stop Button Pressed
353 CMFB OP40B C_STOP 101 Right Station Light Curtain Blocked(I2.6),
354 CMFB OP40B C_STOP 121 Machine Not At Home Position_R,
355 CMFB OP40B C_STOP 122 Auto Mode Not Selected_R,
356 CMFB OP40B C_STOP 125 The Part Of Right Station Is NOK,
357 CMFB OP40B C_STOP 140 shift omega present sensor backcheck fault,
358 CMFB OP40B C_STOP 141 select omega present sensor backcheck fault,
359 CMFB OP40B C_STOP 142 gromment present sensor backcheck fault,
360 CMFB OP40B C_STOP 143 detect steel wire present3 sensor backcheck fault,
361 CMFB OP40B C_STOP 144 detect steel wire present4 sensor backcheck fault,
362 CMFB OP40B C_STOP 148 Check Shift Wire Exists R sensor backcheck failure,
363 CMFB OP40B C_STOP 149 Check Select Wire Exists R sensor backcheck failure
364 CMFB OP40B I_STOP 100 Horizontal cylinder Work Position Timeout Error[I6.1],
365 CMFB OP40B I_STOP 101 Horizontal cylinder Home Position Timeout Error[I6.0],
366 CMFB OP40B I_STOP 102 Horizontal cylinder Sensors Miscompare Error[6.0,I6.1],
367 CMFB OP40B I_STOP 103 front Pressing wire cylinder Work Position Timeout Error[I6.3],
368 CMFB OP40B I_STOP 104 front Pressing wire cylinder Home Position Timeout Error[I6.2],
369 CMFB OP40B I_STOP 105 front Pressing wire cylinder Sensors Miscompare Error[I6.2,I6.3],
370 CMFB OP40B I_STOP 106 back Pressing wire cylinder Work Position Timeout Error[I6.5],
371 CMFB OP40B I_STOP 107 back Pressing wire cylinder Home Position Timeout Error[I6.4],
372 CMFB OP40B I_STOP 108 back Pressing wire cylinder Sensors Miscompare Error[6.4,I6.5],
373 CMFB OP40B I_STOP 109 Vertical Cylinder Work Position Timeout Error[I6.7],
374 CMFB OP40B I_STOP 110 Vertical Cylinder Home Position Timeout Error[I6.6],
375 CMFB OP40B I_STOP 111 Vertical Cylinder Sensors Miscompare Error[I6.6,I6.7],
376 CMFB OP40B I_STOP 112 Grease valve 3 Work Position Timeout Error[],
377 CMFB OP40B I_STOP 113 Grease valve 3 Home Position Timeout Error[],
378 CMFB OP40B I_STOP 114 Grease valve 3 Sensors Miscompare Error[],
379 CMFB OP40B I_STOP 115 Grease valve 4 Work Position Timeout Error[],
380 CMFB OP40B I_STOP 116 Grease valve 4 Home Position Timeout Error[],
381 CMFB OP40B I_STOP 117 Grease valve 4 Sensors Miscompare Error[],
382 CMFB OP40B I_STOP 151 Emergency Stop Relay Not ON,
383 CMFB OP40B I_STOP 152 Emergency Stop Button Pressed
384 CMFB OP50 C_STOP 101 Light Curtain Blocked(I2.0),
385 CMFB OP50 C_STOP 121 Machine Not At Home Position,
386 CMFB OP50 C_STOP 122 Auto Mode Not Selected,
387 CMFB OP50 C_STOP 125 The Part Is NOK,
388 CMFB OP50 C_STOP 132 select conduit present left Sensor Backcheck Error[7.6],
389 CMFB OP50 C_STOP 133 select conduit present right Sensor Backcheck Error[7.7],
390 CMFB OP50 C_STOP 134 terminal present Sensor Backcheck Error[8.2],
391 CMFB OP50 C_STOP 140 check shift omega Sensor Backcheck Error[I3.2],
392 CMFB OP50 C_STOP 141 check select omega Sensor Backcheck Error[I3.3],
393 CMFB OP50 C_STOP 142 check shift rodt Sensor Backcheck Error[I3.4],
394 CMFB OP50 C_STOP 143 check select rod Sensor Backcheck Error[I3.5],
395 CMFB OP50 C_STOP 144 shift check omega Sensor Backcheck Error[I5.7],
396 CMFB OP50 C_STOP 145 select check omega Sensor Backcheck Error[I6.7],
397 CMFB OP50 C_STOP 146 shift conduit present left Sensor Backcheck Error[7.4],
398 CMFB OP50 C_STOP 147 shift conduit present right Sensor Backcheck Error[7.5],
399 CMFB OP50 C_STOP 148 Shift Terminal Check Sensor Backcheck Error,
400 CMFB OP50 C_STOP 149 Select Terminal Check Sensor Backcheck Error,
401 CMFB OP50 C_STOP 150 Heavy Mass Check Sensor 1 Backcheck Error,
402 CMFB OP50 C_STOP 151 Heavy Mass Check Sensor 2 Check Sensor Backcheck Error,
403 CMFB OP50 C_STOP 152 Shift Swivel Tube Check Sensor Backcheck Error,
404 CMFB OP50 C_STOP 153 Select Swivel Tube Check Sensor Backcheck Error,
405 CMFB OP50 C_STOP 154 Shift Adjust Check Sensor Backcheck Error,
406 CMFB OP50 C_STOP 155 Select Adjust Check Sensor Backcheck Error,
407 CMFB OP50 C_STOP 156 Shift Star Sleve Check Sensor Backcheck Error,
408 CMFB OP50 C_STOP 157 Select Star Sleve Check Sensor Backcheck Error,
409 CMFB OP50 C_STOP 158 Gromment Detect Check Sensor Backcheck Error
410 CMFB OP50 I_STOP 100 crimping cylinder Work Position Timeout Errror[I3.1],
411 CMFB OP50 I_STOP 101 crimping cylinder Home Position Timeout Errror[I3.0],
412 CMFB OP50 I_STOP 102 crimping cylinderSensor Miscompare[I3.0,I3.1],
413 CMFB OP50 I_STOP 103 left front location cylinder Work Position Timeout Errror[I4.1],
414 CMFB OP50 I_STOP 104 left front location cylinder Home Position Timeout Errror[I4.0],
415 CMFB OP50 I_STOP 105 left front location cylinder Sensor Miscompare[I4.0,I4.1],
416 CMFB OP50 I_STOP 106 left back location cylinder Work Position Timeout Errror[I4.3],
417 CMFB OP50 I_STOP 107 left back location cylinder Home Position Timeout Errror[I4.2],
418 CMFB OP50 I_STOP 108 left back location cylinder Sensor Miscompare[I4.2,I4.3],
419 CMFB OP50 I_STOP 109 right front location cylinder Work Position Timeout Errror[I4.5],
420 CMFB OP50 I_STOP 110 right front location cylinder Home Position Timeout Errror[I4.4],
421 CMFB OP50 I_STOP 111 right front location cylinder Sensor Miscompare[I4.4,I4.5],
422 CMFB OP50 I_STOP 112 right back location cylinder Work Position Timeout Errror[I4.7],
423 CMFB OP50 I_STOP 113 right back location cylinder Home Position Timeout Errror[I4.6],
424 CMFB OP50 I_STOP 114 right back location cylinder Sensor Miscompare[I4.6,I4.7],
425 CMFB OP50 I_STOP 115 select terminal pullout test cylinder Work Position Timeout Errror[I5.1],
426 CMFB OP50 I_STOP 116 select terminal pullout test cylinder Not Reach 500N,
427 CMFB OP50 I_STOP 117 select terminal pullout test cylinder Sensor Miscompare[I5.0,I5.1],
428 CMFB OP50 I_STOP 118 selcet terminal fixed cylinder Work Position Timeout Errror[I5.3],
429 CMFB OP50 I_STOP 119 selcet terminal fixed cylinder Home Position Timeout Errror[I5.2],
430 CMFB OP50 I_STOP 120 selcet terminal fixed cylinder Sensor Miscompare[I5.2,I5.3],
431 CMFB OP50 I_STOP 121 pulling select cable cylinder Work Position Timeout Errror[I5.5],
432 CMFB OP50 I_STOP 122 pulling select cable cylinder Home Position Timeout Errror[I5.4],
433 CMFB OP50 I_STOP 123 pulling select cable cylinder Sensor Miscompare[I5.4,I5.5],
434 CMFB OP50 I_STOP 124 shift terminal pullout test cylinder Work Position Timeout Errror[I6.1],
435 CMFB OP50 I_STOP 125 shift terminal pullout test cylinder Not Reach 500N,
436 CMFB OP50 I_STOP 126 shift terminal pullout test cylinder Sensor Miscompare[I6.0,I6.1],
437 CMFB OP50 I_STOP 127 shift terminal fixed cylinder Work Position Timeout Errror[I6.3],
438 CMFB OP50 I_STOP 128 shift terminal fixed cylinder Home Position Timeout Errror[I6.2],
439 CMFB OP50 I_STOP 129 shift terminal fixed cylinder Sensor Miscompare[I6.2,I6.3],
440 CMFB OP50 I_STOP 130 pulling shift cable cylinder Work Position Timeout Errror[I6.5],
441 CMFB OP50 I_STOP 131 pulling shift cable cylinder Home Position Timeout Errror[I6.4],
442 CMFB OP50 I_STOP 132 pulling shift cable cylinder Sensor Miscompare[I6.4,I6.5],
443 CMFB OP50 I_STOP 133 prepull shift cable cylinder Work Position Timeout Errror[I7.1],
444 CMFB OP50 I_STOP 134 prepull shift cable cylinder Home Position Timeout Errror[I7.0],
445 CMFB OP50 I_STOP 135 prepull shift cable cylinder Sensor Miscompare[I7.0,I7.1],
446 CMFB OP50 I_STOP 136 prepull select cable cylinder Work Position Timeout Errror[I7.3],
447 CMFB OP50 I_STOP 137 prepull select cable cylinder Home Position Timeout Errror[I7.2],
448 CMFB OP50 I_STOP 138 prepull select cable cylinder Sensor Miscompare[I7.2,I7.3],
449 CMFB OP50 I_STOP 139 terminal greasing valve Work Position Timeout Errror[I8.1],
450 CMFB OP50 I_STOP 140 terminal greasing valve Home Position Timeout Errror[I8.0],
451 CMFB OP50 I_STOP 141 terminal greasing valve Sensor Miscompare[I8.0,I8.1],
452 CMFB OP50 I_STOP 161 Emergency Stop Relay Not ON,
453 CMFB OP50 I_STOP 162 Emergency Stop Button Pressed
454 CMFB OP55 C_STOP 102 Emergency Stop Relay Not ON,
455 CMFB OP55 C_STOP 121 Machine Not At Home Position,
456 CMFB OP55 C_STOP 122 Auto Mode Not Selected,
457 CMFB OP55 C_STOP 125 Part NOK,
458 CMFB OP55 C_STOP 140 Shift check1 Sensors Backcheck Error,
459 CMFB OP55 C_STOP 141 Shift check2 Sensors Backcheck Error,
460 CMFB OP55 C_STOP 142 Select check1 Sensors Backcheck Error,
461 CMFB OP55 C_STOP 143 Select check1 Sensors Backcheck Error,
462 CMFB OP55 C_STOP 149 Left_Select_Conduit_Placed_In_Place Sensors Backcheck Error,
463 CMFB OP55 C_STOP 150 Right_Shift_Conduit_Placed_In_Place Sensors Backcheck Error,
464 CMFB OP55 C_STOP 151 Right_Select_Conduit_Placed_In_Place Sensors Backcheck Error
465 CMFB OP55 I_STOP 101 Shift bushing assy cylinder Work Position Timeout Error [I3.3,Q3.1],
466 CMFB OP55 I_STOP 102 Shift bushing assy cylinder Home Position Timeout Error [I3.2,Q3.0],
467 CMFB OP55 I_STOP 103 Shift bushing assy cylinder Sensors Miscompare [I3.2,I3.3],
468 CMFB OP55 I_STOP 104 Select bushing assy cylinder Work Position Timeout Error [I4.3,Q3.3],
469 CMFB OP55 I_STOP 105 Select bushing assy cylinder Home Position Timeout Error [I4.2,Q3.2],
470 CMFB OP55 I_STOP 106 Select bushing assy cylinder Sensors Miscompare [I4.2,I4.3],
471 CMFB OP55 I_STOP 107 Shift test cylinder Work Position Timeout Error [I3.5,Q4.1],
472 CMFB OP55 I_STOP 108 Shift test cylinder Home Position Timeout Error [I3.4,Q4.0],
473 CMFB OP55 I_STOP 109 Shift test cylinder Sensors Miscompare [I3.4,I3.5],
474 CMFB OP55 I_STOP 110 Select test cylinder Work Position Timeout Error [I4.3,Q4.3],
475 CMFB OP55 I_STOP 111 Select test cylinder Home Position Timeout Error [I4.2,Q4.2],
476 CMFB OP55 I_STOP 112 Select test cylinder Sensors Miscompare [I4.2,I4.3],
477 CMFB OP55 I_STOP 113 Conduit clamp cylinder Work Position Timeout Error [I4.7,Q4.5],
478 CMFB OP55 I_STOP 114 Conduit clamp cylinder Home Position Timeout Error [I4.6,Q4.4],
479 CMFB OP55 I_STOP 115 Conduit clamp cylinderCylinder Sensors Miscompare [I4.6,I4.7],
480 CMFB OP55 I_STOP 116 Screw feeder cylinder Work Position Timeout Error [5.1,Q7.3],
481 CMFB OP55 I_STOP 117 Screw feeder cylinder Home Position Timeout Error [I5.0,Q7.2],
482 CMFB OP55 I_STOP 118 Screw feeder cylinder Cylinder Sensors Miscompare [I5.0,I5.1],
483 CMFB OP55 I_STOP 124 Screw NOK,
484 CMFB OP55 I_STOP 125 IAI Error,
485 CMFB OP55 I_STOP 126 Shift Screw test Error,
486 CMFB OP55 I_STOP 127 Select Screw test Error,
487 CMFB OP55 I_STOP 128 Shift washer assembly not correct,
488 CMFB OP55 I_STOP 129 Selcet washer assembly not correct,
489 CMFB OP55 I_STOP 130 Part Pullout Testing Not OK,
490 CMFB OP55 I_STOP 131 Screw operation Timeout Error,
491 CMFB OP55 I_STOP 151 Emergency Stop Relay Not ON,Pls Press Reset Button.,
492 CMFB OP55 I_STOP 152 Emergency Stop Button Pressed
493 CMFB OP60 C_STOP 121 Machine Not At Home Position,
494 CMFB OP60 C_STOP 122 Auto Mode Not Selected,
495 CMFB OP60 C_STOP 123 No Model Selected,
496 CMFB OP60 C_STOP 125 Outside select terminal check1 Sensor Backcheck Error[I3.2],
497 CMFB OP60 C_STOP 126 Outside select terminal check2 Sensor Backcheck Error[I3.3],
498 CMFB OP60 C_STOP 127 Outside select termianl present1 Sensor Backcheck Error[I3.4],
499 CMFB OP60 C_STOP 128 Outside select termianl present2 Sensor Backcheck Error[I3.5],
500 CMFB OP60 C_STOP 129 Outside select omega present1 Sensor Backcheck Error[I3.6],
501 CMFB OP60 C_STOP 130 Outside shift terminal check1 Sensor Backcheck Error[I4.2],
502 CMFB OP60 C_STOP 131 Outside shift terminal check2 Sensor Backcheck Error[I4.3],
503 CMFB OP60 C_STOP 132 Outside shift termianl present1 Sensor Backcheck Error[I4.4],
504 CMFB OP60 C_STOP 133 Outside shift omega present1 Sensor Backcheck Error[I4.5],
505 CMFB OP60 C_STOP 134 Outside shift conduit present Sensor Backcheck Error[I5.2],
506 CMFB OP60 C_STOP 135 Outside select conduit present Sensor Backcheck Error[I5.3],
507 CMFB OP60 C_STOP 136 Inside shift conduit present Sensor Insidecheck Error[I5.6],
508 CMFB OP60 C_STOP 137 Inside select conduit present Sensor Backcheck Error[I5.7],
509 CMFB OP60 C_STOP 138 Outside select omega present Sensor Backcheck Error[I6.0],
510 CMFB OP60 C_STOP 139 Outside select tube present Sensor Backcheck Error[I6.1],
511 CMFB OP60 C_STOP 140 Outside select adjuster check1 Sensor Backcheck Error[I6.2],
512 CMFB OP60 C_STOP 141 Outside select adjuster check2 Sensor Backcheck [I6.3],
513 CMFB OP60 C_STOP 142 Outside shift omega present Sensor Backcheck Error[I6.4],
514 CMFB OP60 C_STOP 143 Outside shift tube present Sensor Backcheck Error[I6.5],
515 CMFB OP60 C_STOP 144 Outside shift adjuster check1 Sensor Backcheck Error[I6.6],
516 CMFB OP60 C_STOP 145 Outside shift adjuster check2 Sensor Backcheck Error[I6.7],
517 CMFB OP60 C_STOP 146 Inside select terminal check1 Sensor Backcheck Error[I7.2],
518 CMFB OP60 C_STOP 147 Inside select terminal check2 Sensor Backcheck Error[I7.3],
519 CMFB OP60 C_STOP 148 Inside select termianl present1 Sensor Backcheck Error[I7.4],
520 CMFB OP60 C_STOP 149 Inside select termianl present2 Sensor Backcheck [I7.5],
521 CMFB OP60 C_STOP 150 Inside select omega present1 Sensor Backcheck Error[I7.6],
522 CMFB OP60 C_STOP 151 Inside shift terminal check1 Sensor Insidecheck Error[I8.2],
523 CMFB OP60 C_STOP 152 Inside shift terminal check2 Sensor Insidecheck Error[I8.3],
524 CMFB OP60 C_STOP 153 Inside shift termianl present Sensor Insidecheck Error[I8.4],
525 CMFB OP60 C_STOP 154 Inside shift omega present1 Sensor Insidecheck Error[I8.5],
526 CMFB OP60 C_STOP 155 Inside select omega present2 Sensor Backcheck Error[I9.0],
527 CMFB OP60 C_STOP 156 Inside select tube present Sensor Backcheck Error[I9.1],
528 CMFB OP60 C_STOP 157 Insideselect adjuster check1 Sensor Backcheck Error[I9.2],
529 CMFB OP60 C_STOP 158 Inside select adjuster check2 Sensor Backcheck Error[I9.3],
530 CMFB OP60 C_STOP 159 Inside shift omega present2 Sensor Insidecheck Error[I9.4],
531 CMFB OP60 C_STOP 160 Inside shift tube present Sensor Insidecheck Error[I9.5],
532 CMFB OP60 C_STOP 161 Inside shift adjuster check1 Sensor Insidecheck Error[I9.6],
533 CMFB OP60 C_STOP 162 Inside shift adjuster check2 Sensor Insidecheck Error[I9.7]
534 CMFB OP60 I_STOP 101 Outside select release cylinder Work Position Timeout[I3.1],
535 CMFB OP60 I_STOP 102 Outside select release cylinder Home Position Timeout[I3.0],
536 CMFB OP60 I_STOP 103 Outside select release cylinder Sensors Miscompare[I3.0,I3.1],
537 CMFB OP60 I_STOP 104 Outside shift release cylinder Work Position Timeout[I4.1],
538 CMFB OP60 I_STOP 105 Outside shift release cylinder Home Position Timeout[I4.0],
539 CMFB OP60 I_STOP 106 Outside shift release cylinder Sensors Miscompare[I4.0,I4.1],
540 CMFB OP60 I_STOP 107 Outside clamp conduit cylinder Work Position Timeout[I5.1],
541 CMFB OP60 I_STOP 108 Outside clamp conduit cylinder Home Position Timeout[I5.0],
542 CMFB OP60 I_STOP 109 Outside clamp conduit cylinder Sensors Miscompare[I5.0,I5.1],
543 CMFB OP60 I_STOP 110 Inside select release cylinder Work Position Timeout[I5.5],
544 CMFB OP60 I_STOP 111 Inside select release cylinder Home Position Timeout[I5.4],
545 CMFB OP60 I_STOP 112 Inside select release cylinder Sensors Miscompare[I5.4,I5.5],
546 CMFB OP60 I_STOP 113 Inside shift release cylinder Work Position Timeout[I7.1],
547 CMFB OP60 I_STOP 114 Inside shift release cylinder Home Position Timeout[I7.0],
548 CMFB OP60 I_STOP 115 Inside shift release cylinder Sensors Miscompare[I7.0,I7.1],
549 CMFB OP60 I_STOP 116 Inside clamp conduit cylinder Work Position Timeout[I8.1],
550 CMFB OP60 I_STOP 117 Inside clamp conduit cylinder Home Position Timeout[I8.0],
551 CMFB OP60 I_STOP 118 Inside clamp conduit cylinder Sensors Miscompare[I8.0,I8.1],
552 CMFB OP60 I_STOP 119 Outside Selectlength_Axis Alarm,
553 CMFB OP60 I_STOP 120 Outside Shiftlength_Axis Alarm,
554 CMFB OP60 I_STOP 121 Outside SelectA+B_Axis Alarm,
555 CMFB OP60 I_STOP 122 Outside ShiftA+B_Axis Alarm,
556 CMFB OP60 I_STOP 123 Inside Selectlength_Axis Alarm,
557 CMFB OP60 I_STOP 124 Inside Shiftlength_Axis Alarm,
558 CMFB OP60 I_STOP 125 Inside SelectA+B_Axis Alarm,
559 CMFB OP60 I_STOP 126 Inside ShiftA+B_Axis Alarm,
560 CMFB OP60 I_STOP 127 Lazer_Axis Alarm,
561 CMFB OP60 I_STOP 135 Light Curtain Blocked In Cycle,
562 CMFB OP60 I_STOP 136 Before Select Cable A+B Test, Force Reach Stop Force, Please Check,
563 CMFB OP60 I_STOP 137 Before Shift Cable A+B Test, Force Reach Stop Force, Please Check,
564 CMFB OP60 I_STOP 140 Select Cable Axis Alarm,
565 CMFB OP60 I_STOP 141 Shift Cable Axis Alarm,
566 CMFB OP60 I_STOP 142 Outside Part Select Cable Friction Test Failed,Please Check,
567 CMFB OP60 I_STOP 143 Outside Part Shift Cable Friction Test Failed,Please Check,
568 CMFB OP60 I_STOP 144 Inside Part Select Cable Friction Test Failed,Please Check,
569 CMFB OP60 I_STOP 145 Inside Part Shift Cable Friction Test Failed,Please Check,
570 CMFB OP60 I_STOP 151 Emergency Stop Relay Not ON,
571 CMFB OP60 I_STOP 152 Emergency Stop Button Pressed
572 CMFB OP70 C_STOP 102 Emergency Stop Relay Not ON,
573 CMFB OP70 C_STOP 121 Machine Not At Home Position,
574 CMFB OP70 C_STOP 122 Auto Mode Not Selected,
575 CMFB OP70 C_STOP 125 Part NOK,
576 CMFB OP70 C_STOP 133 select adjuster present Sensors Backcheck Error[I5.4],
577 CMFB OP70 C_STOP 134 shift right omega present Sensors Backcheck Error[I5.5],
578 CMFB OP70 C_STOP 135 shift right clip present Sensors Backcheck Error[I5.6],
579 CMFB OP70 C_STOP 136 slect adjuster locker present Sensors Backcheck Error[I5.7],
580 CMFB OP70 C_STOP 137 gromment present Sensors Backcheck Error[I6.0],
581 CMFB OP70 C_STOP 141 select omega present Sensors Backcheck Error[I3.4],
582 CMFB OP70 C_STOP 142 select clip present Sensors Backcheck Error[I3.5],
583 CMFB OP70 C_STOP 143 shift clip present Sensors Backcheck Error[I3.6],
584 CMFB OP70 C_STOP 144 shift omega present Sensors Backcheck Error[I3.7],
585 CMFB OP70 C_STOP 145 select star sleeve present Sensors Backcheck Error[I4.6],
586 CMFB OP70 C_STOP 146 shift star sleeve present Sensors Backcheck Error[I4.7],
587 CMFB OP70 C_STOP 147 select right omega present Sensors Backcheck Error[I5.2],
588 CMFB OP70 C_STOP 148 select right clip present Sensors Backcheck Error[I5.3]
589 CMFB MANUAL Zoradenie
590 CMFB MANUAL Zmena_typu
591 CMFB MANUAL Chyba_material
592 CMFB MANUAL Zastavene_QE
593 CMFB MANUAL Zastavene_PE
594 CMFB MANUAL Nedostatok_operatorov
595 CMFB MANUAL Odstavka

1
flow/repository.json Normal file
View file

@ -0,0 +1 @@
{"$1634465281992ram":[{"timestamp":1634480076668,"ram":60.69,"ram_max":249}]}

228
flow/show_dbdata.js Normal file
View file

@ -0,0 +1,228 @@
exports.id = 'showdb';
exports.title = 'Show db data';
exports.group = 'Worksys';
exports.color = '#888600';
exports.version = '1.0.2';
exports.icon = 'sign-out';
exports.input = 5;
exports.output = 1;
exports.install = async function(instance) {
instance.on("0", _ => {
instance.send(0, FLOW.GLOBALS.settings);
})
instance.on("1", _ => {
instance.send(0, FLOW.GLOBALS.relaysData);
})
instance.on("2", _ => {
instance.send(0, FLOW.GLOBALS.nodesData);
})
instance.on("3", _ => {
instance.send(0, FLOW.GLOBALS.pinsData);
})
instance.on("4", _ => {
instance.send(0, {rpcSwitchOffLine, rpcSetNodeDimming, rpcLineProfile, rpcNodeProfile, sunCalcExample, dataFromTerminalBroadcast})
})
};
const rpcSwitchOffLine =
{
"topic": "v1/gateway/rpc",
"content": {
"device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV",
"data": {
"id": 8,
"method": "set_command",
"params": {
"entities": [
{
"entity_type": "edb_line",
"tb_name": "MgnK93rkoAazbqdQ4yB2Q0yZ1YXGx6pmwBeVEP2O"
}
],
"command": "switch",
"payload": {
"value": false
}
}
}
}
}
const rpcSetNodeDimming =
{
"topic": "v1/gateway/rpc",
"content": {
"device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV",
"data": {
"id": 10,
"method": "set_command",
"params": {
"entities": [
{
"entity_type": "street_luminaire",
"tb_name": "jbN4q7JPZmexgdnz2yKbWdDYAWwO0Q3BMX6ERLoV"
}
],
"command": "dimming",
"payload": {
"value": 5
}
}
}
}
}
const rpcLineProfile =
{
"topic": "v1/gateway/rpc",
"content": {
"device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV",
"data": {
"id": 9,
"method": "set_profile",
"params": {
"entities": [
{
"entity_type": "edb_line",
"tb_name": "MgnK93rkoAazbqdQ4yB2Q0yZ1YXGx6pmwBeVEP2O"
}
],
"payload": {
"intervals": [
{
"value": 0,
"end_time": "20:00",
"start_time": "13:00"
},
{
"value": 1,
"end_time": "05:30",
"start_time": "20:00"
},
{
"value": 0,
"end_time": "13:00",
"start_time": "05:30"
}
],
"astro_clock": true,
"dawn_lux_sensor": false,
"dusk_lux_sensor": false,
"dawn_lux_sensor_value": 5,
"dusk_lux_sensor_value": 5,
"dawn_astro_clock_offset": 0,
"dusk_astro_clock_offset": 0,
"dawn_lux_sensor_time_window": 30,
"dusk_lux_sensor_time_window": 30,
"dawn_astro_clock_time_window": 60,
"dusk_astro_clock_time_window": 60
}
}
}
}
}
const rpcNodeProfile =
{
"topic": "v1/gateway/rpc",
"content": {
"device": "jbN4q7JPZmexgdnz2yKbWGDYAWwO0Q3BMX6ERLoV",
"data": {
"id": 11,
"method": "set_profile",
"params": {
"entities": [
{
"entity_type": "street_luminaire",
"tb_name": "jbN4q7JPZmexgdnz2yKbWdDYAWwO0Q3BMX6ERLoV"
}
],
"payload": {
"intervals": [
{
"cct": 3000,
"value": 0,
"end_time": "17:50",
"start_time": "13:00"
},
{
"cct": 3000,
"value": 100,
"end_time": "21:30",
"start_time": "17:50"
},
{
"cct": 3000,
"value": 0,
"end_time": "13:00",
"start_time": "07:10"
},
{
"cct": 3000,
"value": 50,
"end_time": "00:00",
"start_time": "21:30"
},
{
"cct": 3000,
"value": 10,
"end_time": "04:30",
"start_time": "00:00"
},
{
"cct": 3000,
"value": 100,
"end_time": "07:10",
"start_time": "04:30"
}
],
"astro_clock": true,
"dawn_lux_sensor": false,
"dusk_lux_sensor": false,
"dawn_lux_sensor_value": 5,
"dusk_lux_sensor_value": 5,
"dawn_astro_clock_offset": 30,
"dusk_astro_clock_offset": 20,
"dawn_lux_sensor_time_window": 30,
"dusk_lux_sensor_time_window": 30,
"dawn_astro_clock_time_window": 60,
"dusk_astro_clock_time_window": 60
}
}
}
}
}
const sunCalcExample = {
dusk_no_offset: '20:18',
dawn_no_offset: '05:19',
dusk: '20:18',
dusk_hours: 20,
dusk_minutes: 18,
dawn: '05:19',
dawn_hours: 5,
dawn_minutes: 19,
dusk_time: 1715278688962,
dawn_time: 1715224744357,
dusk_astro_clock_offset: 0,
dawn_astro_clock_offset: 0
}
const dataFromTerminalBroadcast = {
address: 4294967295,
byte1: 0,
byte2: 0,
byte3: 0,
byte4: 96,
name: "Time Schedule settings",
recipient: 2,
register: 8,
rw: 1
}

View file

@ -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();
}

View file

@ -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="name" data-jc-config="required:true">@(Name of this server)</div>
</div>
<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"] = [];
}
if (instance.options.name) {
instance.status('Running');
running = true;
} else {
instance.status('Please enter name', 'red');
running = false;
}
} catch (e) {
instance.error('Citysys connector: ' + e.message);
}
};
instance.on('options', instance.reconfigure);
instance.reconfigure();
};

120
flow/test.js Normal file
View 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());

View file

@ -1,220 +1,99 @@
exports.id = 'thermometer';
exports.title = 'Thermometer';
exports.group = 'Worksys';
exports.color = '#5CB36D';
exports.version = '1.0.3';
exports.output = ["red", "white", "blue"];
exports.author = 'Rastislav Kovac';
exports.icon = 'thermometer-three-quarters';
exports.readme = `# Getting temperature values for RVO. In case of LM, you need device address. In case of unipi, evok sends values, in case thermometer is installed`;
const instanceSendTo = {
debug: 0,
tb: 1,
dido_controller: 2
}
//read temperature - frequency
let timeoutMin = 5;//minutes
var path = require('path');
var log4js = require("log4js");
log4js.configure({
appenders: {
errLogs: { type: 'file', 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");
//logger.debug("text")
//monitor.info('info');
//errLogger.error("some error");
const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper');
const dbSettings = TABLE("settings");
let temperatureAddress = "";
async function loadSettings()
{
//todo global FLOW.OMS_edgeName is making problem, so we load it here as well, it should not be
let responseSettings = await promisifyBuilder(dbSettings.find());
temperatureAddress = responseSettings[0]["temperature_adress"];
}
loadSettings();
exports.install = function(instance) {
const { exec } = require('child_process');
const { sendNotification, ERRWEIGHT } = require('./helper/notification_reporter');
let startRead;
let dataToTb;
let counter = 0;
let edgeName = "";
logger.debug(exports.title, "installed");
instance.on("close", function(){
clearInterval(startRead);
})
const start = function() {
try {
if(FLOW.OMS_controller_type === "unipi")
{
clearInterval(startRead);
return;
}
if(temperatureAddress === "") throw "gettemperature: temperatureAddress is not defined";
logger.debug("FLOW.OMS_temperature_adress", FLOW.OMS_temperature_adress);
exec(`owread -C ${temperatureAddress}/temperature`, (error, stdout, stderr) => {
edgeName = FLOW.OMS_edgeName;
if(edgeName !== "")
{
if(error)
{
if(FLOW.OMS_brokerready == undefined)
{
logger.debug("gettemparature - FLOW.OMS_brokerready is undefined");
setTimeout(function(){
start();
}, 3000);
return;
}
if(FLOW.OMS_brokerready)
{
//sendNotification("start", edgeName, ERRWEIGHT.WARNING, "Thermometer is not responding", {"Error": error}, instanceSendTo.tb, instance, "thermometer");
sendNotification("start", edgeName, "thermometer_is_not_responding", {}, {"Error": error}, instanceSendTo.tb, instance, "thermometer");
}
let status = "NOK";
dataToTb = {
[edgeName]: [
{
"ts": Date.now(),
"values": {
"status": status
}
}
]
}
monitor.info("Thermometer is not responding", error, FLOW.OMS_brokerready);
// instance.send(instanceSendTo.tb, dataToTb); // poslat stav nok do tb, ak to handluje dido_controller ??
instance.send(instanceSendTo.dido_controller, {status: "NOK-thermometer"});
}
else parseData(stdout);
}
else
{
monitor.info("gettemperature: edgeName is not defined", FLOW.OMS_edgeName);
setTimeout(function(){
start();
}, 3000);
return;
}
//instance.send({"Temp":stdout,"stderr":stderr,"err":error});
});
}
catch(err) {
errLogger.error(exports.title, err);
}
}
const parseData = function(data) {
data = parseFloat(data);
logger.debug("gettemperature", data);
if(!isNaN(data)) {
if(counter > 290)
{
instance.send(instanceSendTo.debug, "[Get temperature component] - temperature data are comming again from RVO after more than 1 day break");
//sendNotification("parseData", edgeName, ERRWEIGHT.NOTICE, "Thermometer is working again", "", instanceSendTo.tb, instance, "thermometer");
if(FLOW.OMS_brokerready) sendNotification("parseData", edgeName, "thermometer_is_responding_again", {}, "", instanceSendTo.tb, instance, "thermometer");
}
logger.debug("gettemperature", data);
const values = {
"temperature": Number(data.toFixed(2)),
"status": "OK"
}
dataToTb = {
[edgeName]: [
{
"ts": Date.now(),
"values":values
}
]
}
instance.send(instanceSendTo.tb, dataToTb);
instance.send(instanceSendTo.dido_controller, values);
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", edgeName, ERRWEIGHT.WARNING, "Thermometer receives invalid data", "", instanceSendTo.tb, instance, "thermometer");
sendNotification("parseData", edgeName, "thermometer_sends_invalid_data", {}, "", instanceSendTo.tb, instance, "thermometer");
instance.send(instanceSendTo.debug, "[Get temperature component] - no temperature data from RVO for more than 1 day");
instance.send(instanceSendTo.dido_controller, {status: "NOK-thermometer"});
}
}
}
setTimeout(function(){
start();
}, 15000);
startRead = setInterval(start, timeoutMin * 1000 * 60);
};
exports.id = 'thermometer';
exports.title = 'Thermometer';
exports.group = 'Worksys';
exports.color = '#5CB36D';
exports.input = 1;
exports.version = '1.0.3';
exports.output = ["red", "white", "blue"];
exports.icon = 'thermometer-three-quarters';
exports.readme = `# Getting temperature values for RVO. In case of LM, you need device address. In case of unipi, evok sends values, in case thermometer is installed`;
const { errLogger, logger, monitor } = require('./helper/logger');
const SEND_TO = {
debug: 0,
tb: 1,
dido_controller: 2
}
//read temperature - frequency
let timeoutMin = 1;//minutes
let NUMBER_OF_FAILURES_TO_SEND_ERROR = 3;
exports.install = function(instance) {
const { exec } = require('child_process');
const { sendNotification } = require('./helper/notification_reporter');
let startRead;
let counter = 0;
let rvoTbName = "";
let temperatureAddress = "";
logger.debug(exports.title, "installed");
instance.on("close", function(){
clearInterval(startRead);
})
const main = function() {
try {
if(temperatureAddress === "") throw "Thermometer: temperatureAddress is not defined";
exec(`owread -C ${temperatureAddress}/temperature`, (error, stdout, stderr) => {
debugger;
error = 1;
if(!error)
{
parseData(stdout)
return;
}
counter++;
if(counter == NUMBER_OF_FAILURES_TO_SEND_ERROR) sendNotification("Thermometer_main", rvoTbName, "thermometer_is_not_responding", {}, {"Error": error}, SEND_TO.tb, instance, "thermometer");
monitor.info("Thermometer is not responding", error);
instance.send(SEND_TO.dido_controller, {status: "NOK-thermometer"});
});
}
catch(err) {
errLogger.error(exports.title, err);
clearInterval(startRead);
}
}
const parseData = function(data) {
data = parseFloat(data);
logger.debug("Thermometer", data);
if(isNaN(data)) {
errLogger.error("Thermometer sends invalid data");
return;
}
if(counter > NUMBER_OF_FAILURES_TO_SEND_ERROR) //1 hour
{
instance.send(SEND_TO.debug, "Thermometer - temperature data are comming again");
sendNotification("Thermometer_parseData", rvoTbName, "thermometer_is_responding_again", {}, "", SEND_TO.tb, instance, "thermometer");
}
const values = {
"temperature": Number(data.toFixed(2)),
}
instance.send(SEND_TO.dido_controller, {values: values});
counter = 0;
}
instance.on("data", _ => {
temperatureAddress = FLOW.GLOBALS.settings.temperature_address;
rvoTbName = FLOW.GLOBALS.settings.rvoTbName;
startRead = setInterval(main, timeoutMin * 1000 * 60);
main();
})
};

View file

@ -4,30 +4,28 @@ exports.group = 'MQTT';
exports.color = '#888600';
exports.version = '1.0.2';
exports.icon = 'sign-out';
exports.input = 1;
exports.input = 2;
exports.output = ["red", "white", "blue"];
exports.author = 'Daniel Segeš';
exports.options = { host: 'tb-stage.worksys.io', port: 1883, clientid: "", username: "" };
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: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="username" class="m">@(Username)</div>
</div>
</div>
<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="username" class="m">@(Username)</div>
</div>
</div>
</div>`;
@ -41,21 +39,22 @@ Added:
- rpc response
`;
const instanceSendTo = {
const { promisifyBuilder } = require('./helper/db_helper');
const { errLogger, monitor } = require('./helper/logger');
const fs = require('fs');
const mqtt = require('mqtt');
const SEND_TO = {
debug: 0,
rpcCall: 1,
services: 2
}
const { promisifyBuilder, makeMapFromDbResult } = require('./helper/db_helper.js');
//CONFIG
let useLog4js = true;
let createTelemetryBackup = true;
let saveTelemetryOnError = true;//backup_on_failure overrides this value
//------------------------
var fs = require('fs');
let rollers;
if(createTelemetryBackup) rollers = require('streamroller');
@ -64,51 +63,18 @@ let insertNoSqlCounter = 0;
let insertBackupNoSqlCounter = 0;
let processingData = false;
let backup_on_failure = false;//== saveTelemetryOnError - create backup broker send failure
let backup_on_failure = false;//== saveTelemetryOnError - create backup client send failure
let restore_from_backup = 0; //how many rows process at once?
let restore_backup_wait = 0;//wait seconds
let lastRestoreTime = 0;
let errLogger;
let logger;
let monitor;
if(useLog4js)
{
var path = require('path');
var log4js = require("log4js");
log4js.configure({
appenders: {
errLogs: { type: 'file', 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' }
}
});
errLogger = log4js.getLogger("errLogs");
logger = log4js.getLogger();
monitor = log4js.getLogger("monitorLogs");
//USAGE
//logger.debug("text");
//monitor.info('info');
//errLogger.error("some error");
}
// if there is an error in client connection, flow logs to monitor.txt. Not to log messages every second, we use sendClientError variable
let sendClientError = true;
process.on('uncaughtException', function (err) {
if(errLogger)
{
errLogger.error('uncaughtException:', err.message)
errLogger.error(err.stack);
}
errLogger.error('uncaughtException:', err.message)
errLogger.error(err.stack);
//TODO
//send to service
@ -122,13 +88,9 @@ const nosqlBackup = NOSQL('/backup/tbdata');
exports.install = function(instance) {
var broker;
var client;
var opts;
var brokerready = false;
instance.on('options', loadSettings);
mqtt = require('mqtt');
var clientReady = false;
// wsmqtt status for notification purposes on projects.worksys.io database
let wsmqttName = null;
@ -137,21 +99,28 @@ exports.install = function(instance) {
function getWsmqttName(host)
{
if(host == "tb-demo.worksys.io" || host == '192.168.252.4') return 'wsmqtt_demo';
else if(host == "tb-qas01.worksys.io" || host == '192.168.252.5') return 'wsmqtt_qas01';
else if(host == "tb-prod01.worksys.io" || host == '192.168.252.1') return 'wsmqtt_prod01';
if(host == "tb-demo.worksys.io" || host == '192.168.252.4') return 'wsmqtt_demo';
else if(host == "tb-qas01.worksys.io" || host == '192.168.252.5') return 'wsmqtt_qas01';
else if(host == "tb-prod01.worksys.io" || host == '192.168.252.1') return 'wsmqtt_prod01';
}
function sendWsStatus()
{
instance.send(instanceSendTo.services, {[wsmqttName]: wsmqtt_status});
instance.send(SEND_TO.services, {[wsmqttName]: wsmqtt_status});
}
sendWsStatusVar = setInterval(sendWsStatus, 180000);
function main()
{
if(!FLOW.dbLoaded) return;
loadSettings();
clearInterval(sendWsStatus);
sendWsStatusVar = setInterval(sendWsStatus, 180000);
}
//set opts according to db settings
async function loadSettings()
function loadSettings()
{
if(instance.options.host !== "")
@ -174,21 +143,17 @@ exports.install = function(instance) {
else
{
const dbSettings = TABLE("settings");
let responseSettings = await promisifyBuilder(dbSettings.find());
backup_on_failure = responseSettings[0]["backup_on_failure"];
const SETTINGS = FLOW.GLOBALS.settings;
backup_on_failure = SETTINGS.backup_on_failure;
saveTelemetryOnError = backup_on_failure;
restore_from_backup = responseSettings[0]["restore_from_backup"];
restore_backup_wait = responseSettings[0]["restore_backup_wait"];
restore_from_backup = SETTINGS.restore_from_backup;
restore_backup_wait = SETTINGS.restore_backup_wait;
let mqtt_host = responseSettings[0]["mqtt_host"];
let mqtt_clientid = responseSettings[0]["mqtt_clientid"];
let mqtt_username = responseSettings[0]["mqtt_username"];
let mqtt_port = responseSettings[0]["mqtt_port"];
console.log("wsmqttpublich -> loadSettings from db", responseSettings[0]);
let mqtt_host = SETTINGS.mqtt_host;
let mqtt_clientid = SETTINGS.mqtt_clientid;
let mqtt_username = SETTINGS.mqtt_username;
let mqtt_port = SETTINGS.mqtt_port;
opts = {
host: mqtt_host,
@ -211,74 +176,78 @@ exports.install = function(instance) {
var url = "mqtt://" + opts.host + ":" + opts.port;
console.log("MQTT URL: ", url);
broker = mqtt.connect(url, opts);
client = mqtt.connect(url, opts);
broker.on('connect', function() {
client.on('connect', function() {
instance.status("Connected", "green");
monitor.info("MQTT broker connected");
monitor.info("MQTT client connected");
brokerready = true;
FLOW.OMS_brokerready = brokerready;
sendClientError = true;
clientReady = true;
wsmqtt_status = 'connected';
});
broker.on('reconnect', function() {
client.on('reconnect', function() {
instance.status("Reconnecting", "yellow");
brokerready = false;
FLOW.OMS_brokerready = brokerready;
clientReady = false;
});
broker.on('message', function(topic, message) {
client.on('message', function(topic, message) {
// message is type of buffer
message = message.toString();
if (message[0] === '{') {
TRY(function() {
message = JSON.parse(message);
console.log("ooooo------x", message);
if (message.hasOwnProperty("device") && message.hasOwnProperty("data") && message.data.hasOwnProperty("id")) {
broker.publish(topic, `{"device": ${message.device}, "id": ${message.data.id}, "data": {"success": true}}`, {qos:1});
instance.send(instanceSendTo.rpcCall, {"device": message.device, "id": message.data.id, "RPC response": {"success": true}});
client.publish(topic, `{"device": ${message.device}, "id": ${message.data.id}, "data": {"success": true}}`, {qos:1});
instance.send(SEND_TO.rpcCall, {"device": message.device, "id": message.data.id, "RPC response": {"success": true}});
}
}, () => instance.debug('MQTT: Error parsing data', message));
}
instance.send(instanceSendTo.rpcCall, {"topic":topic, "content":message });
instance.send(SEND_TO.rpcCall, {"topic":topic, "content":message });
});
broker.on('close', function(err) {
brokerready = false;
FLOW.OMS_brokerready = brokerready;
client.on('close', function(err) {
clientReady = false;
wsmqtt_status = 'disconnected';
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 });
instance.send(SEND_TO.debug, {"message":"Client 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 });
instance.send(SEND_TO.debug, {"message":"Client CLOSE signal received !", "error":err, "opt":opts });
}
broker.reconnect();
client.reconnect();
});
broker.on('error', function(err) {
client.on('error', function(err) {
instance.status("Err: "+ err.code, "red");
instance.send(instanceSendTo.debug, {"message":"Broker ERROR signal received !", "error":err, "opt":opts });
monitor.info('MQTT broker error', err);
brokerready = false;
FLOW.OMS_brokerready = brokerready;
instance.send(SEND_TO.debug, {"message":"Client ERROR signal received !", "error":err, "opt":opts });
if(sendClientError) {
monitor.info('MQTT client error', err);
sendClientError = false;
}
clientReady = false;
wsmqtt_status = 'disconnected';
});
}
instance.on('data', function(data) {
if (brokerready)
instance.on("0", _ => {
main();
})
instance.on('1', function(data) {
if(clientReady)
{
//do we have some data in backup file?
//if any, process data from database
@ -287,13 +256,12 @@ exports.install = function(instance) {
//read telemetry data and send back to server
if(!processingData) processDataFromDatabase();
}
}
if (brokerready)
if(clientReady)
{
let stringifiedJson = JSON.stringify(data.data);
broker.publish("v1/gateway/telemetry", stringifiedJson, {qos: 1});
client.publish("v1/gateway/telemetry", stringifiedJson, {qos: 1});
//backup telemetry
if(createTelemetryBackup)
@ -318,8 +286,8 @@ exports.install = function(instance) {
else
{
if(logger) logger.debug("Broker unavailable. Data not sent !", data.data);
instance.send(instanceSendTo.debug, {"message":"Broker unavailable. Data not sent !", "data": data.data });
//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)
{
@ -335,9 +303,9 @@ exports.install = function(instance) {
});
instance.close = function(done) {
if (brokerready){
broker.end();
instance.close = function(done) {
if(clientReady){
client.end();
clearInterval(sendWsStatusVar);
}
};
@ -364,7 +332,7 @@ exports.install = function(instance) {
let firstDigit = files[i].slice(0, pos);
fileCounter = parseInt(firstDigit);
if (isNaN(fileCounter)) fileCounter = 0;
if(isNaN(fileCounter)) fileCounter = 0;
//console.log("getDbBackupFileCounter digit:", files[i], firstDigit, fileCounter, isNaN(fileCounter), type);
if(type == "max")
@ -434,10 +402,7 @@ exports.install = function(instance) {
const processDataFromDatabase = async () => {
if(restore_from_backup <= 0)
{
return;
}
if(restore_from_backup <= 0) return;
//calculate diff
const now = new Date();
@ -469,7 +434,7 @@ exports.install = function(instance) {
for(let i = 0; i < records.length; i++)
{
if (brokerready) {
if(clientReady) {
let item = records[i];
let id = item.id;
@ -478,18 +443,18 @@ exports.install = function(instance) {
{
//console.log("------------processDataFromDatabase - remove", id, dataBase, i);
try{
try {
let o = JSON.parse(JSON.stringify(item));
delete o.id;
let message = JSON.stringify(o);
broker.publish("v1/gateway/telemetry", message, {qos:1});
client.publish("v1/gateway/telemetry", message, {qos:1});
//remove from database
await promisifyBuilder(nosql.remove().where("id", id));
} catch (error) {
} catch(error) {
//process error
console.log("processDataFromDatabase", error);
}
@ -524,8 +489,6 @@ exports.install = function(instance) {
}
loadSettings();
//instance.on('options', instance.reconfigure);
//instance.reconfigure();
instance.on('options', main);
//instance.reconfigure();
};