def scada_web_socket_execute():
#We read a list of tags at the beginning of the script for efficiency.
    tags_to_read = system.tag.readBlocking(["Configuration/FC", "Configuration/aws"])
    whid = tags_to_read[0].value
    aws_config = system.util.jsonDecode(tags_to_read[1].value)
    region = aws_config.get("region")
    logger = system.util.getLogger("%s-Web-Socket-Execute" % (whid))
    provider = "[%s_SCADA_TAG_PROVIDER]" % (whid)
    AWS.create_tags.create_web_socket_tags(whid)
    Latency.CreateLatencyTags.create_latency_tags(whid) # attempt to create latency lags
    check_socket_closed_in_loop = AWS.wbsckt_abort.check_web_socket()
    #Check the heartbeat and restart if not recieved within the specified time
    check_heartbeat = AWS.heartbeat.check_heartbeat(provider, 120)
    if check_heartbeat:
    	AWS.wbsckt_abort.close_websckt()
    	AWS.heartbeat.get_heartbeat(provider)
    if whid == "" or whid == None:
        raise ValueError("FC not configured. A project on the gateway is missing Configuration/FC id")

    elif not region:
        raise ValueError("No aws region configured for project")

    elif check_socket_closed_in_loop:
        logger.warn("Socket is closed check System/close_socket tag")

    else:
        description = provider + "websocket api gateway"
        set_global =  system.util.getGlobals().setdefault(whid,{})
        running = system.util.getGlobals()[whid].get("wbsckt_running", 0) 
        if not running:
            try:
                message_handler = AWS.message_types.A2C_MessageHandler(whid)
                args = [whid, provider, region, message_handler, "scada/api/endpoint"]
                description = "%s-web-socket-api"
                system.util.invokeAsynchronous(AWS.web_socket.web_socket_main, args, description )
            except:
                AWS.errors.error_handler(whid, "Web-Socket-Execute")
                
def update_execute():
    data = AWS.message_types.Update()
    data.read_messages_from_queue()
    data.write_tags() 

def status_execute():
    tags_to_read = system.tag.readBlocking(["Configuration/FC", "System/aws_data"])
    whid = tags_to_read[0].value
    alarms_data = system.util.jsonDecode(tags_to_read[1].value)
#    Alarm script
    try:
    	if AWS.message_types.global_first_connect == False:
        	Visualisation.status.reset_alarms(whid)
        	Visualisation.status.global_previous_state = {}
        AWS.message_types.global_first_connect = True
        status = Visualisation.status.GetStatus(whid, alarms_data)
        status.build_status()
        status.write_data()
        alarms.alarm_count.get_count(whid, alarms_data)
    except:
        AWS.errors.error_handler(whid, "Status-Visualisation-Script")