<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="0.5.0-rc2" Guid="{7B12FB83-48DF-431A-9F66-9557A2EC5C8C}" Time="1500263715.79">
    <Autostart Name="Autostart" XML_Guid="{4CD9EB56-F3EC-42C7-BCE8-A34C11B937B0}" Expanded="True">
        <Plugin XML_Guid="{42E851FE-C859-4E3E-B41F-FD91B22BD6AA}" Identifier="Webserver" Guid="{E4305D8E-A3D3-4672-B06E-4EA1F0F6C673}" File="Webserver">
            gAIoWAQAAABIVFRQcQBNmR9YAAAAAHEBWAoAAABFdmVudEdob3N0cQJoAWgBfXEDiVgBAAAALHEEWAIAAAA7O3EFaAFoAYl0cQYu
        </Plugin>
        <Action Name="Python Script: Global VariablesTo uses" XML_Guid="{94C31BB6-6396-4026-B8EE-FD11BCCDF55E}">
            EventGhost.PythonScript(u"#Wit Ait token, fork my project https://wit.ai/m19brandon/BlackBox\neg.globals.witai_userdata = 'Bearer sometoken'\n\n#BlackBox variables\neg.globals.bb_get_intent = ''\neg.globals.bb_get_conf = ''\neg.globals.bb_get_entities = ''\n\n#DeviceID of the sending voice device\neg.globals.bb_location = ''\n\n#Variables that pass the reponse, I use these with autoremote\n#Title\neg.globals.ibl1_ttl = ''\n#Message\neg.globals.ibl1_msg = ''\n\n\n#There is some basic machine learning that I use to in a welcome message.\n#From the logs, and time of the event we can figure out what good options to offer.\neg.globals.bb_trigger_events = []\neg.globals.bb_trigger_event_list = []\neg.globals.bb_ml_te = []\neg.globals.bb_ml_te_position = []\neg.globals.bb_ml_te_position = 0\n\n#The Variables that I use hold the command pass from Alexa of OK Google\neg.globals.bb_cmd = ''")
        </Action>
    </Autostart>
    <Folder Name="BlackBox AI" XML_Guid="{FC3868C3-22ED-41E5-97AB-60DDBD432BF2}" Expanded="True">
        <Macro Name="BlackBox Wit.AI Results" id="4" XML_Guid="{9CAAD757-D9E1-493E-9EBA-B1D8A8AFD364}">
            <Action XML_Guid="{F1784F30-1ACC-4E47-9B3D-42E8E47B9D52}">
                EventGhost.PythonCommand(u'eg.result = None')
            </Action>
            <Action Name="Python Script: getBB" XML_Guid="{C41309D1-0426-47E5-AE3E-029D52A6C4B3}">
                EventGhost.PythonScript(u'import urllib2\nimport json\nimport datetime\nimport ssl\n\ndef getBB(text):\n    # first encode the username &amp; password\n    #userData = "Basic " + (uName + ":" + pWord).encode("base64").rstrip()\n    userData = eg.globals.witai_userdata\n    # create a new Urllib2 Request object\n    #wit = \'https://api.wit.ai/message?v=20150508&amp;q=\'\n    wit = \'https://api.wit.ai/message?v=20170202&amp;q=\'\n    txt = urllib2.quote(text)\n    req = urllib2.Request(wit + txt)\n    # add any additional headers you like\n    req.add_header(\'Accept\', \'application/json\')\n    req.add_header("Content-type", "application/x-www-form-urlencoded")\n    # add the authentication header, required\n    req.add_header(\'Authorization\', userData)\n    gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)  # Only for gangstars\n    # make the request and print the results\n\n    try:\n        response = urllib2.urlopen(req, context=gcontext)\n        response = response.read()\n        response = json.loads(response)\n        \n    # This error handling isspecifically to catch HTTP errors and connection errors\n    except urllib2.URLError as e:\n        # In the event of an error, I am making the output begin with "ERROR " first, to allow for easy scripting.\n        # You will get a couple different kinds of error messages in here, so I needed a consistent error condition to check for.\n        response = \'ERROR \'+str(e.reason)\n    return response\n\neg.globals.ibl1_ttl = \'BlackBox\'\neg.globals.ibl1_msg = \'Unknown\'\n\ncmd = eg.globals.bb_cmd\n#cmd = \'test\'\nprint \'Searching Wit.AI Blackbox for: \' + cmd\ntime1 = datetime.datetime.now()\nresults = getBB(cmd)\ntime2 = datetime.datetime.now()\ndtime = time2-time1\n\neg.globals.bb_get_intent =\'\'\neg.globals.bb_get_conf = 0\neg.globals.bb_get_entities = []\n\nif \'outcomes\' in results:\n    msg = \'Results Received:\'\n    msg=msg+ \'\\nWit Took - \' + str(dtime.total_seconds()) + \'s\'\n    msg=msg+ \'\\nCmd: \' + cmd\n    get_outcomes = results[\'outcomes\']\n    if \'intent\' in get_outcomes[0]:\n        eg.globals.bb_get_intent = get_outcomes[0][\'intent\']\n        msg= msg + \'\\nintent: \' + eg.globals.bb_get_intent\n    if \'confidence\' in get_outcomes[0]:\n        eg.globals.bb_get_conf = get_outcomes[0][\'confidence\']\n        msg= msg + \'\\nconfidence: \' + str(eg.globals.bb_get_conf)\n    if \'entities\' in get_outcomes[0]:\n        eg.globals.bb_get_entities = get_outcomes[0][\'entities\']\n        msg= msg + \'\\nentities: \' + str(eg.globals.bb_get_entities)\n    print msg\n    if eg.globals.bb_get_conf &gt; 0.6:\n        eg.globals.ibl1_msg = msg\n        eg.result = True\n    else:\n        eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\ncmd is unknown: \' + cmd\n        eg.globals.bb_get_intent = \'\'\n        eg.globals.bb_get_entities = []\n        eg.result = False\nelse:\n    print results')
            </Action>
            <Action XML_Guid="{764F496A-CBF5-4337-9D2F-3B1F0FAD510F}">
                EventGhost.PythonCommand(u'eg.result = None')
            </Action>
            <Action XML_Guid="{EA239C13-CB1C-4F9C-9A0E-F56924F57001}">
                EventGhost.PythonCommand(u"if eg.globals.bb_get_intent == 'tv': eg.result = True; print 'True'")
            </Action>
            <Action XML_Guid="{1537EFE7-F9F1-43C8-B5F1-ADED0F338376}">
                EventGhost.NewJumpIf(XmlIdLink(22), 0, True)
            </Action>
            <Action XML_Guid="{D36E0213-B830-4F0A-A2FF-8B139631F947}">
                EventGhost.PythonCommand(u'eg.result = None')
            </Action>
            <Action XML_Guid="{4CB9ABD3-537A-4479-A6CB-34DF64A781EE}">
                EventGhost.PythonCommand(u"if eg.globals.bb_get_intent == 'lights': eg.result = True; print 'True'")
            </Action>
            <Action XML_Guid="{5A3BAF1F-DCE0-4666-B091-C1FADBA46D02}">
                EventGhost.NewJumpIf(XmlIdLink(24), 0, True)
            </Action>
            <Action XML_Guid="{CA6B835E-8D19-4560-84F8-46F14B8E2910}">
                EventGhost.PythonCommand(u'eg.result = None')
            </Action>
            <Action XML_Guid="{E22526F3-E5D2-499A-946D-43F97EAF59F2}">
                EventGhost.PythonCommand(u"if eg.globals.bb_get_intent == 'home': eg.result = True; print 'True'")
            </Action>
            <Action XML_Guid="{EFE96018-A1A3-4365-958D-110E8517FC3E}">
                EventGhost.NewJumpIf(XmlIdLink(26), 0, True)
            </Action>
            <Action XML_Guid="{3D16D7A7-AFA6-4E4A-BCEE-9B5AD587E793}">
                EventGhost.PythonCommand(u'eg.result = None')
            </Action>
            <Action XML_Guid="{572369D3-6CF0-4BED-ADD7-DAF5C5B16307}">
                EventGhost.PythonCommand(u"if eg.globals.bb_get_intent == 'doors': eg.result = True; print 'True'")
            </Action>
            <Action XML_Guid="{5134BE1D-72CB-42A7-A2EE-E06717695F15}">
                EventGhost.NewJumpIf(XmlIdLink(28), 0, True)
            </Action>
            <Action XML_Guid="{470FA1A3-8AA0-4F78-8064-D09E3D849EFC}">
                EventGhost.PythonCommand(u'eg.result = None')
            </Action>
            <Action XML_Guid="{27E352CF-015B-4930-BDAE-1BDD03EB0F65}">
                EventGhost.PythonCommand(u"if eg.globals.bb_get_intent == 'fans': eg.result = True; print 'True'")
            </Action>
            <Action XML_Guid="{1E5EE63C-4D32-43E6-B0D6-8D480B6D5444}">
                EventGhost.NewJumpIf(XmlIdLink(30), 0, True)
            </Action>
        </Macro>
        <Macro Name="Python Script: BlackBox Intent tv" id="22" XML_Guid="{27A15A30-B491-455B-911B-43B9DE0FE898}">
            <Action Name="Python Script: BlackBox Intent tv" XML_Guid="{27358540-DD81-49BB-9DA8-3B5A9BA9628E}">
                EventGhost.PythonScript(u"intent = eg.globals.bb_get_intent\nconf = eg.globals.bb_get_conf\nentities = eg.globals.bb_get_entities\naction = ''\nsearch_query = ''\nchannel = ''\non_off = ''\n\nmsg = ''\nrtn_msg = ''\n\n\n############\n#Functions\n############\ndef getChannelNumber(query):\n    channel_num = ''\n    if query &lt;&gt; '':\n        print 'Searching for channel ' + query\n        if len(query) &lt; 8:\n            query2 = query.replace(' ','')\n            if len(query2) &lt; len(query):\n                print 'Clean up the channel string ' + query + ' to ' + query2\n                query=query2  \n        for channel in eg.globals.family_channel_list:\n            if channel[1].lower() == query.lower():\n                channel_num = str(channel[0])\n                print 'Channel ' + query.lower() + ' is ' + channel_num\n    else:\n        print 'Cannot search var, string was empty'\n    return channel_num\n\n############\n#On Off\n############\nif 'on_off' in entities:\n    #print entities['on_off']\n    #print entities['on_off'][0]\n    if 'value' in entities['on_off'][0]:\n        on_off = entities['on_off'][0]['value']\n        print 'on_off: ' + on_off\n    else:\n        msg = msg + '\\non_off Not Found'\n        print 'on_off Not Found'\nelse:\n    print 'on_off Not Found'\n\n############\n#Room\n############\nif 'room' in entities:\n    if 'value' in entities['room'][0]:\n        room = entities['room'][0]['value']\n        print 'Room: ' + room\n    else:\n        if eg.globals.bb_location == '' or eg.globals.bb_location == 'kitchen':\n            room = 'family'\n            msg = msg + '\\nRoom Not Found, defaulting to Family Room'\n            print 'Room Not Found, defaulting to Family Room'\n        else:\n            room = eg.globals.bb_location\n            msg = msg + '\\nLocation include, defaulting the room to ' + room\n            print 'Location include, defaulting the room to ' + room\nelse:\n    if eg.globals.bb_location == '' or eg.globals.bb_location == 'kitchen':\n            room = 'family'\n            msg = msg + '\\nRoom Not Found, defaulting to Family Room'\n            print 'Room Not Found, defaulting to Family Room'\n    else:\n        room = eg.globals.bb_location\n        msg = msg + '\\nLocation include, defaulting the room to ' + room\n        print 'Location include, defaulting the room to ' + room\n\n############\n#Master Room\n############\nif room == 'master':\n    if 'action' in entities:\n        for action in entities['action']:\n            #print action\n            if 'value' in action:\n                action = action['value']\n                print 'Action: ' + action\n            else:\n                msg = msg + '\\nAction Not Found'\n                print 'Action Not Found'\n    else:\n        msg = msg + '\\nAction Not Found'\n        print 'Action Not Found'\n        \n    if 'search_query' in entities:\n        if 'value' in entities['search_query'][0]:\n            search_query = entities['search_query'][0]['value']\n            print 'Search Query: ' + search_query\n        else:\n            msg = msg + '\\nSearch Query Not Found'\n            print 'Search Query Not Found'\n    else:\n        msg = msg + '\\nSearch Query Not Found'\n        print 'Search Query Not Found'\n\n    if 'channel' in entities:\n        if 'value' in entities['channel'][0]:\n            channel = entities['channel'][0]['value']\n            print 'Channel: ' + channel\n        else:\n            msg = msg + '\\nChannel Not Found'\n            print 'Channel Not Found'\n    else:\n        msg = msg + '\\nChannel Not Found'\n        print 'Channel Not Found'\n\n    trg = ''\n\n    if on_off == 'off':\n        trg = 'ip2ir_Master_All_Power_Off'\n        rtn_msg = 'turning off the master bedroom tv'\n    elif action == 'computer':\n        trg = 'ip2ir_Master_Set_to_PC'\n        rtn_msg = 'setting the master bedroom room tv to the computer'\n    elif action == 'tv':\n        trg = 'ip2ir_Master_Set_to_PC'\n        rtn_msg = 'got it, master bedroom room tv is turning on'\n    elif action == 'mute':\n        trg = 'ip2ir_Vizio_TV_Mute'\n        rtn_msg = 'master bedroom mute toggle'\n    elif action == 'volume_down':\n        trg = 'ip2ir_Vizio_TV_Volume_Down_3'\n        rtn_msg = 'lowering the master bedroom tv volume'\n    elif action == 'volume_up':\n        trg = 'ip2ir_Vizio_TV_Volume_Up_3'\n        rtn_msg = 'rasing the master bedroom tv volume'\n    else:\n        print 'cmd is unknown: ' + action\n############\n#Family Room Else\n############\nelse:\n    if 'action' in entities:\n        for action in entities['action']:\n            #print action\n            if 'value' in action:\n                action = action['value']\n                print 'Action: ' + action\n            else:\n                msg = msg + '\\nAction Not Found'\n                print 'Action Not Found'\n    else:\n        msg = msg + '\\nAction Not Found'\n        print 'Action Not Found'\n        \n    if 'search_query' in entities:\n        if 'value' in entities['search_query'][0]:\n            if entities['search_query'][0]['value'].lower() &lt;&gt; 'tv':\n                search_query = entities['search_query'][0]['value']\n            print 'Search Query: ' + search_query\n        else:\n            msg = msg + '\\nSearch Query Not Found'\n            print 'Search Query Not Found'\n    else:\n        msg = msg + '\\nSearch Query Not Found'\n        print 'Search Query Not Found'\n\n    if 'channel' in entities:\n        if 'value' in entities['channel'][0]:\n            if entities['channel'][0]['value'].lower() &lt;&gt; 'tv':\n                channel = entities['channel'][0]['value']\n            print 'Channel: ' + channel\n        else:\n            msg = msg + '\\nChannel Not Found'\n            print 'Channel Not Found'\n    else:\n        msg = msg + '\\nChannel Not Found'\n        print 'Channel Not Found'\n\n    trg = ''\n\n    if on_off == 'off':\n        trg = 'ip2ir_Family_All_Power_Off'\n        rtn_msg = 'turning off the family room tv'\n    elif action == 'computer':\n        trg = 'ip2ir_Family_Set_to_DVD'\n        rtn_msg = 'setting the family room tv to the computer'\n    elif action == 'tv' or action == 'channel':\n        if channel == '' and search_query == '':\n            trg = 'ip2ir_Family_Set_to_Cable'\n            rtn_msg = 'lets watch tv'\n        else:\n            if channel &lt;&gt; '':\n                ch = getChannelNumber(channel)\n            else:\n                ch = ''\n            if search_query &lt;&gt; '':\n                sq = getChannelNumber(search_query)\n            else:\n                sq = ''\n            if ch &lt;&gt; '' or sq &lt;&gt; '':\n                if ch &lt;&gt; '':\n                    eg.globals.family_cable_tune_to = ch\n                    rtn_msg = 'setting the tv to ' + channel\n                    print 'Found channl via channel value'\n                else:\n                    eg.globals.family_cable_tune_to = sq\n                    rtn_msg = 'setting the tv to ' + search_query\n                    print 'Found channl via search query value'\n                trg = 'ip2ir_Cable_Tune_To'\n            else:\n                trg = 'ip2ir_Family_Set_to_Cable'\n                rtn_msg = 'but i do not know channel, ' + channel + search_query\n    elif action == 'music':\n        trg = 'ip2ir_Family_Set_to_FireTV'\n        rtn_msg = 'Fire TV, please open the Prime Music app'\n    elif action == 'movie':\n        trg = 'ip2ir_Family_Set_to_FireTV'\n        rtn_msg = 'Fire TV, it is movie time'\n    elif action == 'netflix':\n        trg = 'ip2ir_Family_Set_to_FireTV'\n        rtn_msg = 'Fire TV, please open the netflix app'\n    elif action == 'amazon':\n        trg = 'ip2ir_Family_Set_to_FireTV'\n        rtn_msg = 'Fire TV on'\n    elif action == 'firetv':\n        trg = 'ip2ir_Family_Set_to_FireTV'\n        rtn_msg = 'Fire TV on'\n    elif action == 'xbox':\n        trg = 'ip2ir_Family_Set_to_Xbox'\n        rtn_msg = 'xbox on, good luck'\n    elif action == 'mute':\n        trg = 'ip2ir_Onkyo_Mute'\n        rtn_msg = 'family room tv mute toggle'\n    elif action == 'volume_down':\n        trg = 'ip2ir_Volume_Down_5'\n        rtn_msg = 'rasing the family room tv volume'\n    elif action == 'volume_up':\n        trg = 'ip2ir_Volume_Up_5'\n        rtn_msg = 'lowering the family room tv volume'\n    else:\n        print 'cmd is unknown: ' + action\n    \n\nif trg != '':\n    eg.globals.ibl1_ttl = eg.globals.ibl1_ttl + ': ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nTrigger: ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nReturn Msg: ' + rtn_msg\n    eg.TriggerEvent(trg)\n    print trg\nelse:\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\ncmd is unknown: ' + action\n#Done\n")
            </Action>
        </Macro>
        <Macro Name="Python Script: BlackBox Intent lights" id="24" XML_Guid="{F46E404F-811D-454E-B16C-39B973BDC028}">
            <Action Name="Python Script: BlackBox Intent lights" XML_Guid="{A3D1FF49-85FB-439C-BA0A-3610349C7B50}">
                EventGhost.PythonScript(u"#print 'BlackBox Intent lights'\nintent = eg.globals.bb_get_intent\nconf = eg.globals.bb_get_conf\nentities = eg.globals.bb_get_entities\non_off = ''\nroom = ''\n\nmsg = ''\n\nif 'on_off' in entities:\n    #print entities['on_off']\n    #print entities['on_off'][0]\n    if 'value' in entities['on_off'][0]:\n        on_off = entities['on_off'][0]['value']\n        print 'on_off: ' + on_off\n    else:\n        msg = msg + '\\non_off Not Found'\n        print 'on_off Not Found'\nelse:\n    print 'on_off Not Found'\n    \nif 'room' in entities:\n    #print entities['room']\n    #print entities['room'][0]\n    if 'value' in entities['room'][0]:\n        room = entities['room'][0]['value']\n        print 'Room: ' + room\n    else:\n        if eg.globals.bb_location &lt;&gt; '':\n            room = eg.globals.bb_location\n            msg = msg + '\\nLocation include, defaulting the room to ' + room\n            print 'Location include, defaulting the room to ' + room\n        else:\n            msg = msg + '\\nRoom Not Found'\n            print 'Room Not Found'\nelse:\n    if eg.globals.bb_location &lt;&gt; '':\n        room = eg.globals.bb_location\n        msg = msg + '\\nLocation include, defaulting the room to ' + room\n        print 'Location include, defaulting the room to ' + room\n    else:\n        msg = msg + '\\nRoom Not Found'\n        print 'Room Not Found'\n\ntrg = ''\n\nif room == 'kitchen':\n    if on_off == 'on':\n        trg = 'lights_kitchen_on'\n    elif on_off == 'off':\n        trg = 'lights_kitchen_off'\n    else:\n        trg = 'lights_kitchen_toggle'\nelif room == 'master':\n    if on_off == 'on':\n        trg = 'lights_master_bedroom_on'\n    elif on_off == 'off':\n        trg = 'lights_master_bedroom_off'\n    else:\n        trg = 'lights_master_bedroom_toggle'\nelif room == 'family':\n    if on_off == 'on':\n        trg = 'lights_family_on'\n    elif on_off == 'off':\n        trg = 'lights_family_off'\n    else:\n        trg = 'lights_family_toggle'\nelif room == 'hallway':\n    if on_off == 'on':\n        trg = 'lights_hallway_on'\n    elif on_off == 'off':\n        trg = 'lights_hallway_off'\n    else:\n        trg = 'lights_hallway_toggle'\nelif room == 'all':\n    if on_off == 'on':\n        trg = 'lights_home_on'\n    elif on_off == 'off':\n        trg = 'lights_home_off'\n    else:\n        trg = 'lights_home_off'\nelse:\n    print 'cmd is unknown: ' + room\nif trg != '':\n    eg.globals.ibl1_ttl = eg.globals.ibl1_ttl + ': ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nTrigger: ' + trg\n    eg.TriggerEvent(trg); print trg\nelse:\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\ncmd is unknown: ' + room\n#Done")
            </Action>
        </Macro>
        <Macro Name="Python Script: BlackBox Intent home" id="26" XML_Guid="{C0D9962D-3F65-4DED-BC47-85D4DAD40948}">
            <Action Name="Python Script: BlackBox Intent home" XML_Guid="{76430473-2E37-4D37-9B15-566D223868EC}">
                EventGhost.PythonScript(u"#print 'BlackBox Home doors'\nintent = eg.globals.bb_get_intent\nconf = eg.globals.bb_get_conf\nentities = eg.globals.bb_get_entities\naction = ''\nroom = ''\n\nmsg = ''\nrtn_msg = ''\n\nif 'home_action' in entities:\n    if 'value' in entities['home_action'][0]:\n        action = entities['home_action'][0]['value']\n        print 'action(home_action): ' + action\n    else:\n        msg = msg + '\\nhome_action Not Found'\n        print 'home_action Not Found'\nelse:\n    print 'home_action Not Found'\n    \n    \nif 'room' in entities:\n    #print entities['room']\n    #print entities['room'][0]\n    if 'value' in entities['room'][0]:\n        room = entities['room'][0]['value']\n        print 'Room: ' + room\n    else:\n        if eg.globals.bb_location &lt;&gt; '' or eg.globals.bb_location == 'kitchen':\n            room = eg.globals.bb_location\n            msg = msg + '\\nLocation include, defaulting the room to ' + room\n            print 'Location include, defaulting the room to ' + room\n        else:\n            msg = msg + '\\nRoom Not Found'\n            print 'Room Not Found'\nelse:\n    if eg.globals.bb_location &lt;&gt; '' or eg.globals.bb_location == 'kitchen':\n            room = eg.globals.bb_location\n            msg = msg + '\\nLocation include, defaulting the room to ' + room\n            print 'Location include, defaulting the room to ' + room\n    else:\n        msg = msg + '\\nRoom Not Found'\n        print 'Room Not Found'\n    \ntrg = ''\n\nif action == 'i am leaving':\n    trg = 'i_am_leaving'\n    rtn_msg = 'opening the garage, turning off the TV and will turn off the lights in one minute'\nelif action == 'we are leaving':\n    trg = 'we_are_leaving'\n    rtn_msg = 'opening the garage, turning off the TV and will turn off the lights in one minute'\nelif action == 'bedtime':\n    trg = 'home_bedtime'\n    rtn_msg = 'got it, bedtime'\nelif action == 'comfortable':\n    if room == 'master':\n        trg = 'master_comfortable'\n        rtn_msg = 'got it, making the master bedroom comfortable'\n    elif room == 'kitchen':\n        trg = 'kitchen_comfortable'\n        rtn_msg = 'got it, making the living area comfortable'\nelif action == 'out':\n    if room == 'master':\n        trg = 'master_out_mode'\n        rtn_msg = 'understood, shutting down the master bedroom'\n    elif room == 'kitchen':\n        trg = 'kitchen_out_mode'\n        rtn_msg = 'understood, shutting down the living areas'\nelse:\n    print 'cmd is unknown: ' + action\n\n\nif trg != '':\n    eg.globals.ibl1_ttl = eg.globals.ibl1_ttl + ': ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nTrigger: ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nReturn Msg: ' + rtn_msg\n    eg.TriggerEvent(trg); print trg\nelse:\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\ncmd is unknown: ' + action\n#Done")
            </Action>
        </Macro>
        <Macro Name="Python Script: BlackBox Intent doors" id="28" XML_Guid="{C8E8AF17-064B-4ABF-B9CA-46A287E544DE}">
            <Action Name="Python Script: BlackBox Intent doors" XML_Guid="{33B0F3CD-AF76-4BD0-B637-7FE80B7543CB}">
                EventGhost.PythonScript(u"#print 'BlackBox Intent doors'\nintent = eg.globals.bb_get_intent\nconf = eg.globals.bb_get_conf\nentities = eg.globals.bb_get_entities\ndoor_action = ''\nroom = ''\n\nmsg = ''\nrtn_msg = ''\n\nif 'door_action' in entities:\n    if 'value' in entities['door_action'][0]:\n        door_action = entities['door_action'][0]['value']\n        print 'door_action: ' + door_action\n    else:\n        msg = msg + '\\ndoor_action Not Found'\n        print 'door_action Not Found'\nelse:\n    print 'door_action Not Found'\n    \nif 'room' in entities:\n    #print entities['room']\n    #print entities['room'][0]\n    if 'value' in entities['room'][0]:\n        room = entities['room'][0]['value']\n        print 'Room: ' + room\n    else:\n        msg = msg + '\\nRoom Not Found'\n        print 'Room Not Found'\nelse:\n    msg = msg + '\\nRoom Not Found'\n    print 'room Not Found'\n\ntrg = ''\n\nif room == 'garage':\n    if door_action == 'open':\n        trg = 'garage_door_open'\n        rtn_msg = 'openning the garage door'\n    elif door_action == 'close':\n        trg = 'garage_door_close'\n        rtn_msg = 'closing the garage door'\nelse:\n    print 'cmd is unknown: ' + room\nif trg != '':\n    eg.globals.ibl1_ttl = eg.globals.ibl1_ttl + ': ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nTrigger: ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nReturn Msg: ' + rtn_msg\n    eg.TriggerEvent(trg); print trg\nelse:\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\ncmd is unknown: ' + room\n#Done")
            </Action>
        </Macro>
        <Macro Name="Python Script: BlackBox Intent fans" id="30" XML_Guid="{8AD24E04-D041-41D3-B35C-26C9E7B08D97}">
            <Action Name="Python Script: BlackBox Intent fans" XML_Guid="{B8FD112A-28C6-4C39-BA10-B8DF887F0409}">
                EventGhost.PythonScript(u" #print 'BlackBox Intent fans'\nintent = eg.globals.bb_get_intent\nconf = eg.globals.bb_get_conf\nentities = eg.globals.bb_get_entities\non_off = ''\nroom = ''\n\nmsg = ''\n\nif 'on_off' in entities:\n    #print entities['on_off']\n    #print entities['on_off'][0]\n    if 'value' in entities['on_off'][0]:\n        on_off = entities['on_off'][0]['value']\n        print 'on_off: ' + on_off\n    else:\n        msg = msg + '\\non_off Not Found'\n        print 'on_off Not Found'\nelse:\n    print 'on_off Not Found'\n    \nif 'room' in entities:\n    #print entities['room']\n    #print entities['room'][0]\n    if 'value' in entities['room'][0]:\n        room = entities['room'][0]['value']\n        print 'Room: ' + room\n    else:\n        if eg.globals.bb_location &lt;&gt; '' or eg.globals.bb_location == 'kitchen':\n            room = eg.globals.bb_location\n            msg = msg + '\\nLocation include, defaulting the room to ' + room\n            print 'Location include, defaulting the room to ' + room\n        else:\n            msg = msg + '\\nRoom Not Found'\n            print 'Room Not Found'\nelse:\n    if eg.globals.bb_location &lt;&gt; '' or eg.globals.bb_location == 'kitchen':\n            room = eg.globals.bb_location\n            msg = msg + '\\nLocation include, defaulting the room to ' + room\n            print 'Location include, defaulting the room to ' + room\n    else:\n        msg = msg + '\\nRoom Not Found'\n        print 'Room Not Found'\n\ntrg = ''\n\nif room == 'kitchen':\n    if on_off == 'on':\n        trg = 'fan_kitchen_on'\n    elif on_off == 'off':\n        trg = 'fan_kitchen_off'\n    else:\n        trg = 'fan_kitchen_toggle'\nelif room == 'master':\n    if on_off == 'on':\n        trg = 'fan_master_bedroom_on'\n    elif on_off == 'off':\n        trg = 'fan_master_bedroom_off'\n    else:\n        trg = 'fan_master_bedroom_toggle'\nelif room == 'family':\n    if on_off == 'on':\n        trg = 'fan_family_on'\n    elif on_off == 'off':\n        trg = 'fan_family_off'\n    else:\n        trg = 'fan_family_toggle'\nelif room == 'all':\n    if on_off == 'on':\n        trg = 'fan_home_on'\n    elif on_off == 'off':\n        trg = 'fan_home_off'\n    else:\n        trg = 'fan_home_off'\nelse:\n    print 'cmd is unknown: ' + room\nif trg != '':\n    eg.globals.ibl1_ttl = eg.globals.ibl1_ttl + ': ' + trg\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\nTrigger: ' + trg\n    eg.TriggerEvent(trg); print trg\nelse:\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + '\\ncmd is unknown: ' + room\n#Done")
            </Action>
        </Macro>
    </Folder>
    <Folder Name="BlackBox AI - Machine Learning" XML_Guid="{E2A4FDBB-8E1B-4DD7-9A91-DBE431889CCF}" Expanded="True">
        <Macro Name="Python Script - BlackBox Load Trigger Events From Logs" XML_Guid="{346CF46E-A2D0-43CD-80D4-FD55D88F2194}">
            <Event Name="Main.bb_ml_load_triggers" XML_Guid="{5BFD01F0-F758-4EF4-8B40-548C51122134}" />
            <Action Name="Python Script - BlackBox Load Trigger Events From Logs" XML_Guid="{987DF1EE-FEB6-45B8-8758-3112B11AD804}">
                EventGhost.PythonScript(u"#This script will load all trigger events from the log file into an arrary\nimport datetime\nimport numpy as np\n\ndef loadLogFileEvents(file):\n#Read log file\n\tfname = file\n\twith open(fname) as f:\n\t\tlogfile = f.read().splitlines()\n\n\t#Push each event into into a list\n\tmy_commands= []\n\tfor line in logfile:\n\t\t#We know that each stack start with the line starts with an alpha versus a space.\n\t\t#if (line and 'INFO: Trigger:') or (line and 'Trigger: ') in line:\n\t\tif line and 'Trigger: ' in line:\n\t\t\tmy_commands.append(line)\n\tprint 'There are ' + str(len(my_commands)) + ' commands'\n\n\tdata_trainer= []\n\tlabel_names = []\n\tcc=0\n\tfor e in my_commands:\n\t\tt = e[11:19]\n\t\t#c = e[51:]\n\t\tc = e.split('Trigger: ')[1].split('/R')[0]\n\t\t#print(t + ' ' + c)\n\t\tt = (int(t[0:2]) * 60) + int(t[3:5])\n\t\tdata_trainer.insert(cc,t)\n\t\tlabel_names.insert(cc,c)\n\t\tcc+=1\n\n\t\n\tfeatures = data_trainer\n\tlabels = label_names\n\tif len(features) == len(labels):\n\t\tds = np.column_stack((features, labels))\n\t\treturn ds\n\telse:\n\t\tprint 'Error - Features and Labels counts do not match'\n\t\treturn []\n\ndef main():\n    filepath = eg.plugins.LogRedirector.__dict__['plugin'].ioFile.name\n    print 'Loading Trigger Events from the logs file ' + filepath\n    #Load the trigger events into a list from the log file\n    eg.globals.bb_trigger_events = []\n    eg.globals.bb_trigger_events = loadLogFileEvents(filepath)\n    \n    \nmain()")
            </Action>
        </Macro>
        <Macro Name="Python Script - BlackBox Top Events By Time" id="44" XML_Guid="{355D09BC-7C38-482F-B816-92D821D426F4}">
            <Action Name="Python Script - BlackBox Top Events By Time 2.1" XML_Guid="{BDDC938B-E990-4F4D-8C59-41BA6297FECA}">
                EventGhost.PythonScript(u"#Get the top triggerr events from the current time through some machine learning/data mining\nimport collections\nimport datetime\nfrom time import localtime, strftime, mktime\n\ndef egprint(printme):\n    debug = False\n    if debug:\n        print printme\ndef var_state(varname):\n    v = ''\n    for e in eg.globals.__dict__.items():\n        if type(e)==tuple:\n            if len(e) &gt; 0:\n                if e[0] == varname:\n                    v = e[1]\n                    exit\n    return v\n\ndef checkeventincurrntlog(event,recent):\n    e = False\n    dt_l = datetime.datetime.now() - datetime.timedelta(minutes=recent)\n    #logs = eg.document.frame.logCtrl.data\n    logs = eg.log.data\n    cur_log = []\n    c = 0\n    for l in list(reversed(logs)):\n        dt = datetime.datetime.fromtimestamp(mktime(localtime(l[3])))\n        #if dt &gt; dt_l and event in l[0]:\n        if dt &lt;= dt_l:\n            break\n        if event in l[0]:\n            d = dt - dt_l\n            egprint('Found in the logs at ' + str(dt))\n            e = True\n            break\n        c=c+1\n    #egprint(c)\n    return e\n\ndef near(ds, drift, t):\n\t#print t\n\ttop_commands = []\n\tfor d in ds:\n\t\tif (int(t - drift) &lt;= int(d[0]) &lt;= int(t + drift)):\n\t\t\t#eprint('true ' + str(d))\n\t\t\ttop_commands.append(d[1])\n\t\tif int(t - drift) &lt; 0 and int(d[0]) &gt; (1440 -(drift - t)):\n\t\t\t#eprint('day before ' + str(d[0]) + ' &gt; ' + str(1440 -(drift - t)))\n\t\t\ttop_commands.append(d[1])\n\n\tcounter=collections.Counter(top_commands)\n\tmc = counter.most_common(10)\n\tmc2 = []\n\tfor k in mc:\n\t\tif k[1] &gt; 1:\n\t\t\t#print 'Addig ' + str(k)\n\t\t\tmc2.append(k)\n\t\t#print 'count ' + str(c)\n\t\t#c+=1\n\treturn mc2\n\ndef checkcmd(cmd):\n    r = ''\n    #If the current cmd/trigger is in our dict, we check the state of that device and swap opposite state.\n    if cmd in eg.globals.bb_trigger_event_list:\n        #print 'We have it ' + str(eg.globals.bb_trigger_event_list[cmd])\n        #Ensure the cmd/trigger has an opposite cmd/trigger\n        if eg.globals.bb_trigger_event_list[cmd][0] &lt;&gt; '':\n            #Get defined state of the cmd/trigger. tv on would be true and family lights off would be false\n            cmd_var_state = var_state(eg.globals.bb_trigger_event_list[cmd][4])\n            #print str(eg.globals.bb_trigger_event_list[cmd][4]) + ' = ' + str(cmd_var_state)\n            if type(cmd_var_state)==bool:\n                #print 'bool'\n                if cmd_var_state == eg.globals.bb_trigger_event_list[cmd][3]:\n                    egprint('Change ' + cmd + ' to ' + eg.globals.bb_trigger_event_list[cmd][0])\n                    return eg.globals.bb_trigger_event_list[cmd][0]\n            elif type(cmd_var_state)==str:\n                #print 'string'\n                if cmd_var_state == 'off':\n                    cmd_var_state_b = False\n                else:\n                    cmd_var_state_b = True\n                #print 'cmd_var_state = ' +str(cmd_var_state) + ' &amp; cmd_var_state_b = ' + str(cmd_var_state_b)\n                if cmd_var_state_b == eg.globals.bb_trigger_event_list[cmd][3]:\n                    egprint('Changing ' + cmd + ' to ' + eg.globals.bb_trigger_event_list[cmd][0])\n                    return eg.globals.bb_trigger_event_list[cmd][0]\n            else:\n                egprint('type not conf ' + str(tpye(cmd_var_state)))\n    return r\n\ndef checkopposite(cmd):\n    r = ''\n    #Return the opposite cmd/trigger if defined.\n    if cmd in eg.globals.bb_trigger_event_list:\n        #Ensures the cmd/trigger has an opposite cmd/trigger\n        if eg.globals.bb_trigger_event_list[cmd][0] &lt;&gt; '':\n            r = eg.globals.bb_trigger_event_list[cmd][0]\n    return r\n\n#def checkfanlights(cmd):\n\ndef main():\n    dt_start = datetime.datetime.now()\n    eg.globals.bb_ml_te = []\n    #Get the top triggerr events from the current time.\n    ds = eg.globals.bb_trigger_events\n    if (len(ds) &gt; 2):\n        t = str(datetime.datetime.now())\n        t = t[11:19]\n        t = (int(t[0:2]) * 60) + int(t[3:5])\n        drift = 60\n        cmd =[]\n        #We a list of at lease two option but not more than a 360 minute drift\n        while (len(cmd) &lt; 2) and (drift &lt; 360):\n            cmd = near(ds, drift, t)\n            #print str(drift) + ' ' + str(len(cmd))\n            drift = drift + 20\n        #Only work of we have more than one Suggestion\n        if len(cmd) &gt; 0:\n            print cmd\n            cmd2 = []\n            #Swap opposite cmd/trigger based on state and remove recently used cmds\n            for cc in cmd:\n                #print cc\n                #Swap opposite cmd/trigger based on state\n                #This will give us more meaningful cmds\n                cc_check = checkcmd(cc[0])\n                if cc_check &lt;&gt; '':\n                    cc = [cc_check, cc[1]]\n                #Only use non recently used cmds as suggestions\n                if checkeventincurrntlog('.' + cc[0],30) or checkeventincurrntlog('NoToSuggestion: ' + cc[0],15):\n                    egprint('Remove Suggestion as it was recent ' + str(cc))\n                else:\n                    cc_op = checkopposite(cc[0])\n                    egprint('cc_op: ' + cc_op)\n                    if cc_op &lt;&gt; '':\n                        if checkeventincurrntlog('.' + cc_op,15):\n                            egprint('Removing Suggestion as opposite(' + cc_op + ') was recent ' + str(cc))\n                        else:\n                            egprint('else1')\n                            if cc[0] not in str(cmd2):\n                                cmd2.append(cc)\n                            else:\n                                egprint('Not adding, dup: ' + str(cc))\n                    else:\n                        egprint('else2')\n                        if cc[0] not in str(cmd2):\n                                cmd2.append(cc)\n                        else:\n                            egprint('Not adding, dup: ' + str(cc))\n            cmd = cmd2\n        if len(cmd) &gt; 0:\n            egprint(cmd)\n            for tr in cmd:\n                if tr[0] in eg.globals.bb_trigger_event_list:\n                    eg.globals.bb_ml_te.append([tr[0], eg.globals.bb_trigger_event_list[tr[0]][1], eg.globals.bb_trigger_event_list[tr[0]][2]])\n                    #print eg.globals.bb_trigger_event_list[cmd[0][0]][1]\n                else:\n                    eg.globals.bb_ml_te.append([tr[0], tr[0].replace('_', ' '), tr[0].replace('_', ' ')])\n            print(eg.globals.bb_ml_te)\n            #print eg.globals.bb_ml_te\n    dt_end = datetime.datetime.now()\n    egprint(dt_end - dt_start)\n\nmain()")
            </Action>
        </Macro>
    </Folder>
    <Folder Name="Amazon Echo" XML_Guid="{E0DEF3A5-E660-4CAB-B897-2C3D22B5C425}" Expanded="True">
        <Folder Name="Remote BlockBox Cmd" XML_Guid="{C4BC04A4-938E-4D50-A1FB-8D9A7F38BEED}" Expanded="True">
            <Macro Name="AmazonEchoRcv: Blackbox Query" XML_Guid="{B963CF7D-EAD5-4EDC-9852-4455D65980A1}" Expanded="True">
                <Event Name="HTTP.testing" Enabled="False" XML_Guid="{4D79EA33-A64E-4539-BDCF-6A61E9878A47}" />
                <Event Name="HTTP.EchoToEG" XML_Guid="{59D810B6-B7E4-4A13-A556-A19B4883AA94}" />
                <Action XML_Guid="{90035321-3FFA-4CA9-AD0C-33A1C565303E}">
                    EventGhost.PythonCommand(u'eg.result = None')
                </Action>
                <Action Name="Python Script: Set Event to Cmd" XML_Guid="{A101984D-221A-41C6-AF0A-389BC7671230}">
                    EventGhost.PythonScript(u'from datetime import datetime\nimport random\n\nGOODBYE_RESPONSES = ["talk to you later", "peace", "I\'m out", "talk to you next time", "I live to serve", "good bye", "bye bye", "you have made America great again", "goodbye and goodluck"]\n\n#Time run test\n#tm_start = datetime.now()\neg.globals.bb_cmd = \'\'\neg.globals.bb_location = \'\'\neg.globals.bb_session = \'\'\neg.globals.bb_request = \'\'\ncmd = eg.event.payload[0]\nif len(eg.event.payload) &gt; 1:\n    masterbedroom_deviceID_home = \'somelongastoken\'\n    masterbedroom_deviceID_eventghost = \'somelongastoken\'\n    if (eg.event.payload[1] == masterbedroom_deviceID_home or eg.event.payload[1] == masterbedroom_deviceID_eventghost):\n        eg.globals.bb_location = \'master\' #Location (deviceID)\n    else:\n        eg.globals.bb_location = \'kitchen\'\n    eg.globals.bb_session = eg.event.payload[2] #SessionID\n    eg.globals.bb_request = eg.event.payload[3] #RequestID\n\n#Test Command\n#cmd = \'master lights on\'\ncmd = cmd.strip().lower()\ncmd = cmd.replace("t. v.","tv")\ncmd = cmd.replace(".","")\nprint \'BlackBox Command Received: \' + cmd \\\n+ \'\\nDevice Loaction: \' + eg.globals.bb_location \\\n+ \'\\nSessionID: \' + eg.globals.bb_session \\\n+ \'\\nRequestID: \' + eg.globals.bb_request\n\neg.globals.ibl1_msg = \'\'\neg.globals.ibl1_ttl = \'\'\n\nif cmd == \'\':\n    eg.result = False\n    print \'cmd is unknown: \' + cmd\n    eg.globals.ibl1_ttl = \'BlackBox - Command Empty\'\n    eg.globals.ibl1_msg = \'Command Empty\'\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nReturn Msg: I did not hear you, closing\'\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nEndSession: yes\'\nelif cmd.startswith(\'no\'):\n    if len(cmd) &lt; 10:\n        eg.result = False\n        print \'No on suggestion: \' + cmd\n        eg.globals.ibl1_ttl = \'BlackBox - Suggestion No\'\n        \n        pr_sug = eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][0]\n        eg.globals.bb_ml_te_position = eg.globals.bb_ml_te_position + 1\n        if len(eg.globals.bb_ml_te) &gt; eg.globals.bb_ml_te_position:\n            eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'Return Msg: OK, no problem, what about \' + eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][1] + \', or could I help you with something else\'\n        else:\n            eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'Return Msg: How can I help you\'\n            eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nEndSession: no\'\n            eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nNoToSuggestion: \' + pr_sug\n    else:\n        pr_sug = eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][0]\n        eg.globals.bb_ml_te_position = eg.globals.bb_ml_te_position + 1\n        if cmd[2:].strip().startswith(\'and\'):\n            eg.globals.bb_cmd = cmd[6:].strip()\n        else:\n            eg.globals.bb_cmd = cmd[2:].strip()\n            eg.result = True\n        \nelif cmd.startswith(\'yes\'):\n    if len(cmd) &lt; 10:\n        eg.result = False\n        print \'Yes on suggestion: \' + cmd\n        pr_sug = eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][0]\n        pr_sug_1 = eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][1]\n        eg.globals.ibl1_ttl = eg.globals.ibl1_ttl + \'BlackBox - \' + pr_sug\n        eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'Trigger: \' + pr_sug\n        eg.globals.bb_ml_te_position = eg.globals.bb_ml_te_position + 1\n        if len(eg.globals.bb_ml_te) &gt; eg.globals.bb_ml_te_position:\n            eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nReturn Msg: Running \' + pr_sug_1 + \', would you also like to \' + eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][2]\n        else:\n            eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nReturn Msg: Running \' + pr_sug_1 + \', can I help you with anything else\'\n        \n        eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nEndSession: no\'\n        eg.TriggerEvent(pr_sug)\n    else:\n        pr_sug = eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][0]\n        pr_sug_1 = eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][1]\n        if cmd[3:].strip().startswith(\'and\'):\n            eg.globals.bb_cmd = cmd[7:].strip()\n        else:\n            eg.globals.bb_cmd = cmd[3:].strip()\n        eg.result = True\n        eg.TriggerEvent(pr_sug)\n\nelif cmd == \'cancel\' or cmd == \'stop\' or cmd == \'quit\':\n    eg.result = False\n    print \'Command: \' + cmd\n    eg.globals.ibl1_ttl = \'BlackBox - Cancel\'\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + "Return Msg: " + random.choice(GOODBYE_RESPONSES)\n    eg.globals.ibl1_msg = eg.globals.ibl1_msg + \'\\nEndSession: yes\'\n\nelse:\n    eg.globals.bb_cmd = cmd\n    eg.result = True\n    \nprint bool(eg.result)\n\n#eg.event.payload.arcomm = \' \'\n#tm_end = datetime.now()\n#tm_diff = tm_end - tm_start\n#print tm_diff\n')
                </Action>
                <Action XML_Guid="{06CC3809-599C-49AB-9D0A-33069B46EF18}">
                    EventGhost.NewJumpIf(XmlIdLink(4), 0, True)
                </Action>
                <Action XML_Guid="{32E61557-2874-484E-972B-C48B74AA142B}">
                    Webserver.SetValue(u'bb_response', u'{eg.globals.ibl1_msg}', False, False)
                </Action>
                <Action Name="Place Holder to Send A message to my phone" XML_Guid="{BE5930E8-C0C1-452C-B8F0-6CE876FE9095}">
                    EventGhost.PythonScript(u"#Place hold, I use A jump here and send a message to my home with AutoRemote\n#Title\n#eg.globals.ibl1_ttl = ''\n#Message\n#eg.globals.ibl1_msg = ''")
                </Action>
            </Macro>
            <Macro Name="AmazonEchoRcv: Blackbox Welcome" XML_Guid="{E909C54B-AD24-4E8B-95A2-79642E50E42C}" Expanded="True">
                <Event Name="HTTP.EchoToEGWelcome" XML_Guid="{DF3EE1D0-7B3E-4A24-825B-70A471C61C54}" />
                <Action XML_Guid="{DD3B169C-49A4-493E-A8F3-67F33752059D}">
                    EventGhost.PythonCommand(u'eg.result = None')
                </Action>
                <Action XML_Guid="{618DAD9A-2B8B-4B6D-A8BE-D1FFDD95345E}">
                    EventGhost.NewJumpIf(XmlIdLink(44), 2, True)
                </Action>
                <Action Name="Python Script: Format Response" XML_Guid="{71E7B9B3-117C-4498-9C41-68B6A35E8D05}">
                    EventGhost.PythonScript(u'import random\n\nGREETING_RESPONSES = ["Hello, I\'m this home\'s automation AI", "Hi there, I\'m this home\'s AI", "Hi, do you need some help", "What is up my friend", "BB here"]\n\neg.globals.ibl1_msg = "Welcome Msg: " + random.choice(GREETING_RESPONSES) + ", what can I do for you"\n\nif len(eg.globals.bb_ml_te) &gt; 0:\n    eg.globals.bb_ml_te_position = 0\n    eg.globals.ibl1_msg = "Welcome Msg: " + random.choice(GREETING_RESPONSES) + ", would you like to " + eg.globals.bb_ml_te[eg.globals.bb_ml_te_position][2]')
                </Action>
                <Action XML_Guid="{82754EBA-BAF7-4101-95E1-959303D07BB1}">
                    Webserver.SetValue(u'bb_response', u'{eg.globals.ibl1_msg}', False, False)
                </Action>
            </Macro>
        </Folder>
    </Folder>
    <Folder Name="Webserver" XML_Guid="{10B3169A-AC71-4F97-ADF6-0E0EEFCC9154}" Expanded="True">
        <Macro Name="Send event to another EventGhost" XML_Guid="{2ADD8649-0C0B-4DC3-82B1-685389147EE4}">
            <Action XML_Guid="{734CF104-8314-40A5-8226-5AFA3C3A2398}">
                Webserver.SendEvent()
            </Action>
        </Macro>
        <Macro Name="Send event to another webserver" XML_Guid="{9E146CD3-5270-456F-8184-6A4771ABBFB7}">
            <Action XML_Guid="{A441A12A-580B-42B3-BCDC-9F6CE01B4F5C}">
                Webserver.SendEventExt()
            </Action>
        </Macro>
        <Macro Name="Jump according to the value of the variable" XML_Guid="{B55B27B3-DA79-4247-BF25-48B45C2A7A65}">
            <Action XML_Guid="{184FF550-807B-4236-93E7-2BD0042EA747}">
                Webserver.JumpIf()
            </Action>
        </Macro>
        <Folder Name="Variable actions" XML_Guid="{BC5AA8AC-443B-42F3-A749-21A201040BCD}">
            <Macro Name="Get temporary value" XML_Guid="{3549C87C-D4DA-4C61-963F-D7F720F3D5FD}">
                <Action XML_Guid="{AFBE6FAD-FD89-416B-A807-C4F05F7B0558}">
                    Webserver.GetValue()
                </Action>
            </Macro>
            <Macro Name="Delete temporary value" XML_Guid="{3694A03D-19C6-4225-BEC0-A28FD727B1A5}">
                <Action XML_Guid="{728B6AAD-3A21-465A-AC06-78A423249F7B}">
                    Webserver.DeleteValue()
                </Action>
            </Macro>
            <Macro Name="Get persistent value" XML_Guid="{06141675-2680-4BA3-942E-CE191513B9FA}">
                <Action XML_Guid="{9DC5786D-A8F5-4694-922B-C96ADAB1EA9C}">
                    Webserver.GetPersistentValue()
                </Action>
            </Macro>
            <Macro Name="Delete persistent value" XML_Guid="{3581998D-713C-4738-83EB-25A559EFD862}">
                <Action XML_Guid="{A32B9D06-7017-458B-A905-F79006F03987}">
                    Webserver.DeletePersistentValue()
                </Action>
            </Macro>
            <Macro Name="Set temporary value" XML_Guid="{A9877FE2-B661-4838-996B-6B0D8E880893}">
                <Action XML_Guid="{91206385-4504-4A79-831F-741E09980B2E}">
                    Webserver.SetValue()
                </Action>
            </Macro>
            <Macro Name="Set persistent value" XML_Guid="{9EF96A19-EC55-4B62-B8E3-653849B5C0F0}">
                <Action XML_Guid="{9703F55C-9E59-44DA-9EC9-3DFD08A25140}">
                    Webserver.SetPersistentValue()
                </Action>
            </Macro>
            <Macro Name="Set clients flags" XML_Guid="{D2B96D30-3AE8-42BD-972A-303A63BC45EB}">
                <Action XML_Guid="{672804BF-BCE3-4BAC-B54A-0580D7105FE4}">
                    Webserver.SetClientsFlags()
                </Action>
            </Macro>
        </Folder>
        <Folder Name="Websocket actions server-client" XML_Guid="{63B0EA18-FEEE-40F6-9262-6C3954F05514}">
            <Macro Name="Broadcast message" XML_Guid="{40CAEE1F-3253-4B2A-BA56-4CC0EA7F59EA}">
                <Action XML_Guid="{49E4B61B-4FBD-43CF-828F-AD1D558A0C6C}">
                    Webserver.BroadcastMessage()
                </Action>
            </Macro>
            <Macro Name="Broadcast values" XML_Guid="{50FAD487-4DA7-42F4-B691-CE21A64F8149}">
                <Action XML_Guid="{27F56EAD-F3F9-4609-A9E5-CCA5FA7FB90F}">
                    Webserver.BroadcastValue()
                </Action>
            </Macro>
            <Macro Name="Broadcast all values" XML_Guid="{072581B9-605C-4702-9A4E-D1B0F233296B}">
                <Action XML_Guid="{27D7E252-9A8A-4AC5-BB03-1E7B2176415B}">
                    Webserver.BroadcastAllValues()
                </Action>
            </Macro>
            <Macro Name="Broadcast data" XML_Guid="{9F4A6D3D-860A-4C2C-98DE-5CED3DB6C378}">
                <Action XML_Guid="{2C2A4299-30A6-4345-9EDC-04C7C2B3D523}">
                    Webserver.WsBroadcastData()
                </Action>
            </Macro>
            <Macro Name="Broadcast command" XML_Guid="{774D0281-C8D0-41A7-8EA1-AC0C8B227CD5}">
                <Action XML_Guid="{C3926339-787C-4A7C-9285-097E87869395}">
                    Webserver.WsBroadcastCmd()
                </Action>
            </Macro>
            <Macro Name="Broadcast universal packet" XML_Guid="{55EAA08F-796D-42AE-BE3C-664171D9DEF2}">
                <Action XML_Guid="{DB4556C2-02DE-4870-AEF7-74EF2C40E62F}">
                    Webserver.WsBroadcastUniversal()
                </Action>
            </Macro>
            <Macro Name="Send message" XML_Guid="{6B8F6C82-5484-4415-8514-E8784331FD18}">
                <Action XML_Guid="{73A67019-9AB2-4503-9FC7-F66EC9A112F5}">
                    Webserver.SendMessage()
                </Action>
            </Macro>
            <Macro Name="Send values" XML_Guid="{88C8230F-9E09-40E0-9447-CDCCA8F636FC}">
                <Action XML_Guid="{25BD7D6A-54F8-4C39-980E-D64AC7CFCA8E}">
                    Webserver.SendValue()
                </Action>
            </Macro>
            <Macro Name="Send all values" XML_Guid="{4BDEA75F-39A6-4E9B-9EF9-1D8C02CE8A59}">
                <Action XML_Guid="{53E6F75B-323A-4E6A-8CF8-9709C581FB04}">
                    Webserver.SendAllValues()
                </Action>
            </Macro>
            <Macro Name="Send data" XML_Guid="{F276FC71-AC92-420A-B6CB-4378B5F73956}">
                <Action XML_Guid="{75C8FBD0-9463-4851-BBC7-C24E983D46EE}">
                    Webserver.WsSendData()
                </Action>
            </Macro>
            <Macro Name="Send command" XML_Guid="{7A465DCF-BB36-4F34-B303-25AFC8F52044}">
                <Action XML_Guid="{CD74D155-C738-497A-958C-D17F1871F3E6}">
                    Webserver.WsSendCmd()
                </Action>
            </Macro>
            <Macro Name="Send universal packet" XML_Guid="{8F4FEF62-D371-4737-8613-0CD3C4E4117F}">
                <Action XML_Guid="{D4B8CBD6-3EE0-4E4A-8C91-4C41B6900778}">
                    Webserver.WsSendUniversal()
                </Action>
            </Macro>
            <Macro Name="Stop all periodic tasks" XML_Guid="{180E5CB8-9978-4ACF-BD58-161B0935B5B3}">
                <Action XML_Guid="{E22D7D93-B2D2-4A3D-AFD5-D7CF0CA300D6}">
                    Webserver.WsStopAllPeriodicTasks()
                </Action>
            </Macro>
            <Macro Name="Stop periodic tasks with the given name" XML_Guid="{EBFB04D0-AF3E-40E4-BD3D-A1AE10C51569}">
                <Action XML_Guid="{818A3F19-A11E-416A-BE98-FB811E066FD3}">
                    Webserver.WsStopAllNamedPeriodicTasks()
                </Action>
            </Macro>
            <Macro Name="Stop all periodic tasks (broadcast type)" XML_Guid="{261FDE0C-CF5F-4D92-AB52-55361BE26571}">
                <Action XML_Guid="{438968F6-9245-4530-8E6E-7E09D6C57324}">
                    Webserver.WsStopBroadcastPeriodicTasks()
                </Action>
            </Macro>
            <Macro Name="Stop all periodic tasks (broadcast type) with the given name" XML_Guid="{F1DD2443-A272-4D13-A0BF-86193CC339CE}">
                <Action XML_Guid="{2BB34E76-58D2-45DA-9F46-0128DA4ECAE4}">
                    Webserver.WsStopNamedBroadcastPeriodicTasks()
                </Action>
            </Macro>
            <Macro Name="Stop periodic tasks (one client)" XML_Guid="{6285AA26-5C46-4289-97F5-3AF29B3C5884}">
                <Action XML_Guid="{0E209994-ECB9-4215-AD4A-769E043681EC}">
                    Webserver.WsStopClientPeriodicTasks()
                </Action>
            </Macro>
            <Folder Name="Periodically repeated actions" XML_Guid="{3C4A37AC-9B85-4298-8543-D28626104FF9}">
                <Macro Name="Periodically broadcast message" XML_Guid="{C660A94E-D80E-4FF9-B157-09237D29C23F}">
                    <Action XML_Guid="{1879631E-743E-4A0E-A246-65F382647282}">
                        Webserver.WsPeriodicallyBroadcastMessage()
                    </Action>
                </Macro>
                <Macro Name="Periodically broadcast values" XML_Guid="{D4C99A1D-BD09-4A2C-AB8D-B76B76C2A7C3}">
                    <Action XML_Guid="{65230619-CF7B-4872-A667-6E691D21E441}">
                        Webserver.WsPeriodicallyBroadcastValue()
                    </Action>
                </Macro>
                <Macro Name="Periodically broadcast all values" XML_Guid="{7D2230F7-8DB8-4258-BC3B-3AFAB4B334D1}">
                    <Action XML_Guid="{B4195C43-6034-45DB-AA3D-FAEF516BFF13}">
                        Webserver.WsPeriodicallyBroadcastAllValues()
                    </Action>
                </Macro>
                <Macro Name="Periodically broadcast data" XML_Guid="{2843633A-55AE-4E64-818D-40975E58459F}">
                    <Action XML_Guid="{F53350FE-20E4-4325-9C6E-93B64951A38F}">
                        Webserver.WsPeriodicallyBroadcastData()
                    </Action>
                </Macro>
                <Macro Name="Periodically broadcast command" XML_Guid="{6223CED5-C3E5-4C0B-AAF4-5D293282B2F3}">
                    <Action XML_Guid="{77A7EEA3-4BA1-4AEE-8151-E60BC0D7D15A}">
                        Webserver.WsPeriodicallyBroadcastCmd()
                    </Action>
                </Macro>
                <Macro Name="Periodically broadcast universal packet" XML_Guid="{8A0D33AF-720A-4AC5-8B36-FE1D0A9C8333}">
                    <Action XML_Guid="{2FC14C91-3128-41ED-AE8B-8EB813AE0EF6}">
                        Webserver.WsPeriodicallyBroadcastUniversal()
                    </Action>
                </Macro>
                <Macro Name="Periodically send message" XML_Guid="{EFFDA4F4-F66C-4776-A615-F81C2CB7E5FD}">
                    <Action XML_Guid="{3EAA32FB-E4F4-4233-B185-E4E5DFFDF5D3}">
                        Webserver.WsPeriodicallySendMessage()
                    </Action>
                </Macro>
                <Macro Name="Periodically send values" XML_Guid="{8843684E-9268-473E-8DD3-143FE1A9D65A}">
                    <Action XML_Guid="{579682E8-D5C8-4B1B-BEE1-FF8B37A010C8}">
                        Webserver.WsPeriodicallySendValue()
                    </Action>
                </Macro>
                <Macro Name="Periodically sends all values" XML_Guid="{F0C9074C-01B3-43FF-B1C1-6568472E9098}">
                    <Action XML_Guid="{1C860D7B-1907-4A75-B0D3-CB4CCA56715B}">
                        Webserver.WsPeriodicallySendAllValues()
                    </Action>
                </Macro>
                <Macro Name="Periodically send data" XML_Guid="{FE831DA3-E177-49CF-99A7-369128751FD7}">
                    <Action XML_Guid="{6CE45A17-50B6-472F-91F8-2AC1B44780B3}">
                        Webserver.WsPeriodicallySendData()
                    </Action>
                </Macro>
                <Macro Name="Periodically send command" XML_Guid="{1F0B7836-78FD-4974-84B6-F20EC0F47C5C}">
                    <Action XML_Guid="{EDC8BFA0-83FF-44FD-9D10-F3C2E2BF019F}">
                        Webserver.WsPeriodicallySendCmd()
                    </Action>
                </Macro>
                <Macro Name="Periodically send universal packet" XML_Guid="{F57E9859-3B40-496B-9EB7-D9DBF03021F1}">
                    <Action XML_Guid="{FE253523-28B3-4C39-8E2C-B0D701603026}">
                        Webserver.WsPeriodicallySendUniversal()
                    </Action>
                </Macro>
            </Folder>
        </Folder>
        <Folder Name="Websocket actions client-server" XML_Guid="{B3141D19-9078-4D39-AA10-6EA372020898}">
            <Macro Name="Start client" XML_Guid="{B388C5BB-DAA4-4D5B-B9FC-F996C0C2FC31}">
                <Action XML_Guid="{446FA123-DE60-4498-AB78-A551F4913AC4}">
                    Webserver.StartClient()
                </Action>
            </Macro>
            <Macro Name="Stop client" XML_Guid="{6E244F66-2101-4457-9413-29FF331BFB96}">
                <Action XML_Guid="{48BF3938-17ED-4F0D-B7BC-072D1BCBF63D}">
                    Webserver.StopClient()
                </Action>
            </Macro>
            <Macro Name="Stop all clients" XML_Guid="{74311D53-36B5-46A4-8F69-01E3AC499D68}">
                <Action XML_Guid="{44AA22E6-5B3A-487A-9C0E-EC0094F5ED84}">
                    Webserver.StopAllClients()
                </Action>
            </Macro>
            <Macro Name="Send message to server" XML_Guid="{68E60C71-B567-472D-B914-B968FD674A77}">
                <Action XML_Guid="{4CB37424-38B7-4F55-A7A3-153A34F0851D}">
                    Webserver.ClSendMessage()
                </Action>
            </Macro>
            <Macro Name="Send values to server" XML_Guid="{7C541482-6102-4B16-8479-9DCAB95CFFC3}">
                <Action XML_Guid="{72FAE399-763C-4A08-AD21-AD51216624B3}">
                    Webserver.ClSendValue()
                </Action>
            </Macro>
            <Macro Name="Send all values to server" XML_Guid="{2B8C0610-ED53-4D62-886F-6E81A832D15A}">
                <Action XML_Guid="{7B5E7784-166B-49DF-A4B4-629EE4468760}">
                    Webserver.ClSendAllValues()
                </Action>
            </Macro>
            <Macro Name="Send data to server" XML_Guid="{05A9CDFA-F81D-4267-9F35-4F1E967B225D}">
                <Action XML_Guid="{CC437714-771B-4218-B7D5-55719DA994FE}">
                    Webserver.ClSendData()
                </Action>
            </Macro>
            <Macro Name="Send command to server" XML_Guid="{ABDE59EE-6A8C-49E6-96F5-4CC3AE495D17}">
                <Action XML_Guid="{82F1AA26-6FCB-4752-89B0-1F39EB9DA3FA}">
                    Webserver.ClSendCmd()
                </Action>
            </Macro>
            <Macro Name="Send universal packet to server" XML_Guid="{921BED2C-F397-4857-81FB-D8115F31E264}">
                <Action XML_Guid="{D5FE4C8C-DA4E-45F5-ABFA-4AB1AC349EFD}">
                    Webserver.ClSendUniversal()
                </Action>
            </Macro>
        </Folder>
    </Folder>
</EventGhost>
