ESPHome 2026.5.3
Loading...
Searching...
No Matches
media_player.cpp
Go to the documentation of this file.
1#include "media_player.h"
4#include "esphome/core/log.h"
6
7namespace esphome::media_player {
8
9static const char *const TAG = "media_player";
10
12 switch (state) {
14 return "ON";
16 return "OFF";
18 return "IDLE";
20 return "PLAYING";
22 return "PAUSED";
24 return "ANNOUNCING";
26 return "NONE";
27 default:
28 return "UNKNOWN";
29 }
30}
31
33 switch (command) {
35 return "PLAY";
37 return "PAUSE";
39 return "STOP";
41 return "MUTE";
43 return "UNMUTE";
45 return "TOGGLE";
47 return "VOLUME_UP";
49 return "VOLUME_DOWN";
51 return "ENQUEUE";
53 return "REPEAT_ONE";
55 return "REPEAT_OFF";
57 return "CLEAR_PLAYLIST";
59 return "TURN_ON";
61 return "TURN_OFF";
63 return "NEXT";
65 return "PREVIOUS";
67 return "REPEAT_ALL";
69 return "SHUFFLE";
71 return "UNSHUFFLE";
73 return "GROUP_JOIN";
74 default:
75 return "UNKNOWN";
76 }
77}
78
86
94
96 if (this->media_url_.has_value()) {
97 if (this->command_.has_value() && this->command_.value() != MEDIA_PLAYER_COMMAND_ENQUEUE) {
98 // Don't remove an enqueue command
99 ESP_LOGW(TAG, "MediaPlayerCall: Setting both command and media_url is not needed.");
100 this->command_.reset();
101 }
102 }
103 if (this->volume_.has_value()) {
104 if (this->volume_.value() < 0.0f || this->volume_.value() > 1.0f) {
105 ESP_LOGW(TAG, "MediaPlayerCall: Volume must be between 0.0 and 1.0.");
106 this->volume_.reset();
107 }
108 }
109}
110
112 ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str());
113 this->validate_();
114 if (this->command_.has_value()) {
115 const char *command_s = media_player_command_to_string(this->command_.value());
116 ESP_LOGV(TAG, " Command: %s", command_s);
117 }
118 if (this->media_url_.has_value()) {
119 ESP_LOGV(TAG, " Media URL: %s", this->media_url_.value().c_str());
120 }
121 if (this->volume_.has_value()) {
122 ESP_LOGV(TAG, " Volume: %.2f", this->volume_.value());
123 }
124 if (this->announcement_.has_value()) {
125 ESP_LOGV(TAG, " Announcement: %s", this->announcement_.value() ? "yes" : "no");
126 }
127 this->parent_->control(*this);
128}
129
131 this->command_ = command;
132 return *this;
133}
134MediaPlayerCall &MediaPlayerCall::set_command(optional<MediaPlayerCommand> command) {
135 this->command_ = command;
136 return *this;
137}
139 if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("PLAY")) == 0) {
141 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("PAUSE")) == 0) {
143 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("STOP")) == 0) {
145 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("MUTE")) == 0) {
147 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("UNMUTE")) == 0) {
149 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TOGGLE")) == 0) {
151 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TURN_ON")) == 0) {
153 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TURN_OFF")) == 0) {
155 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("VOLUME_UP")) == 0) {
157 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("VOLUME_DOWN")) == 0) {
159 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("ENQUEUE")) == 0) {
161 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("REPEAT_ONE")) == 0) {
163 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("REPEAT_OFF")) == 0) {
165 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("REPEAT_ALL")) == 0) {
167 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("CLEAR_PLAYLIST")) == 0) {
169 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("NEXT")) == 0) {
171 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("PREVIOUS")) == 0) {
173 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("SHUFFLE")) == 0) {
175 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("UNSHUFFLE")) == 0) {
177 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("GROUP_JOIN")) == 0) {
179 } else {
180 ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command);
181 }
182 return *this;
183}
184
185MediaPlayerCall &MediaPlayerCall::set_media_url(const std::string &media_url) {
186 this->media_url_ = media_url;
187 return *this;
188}
189
191 this->volume_ = volume;
192 return *this;
193}
194
196 this->announcement_ = announce;
197 return *this;
198}
199
201 this->state_callback_.call(this->state);
202#if defined(USE_MEDIA_PLAYER) && defined(USE_CONTROLLER_REGISTRY)
203 ControllerRegistry::notify_media_player_update(this);
204#endif
205}
206
207} // namespace esphome::media_player
const StringRef & get_name() const
Definition entity_base.h:71
constexpr const char * c_str() const
Definition string_ref.h:73
MediaPlayerCall & set_media_url(const std::string &url)
MediaPlayerCall & set_volume(float volume)
MediaPlayerCall & set_announcement(bool announce)
MediaPlayerCall & set_command(MediaPlayerCommand command)
optional< MediaPlayerCommand > command_
virtual void control(const MediaPlayerCall &call)=0
LazyCallbackManager< void(MediaPlayerState)> state_callback_
void set_supports_turn_off_on(bool supports_turn_off_on)
void set_supports_pause(bool supports_pause)
bool state
Definition fan.h:2
const char * media_player_command_to_string(MediaPlayerCommand command)
const char * media_player_state_to_string(MediaPlayerState state)