Package misty2py
Misty2py is a Python package for Misty II development using Misty's REST API.
Features
Misty2py can be used to:
- perform actions via sending a
POST
orDELETE
requests to Misty's REST API; - obtain information via sending a
GET
request to Misty's REST API; - receive streams of data via subscribing to event types on Misty's Websockets API.
Misty2py uses following concepts:
- action keywords - keywords for endpoints of Misty's REST API that correspond to performing actions;
- information keywords - keywords for endpoints of Misty's REST API that correspond to retrieving information;
- data shortcuts - keywords for commonly used data that is supplied to Misty's API as the body of a
POST
request.
Installation
Poetry
To install misty2py, run pip install misty2py
.
From source
-
If this is your first time using
misty2py
from source, do following: -
Get Poetry (
python -m pip install poetry
) if you do not have it yet. - Copy
.env.example
to.env
. - Replace the placeholder values in the new
.env
file. -
Run
poetry install
to obtain all dependencies. -
Run the desired script via
poetry run python -m [name]
where[name]
is the placeholder for the module location (in Python notation). - If the scripts run but your Misty does not seem to respond, you have most likely provided an incorrect IP address for
MISTY_IP_ADDRESS
in.env
. - Pytests can be run via
poetry run pytest .
. - The coverage report can be obtained via
poetry run pytest --cov-report html --cov=misty2py tests
for HTML output or viapoetry run pytest --cov=misty2py tests
for terminal output.
Contribute
This project is not currently open for contributions. However, you can report issues via the Issues Tracker and inspect the Source Code.
License
This project is licensed under the MIT License.
Usage
Getting started
The main object of this package is Misty
, which is an abstract representation of Misty the robot. To initialise this object, it is required to know the IP address of the Misty robot that should be used.
The most direct way to initialise a Misty
object is to use the IP address directly, which allows the user to get the object in one step via:
from misty2py.robot import Misty
my_misty = Misty("192.168.0.1") #example IP address
This may be impractical and potentially even unsafe, so it is recommended to create a .env file in the project's directory, specify the IP address there via MISTY_IP_ADDRESS="[ip_address_here]"
and use Misty2py's EnvLoader
to load the IP address via:
from misty2py.robot import Misty
from misty2py.utils.env_loader import EnvLoader
env_loader = EnvLoader()
my_misty = Misty(env_loader.get_ip())
Assuming a Misty
object called my_misty
was obtained, all required actions can be performed via the following three methods:
# Performing an action (a POST or DELETE request):
my_misty.perform_action("<action_keyword>")
# Obtaining information (a GET request):
my_misty.get_info("<information_keyword>")
# Event related methods
# (subscribing to an event, getting event data
# or event log and unsubscribing from an event):
my_misty.event("<parameter>")
Responses
Any action performed via Misty2py which contains communication with Misty's APIs returns the Misty2pyResponse
object. Misty2pyResponse
is a uniform representation of two sub-responses that are present in any HTTP or WebSocket communication with Misty's APIs using Misty2py. The first sub-response is always from Misty2py and is represented by the attributes Misty2pyResponse.misty2py_status
(True
if no Misty2py-related errors were encountered) and potentially empty Misty2pyResponse.error_msg
and Misty2pyResponse.error_type
that contain error information if a Misty2py-related error was encountered. The other sub-response is either from Misty's REST API or Misty's WebSocket API. In the first case, it is represented by the attribute Misty2pyResponse.rest_response
(Dict), and in the second case, it is represented by the attribute Misty2pyResponse.ws_response
. One of these is always empty, because no action in Misty2py includes simultaneous communication with both APIs. For convenience, a Misty2pyResponse
object can be easily parsed to a dictionary via the method Misty2pyResponse.parse_to_dict
.
Obtaining information
Obtaining digital information is handled by misty2py.robot::get_info
method which has two arguments. The argument info_name
is required and it specifies the string information keyword corresponding to an endpoint in Misty's REST API. The argument params
is optional and it supplies a dictionary of parameter name and parameter value pairs. This argument defaults to {}
(an empty dictionary).
Performing actions
Performing physical and digital actions including removal of non-system files is handled by misty2py.robot::perform_action()
method which takes two arguments. The argument action_name
is required and it specifies the string action keyword corresponding to an endpoint in Misty’s REST API. The second argument, data
, is optional and it specifies the data to pass to the request as a dictionary or a data shortcut (string). The data
argument defaults to {}
(an empty dictionary).
Event types
Misty's WebSocket API follows PUB-SUB architecture, which means that in order to obtain event data in Misty's framework, it is required to subscribe to an event type on Misty's WebSocket API. The WebSocket server then streams data to the WebSocket client, which receives it a separate thread. To access the data, misty2py.robot::event
method must be called with "get_data"
parameter from the main thread. When the data are no longer required to be streamed to the client, an event type can be unsubscribed which both kills the event thread and stops the API from sending more data.
Subscribing to an event is done via misty2py.robot::event
with the parameter "subscribe"
and following keyword arguments:
type
- required; event type string as documented in Event Types Docs.name
- optional; a custom event name string; must be unique.return_property
- optional; the property to return from Misty's websockets; all properties are returned if return_property is not supplied.debounce
- optional; the interval in ms at which new information is sent; defaults to250
.len_data_entries
- optional; the maximum number of data entries to keep (discards in fifo style); defaults to10
.event_emitter
- optional; an event emitter function which emits an event upon message recieval. Supplies the message content as an argument.
Accessing the data of an event or its log is done via misty2py.robot::event
with the parameter "get_data"
or "get_log"
and a keyword argument name
(the name of the event).
Unsubscribing from an event is done via misty2py.robot::event
with the parameter "unsubscribe"
and a keyword argument name
(the name of the event).
A bare-bones implementation of event subscription can be seen below.
import time
from misty2py.robot import Misty
from misty2py.utils.env_loader import EnvLoader
env_loader = EnvLoader
m = Misty(env_loader.get_ip())
d = m.event("subscribe", type = "BatteryCharge")
e_name = d.get("event_name")
time.sleep(1)
d = m.event("get_data", name = e_name)
d = m.event("unsubscribe", name = e_name)
The following example shows a more realistic scenario which includes an event emitter and an event listener.
import time
from pymitter import EventEmitter
from misty2py.robot import Misty
from misty2py.utils.env_loader import EnvLoader
env_loader = EnvLoader
m = Misty(env_loader.get_ip())
ee = EventEmitter()
event_name = "myevent_001"
@ee.on(event_name)
def listener(data):
print(data)
d = m.event("subscribe", type = "BatteryCharge",
name = event_name, event_emitter = ee)
time.sleep(2)
d = m.event("unsubscribe", name = event_name)
Adding custom keywords and shortcuts
Custom keywords and shortcuts can be passed to a Misty object while declaring a new instance by using the optional arguments custom_info
, custom_actions
and custom_data
.
The argument custom_info
can be used to pass custom information keywords as a dictionary with keys being the information keywords and values being the endpoints. An information keyword can only be used for a GET
method supporting endpoint.
The argument custom_actions
can be used to pass custom action keywords as a dictionary with keys being the action keywords and values being a dictionary of an "endpoint"
key (str) and a "method"
key (str). The "method"
values must be one of post
, delete
, put
, head
, options
and patch
. However, it should be noted that Misty's REST API currently only has GET
, POST
and DELETE
methods. The rest of the methods was implement in Misty2py for forwards-compatibility.
The argument custom_data
can be used to pass custom data shortcuts as a dictionary with keys being the data shortcuts and values being the dictionary of data values.
For futher illustration, an example of passing custom keywords and shortcuts can be seen below.
custom_allowed_infos = {
"hazards_settings": "api/hazards/settings"
}
custom_allowed_data = {
"amazement": {
"FileName": "s_Amazement.wav"
},
"red": {
"red": "255",
"green": "0",
"blue": "0"
}
}
custom_allowed_actions = {
"audio_play" : {
"endpoint" : "api/audio/play",
"method" : "post"
},
"delete_audio" : {
"endpoint" : "api/audio",
"method" : "delete"
}
}
misty_robot = Misty("0.0.0.0",
custom_info=custom_allowed_infos,
custom_actions=custom_allowed_actions,
custom_data=custom_allowed_data)
Default Keywords and Shortcuts
List of supported action keywords
led
for post request toapi/led
endpointled_trans
for post request toapi/led/transition
endpointnotification_settings
for post request toapi/notification/settings
endpointaudio_upload
for post requestapi/audio
to endpointaudio_play
for post request toapi/audio/play
endpointaudio_pause
for post request toapi/audio/pause
endpointaudio_stop
for post request toapi/audio/stop
endpointaudio_delete
for delete request toapi/audio
endpointaudio_record_start
for post request toapi/audio/record/start
endpointaudio_record_stop
for post request toapi/audio/record/stop
endpointaudio_disable
for post request toapi/services/audio/disable
endpointaudio_enable
for post request toapi/services/audio/enable
endpointimage_upload
for post request toapi/images
endpointimage_show
for post request toapi/images/display
endpointimage_settings
for post request toapi/images/settings
endpointimage_delete
for delete request toapi/images
endpointtext_show
for post request toapi/text/display
endpointtext_settings
for post request toapi/text/settings
endpointvideo_upload
for post request toapi/videos
endpointvideo_show
for post request toapi/videos/display
endpointvideo_settings
for post request toapi/videos/settings
endpointvideo_delete
for delete request toapi/videos
endpointblink_mapping_delete
for delete request toapi/blink/images
endpointslam_enable
for post request toapi/services/slam/enable
endpointslam_disable
for post request toapi/services/slam/disable
endpointslam_sensors_reset
for post request toapi/slam/reset
endpointslam_mapping_start
for post request toapi/slam/map/start
endpointslam_mapping_stop
for post request toapi/slam/map/stop
endpointslam_map_current
for post request toapi/slam/map/current
endpointslam_map_rename
for post request toapi/slam/map/rename
endpointslam_infrared_settings
for post request toapi/slam/settings/ir
endpointslam_visible_settings
for post request toapi/slam/settings/visible
endpointslam_map_delete
for delete request toapi/slam/map
endpointslam_docking_locate_start
for post request toapi/slam/docking/start
endpointslam_docking_locate_stop
for post request toapi/slam/docking/stop
endpointstreaming_slam_start
for post request toapi/slam/streaming/start
endpointstreaming_slam_stop
for post request toapi/slam/streaming/stop
endpointslam_track_start
for post request toapi/slam/track/start
endpointslam_track_stop
for post request toapi/slam/track/stop
endpointrecording_start
for post request toapi/videos/recordings/start
endpointrecording_stop
for post request toapi/videos/recordings/stop
endpointrecording_rename
for post request toapi/videos/recordings/rename
endpointrecording_delete
for delete request toapi/videos/recordings
endpointface_detection_start
for post request toapi/faces/detection/start
endpointface_detection_stop
for post request toapi/faces/detection/stop
endpointface_recognition_start
for post request toapi/faces/recognition/start
endpointface_recognition_stop
for post request toapi/faces/recognition/stop
endpointface_train_start
for post request toapi/faces/training/start
endpointface_train_cancel
for post request toapi/faces/training/cancel
endpointface_delete
for delete request toapi/faces
endpointskill_upload
for post request toapi/skills
endpointskill_start
for post request toapi/skills/start
endpointskills_reload
for post request toapi/skills/reload
endpointskill_load
for post request toapi/skills/load
endpointskill_cancel
for post request toapi/skills/cancel
endpointskill_delete
for delete request toapi/skills
endpointwifi_add
for post request toapi/networks/create
endpointwifi_connect
for post request toapi/networks
endpointwifi_delete
for delete request toapi/networks
endpointwifi_hotspot_start
for post request toapi/networks/hotspot/start
endpointwifi_hotspot_stop
for post request toapi/networks/hotspot/stop
endpointwrite_serial
for post request toapi/serial
endpointevent_listener
for post request toapi/skills/event
endpointwebsite_show
for post request toapi/webviews/display
endpointwebsite_settings
for post request toapi/webviews/settings
endpointblink_on
for post request toapi/blink
endpointblink_settings
for post request toapi/blink/settings
endpointdisplay_settings
for post request toapi/display/settings
endpointflashlight_on
for post request toapi/flashlight
endpointspeak
for post request toapi/tts/speak
endpointspeak_stop
for post request toapi/tts/stop
endpointspeech_capture
for post request toapi/audio/speech/capture
endpointdrive
for post request toapi/drive
endpointdrive_arc
for post request toapi/drive/arc
endpointdrive_heading
for post request toapi/drive/hdt
endpointdrive_time
for post request toapi/drive/time
endpointdrive_track
for post request toapi/drive/track
endpointdrive_stop
for post request toapi/drive/stop
endpointdrive_to_loc
for post request toapi/drive/coordinates
endpointdrive_on_path
for post request toapi/drive/path
endpointhalt
for post request toapi/halt
endpointarm_move
for post request toapi/arms
endpointarms_move
for post request toapi/arms/set
endpointhead_move
for post request toapi/head
endpointhazard_settings
for post request toapi/hazard/updatebasesettings
endpointstreaming_av_start
for post request toapi/avstreaming/start
endpointstreaming_av_stop
for post request toapi/avstreaming/stop
endpointstreaming_av_disable
for post request toapi/services/avstreaming/disable
endpointstreaming_av_enable
for post request toapi/services/avstreaming/enable
endpointkeyphrase_recognition_start
for post request toapi/audio/keyphrase/start
endpointkeyphrase_recognition_stop
for post request toapi/audio/keyphrase/stop
endpointupdate_allow
for post request toapi/system/update/allow
endpointupdate_perform
for post request toapi/system/update
endpointupdate_perform_targeted
for post request toapi/system/update/component
endpointupdate_prevent
for post request toapi/system/update/prevent
endpointerror_text_clear
for post request toapi/text/error/clear
endpointcamera_disable
for post request toapi/services/camera/disable
endpointcamera_enable
for post request toapi/services/camera/enable
endpointrestart
for post request toapi/reboot
endpointvolume_settings
for post request toapi/audio/volume
endpointlogs_settings
for post request toapi/logs/level
endpointwebsocket_settings
for post request toapi/websocket/version
endpointexternal_request
for post request toapi/request
endpoint
List of supported information keywords
audio_file
for get request toapi/audio
endpointaudio_list
for get request toapi/audio/list
endpointaudio_status
for get request toapi/services/audio
endpointimage_file
for get request toapi/images
endpointimage_list
for get request toapi/images/list
endpointvideo_file
for get request toapi/videos
endpointvideo_list
for get request toapi/videos/list
endpointav_status
for get request toapi/services/avstreaming
endpointsensor_values
for get request toapi/serial
endpointmap_file
for get request toapi/slam/map
endpointcurrent_map_id
for get request toapi/slam/map/current
endpointmap_id_list
for get request toapi/slam/map/ids
endpointslam_diagnostics
for get request toapi/slam/diagnostics
endpointslam_path
for get request toapi/slam/path
endpointslam_status
for get request toapi/slam/status
endpointslam_enabled
for get request toapi/services/slam
endpointpicture_depth
for get request toapi/cameras/depth
endpointpicture_fisheye
for get request toapi/cameras/fisheye
endpointpicture_rgb
for get request toapi/cameras/rgb
endpointfaces_known
for get request toapi/faces
endpointrecording_file
for get request toapi/videos/recordings
endpointrecording_list
for get request toapi/videos/recordings/list
endpointskills_running
for get request toapi/skills/running
endpointskills_known
for get request toapi/skills
endpointwifis_available
for get request toapi/networks/scan
endpointwifis_saved
for get request toapi/networks
endpointbattery_status
for get request toapi/battery
endpointcamera_status
for get request toapi/services/camera
endpointblink_settings
for get request toapi/blink/settings
endpointhazards_settings
for get request toapi/hazards/settings
endpointcamera_settings
for get request toapi/camera
endpointslam_visible_settings
for get request toapi/slam/settings/visible
endpointslam_infrared_settings
for get request toapi/slam/settings/ir
endpointupdate_settings
for get request toapi/system/update/settings
endpointdevice
for get request toapi/device
endpointhelp
for get request toapi/help
endpointlog
for get request toapi/logs
endpointlog_level
for get request toapi/logs/level
endpointupdate_available
for get request toapi/system/updates
endpointwebsockets
for get request toapi/websockets
endpointwebsocket_version
for get request toapi/websocket/version
List of supported data shortcuts
led_off
for{"red": "0", "green": "0", "blue": "0"}
white_light
for{"red": "255", "green": "255", "blue": "255"}
red_light
for{"red": "255", "green": "0", "blue": "0"}
green_light
for{"red": "0", "green": "255", "blue": "0"}
blue_light
for{"red": "0", "green": "0", "blue": "255"}
yellow_light
for{"red": "255", "green": "255", "blue": "0"}
cyan_light
for{"red": "0", "green": "255", "blue": "255"}
magenta_light
for{"red": "255", "green": "0", "blue": "255"}
orange_light
for{"red": "255", "green": "125", "blue": "0"}
lime_light
for{"red": "125", "green": "255", "blue": "0"}
aqua_light
for{"red": "0", "green": "255", "blue": "125"}
azure_light
for{"red": "0", "green": "125", "blue": "255"}
violet_light
for{"red": "125", "green": "0", "blue": "255"}
pink_light
for{"red": "255", "green": "0", "blue": "125"}
low_volume
for{"Volume": "5"}
image_admiration
for{"FileName": "e_Admiration.jpg"}
image_aggressiveness
for{"FileName": "e_Aggressiveness.jpg"}
image_amazement
for{"FileName": "e_Amazement.jpg"}
image_anger
for{"FileName": "e_Anger.jpg"}
image_concerned
for{"FileName": "e_ApprehensionConcerned.jpg"}
image_contempt
for{"FileName": "e_Contempt.jpg"}
image_content_left
for{"FileName": "e_ContentLeft.jpg"}
image_content_right
for{"FileName": "e_ContentRight.jpg"}
image_content_default
for{"FileName": "e_DefaultContent.jpg"}
image_disgust
for{"FileName": "e_Disgust.jpg"}
image_disoriented
for{"FileName": "e_Disoriented.jpg"}
image_hilarious
for{"FileName": "e_EcstacyHilarious.jpg"}
image_starry_eyed
for{"FileName": "e_EcstacyStarryEyed.jpg"}
image_fear
for{"FileName": "e_Fear.jpg"}
image_grief
for{"FileName": "e_Grief.jpg"}
image_joy_1
for{"FileName": "e_Joy.jpg"}
image_joy_2
for{"FileName": "e_Joy2.jpg"}
image_goofy_1
for{"FileName": "e_JoyGoofy.jpg"}
image_goofy_2
for{"FileName": "e_JoyGoofy2.jpg"}
image_goofy_3
for{"FileName": "e_JoyGoofy3.jpg"}
image_love
for{"FileName": "e_Love.jpg"}
image_rage_1
for{"FileName": "e_Rage.jpg"}
image_rage_2
for{"FileName": "e_Rage2.jpg"}
image_rage_3
for{"FileName": "e_Rage3.jpg"}
image_rage_4
for{"FileName": "e_Rage4.jpg"}
image_remorse
for{"FileName": "e_RemorseShame.jpg"}
image_sadness
for{"FileName": "e_Sadness.jpg"}
image_sleping_1
for{"FileName": "e_Sleeping.jpg"}
image_sleeping_2
for{"FileName": "e_SleepingZZZ.jpg"}
image_sleepy_1
for{"FileName": "e_Sleepy.jpg"}
image_sleepy_2
for{"FileName": "e_Sleepy2.jpg"}
image_sleepy_3
for{"FileName": "e_Sleepy3.jpg"}
image_sleepy_4
for{"FileName": "e_Sleepy4.jpg"}
image_surprise
for{"FileName": "e_Surprise.jpg"}
image_system_black_screen
for{"FileName": "e_SystemBlackScreen.jpg"}
image_system_blink_large
for{"FileName": "e_SystemBlinkLarge.jpg"}
image_system_blink_standard
for{"FileName": "e_SystemBlinkStandard.jpg"}
image_system_camera
for{"FileName": "e_SystemCamera.jpg"}
image_system_flash
for{"FileName": "e_SystemFlash.jpg"}
image_system_gear_prompt
for{"FileName": "e_SystemGearPrompt.jpg"}
image_system_logo_prompt
for{"FileName": "e_SystemLogoPrompt.jpg"}
image_terror_1
for{"FileName": "e_Terror.jpg"}
image_terror_2
for{"FileName": "e_Terror2.jpg"}
image_terror_left
for{"FileName": "e_TerrorLeft.jpg"}
image_terror_right
for{"FileName": "e_TerrorRight.jpg"}
sound_acceptance
for{"FileName": "s_Acceptance.wav"}
sound_amazement_1
for{"FileName": "s_Amazement.wav"}
sound_amazement_2
for{"FileName": "s_Amazement2.wav"}
sound_anger_1
for{"FileName": "s_Anger.wav"}
sound_anger_2
for{"FileName": "s_Anger2.wav"}
sound_anger_3
for{"FileName": "s_Anger3.wav"}
sound_anger_4
for{"FileName": "s_Anger4.wav"}
sound_annoyance_1
for{"FileName": "s_Annoyance.wav"}
sound_annoyance_2
for{"FileName": "s_Annoyance2.wav"}
sound_annoyance_3
for{"FileName": "s_Annoyance3.wav"}
sound_annoyance_4
for{"FileName": "s_Annoyance4.wav"}
sound_awe_1
for{"FileName": "s_Awe.wav"}
sound_awe_2
for{"FileName": "s_Awe2.wav"}
sound_awe_3
for{"FileName": "s_Awe3.wav"}
sound_boredom
for{"FileName": "s_Boredom.wav"}
sound_disapproval
for{"FileName": "s_Disapproval.wav"}
sound_disgust_1
for{"FileName": "s_Disgust.wav"}
sound_disgust_2
for{"FileName": "s_Disgust2.wav"}
sound_disgust_3
for{"FileName": "s_Disgust3.wav"}
sound_disoriented_1
for{"FileName": "s_DisorientedConfused.wav"}
sound_disoriented_2
for{"FileName": "s_DisorientedConfused2.wav"}
sound_disoriented_3
for{"FileName": "s_DisorientedConfused3.wav"}
sound_disoriented_4
for{"FileName": "s_DisorientedConfused4.wav"}
sound_disoriented_5
for{"FileName": "s_DisorientedConfused5.wav"}
sound_disoriented_6
for{"FileName": "s_DisorientedConfused6.wav"}
sound_distraction
for{"FileName": "s_Distraction.wav"}
sound_ecstacy_1
for{"FileName": "s_Ecstacy.wav"}
sound_ecstacy_2
for{"FileName": "s_Ecstacy2.wav"}
sound_fear
for{"FileName": "s_Fear.wav"}
sound_grief_1
for{"FileName": "s_Grief.wav"}
sound_grief_2
for{"FileName": "s_Grief2.wav"}
sound_grief_3
for{"FileName": "s_Grief3.wav"}
sound_grief_4
for{"FileName": "s_Grief4.wav"}
sound_joy_1
for{"FileName": "s_Joy.wav"}
sound_joy_2
for{"FileName": "s_Joy2.wav"}
sound_joy_3
for{"FileName": "s_Joy3.wav"}
sound_joy_4
for{"FileName": "s_Joy4.wav"}
sound_loathing
for{"FileName": "s_Loathing.wav"}
sound_love
for{"FileName": "s_Love.wav"}
sound_phrase_bye_bye
for{"FileName": "s_PhraseByeBye.wav"}
sound_phrase_evil
for{"FileName": "s_PhraseEvilAhHa.wav"}
sound_phrase_hello
for{"FileName": "s_PhraseHello.wav"}
sound_phrase_no
for{"FileName": "s_PhraseNoNoNo.wav"}
sound_phrase_oopsy
for{"FileName": "s_PhraseOopsy.wav"}
sound_phrase_ow
for{"FileName": "s_PhraseOwOwOw.wav"}
sound_phrase_oww
for{"FileName": "s_PhraseOwwww.wav"}
sound_phrase_uh
for{"FileName": "s_PhraseUhOh.wav"}
sound_rage
for{"FileName": "s_Rage.wav"}
sound_sadness_1
for{"FileName": "s_Sadness.wav"}
sound_sadness_2
for{"FileName": "s_Sadness2.wav"}
sound_sadness_3
for{"FileName": "s_Sadness3.wav"}
sound_sadness_4
for{"FileName": "s_Sadness4.wav"}
sound_sadness_5
for{"FileName": "s_Sadness5.wav"}
sound_sadness_6
for{"FileName": "s_Sadness6.wav"}
sound_sadness_7
for{"FileName": "s_Sadness7.wav"}
sound_sleepy_1
for{"FileName": "s_Sleepy.wav"}
sound_sleepy_2
for{"FileName": "s_Sleepy2.wav"}
sound_sleepy_3
for{"FileName": "s_Sleepy3.wav"}
sound_sleepy_4
for{"FileName": "s_Sleepy4.wav"}
sound_sleepy_snore
for{"FileName": "s_SleepySnore.wav"}
sound_camera_shutter
for{"FileName": "s_SystemCameraShutter.wav"}
sound_failure
for{"FileName": "s_SystemFailure.wav"}
sound_success
for{"FileName": "s_SystemSuccess.wav"}
sound_wake
for{"FileName": "s_SystemWakeWord.wav"}
Sub-modules
misty2py.action
-
This module's function is to send action requests via the action keywords matching to Misty's API endpoints, sending action requests and matching data …
misty2py.basic_skills
-
This sub-package implements a few essential behaviours of Misty, such as audio-visual expressions, movement and speech.
misty2py.information
-
This module's function is to send information requests via the information keywords matching to Misty's API endpoints, sending information requests …
misty2py.misty_event
-
This module handles the communication of Misty2py with Misty's WebSocket API and the communication between different threads created within Misty2py …
misty2py.response
-
This module defines Misty2pyResponse class to handle responses from Misty2py when it communicates with Misty's REST API or Misty's WebSocket API.
misty2py.robot
-
The module contains the class Misty which represents a Misty II robot.
misty2py.utils
-
This sub-package contains utility functions.