diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown
index 152c3662722..f9f2097b039 100644
--- a/source/_docs/scripts.markdown
+++ b/source/_docs/scripts.markdown
@@ -761,7 +761,7 @@ on each other and order doesn't matter. For those cases, the `parallel` action
can be used to run the actions in the sequence in parallel, meaning all
the actions are started at the same time.
-The following example shows sending messages out at the time (in parallel):
+The following example shows sending messages out at the same time (in parallel):
```yaml
automation:
diff --git a/source/_integrations/solaredge.markdown b/source/_integrations/solaredge.markdown
index 6818f8548a0..6ed953b1202 100644
--- a/source/_integrations/solaredge.markdown
+++ b/source/_integrations/solaredge.markdown
@@ -16,12 +16,14 @@ ha_codeowners:
ha_integration_type: device
---
-The `solaredge` platform uses the [SolarEdge Monitoring API](https://www.solaredge.com/sites/default/files/se_monitoring_api.pdf) to allow you to get details from your SolarEdge solar power setup and integrate these in your Home Assistant installation.
+The SolarEdge integration allows you to get details from your SolarEdge solar power setup and integrate these in your Home Assistant installation.
-
+To integrate it, you need your installation ID and an API key. You can get these by logging in to your [SolarEdge web portal](https://www.solaredge.com). Note: if your portal is not in English, the labels will be different.
-The SolarEdge Monitoring API has a daily rate limit of 300 requests. In order to stay under this limit, and allow for some additional requests, the `solaredge` platform will update the site overview every 15 minutes.
+- Click on Admin and scroll down to API Access
+- Click on "Generate key"
+- Click on Save
-
+Data is updated every 15 minutes to stay within the daily rate limit of 300 requests per day.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/voip.markdown b/source/_integrations/voip.markdown
new file mode 100644
index 00000000000..ddcb467caf1
--- /dev/null
+++ b/source/_integrations/voip.markdown
@@ -0,0 +1,22 @@
+---
+title: VoIP
+description: Voice over IP
+ha_category:
+ - Voice
+ha_iot_class: Local Push
+ha_release: '2023.5'
+ha_codeowners:
+ - '@balloob'
+ - '@synesthesiam'
+ha_domain: voip
+ha_integration_type: integration
+---
+
+The VoIP integration enables users to talk to [Assist](/docs/assist) using an analog phone and a VoIP adapter such as the [Grandstream HT801](https://amzn.to/40k7mRa). See [the tutorial](/projects/private-voice-assistant/voice_remote_classic_phone/) for detailed instructions.
+
+
+
+ Connecting a phone to Home Assistant requires an adapter.
+
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/wyoming.markdown b/source/_integrations/wyoming.markdown
new file mode 100644
index 00000000000..2522a9035f1
--- /dev/null
+++ b/source/_integrations/wyoming.markdown
@@ -0,0 +1,20 @@
+---
+title: Wyoming
+description: Connect remote voice services to Home Assistant.
+ha_category:
+ - Voice
+ha_iot_class: Local Push
+ha_release: '2023.5'
+ha_codeowners:
+ - '@balloob'
+ - '@synesthesiam'
+ha_domain: wyoming
+ha_integration_type: integration
+---
+
+The Wyoming integration connects external voice services to Home Assistant using a [small protocol](https://github.com/rhasspy/rhasspy3/blob/master/docs/wyoming.md). This enables [Assist](/docs/assist) to use a variety of local [speech-to-text](/integrations/stt/) and [text-to-speech](/integrations/tts/) systems, such as:
+
+* Whisper {% my supervisor_addon badge addon="core_whisper" %}
+* Piper {% my supervisor_addon badge addon="core_piper" %}
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown
index 1555213f195..f6d76728d99 100644
--- a/source/_integrations/zwave_js.markdown
+++ b/source/_integrations/zwave_js.markdown
@@ -132,7 +132,6 @@ The Z-Wave integration provides several special entities, some of which are avai
1. **Node status** sensor: This sensor shows the node status for a given Z-Wave device. The sensor is disabled by default. The available node statuses are explained in the [Z-Wave JS documentation](https://zwave-js.github.io/node-zwave-js/#/api/node?id=status). They can be used in state change automations. For example to ping a device when it is dead, or refresh values when it wakes up.
2. **Ping** button: This button can be pressed to ping a device. It is an alternative to the `zwave_js.ping` service.
-3. **Controller/node statistics** sensors: Z-Wave JS collects statistics about communications between [nodes](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot) and the [controller](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot) which can be used to troubleshoot RF issues in your environment. These statistics are available in the network configuration and device info panels. But they are also available as sensors which are disabled by default.
### Conditional entities
diff --git a/source/images/integrations/voip/voip_adapter.png b/source/images/integrations/voip/voip_adapter.png
new file mode 100644
index 00000000000..608a16f6e11
Binary files /dev/null and b/source/images/integrations/voip/voip_adapter.png differ
diff --git a/source/images/integrations/voip/voip_adapter.svg b/source/images/integrations/voip/voip_adapter.svg
new file mode 100644
index 00000000000..1f88080c7c2
--- /dev/null
+++ b/source/images/integrations/voip/voip_adapter.svg
@@ -0,0 +1,241 @@
+
+