docs: spelling fixes
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
e0eded70e8
commit
47c6245c3f
|
@ -1,8 +1,8 @@
|
||||||
#
|
#
|
||||||
This document describes Moonraker's full configuration. As this file
|
This document describes Moonraker's full configuration. As this file
|
||||||
references configuration for both Klipper (`printer.cfg`) and Moonraker
|
references configuration for both Klipper (`printer.cfg`) and Moonraker
|
||||||
(`moonraker.conf`), each example contains a commment indicating which
|
(`moonraker.conf`), each example contains a comment indicating which
|
||||||
configuration file is being refrenenced. A basic
|
configuration file is being referenced. A basic
|
||||||
[sample configuration](./moonraker.conf) in the `docs` directory.
|
[sample configuration](./moonraker.conf) in the `docs` directory.
|
||||||
|
|
||||||
## Core Components
|
## Core Components
|
||||||
|
@ -12,7 +12,7 @@ Moonraker's core components are always loaded regardless of configuration.
|
||||||
### `[server]`
|
### `[server]`
|
||||||
|
|
||||||
The `[server]` section provides essential configuration for Moonraker.
|
The `[server]` section provides essential configuration for Moonraker.
|
||||||
This section is requrired.
|
This section is required.
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ port: 7125
|
||||||
ssl_port: 7130
|
ssl_port: 7130
|
||||||
# The port to listen on for SSL (HTTPS) connections. Note that the HTTPS
|
# The port to listen on for SSL (HTTPS) connections. Note that the HTTPS
|
||||||
# server will only be started of the certificate and key options outlined
|
# server will only be started of the certificate and key options outlined
|
||||||
# below are provied. The default is 7130.
|
# below are provided. The default is 7130.
|
||||||
ssl_certificate_path:
|
ssl_certificate_path:
|
||||||
# The path to a self signed ssl certificate. The default is no path, which
|
# The path to a self signed ssl certificate. The default is no path, which
|
||||||
# disables HTTPS.
|
# disables HTTPS.
|
||||||
|
@ -68,7 +68,7 @@ queue_gcode_uploads: False
|
||||||
# the `start_print` flag has been set. The default if False.
|
# the `start_print` flag has been set. The default if False.
|
||||||
enable_object_processing: False
|
enable_object_processing: False
|
||||||
# When set to True gcode files will be run through a "preprocessor"
|
# When set to True gcode files will be run through a "preprocessor"
|
||||||
# during metdata extraction if object tags are detected. This preprocessor
|
# during metadata extraction if object tags are detected. This preprocessor
|
||||||
# replaces object tags with G-Code commands compatible with Klipper's
|
# replaces object tags with G-Code commands compatible with Klipper's
|
||||||
# "cancel object" functionality. Note that this process is file I/O intensive,
|
# "cancel object" functionality. Note that this process is file I/O intensive,
|
||||||
# it is not recommended for usage on low resource SBCs such as a Pi Zero.
|
# it is not recommended for usage on low resource SBCs such as a Pi Zero.
|
||||||
|
@ -117,7 +117,7 @@ provider: systemd_dbus
|
||||||
back to CLI based `reboot` and `shutdown` commands. These commands require
|
back to CLI based `reboot` and `shutdown` commands. These commands require
|
||||||
that Moonraker be able to run `sudo` commands without a password.
|
that Moonraker be able to run `sudo` commands without a password.
|
||||||
Alternatively it may be possible to enable the `systemd-logind` service,
|
Alternatively it may be possible to enable the `systemd-logind` service,
|
||||||
consult with your distro's documentation.
|
consult with your distributions's documentation.
|
||||||
|
|
||||||
#### Reboot / Shutdown from Klipper
|
#### Reboot / Shutdown from Klipper
|
||||||
|
|
||||||
|
@ -219,12 +219,12 @@ Moonraker announcements. If omitted defaults will be used.
|
||||||
subscriptions:
|
subscriptions:
|
||||||
# A newline separated list announcement "subscriptions". Generally
|
# A newline separated list announcement "subscriptions". Generally
|
||||||
# this would refer to specific clients that are registered to provide
|
# this would refer to specific clients that are registered to provide
|
||||||
# annoucements. All items specified here are added in addition to
|
# announcements. All items specified here are added in addition to
|
||||||
# "moonraker" and "klipper", which are always subscribed to. The default
|
# "moonraker" and "klipper", which are always subscribed to. The default
|
||||||
# is no additional subscriptions.
|
# is no additional subscriptions.
|
||||||
dev_mode: False
|
dev_mode: False
|
||||||
# A developer option that fetches RSS annoucments from a local folder when
|
# A developer option that fetches RSS announcements from a local folder when
|
||||||
# set to True. The default behavior is for Moonraker to retrieve annoucements
|
# set to True. The default behavior is for Moonraker to retrieve announcements
|
||||||
# from RSS feeds generated by the "moonlight" repo on GitHub.
|
# from RSS feeds generated by the "moonlight" repo on GitHub.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -363,7 +363,7 @@ confirmed_macros:
|
||||||
RESTART
|
RESTART
|
||||||
FIRMWARE_RESTART
|
FIRMWARE_RESTART
|
||||||
# Like the "macros" option, this list is added to the macros tab.
|
# Like the "macros" option, this list is added to the macros tab.
|
||||||
# When one of these macros is excuted the PanelDue will prompt
|
# When one of these macros is executed the PanelDue will prompt
|
||||||
# the user with a confirmation dialog. The default is to include
|
# the user with a confirmation dialog. The default is to include
|
||||||
# RESTART and FIRMWARE_RESTART.
|
# RESTART and FIRMWARE_RESTART.
|
||||||
```
|
```
|
||||||
|
@ -652,7 +652,7 @@ off_code:
|
||||||
and [this Home Assistant Alert](https://alerts.home-assistant.io/#tplink.markdown)
|
and [this Home Assistant Alert](https://alerts.home-assistant.io/#tplink.markdown)
|
||||||
for details.
|
for details.
|
||||||
|
|
||||||
The following options are availble for `tplink_smartplug` device types:
|
The following options are available for `tplink_smartplug` device types:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
# moonraker.conf
|
# moonraker.conf
|
||||||
|
@ -701,7 +701,7 @@ output_id:
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
This implmentation communicates with Tasmota firmware through its
|
This implementation communicates with Tasmota firmware through its
|
||||||
HTTP APIs. It is also possible to use [MQTT](#mqtt-device-configuration)
|
HTTP APIs. It is also possible to use [MQTT](#mqtt-device-configuration)
|
||||||
to control devices flashed with Tasmota.
|
to control devices flashed with Tasmota.
|
||||||
|
|
||||||
|
@ -740,7 +740,7 @@ output_id:
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
This implmentation communicates with Shelly firmware through its
|
This implementation communicates with Shelly firmware through its
|
||||||
HTTP APIs. It is also possible to use [MQTT](#mqtt-device-configuration)
|
HTTP APIs. It is also possible to use [MQTT](#mqtt-device-configuration)
|
||||||
to control Shelly devices.
|
to control Shelly devices.
|
||||||
|
|
||||||
|
@ -802,7 +802,7 @@ device:
|
||||||
# The device ID of the switch to control. This parameter must be provided.
|
# The device ID of the switch to control. This parameter must be provided.
|
||||||
token:
|
token:
|
||||||
# A token used for request authorization. This option accepts
|
# A token used for request authorization. This option accepts
|
||||||
# Jinja2 Templates, see the [secrets] section for details. This paramter
|
# Jinja2 Templates, see the [secrets] section for details. This parameter
|
||||||
# must be provided.
|
# must be provided.
|
||||||
domain:
|
domain:
|
||||||
# The class of device managed by Home Assistant. Default is "switch".
|
# The class of device managed by Home Assistant. Default is "switch".
|
||||||
|
@ -905,7 +905,7 @@ query_payload:
|
||||||
query_after_command:
|
query_after_command:
|
||||||
# If set to True Moonraker will publish the query topic after publishing the
|
# If set to True Moonraker will publish the query topic after publishing the
|
||||||
# command topic. This should only be necessary if the device does not publish a
|
# command topic. This should only be necessary if the device does not publish a
|
||||||
# reponse to a command request to the state topic. The default is False.
|
# response to a command request to the state topic. The default is False.
|
||||||
```
|
```
|
||||||
!!! Note
|
!!! Note
|
||||||
Moonraker's MQTT client must be properly configured to add a MQTT device.
|
Moonraker's MQTT client must be properly configured to add a MQTT device.
|
||||||
|
@ -914,7 +914,7 @@ query_after_command:
|
||||||
!!! Tip
|
!!! Tip
|
||||||
MQTT is the most robust way of managing networked devices through
|
MQTT is the most robust way of managing networked devices through
|
||||||
Moonraker. A well implemented MQTT device will publish all
|
Moonraker. A well implemented MQTT device will publish all
|
||||||
changes in state to the `state_topic`. Moonraker recieves these changes,
|
changes in state to the `state_topic`. Moonraker receives these changes,
|
||||||
updates its internal state, and notifies connected clients. This allows
|
updates its internal state, and notifies connected clients. This allows
|
||||||
for device control outside of Moonraker. Note however that post command
|
for device control outside of Moonraker. Note however that post command
|
||||||
actions, such as bound services, will not be run if a device is toggled
|
actions, such as bound services, will not be run if a device is toggled
|
||||||
|
@ -934,7 +934,7 @@ command_topic: cmnd/tasmota_switch/POWER
|
||||||
command_payload:
|
command_payload:
|
||||||
{command}
|
{command}
|
||||||
# There is no need to set the retain flag for Tasmota devices. Moonraker
|
# There is no need to set the retain flag for Tasmota devices. Moonraker
|
||||||
# will use the query topic to initalize the device. Tasmota will publish
|
# will use the query topic to initialize the device. Tasmota will publish
|
||||||
# all changes in state to the state topic.
|
# all changes in state to the state topic.
|
||||||
retain_command_state: False
|
retain_command_state: False
|
||||||
# To query a tasmota device we send the command topic without a payload.
|
# To query a tasmota device we send the command topic without a payload.
|
||||||
|
@ -968,7 +968,7 @@ protocol: https
|
||||||
port: 443
|
port: 443
|
||||||
token:
|
token:
|
||||||
# A token used for request authorization. This option accepts
|
# A token used for request authorization. This option accepts
|
||||||
# Jinja2 Templates, see the [secrets] section for details. This paramter
|
# Jinja2 Templates, see the [secrets] section for details. This parameter
|
||||||
# must be provided.
|
# must be provided.
|
||||||
device:
|
device:
|
||||||
# The Device guid of the switch to control. This parameter must be provided.
|
# The Device guid of the switch to control. This parameter must be provided.
|
||||||
|
@ -1110,7 +1110,7 @@ enable_packagekit: True
|
||||||
channel: dev
|
channel: dev
|
||||||
# The update channel applied to Klipper and Moonraker. May dev or
|
# The update channel applied to Klipper and Moonraker. May dev or
|
||||||
# beta. The dev channel will update to the latest commit pushed
|
# beta. The dev channel will update to the latest commit pushed
|
||||||
# to the repo, whereas the beta channel will update to the lastest
|
# to the repo, whereas the beta channel will update to the latest
|
||||||
# commit tagged by Moonraker. The beta channel will see less frequent
|
# commit tagged by Moonraker. The beta channel will see less frequent
|
||||||
# updates and should be more stable. Users on the beta channel will have
|
# updates and should be more stable. Users on the beta channel will have
|
||||||
# more opportunity to review breaking changes before choosing to update.
|
# more opportunity to review breaking changes before choosing to update.
|
||||||
|
@ -1118,7 +1118,7 @@ channel: dev
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Extension Configuration
|
#### Extension Configuration
|
||||||
The update manager may be configured manage additional software, hencefore
|
The update manager may be configured manage additional software, henceforth
|
||||||
referred to as "extensions". In general terms, an extension may be defined
|
referred to as "extensions". In general terms, an extension may be defined
|
||||||
as a piece of software hosted on GitHub. The update manager breaks this
|
as a piece of software hosted on GitHub. The update manager breaks this
|
||||||
down into 3 basic types:
|
down into 3 basic types:
|
||||||
|
@ -1127,10 +1127,10 @@ down into 3 basic types:
|
||||||
zip files created for GitHub releases.
|
zip files created for GitHub releases.
|
||||||
- `git_repo`: Used to manage extensions that do not fall into the "web" type.
|
- `git_repo`: Used to manage extensions that do not fall into the "web" type.
|
||||||
Updates are deployed directly via git. Typical usage scenarios are to
|
Updates are deployed directly via git. Typical usage scenarios are to
|
||||||
manage extensions installed a service such as KliperScreen, repos containing
|
manage extensions installed a service such as KlipperScreen, repos containing
|
||||||
configuration, and unofficial 3rd party extensions for Klipper and Moonraker.
|
configuration, and unofficial 3rd party extensions for Klipper and Moonraker.
|
||||||
See the note below in reference to unofficial extensions.
|
See the note below in reference to unofficial extensions.
|
||||||
- `zip`: This can be used to mananged various extensions like the `git_repo`
|
- `zip`: This can be used to managed various extensions like the `git_repo`
|
||||||
type, however its updates are deployed via zipped GitHub releases.
|
type, however its updates are deployed via zipped GitHub releases.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
|
@ -1175,7 +1175,7 @@ info_tags:
|
||||||
# info_tags:
|
# info_tags:
|
||||||
# desc=My Client App
|
# desc=My Client App
|
||||||
# action=webcam_restart
|
# action=webcam_restart
|
||||||
# Front ends may use these tags to perform additonal actions or display
|
# Front ends may use these tags to perform additional actions or display
|
||||||
# information, see your extension documentation for details on configuration.
|
# information, see your extension documentation for details on configuration.
|
||||||
# The default is an empty list.
|
# The default is an empty list.
|
||||||
```
|
```
|
||||||
|
@ -1280,14 +1280,14 @@ info_tags:
|
||||||
# For example:
|
# For example:
|
||||||
# info_tags:
|
# info_tags:
|
||||||
# desc=Special Application
|
# desc=Special Application
|
||||||
# Front ends my use these tags to perform additonal actions or display
|
# Front ends my use these tags to perform additional actions or display
|
||||||
# information, see your extension documentation for details on configuration.
|
# information, see your extension documentation for details on configuration.
|
||||||
# The default is an empty list.
|
# The default is an empty list.
|
||||||
```
|
```
|
||||||
|
|
||||||
### `[mqtt]`
|
### `[mqtt]`
|
||||||
|
|
||||||
Enables an MQTT Client. When configured most of Moonraker's APIs are availble
|
Enables an MQTT Client. When configured most of Moonraker's APIs are available
|
||||||
by publishing JSON-RPC requests to `{instance_name}/moonraker/api/request`.
|
by publishing JSON-RPC requests to `{instance_name}/moonraker/api/request`.
|
||||||
Responses will be published to `{instance_name}/moonraker/api/response`. See
|
Responses will be published to `{instance_name}/moonraker/api/response`. See
|
||||||
the [API Documentation](web_api.md#json-rpc-api-overview) for details on
|
the [API Documentation](web_api.md#json-rpc-api-overview) for details on
|
||||||
|
@ -1335,7 +1335,7 @@ enable_moonraker_api: True
|
||||||
# This can be set to False if the user does not wish to allow API
|
# This can be set to False if the user does not wish to allow API
|
||||||
# requests over MQTT. The default is True.
|
# requests over MQTT. The default is True.
|
||||||
instance_name:
|
instance_name:
|
||||||
# An identifer used to create unique API topics for each instance of
|
# An identifier used to create unique API topics for each instance of
|
||||||
# Moonraker on network. This name cannot contain wildcards (+ or #).
|
# Moonraker on network. This name cannot contain wildcards (+ or #).
|
||||||
# For example, if the instance name is set to my_printer, Moonraker
|
# For example, if the instance name is set to my_printer, Moonraker
|
||||||
# will subscribe to the following topic for API requests:
|
# will subscribe to the following topic for API requests:
|
||||||
|
@ -1400,7 +1400,7 @@ explanation of each parameter:
|
||||||
|
|
||||||
- `topic`: a valid mqtt topic
|
- `topic`: a valid mqtt topic
|
||||||
- `payload`: Defaults to an empty payload. This can be set to string, integer,
|
- `payload`: Defaults to an empty payload. This can be set to string, integer,
|
||||||
float, boolean, any json encodable object (dict or list) or None. The default
|
float, boolean, any json object (dict or list) or None. The default
|
||||||
value is None, in which no payload will be sent with the topic
|
value is None, in which no payload will be sent with the topic
|
||||||
- `qos`: an integer value in the range from 0 to 2. The default is the qos
|
- `qos`: an integer value in the range from 0 to 2. The default is the qos
|
||||||
set in the configuration.
|
set in the configuration.
|
||||||
|
@ -1497,7 +1497,7 @@ gcode:
|
||||||
state=False)}
|
state=False)}
|
||||||
|
|
||||||
[gcode_macro SET_WLED]
|
[gcode_macro SET_WLED]
|
||||||
description: SET_LED like functionlity for WLED, applies to all active segments
|
description: SET_LED like functionality for WLED, applies to all active segments
|
||||||
gcode:
|
gcode:
|
||||||
{% set strip = params.STRIP|string %}
|
{% set strip = params.STRIP|string %}
|
||||||
{% set red = params.RED|default(0)|float %}
|
{% set red = params.RED|default(0)|float %}
|
||||||
|
@ -1531,7 +1531,7 @@ Enables support for handling `button` events.
|
||||||
|
|
||||||
[button my_button]
|
[button my_button]
|
||||||
type: gpio
|
type: gpio
|
||||||
# Reserved for future use. Currently the only button type availble is
|
# Reserved for future use. Currently the only button type available is
|
||||||
# 'gpio', which is the default.
|
# 'gpio', which is the default.
|
||||||
pin: gpiochip0/gpio26
|
pin: gpiochip0/gpio26
|
||||||
# The gpio pin to watch for button events. The chip is optional, if
|
# The gpio pin to watch for button events. The chip is optional, if
|
||||||
|
@ -1553,7 +1553,7 @@ pin: gpiochip0/gpio26
|
||||||
# ~!gpiochip0/gpio26
|
# ~!gpiochip0/gpio26
|
||||||
# This parameter must be provided
|
# This parameter must be provided
|
||||||
min_event_time: .05
|
min_event_time: .05
|
||||||
# The mimimum time (in seconds) between events to trigger a response. This is
|
# The minimum time (in seconds) between events to trigger a response. This is
|
||||||
# is used to debounce buttons. This value must be at least .01 seconds.
|
# is used to debounce buttons. This value must be at least .01 seconds.
|
||||||
# The default is .05 seconds (50 milliseconds).
|
# The default is .05 seconds (50 milliseconds).
|
||||||
on_press:
|
on_press:
|
||||||
|
@ -1573,8 +1573,8 @@ adn methods:
|
||||||
[API documentation](web_api.md#jinja2-template-api-calls) for details.
|
[API documentation](web_api.md#jinja2-template-api-calls) for details.
|
||||||
- `send_notification`: Emits a websocket notification. This is useful if you
|
- `send_notification`: Emits a websocket notification. This is useful if you
|
||||||
wish to use buttons to notify attached clients of some action. This
|
wish to use buttons to notify attached clients of some action. This
|
||||||
method takes an optional argument that can contain any JSON encodable
|
method takes an optional argument that may contain any JSON object.
|
||||||
type. If provided, this value will be sent as part of the payload with
|
If provided, this value will be sent as part of the payload with
|
||||||
the notification.
|
the notification.
|
||||||
|
|
||||||
Additionally, the following context variables are available:
|
Additionally, the following context variables are available:
|
||||||
|
@ -1585,7 +1585,7 @@ Additionally, the following context variables are available:
|
||||||
- `received_time`: The time the event was detected according to asyncio's
|
- `received_time`: The time the event was detected according to asyncio's
|
||||||
monotonic clock. Note that this is not in "unix time".
|
monotonic clock. Note that this is not in "unix time".
|
||||||
- `render_time`: The time the template was rendered (began execution)
|
- `render_time`: The time the template was rendered (began execution)
|
||||||
according to asyncio's montonic clock. It is possible execution of
|
according to asyncio's monotonic clock. It is possible execution of
|
||||||
an event may be delayed well beyond the `received_time`.
|
an event may be delayed well beyond the `received_time`.
|
||||||
- `pressed`: A boolean value to indicate if the button is currently pressed.
|
- `pressed`: A boolean value to indicate if the button is currently pressed.
|
||||||
- `user_data`: This is a dictionary in which templates can store information
|
- `user_data`: This is a dictionary in which templates can store information
|
||||||
|
@ -1611,7 +1611,7 @@ type: gpio
|
||||||
pin: gpio26
|
pin: gpio26
|
||||||
on_press:
|
on_press:
|
||||||
# Executes immediately after a press is detected
|
# Executes immediately after a press is detected
|
||||||
{% do call_method("priner.emergency_stop") %}
|
{% do call_method("printer.emergency_stop") %}
|
||||||
|
|
||||||
# Reboot Long Press Example
|
# Reboot Long Press Example
|
||||||
[button reboot]
|
[button reboot]
|
||||||
|
@ -1624,7 +1624,7 @@ on_release:
|
||||||
{% do call_method("machine.reboot") %}
|
{% do call_method("machine.reboot") %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
# Double Click Notificaion Example
|
# Double Click Notification Example
|
||||||
[button notify_btn]
|
[button notify_btn]
|
||||||
type: gpio
|
type: gpio
|
||||||
pin: gpio26
|
pin: gpio26
|
||||||
|
@ -1713,7 +1713,7 @@ The `secrets` object is added to Moonraker's Jinja2 environment as a
|
||||||
global, thus it is available in all templates. All options in
|
global, thus it is available in all templates. All options in
|
||||||
Moonraker's configuration that accept credentials support templates.
|
Moonraker's configuration that accept credentials support templates.
|
||||||
|
|
||||||
MQTT configuration example with secret credentaials:
|
MQTT configuration example with secret credentials:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[mqtt]
|
[mqtt]
|
||||||
|
@ -1733,7 +1733,7 @@ enable_moonraker_api: True
|
||||||
unique credentials. Never leave a Moonraker client application open
|
unique credentials. Never leave a Moonraker client application open
|
||||||
unattended in an untrusted location, as it would be possible for a
|
unattended in an untrusted location, as it would be possible for a
|
||||||
malicious actor to reconfigure moonraker to send items stored in the
|
malicious actor to reconfigure moonraker to send items stored in the
|
||||||
secrets file to themselves via `mqtt`, `notifer`, etc.
|
secrets file to themselves via `mqtt`, `notifier`, etc.
|
||||||
|
|
||||||
Home Assistant Switch Example:
|
Home Assistant Switch Example:
|
||||||
|
|
||||||
|
@ -1766,7 +1766,7 @@ url: tgram://{bottoken}/{ChatID}
|
||||||
# The url for your notifier. This URL accepts Jinja2 templates, so you can use [secrets] if you want.
|
# The url for your notifier. This URL accepts Jinja2 templates, so you can use [secrets] if you want.
|
||||||
events: *
|
events: *
|
||||||
# The events this notifier should trigger to. '*' means all events.
|
# The events this notifier should trigger to. '*' means all events.
|
||||||
# You can use multiple events, comma seperated.
|
# You can use multiple events, comma separated.
|
||||||
# Valid events:
|
# Valid events:
|
||||||
# started
|
# started
|
||||||
# complete
|
# complete
|
||||||
|
@ -1860,7 +1860,7 @@ a `dictionary` object and convert it to json:
|
||||||
[power my_mqtt_device]
|
[power my_mqtt_device]
|
||||||
type: mqtt
|
type: mqtt
|
||||||
command_topic: my/mqtt/command
|
command_topic: my/mqtt/command
|
||||||
# Lets assume this device requres a json payload with each command.
|
# Lets assume this device requires a json payload with each command.
|
||||||
# We will use a dict to generate the payload
|
# We will use a dict to generate the payload
|
||||||
command_payload:
|
command_payload:
|
||||||
{% set my_payload = {"SOME_FIELD": ""} %}
|
{% set my_payload = {"SOME_FIELD": ""} %}
|
||||||
|
|
|
@ -11,7 +11,7 @@ Websocket, please see the Appendix at the end of this document.
|
||||||
Moonraker's HTTP API could best be described as "RESTish". Attempts are
|
Moonraker's HTTP API could best be described as "RESTish". Attempts are
|
||||||
made to conform to REST standards, however the dynamic nature of
|
made to conform to REST standards, however the dynamic nature of
|
||||||
Moonraker's API registration along with the desire to keep consistency
|
Moonraker's API registration along with the desire to keep consistency
|
||||||
between mulitple API protocols results in an HTTP API that does not
|
between multiple API protocols results in an HTTP API that does not
|
||||||
completely adhere to the standard.
|
completely adhere to the standard.
|
||||||
|
|
||||||
Moonraker is capable of parsing request arguments from the both the body
|
Moonraker is capable of parsing request arguments from the both the body
|
||||||
|
@ -21,7 +21,7 @@ with body arguments taking precedence over query arguments. Thus
|
||||||
if the same argument is supplied both in the body and in the
|
if the same argument is supplied both in the body and in the
|
||||||
query string the body argument would be used. It is left up to the client
|
query string the body argument would be used. It is left up to the client
|
||||||
developer to decide exactly how they want to provide arguments, however
|
developer to decide exactly how they want to provide arguments, however
|
||||||
future API documention will make recommendations. As of March 1st 2021
|
future API documentation will make recommendations. As of March 1st 2021
|
||||||
this document exclusively illustrates arguments via the query string.
|
this document exclusively illustrates arguments via the query string.
|
||||||
|
|
||||||
All successful HTTP requests will return a json encoded object in the form of:
|
All successful HTTP requests will return a json encoded object in the form of:
|
||||||
|
@ -62,7 +62,7 @@ arguments. The query string with type hints might look like:
|
||||||
?seconds:int=120&enabled:bool=true
|
?seconds:int=120&enabled:bool=true
|
||||||
```
|
```
|
||||||
A query string that takes a `value` argument with which we want to
|
A query string that takes a `value` argument with which we want to
|
||||||
assing an object, `{foo: 21.5, bar: "hello"}` might look like:
|
pass an object, `{foo: 21.5, bar: "hello"}` might look like:
|
||||||
```
|
```
|
||||||
?value:json=%7B%22foo%22%3A21.5%2C%22bar%22%3A%22hello%22%7D
|
?value:json=%7B%22foo%22%3A21.5%2C%22bar%22%3A%22hello%22%7D
|
||||||
```
|
```
|
||||||
|
@ -213,7 +213,7 @@ All parameters are required. Below is an explanation of each parameter.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
The connection's unique identifer.
|
The connection's unique identifier.
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"connection_id": 1730367696
|
"connection_id": 1730367696
|
||||||
|
@ -224,7 +224,7 @@ The connection's unique identifer.
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
This method is deprecated. Please use the
|
This method is deprecated. Please use the
|
||||||
[identify endpoint](#identify-connection) to retreive the
|
[identify endpoint](#identify-connection) to retrieve the
|
||||||
Websocket's UID
|
Websocket's UID
|
||||||
|
|
||||||
HTTP request: `Not Available`
|
HTTP request: `Not Available`
|
||||||
|
@ -239,7 +239,7 @@ JSON-RPC request (Websocket Only):
|
||||||
```
|
```
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
The connected websocket's unique identifer.
|
The connected websocket's unique identifier.
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"websocket_id": 1730367696
|
"websocket_id": 1730367696
|
||||||
|
@ -1308,7 +1308,7 @@ will return up to 30 samples, each sample with the following fields:
|
||||||
CPU usage of the Moonraker process.
|
CPU usage of the Moonraker process.
|
||||||
- `memory`: Integer value representing the current amount of memory
|
- `memory`: Integer value representing the current amount of memory
|
||||||
allocated in RAM (resident set size).
|
allocated in RAM (resident set size).
|
||||||
- `mem_units`: A string indentifying the units of the value in the
|
- `mem_units`: A string identifying the units of the value in the
|
||||||
`memory` field. This is typically "kB", but not guaranteed.
|
`memory` field. This is typically "kB", but not guaranteed.
|
||||||
|
|
||||||
If the system running Moonraker supports `vcgencmd` then Moonraker
|
If the system running Moonraker supports `vcgencmd` then Moonraker
|
||||||
|
@ -1718,7 +1718,7 @@ Returns: Information about the moved file or directory
|
||||||
|
|
||||||
#### Copy a file or directory
|
#### Copy a file or directory
|
||||||
Copies a file or directory from one location to another. A successful copy has
|
Copies a file or directory from one location to another. A successful copy has
|
||||||
the pre-requesites as a move with one exception, a copy may complete if the
|
the prerequisites as a move with one exception, a copy may complete if the
|
||||||
source file or directory is loaded by the `virtual_sdcard`. As with the move
|
source file or directory is loaded by the `virtual_sdcard`. As with the move
|
||||||
API, the `source` and `dest` should have the root prefixed to the path.
|
API, the `source` and `dest` should have the root prefixed to the path.
|
||||||
|
|
||||||
|
@ -1744,7 +1744,7 @@ Returns: Information about the copied file or directory
|
||||||
{
|
{
|
||||||
"item": {
|
"item": {
|
||||||
"root": "gcodes",
|
"root": "gcodes",
|
||||||
"path": "test4/Voron_v2_350_aferburner_Filament Cover_0.2mm_ABS.gcode"
|
"path": "test4/Voron_v2_350_afterburner_Filament Cover_0.2mm_ABS.gcode"
|
||||||
},
|
},
|
||||||
"action": "create_file"
|
"action": "create_file"
|
||||||
}
|
}
|
||||||
|
@ -2108,7 +2108,7 @@ Returns:
|
||||||
A temporary token that may be added to a request's query string for access
|
A temporary token that may be added to a request's query string for access
|
||||||
to any API endpoint. The query string should be added in the form of:
|
to any API endpoint. The query string should be added in the form of:
|
||||||
```
|
```
|
||||||
?token={base32_ramdom_token}
|
?token={base32_random_token}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Get the Current API Key
|
#### Get the Current API Key
|
||||||
|
@ -2136,12 +2136,12 @@ the API key change is applied immediately, all subsequent HTTP requests
|
||||||
from untrusted clients must use the new key.
|
from untrusted clients must use the new key.
|
||||||
|
|
||||||
### Database APIs
|
### Database APIs
|
||||||
The following endpoints provide access to Moonraker's ldbm database. The
|
The following endpoints provide access to Moonraker's lmdb database. The
|
||||||
database is divided into `namespaces`. Each client may define its own
|
database is divided into `namespaces`. Each client may define its own
|
||||||
namespace to store information. From the client's point of view, a
|
namespace to store information. From the client's point of view, a
|
||||||
namespace is an `object`. Items in the database are accessed by providing
|
namespace is an `object`. Items in the database are accessed by providing
|
||||||
a namespace and a key. A key may be specifed as string, where a "." is a
|
a namespace and a key. A key may be specified as string, where a "." is a
|
||||||
delimeter, to access nested fields. Alternatively the key may be specified
|
delimiter, to access nested fields. Alternatively the key may be specified
|
||||||
as an array of strings, where each string references a nested field.
|
as an array of strings, where each string references a nested field.
|
||||||
This is useful for scenarios where your namespace contains keys that include
|
This is useful for scenarios where your namespace contains keys that include
|
||||||
a "." character.
|
a "." character.
|
||||||
|
@ -2321,8 +2321,8 @@ deleted item.
|
||||||
|
|
||||||
### Job Queue APIs
|
### Job Queue APIs
|
||||||
|
|
||||||
The following enpoints may be used to manage Moonraker's job queue.
|
The following endpoints may be used to manage Moonraker's job queue.
|
||||||
Note that Moonraker's Job Queue is impelemented as a FIFO queue and it may
|
Note that Moonraker's Job Queue is implemented as a FIFO queue and it may
|
||||||
contain multiple references to the same job.
|
contain multiple references to the same job.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
|
@ -2405,7 +2405,7 @@ Below is a description of the returned fields:
|
||||||
|
|
||||||
Adds a job, or an array of jobs, to the end of the job queue. The same
|
Adds a job, or an array of jobs, to the end of the job queue. The same
|
||||||
filename may be specified multiple times to queue a job that repeats.
|
filename may be specified multiple times to queue a job that repeats.
|
||||||
When multiple jobs are specfied they will be enqued in the order they
|
When multiple jobs are specified they will be enqueued in the order they
|
||||||
are received.
|
are received.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
|
@ -2414,7 +2414,7 @@ are received.
|
||||||
|
|
||||||
HTTP request:
|
HTTP request:
|
||||||
```http
|
```http
|
||||||
POST /server/job_queue/job?filenames=job1.gcode,job2.gcode,subdir/job3.gocde
|
POST /server/job_queue/job?filenames=job1.gcode,job2.gcode,subdir/job3.gcode
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
|
@ -2444,7 +2444,7 @@ JSON-RPC request:
|
||||||
"filenames": [
|
"filenames": [
|
||||||
"job1.gcode",
|
"job1.gcode",
|
||||||
"job2.gcode",
|
"job2.gcode",
|
||||||
"subir/job3.gcode"
|
"subdir/job3.gcode"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"id": 4654
|
"id": 4654
|
||||||
|
@ -2638,7 +2638,7 @@ The following endpoints are available to manage announcements. See
|
||||||
announcements work and recommendations for your implementation.
|
announcements work and recommendations for your implementation.
|
||||||
|
|
||||||
#### List announcements
|
#### List announcements
|
||||||
Retreives a list of current announcements. The `include_dismissed`
|
Retrieves a list of current announcements. The `include_dismissed`
|
||||||
argument is optional and defaults to `true`. If set to `false`
|
argument is optional and defaults to `true`. If set to `false`
|
||||||
dismissed entries will be omitted from the return value.
|
dismissed entries will be omitted from the return value.
|
||||||
|
|
||||||
|
@ -3062,7 +3062,7 @@ Below is an explanation for each field:
|
||||||
- `busy`: set to true if an update is in progress. Moonraker will not
|
- `busy`: set to true if an update is in progress. Moonraker will not
|
||||||
allow concurrent updates.
|
allow concurrent updates.
|
||||||
- `github_rate_limit`: the maximum number of github API requests
|
- `github_rate_limit`: the maximum number of github API requests
|
||||||
the user currently is allowed. An unathenticated user typically has 60
|
the user currently is allowed. An unauthenticated user typically has 60
|
||||||
requests per hour.
|
requests per hour.
|
||||||
- `github_requests_remaining`: the number of API request the user
|
- `github_requests_remaining`: the number of API request the user
|
||||||
currently has remaining.
|
currently has remaining.
|
||||||
|
@ -3073,7 +3073,7 @@ The `moonraker`, `klipper` packages, along with and clients configured
|
||||||
as applications have the following fields:
|
as applications have the following fields:
|
||||||
|
|
||||||
- `configured_type`: the application type configured by the user
|
- `configured_type`: the application type configured by the user
|
||||||
- `detected_type`: the applicaiton type as detected by Moonraker.
|
- `detected_type`: the application type as detected by Moonraker.
|
||||||
- `channel`: the currently configured update channel. For Moonraker
|
- `channel`: the currently configured update channel. For Moonraker
|
||||||
and Klipper this is set in the `[update_manager]` configuration.
|
and Klipper this is set in the `[update_manager]` configuration.
|
||||||
For clients the channel is determined by the configured type
|
For clients the channel is determined by the configured type
|
||||||
|
@ -3214,7 +3214,7 @@ If one more more `[update_manager client client_name]` sections have
|
||||||
been configured this endpoint can be used to install the most recently
|
been configured this endpoint can be used to install the most recently
|
||||||
published release of the client. If an update is requested while a
|
published release of the client. If an update is requested while a
|
||||||
print is in progress then this request will return an error. The
|
print is in progress then this request will return an error. The
|
||||||
`name` argument is requred, it's value should match the `client_name`
|
`name` argument is required, it's value should match the `client_name`
|
||||||
of the configured section.
|
of the configured section.
|
||||||
|
|
||||||
HTTP request:
|
HTTP request:
|
||||||
|
@ -3258,7 +3258,7 @@ Returns:
|
||||||
`ok` when complete
|
`ok` when complete
|
||||||
|
|
||||||
#### Recover a corrupt repo
|
#### Recover a corrupt repo
|
||||||
On ocassion a git command may fail resulting in a repo in a
|
On occasion a git command may fail resulting in a repo in a
|
||||||
dirty or invalid state. When this happens it is possible
|
dirty or invalid state. When this happens it is possible
|
||||||
to recover. The `name` argument must specify the name of
|
to recover. The `name` argument must specify the name of
|
||||||
the repo to recover, it must be of a git repo type. There are two
|
the repo to recover, it must be of a git repo type. There are two
|
||||||
|
@ -3592,7 +3592,7 @@ POST /api/files/local
|
||||||
```
|
```
|
||||||
JSON-RPC request: Not Available
|
JSON-RPC request: Not Available
|
||||||
|
|
||||||
Alias for Moonrakers [file upload API](#file-upload).
|
Alias for Moonraker's [file upload API](#file-upload).
|
||||||
|
|
||||||
#### Get Job status
|
#### Get Job status
|
||||||
HTTP request:
|
HTTP request:
|
||||||
|
@ -3710,7 +3710,7 @@ An object containing simulates OctoPrint Printer profile
|
||||||
```
|
```
|
||||||
|
|
||||||
### History APIs
|
### History APIs
|
||||||
The APIs below are avilable when the `[history]` component has been configured.
|
The APIs below are available when the `[history]` component has been configured.
|
||||||
|
|
||||||
#### Get job list
|
#### Get job list
|
||||||
HTTP request:
|
HTTP request:
|
||||||
|
@ -3743,7 +3743,7 @@ All arguments are optional. Arguments are as follows:
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
An array of requsted historical jobs:
|
An array of requested historical jobs:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"count": 1,
|
"count": 1,
|
||||||
|
@ -3934,7 +3934,7 @@ JSON-RPC request:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Only the `topic` parameter is required. Below is an explanation for
|
Only the `topic` parameter is required. Below is an explanation for
|
||||||
each paramater:
|
each parameter:
|
||||||
|
|
||||||
- `topic`: The topic to publish.
|
- `topic`: The topic to publish.
|
||||||
- `payload`: Payload to send with the topic. May be a boolean, float,
|
- `payload`: Payload to send with the topic. May be a boolean, float,
|
||||||
|
@ -3945,7 +3945,7 @@ each paramater:
|
||||||
from 0 to 2. If omitted the system configured default is used.
|
from 0 to 2. If omitted the system configured default is used.
|
||||||
- `retain`: If set to `true` the MQTT broker will retain the payload of this
|
- `retain`: If set to `true` the MQTT broker will retain the payload of this
|
||||||
request. Note that only the mostly recently tagged payload is retained.
|
request. Note that only the mostly recently tagged payload is retained.
|
||||||
When other clients first subscribe to the topic they immediately recieve the
|
When other clients first subscribe to the topic they immediately receive the
|
||||||
retained message. The default is `false`.
|
retained message. The default is `false`.
|
||||||
- `timeout`: A float value in seconds. By default requests with QoS levels of
|
- `timeout`: A float value in seconds. By default requests with QoS levels of
|
||||||
1 or 2 will block until the Broker acknowledges confirmation. This option
|
1 or 2 will block until the Broker acknowledges confirmation. This option
|
||||||
|
@ -4271,7 +4271,7 @@ for example when a user configures a different gcode file path
|
||||||
in Klipper.
|
in Klipper.
|
||||||
|
|
||||||
#### Update Manager Response
|
#### Update Manager Response
|
||||||
The update manager will send asyncronous messages to the client during an
|
The update manager will send asynchronous messages to the client during an
|
||||||
update:
|
update:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
@ -4294,7 +4294,7 @@ The fields reported in the response are as follows:
|
||||||
or "client".
|
or "client".
|
||||||
- The `proc_id` field contains a unique id associated with the current update
|
- The `proc_id` field contains a unique id associated with the current update
|
||||||
process. This id is generated for each update request.
|
process. This id is generated for each update request.
|
||||||
- The `message` field contains an asyncronous message sent during the update
|
- The `message` field contains an asynchronous message sent during the update
|
||||||
process.
|
process.
|
||||||
- The `complete` field is set to true on the final message sent during an
|
- The `complete` field is set to true on the final message sent during an
|
||||||
update, indicating that the update completed successfully. Otherwise it
|
update, indicating that the update completed successfully. Otherwise it
|
||||||
|
@ -4469,7 +4469,7 @@ The object sent with the notification contains the following fields:
|
||||||
- `state_changed`: The queue state has changed
|
- `state_changed`: The queue state has changed
|
||||||
- `jobs_added`: One or more jobs were added to the queue
|
- `jobs_added`: One or more jobs were added to the queue
|
||||||
- `jobs_removed`: One or more jobs were removed from the queue
|
- `jobs_removed`: One or more jobs were removed from the queue
|
||||||
- `job_loaded`: A job was popped off the queue and successfull started
|
- `job_loaded`: A job was popped off the queue and successfully started
|
||||||
- `updated_queue`: If the queue itself is changed this will be a list
|
- `updated_queue`: If the queue itself is changed this will be a list
|
||||||
containing each item in the queue. If the queue has not changed this will
|
containing each item in the queue. If the queue has not changed this will
|
||||||
be `null`.
|
be `null`.
|
||||||
|
@ -4511,7 +4511,7 @@ fields:
|
||||||
- `received_time`: The time the event was detected according to asyncio's
|
- `received_time`: The time the event was detected according to asyncio's
|
||||||
monotonic clock. Note that this is not in "unix time".
|
monotonic clock. Note that this is not in "unix time".
|
||||||
- `render_time`: The time the template was rendered (began execution)
|
- `render_time`: The time the template was rendered (began execution)
|
||||||
according to asyncio's montonic clock. It is possible execution of
|
according to asyncio's monotonic clock. It is possible execution of
|
||||||
an event may be delayed well beyond the `received_time`.
|
an event may be delayed well beyond the `received_time`.
|
||||||
- `pressed`: A boolean value to indicate if the button is currently pressed.
|
- `pressed`: A boolean value to indicate if the button is currently pressed.
|
||||||
- `aux`: This is an optional field where the button may specify any json
|
- `aux`: This is an optional field where the button may specify any json
|
||||||
|
@ -4522,7 +4522,7 @@ fields:
|
||||||
#### Announcement update event
|
#### Announcement update event
|
||||||
|
|
||||||
Moonraker will emit the `notify_announcement_update` notification when
|
Moonraker will emit the `notify_announcement_update` notification when
|
||||||
a announcement entries are addded or removed:
|
a announcement entries are added or removed:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
@ -4619,7 +4619,7 @@ announcement that is no longer dismissed.
|
||||||
|
|
||||||
#### Agent Events
|
#### Agent Events
|
||||||
Moonraker will emit the `notify_agent_event` notification when it
|
Moonraker will emit the `notify_agent_event` notification when it
|
||||||
an agent event is recevied.
|
an agent event is received.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
@ -4640,7 +4640,7 @@ an agent event is recevied.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
When an agent connects, all connections will recieve a `connected` event
|
When an agent connects, all connections will receive a `connected` event
|
||||||
for that agent, with its identity info in the `data` field. When an agent
|
for that agent, with its identity info in the `data` field. When an agent
|
||||||
disconnects clients will receive a `disconnected` event with the data field
|
disconnects clients will receive a `disconnected` event with the data field
|
||||||
omitted. All other events are determined by the agent, where each event may
|
omitted. All other events are determined by the agent, where each event may
|
||||||
|
@ -4663,7 +4663,7 @@ var s = new WebSocket("ws://" + location.host + "/websocket");
|
||||||
ws://host:port/websocket?token={32 character base32 string}
|
ws://host:port/websocket?token={32 character base32 string}
|
||||||
```
|
```
|
||||||
|
|
||||||
The following startup sequence is recommened for clients which make use of
|
The following startup sequence is recommended for clients which make use of
|
||||||
the websocket:
|
the websocket:
|
||||||
|
|
||||||
1. Attempt to connect to `/websocket` until successful using a timer-like
|
1. Attempt to connect to `/websocket` until successful using a timer-like
|
||||||
|
@ -4754,7 +4754,7 @@ via polling.
|
||||||
|
|
||||||
If metadata extraction failed then this request will return an error.
|
If metadata extraction failed then this request will return an error.
|
||||||
Some metadata fields are only populated for specific slicers, and
|
Some metadata fields are only populated for specific slicers, and
|
||||||
unsupported slicers will only return the size and modifed date.
|
unsupported slicers will only return the size and modified date.
|
||||||
|
|
||||||
- There are multiple ways to calculate the ETA, this example will use
|
- There are multiple ways to calculate the ETA, this example will use
|
||||||
file progress, as it is possible calculate the ETA with or without
|
file progress, as it is possible calculate the ETA with or without
|
||||||
|
@ -4829,7 +4829,7 @@ function process_mesh(result) {
|
||||||
|
|
||||||
#### Converting to Unix Time
|
#### Converting to Unix Time
|
||||||
Some of Moonraker's APIs return a date represented in Unix time.
|
Some of Moonraker's APIs return a date represented in Unix time.
|
||||||
Most languanges have functionality built in to convert Unix
|
Most languages have functionality built in to convert Unix
|
||||||
time to a workable object or string. For example, in JavaScript
|
time to a workable object or string. For example, in JavaScript
|
||||||
one might do something like the following:
|
one might do something like the following:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -4901,7 +4901,7 @@ With `dev_mode` enabled, Moonraker will look for`moonraker.xml` and
|
||||||
|
|
||||||
If moonraker is not installed in the home folder then substitute `~`
|
If moonraker is not installed in the home folder then substitute `~`
|
||||||
for the parent folder location. This folder is in a hardcoded location
|
for the parent folder location. This folder is in a hardcoded location
|
||||||
to so as not to expose users to vulnerabilites associated with parsing XML.
|
to so as not to expose users to vulnerabilities associated with parsing XML.
|
||||||
|
|
||||||
It is possible to configure Moonraker to search for your own feeds:
|
It is possible to configure Moonraker to search for your own feeds:
|
||||||
|
|
||||||
|
@ -4936,7 +4936,7 @@ from moonlight's own issue tracker:
|
||||||
<pubDate>Tue, 22 Mar 2022 23:19:04 GMT</pubDate>
|
<pubDate>Tue, 22 Mar 2022 23:19:04 GMT</pubDate>
|
||||||
<moonlight:configHash>f2912192bf0d09cf18d8b8af22b2d3501627043e5afa3ebff0e45e4794937901</moonlight:configHash>
|
<moonlight:configHash>f2912192bf0d09cf18d8b8af22b2d3501627043e5afa3ebff0e45e4794937901</moonlight:configHash>
|
||||||
<item>
|
<item>
|
||||||
<title>Test annoucement 3</title>
|
<title>Test announcement 3</title>
|
||||||
<link>https://github.com/Arksine/moonlight/issues/3</link>
|
<link>https://github.com/Arksine/moonlight/issues/3</link>
|
||||||
<description>Test Description [with a link](https://moonraker.readthedocs.io).</description>
|
<description>Test Description [with a link](https://moonraker.readthedocs.io).</description>
|
||||||
<pubDate>Wed, 16 Mar 2022 19:33:39 GMT</pubDate>
|
<pubDate>Wed, 16 Mar 2022 19:33:39 GMT</pubDate>
|
||||||
|
|
Loading…
Reference in New Issue