# Control Panasonic TV with Node Red

**URL:** https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923
**Category:** General
**Created:** [4 July 2019 18:00 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923 "2019-07-04T18:00:45Z")
**Posts on this page:** 20
**Page:** 2

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [5 July 2019 14:32 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/21 "2019-07-05T14:32:00Z")

</div>

Found other variations online, but not sure exactly how to verify them ?

> url: [http://192.168.1.98:55000/nrc/control\_0](http://192.168.1.98:55000/nrc/control_0)  
> method: POST  
> headers:  
> content-type: application/xml  
> SOAPAction: '"urn:panasonic-com:service:p00NetworkControl:1#X\_SendKey"'  
> payload: '\<?xml version="1.0" encoding="utf-8"?\> \<s:Envelope xmlns:s="[http://schemas.xmlsoap.org/soap/envelope/](http://schemas.xmlsoap.org/soap/envelope/)" s:encodingStyle="[http://schemas.xmlsoap.org/soap/encoding/](http://schemas.xmlsoap.org/soap/encoding/)"\> \<s:Body\> \<u:X\_SendKey xmlns:u="urn:panasonic-com:service:p00NetworkControl:1"\> \<X\_KeyEvent\>NRC\_POWER-ONOFF\</X\_KeyEvent\> \</u:X\_SendKey\> \</s:Body\> \</s:Envelope\>'  
> content\_type: 'text/xml'  
> verify\_ssl: false

Another

> OST /nrc/control\_0 HTTP/1.1  
> User-Agent: Panasonic iOS VR-CP UPnP/2.0  
> Host: 10.0.1.15:55000  
> Content-Type: text/xml; charset="utf-8"  
> SOAPACTION: "urn:panasonic-com:service:p00NetworkControl:1#X\_SendKey"  
> Content-Length: 334
> 
> \<?xml version="1.0" encoding="utf-8"?\>
> 
> \<s:Envelope xmlns:s="[http://schemas.xmlsoap.org/soap/envelope/](http://schemas.xmlsoap.org/soap/envelope/)"  
> s:encodingStyle="[http://schemas.xmlsoap.org/soap/encoding/](http://schemas.xmlsoap.org/soap/encoding/)"\>  
> \<s:Body\>  
> \<u:X\_SendKey xmlns:u="urn:panasonic-com:service:p00NetworkControl:1"\>  
> \<X\_KeyEvent\>NRC\_CH\_DOWN-ONOFF\</X\_KeyEvent\>  
> \</u:X\_SendKey\>  
> \</s:Body\>  
> \</s:Envelope\>

Another

> Accept: text/xml  
> Cache-Control: no-cache  
> Pragma: no-cache  
> SOAPACTION: "urn:panasonic-com:service:p00NetworkControl:1#X\_SendKey"  
> Content-Length: 324  
> Content-Type: text/xml;charset="utf-8

> \<?xml version="1.0" encoding="utf-8"?\>
> 
> \<s:Envelope xmlns:s="[http://schemas.xmlsoap.org/soap/envelope/](http://schemas.xmlsoap.org/soap/envelope/)" s:encodingStyle="[http://schemas.xmlsoap.org/soap/encoding/](http://schemas.xmlsoap.org/soap/encoding/)"\>  
> \<s:Body\>  
> \<u:X\_SendKey xmlns:u="urn:panasonic-com:service:p00NetworkControl:1"\>  
> \<X\_KeyEvent\>NRC\_POWER-ONOFF\</X\_KeyEvent\>  
> \</u:X\_SendKey\>  
> \</s:Body\>  
> \</s:Envelope\>

And a Curl command too

> execute "curl -s -i -H 'Accept: text/xml' -H 'Cache-Control: no-cache' -H 'Pragma: no-cache' -H 'SOAPACTION: 'urn:panasonic-com:service:p00NetworkControl:1#X\_SendKey'' -H 'Content-Length: 200' -H 'Content-Type: text/xml;charset='utf-8'' -X POST --data '\<s:Envelope xmlns:s="[http://schemas.xmlsoap.org/soap/envelope/\](http://schemas.xmlsoap.org/soap/envelope/%5C)" s:encodingStyle="[http://schemas.xmlsoap.org/soap/encoding/\](http://schemas.xmlsoap.org/soap/encoding/%5C)"\>\<s:Body\> \<u:X\_SendKey xmlns:u="urn:panasonic-com:service:p00NetworkControl:1"\> \<X\_KeyEvent\>NRC\_POWER-ONOFF\</X\_KeyEvent\>\</u:X\_SendKey\> \</s:Body\> \</s:Envelope\>' [http://192.168.102.200:55000/nrc/control\_0/?](http://192.168.102.200:55000/nrc/control_0/?)"

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [5 July 2019 15:42 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/22 "2019-07-05T15:42:24Z")

</div>

> [@afelix](#):
>
> Have you tried the JavaScript library from the first post directly, without the “via node-red” part? If that one doesn’t work too, the problem isn’t in your flow.

More than happy to give that a go, but how would I do that exactly ?

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [5 July 2019 15:51 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/23 "2019-07-05T15:51:08Z")

</div>

Write a sample script following the Readme from the library, see the link in the first post. Then set it up to run as script in your package.json file and execute it: [https://docs.npmjs.com/cli/run-script](https://docs.npmjs.com/cli/run-script)

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [5 July 2019 16:06 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/24 "2019-07-05T16:06:11Z")

</div>

> [@afelix](#):
>
> Write a sample script following the Readme from the library

Sorry, where would I start with that - I've got very little experience of javascript?

In the past - when working with code, I've usually reworked something that already exists, that I know works, but this stumps me on what to do first ?

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [5 July 2019 16:20 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/25 "2019-07-05T16:20:53Z")

</div>

In that case I’d say wait a bit. JavaScript writing experience is definitely needed for that step. I’m going to look up some related details on that tv in a couple hours regarding authentication (as that’s likely causing the 403 error you’re seeing) but I think I need my laptop for that. Will post back later (could be tomorrow) with additional information

---

<div class="post-metadata">

### Author: ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)
#### Post date: [5 July 2019 16:39 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/26 "2019-07-05T16:39:45Z")

</div>

I have an older plasma panasonic and to my surprise it supports this api stuff.

on the commandline this works for me:

```auto
curl -s -i -H "Accept: text/xml" -H "Cache-Control: no-cache" -H "Pragma: no-cache" -H "SOAPACTION: \"urn:panasonic-com:service:p00NetworkControl:1#X_SendKey\"" -H "Content-Length: 200" -H "Content-Type: text/xml;charset=\"utf-8\"" -X POST --data "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body> <u:X_SendKey xmlns:u=\"urn:panasonic-com:service:p00NetworkControl:1\"> <X_KeyEvent>NRC_MENU-ONOFF</X_KeyEvent></u:X_SendKey> </s:Body> </s:Envelope>" http://10.0.0.246:55000/nrc/control_0/?

```

(change the ip address on the end)

I have tried to convert it into a function but somehow it is not parsed properly by the http request node. I will dig a little further.

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [5 July 2019 17:58 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/27 "2019-07-05T17:58:38Z")

</div>

Thanks for the continuing support @bakman2

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [5 July 2019 18:02 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/28 "2019-07-05T18:02:08Z")

</div>

When I try that curl command on my 55FZ952 - I get the following back

```auto
HTTP/1.1 500 Internal Server Error
CONTENT-LENGTH: 487
Content-Type: text/xml; charset="utf-8"
EXT:
SERVER: Panasonic-VIErA/1, UPnP/1.0, Panasonic MIL DLNA SERVER
CONNECTION: close

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <s:Body>
  <s:Fault>
   <faultcode>s:Client</faultcode>
   <faultstring>UPnPError</faultstring>
   <detail>
    <UPnPError xmlns="urn:schemas-upnp-org:control-1-0">
     <errorCode>401</errorCode>
     <errorDescription>Invalid action</errorDescription>
    </UPnPError>
   </detail>
  </s:Fault>
 </s:Body>
</s:Envelope>

```

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [5 July 2019 18:44 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/29 "2019-07-05T18:44:11Z")

</div>

> [@nodecentral](#):
>
> 55FZ952

Okay, humour me for a while. I can’t find the answer on google, but is this model from Panasonic’s Viera powered smart TV series, or is it running something else? I can’t find it in any of the Viera lists, nor can I find any references to Viera on this model. The thing is, this script, and the control for it, is specifically for Panasonic TVs in the Viera series.  
But since in the previous message the headers show Panasonic/Viera as server, I’m expecting it to run Viera.

While searching, I found another usage with that library that sets up a local server to connect/control the TV. The point isn’t to have it replace your NR setup, just to see if things work in the first place. I also found a python library to connect with it that mentions that the newer models come with authentication and that you should request the TV for a key/password first. Considering the script posted in the first post is about 6 years old, and your TV is not, can you take a look at this link?

> <https://github.com/florianholzapfel/panasonic-viera/blob/main/README.md>

For the newest models, including one similar to yours there’s currently a connection/authentication issue, but reading that code it sounds doable to create a node for it.

> <https://github.com/florianholzapfel/panasonic-viera/issues/9>
>
> Hi,
> 
> i’m trying to integrate my new tv Panasonic TX-65FZW804 on Home Assistant… v0.90.1 on an Raspberry Pi 3 model B+.
> 
> The \[Home Assistant Repo ticket\](https://github.com/home-assistant/home-assistant/issues/21185) was closed because it must solved here in the library.
> 
> I also configured the MAC address like in the documentation.
> So I can turn the TV on and use volume up or down.
> I’m not able to turn it off or select a source.
> When I try to turn it off I get the http error code 500.
> 
> \`\`\`
> Log Details (ERROR)
> Fri Mar 22 2019 08:38:03 GMT+0100 (CET)
> 
> HTTP Error 500: Internal Server Error
> Traceback (most recent call last):
> File "/usr/local/lib/python3.7/site-packages/homeassistant/components/websocket\_api/commands.py", line 122, in handle\_call\_service
> connection.context(msg))
> File "/usr/local/lib/python3.7/site-packages/homeassistant/core.py", line 1138, in async\_call
> self.\_execute\_service(handler, service\_call))
> File "/usr/local/lib/python3.7/site-packages/homeassistant/core.py", line 1160, in \_execute\_service
> await handler.func(service\_call)
> File "/usr/local/lib/python3.7/site-packages/homeassistant/helpers/entity\_component.py", line 188, in handle\_service
> self.\_platforms.values(), func, call, service\_name
> File "/usr/local/lib/python3.7/site-packages/homeassistant/helpers/service.py", line 314, in entity\_service\_call
> future.result() # pop exception if have
> File "/usr/local/lib/python3.7/site-packages/homeassistant/helpers/service.py", line 328, in \_handle\_service\_platform\_call
> await getattr(entity, func)(\*\*data)
> File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
> result = self.fn(\*self.args, \*\*self.kwargs)
> File "/usr/local/lib/python3.7/site-packages/homeassistant/components/media\_player/panasonic\_viera.py", line 150, in turn\_off
> self.\_remote.turn\_off()
> File "/usr/local/lib/python3.7/site-packages/panasonic\_viera/\_\_init\_\_.py", line 238, in turn\_off
> self.send\_key(Keys.power)
> File "/usr/local/lib/python3.7/site-packages/panasonic\_viera/\_\_init\_\_.py", line 234, in send\_key
> 'X\_SendKey', params)
> File "/usr/local/lib/python3.7/site-packages/panasonic\_viera/\_\_init\_\_.py", line 132, in soap\_request
> res = urlopen(req, timeout=5).read()
> File "/usr/local/lib/python3.7/urllib/request.py", line 222, in urlopen
> return opener.open(url, data, timeout)
> File "/usr/local/lib/python3.7/urllib/request.py", line 531, in open
> response = meth(req, response)
> File "/usr/local/lib/python3.7/urllib/request.py", line 641, in http\_response
> 'http', request, response, code, msg, hdrs)
> File "/usr/local/lib/python3.7/urllib/request.py", line 569, in error
> return self.\_call\_chain(\*args)
> File "/usr/local/lib/python3.7/urllib/request.py", line 503, in \_call\_chain
> result = func(\*args)
> File "/usr/local/lib/python3.7/urllib/request.py", line 649, in http\_error\_default
> raise HTTPError(req.full\_url, code, msg, hdrs, fp)
> urllib.error.HTTPError: HTTP Error 500: Internal Server Error
> \`\`\`
> 
> Thanks for your help.

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [5 July 2019 18:49 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/30 "2019-07-05T18:49:31Z")

</div>

Reading through the code a bit more, you need python 2 or 3, and to install the `Crypto` library. Can you check if it works? If so I think I can port that code to JavaScript/custom node, except I don’t have a Panasonic to test it with.

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [5 July 2019 19:22 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/31 "2019-07-05T19:22:20Z")

</div>

That a great find, and as my Panasonic model is an ‘ FZ ‘ which is specially mentioned , that makes sense why it has not been working for me..

Interestingly the volume command (via the old Viera node/module) does still work on these new TVs, it’s the only thing that does; - and based on what you found it seems they’ve restricted the use of the other controls/commands.

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [6 July 2019 22:39 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/32 "2019-07-06T22:39:13Z")

</div>

I’ve been trying to get this to work, but python is just not my thing; however on a positive note that issue you shared mentioned (@ **[ngws](https://github.com/ngws)** commented [on 28 Mar](https://github.com/florianholzapfel/panasonic-viera/issues/9#issuecomment-477805774) ) having success with my make/model of tv, which is awesome.

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [7 July 2019 05:46 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/33 "2019-07-07T05:46:37Z")

</div>

> [@nodecentral](#):
>
> python is just not my thing;

I’m halfway porting the encryption to JavaScript. Javascript is not my best language, while Python I can do in my sleep. Most JavaScript I’ve written over the last years was all client-side, executing in the browser. Having to think of node just brings it as another challenge 🙂

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [7 July 2019 18:24 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/34 "2019-07-07T18:24:51Z")

</div>

@nodecentral@bakman2 as you both have panasonic TVs, one with encryption and one without, can both of you do me a favour? I'm porting the python code, but I don't have any of the XML/SOAP inputs this is based on. So while writing xpath is normally a good challenge, doing so without having any XML to test it on to verify is a bridge too far when it comes to debugging if it is fully correct.

Can both of you please open the following page, regular web browser should do, and post me the output? Can via DM if preferred. `http://<ip-of-tv>:55000/nrc/sdd_0.xml`  
For the encrypted version there should be a child tag to the root element ending on `actionList`, but I don't know if that's a local or namespaced name and it would make it a lot more readable knowing. Directly below that there's supposed a tag ending on `name`, but again that could be the last part of a longer tag, or just a namespaced tag. That `...name` tag is supposed to have a child text element `X_GetEncryptSessionId`.  
Knowing what that XML looks is for me the difference between an xpath like `/actionList/name[text()="X_GetEncryptSessionId]` or a monstrosity like `/child::*[substring(local-name(), string-length(local-name()) - string-length("actionList") + 1)="actionList"]/child::*[substring(local-name(), string-length(local-name()) - string-length("name") + 1)="name" and text()="X_GetEncryptSessionId"]`.

Unless anyone has a decent XPath 2.0 or 2.1 library for Javascript (if so I'll worship you 🙏), that last horrifying thing will end up in the code 😂

---

<div class="post-metadata">

### Author: ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)
#### Post date: [7 July 2019 18:43 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/35 "2019-07-07T18:43:59Z")

</div>

rename to xml  
[sdd\_0.txt](https://discourse.nodered.org/uploads/short-url/gff7hYpF50dkfaAEwMiPdkYx6oB.txt) (6.9 KB)

> Unless anyone has a decent XPath 2.0 or 2.1 library for Javascript (if so I'll worship you 🙏), that last horrifying thing will end up in the code 😂

This is actually reasonably simple in node-red (xml \> json) with jsonata.

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [7 July 2019 18:51 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/36 "2019-07-07T18:51:58Z")

</div>

Thank you so much, this shows exactly which part I'm missing 🙂

> [@bakman2](#):
>
> This is actually reasonably simple in node-red with jsonata.

Oh yes it is, and it's also pretty simply in xpath 2.1 😛 just a `child::*[ends-with(local-name(), "actionList)]` and so on. But much harder through just DOM parsing in XML with xpaths, and I'm trying to keep the dependencies for this thing as low as possible, as (compared to python) node based javascript feels like dependency hell enough on its own.

Even simpler with that xml file: `//actionList/action/name[text()="X_GetEcryptSessionId"]` should already do the trick 🙂

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [7 July 2019 19:19 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/37 "2019-07-07T19:19:45Z")

</div>

I’m an iPad user so the response via the Safari browser is not formatted at all, if I try it via node Red I get a little more in the debug window, up to the character limit.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/2X/9/95f0e39ae80b0abe16fba926afc3f178efd413b7.jpeg)

---

<div class="post-metadata">

### Author: ![afelix](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/afelix/32/9743_2.png) [@afelix](https://discourse.nodered.org/u/afelix)
#### Post date: [7 July 2019 19:21 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/38 "2019-07-07T19:21:30Z")

</div>

Thanks, this is perfect, shows I can do it the far easier way. I can use the same path to deal with both types of TVs without having to worry it will fail 🙂

---

<div class="post-metadata">

### Author: ![nodecentral](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/nodecentral/32/10432_2.png) [@nodecentral](https://discourse.nodered.org/u/nodecentral)
#### Post date: [7 July 2019 20:01 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/39 "2019-07-07T20:01:34Z")

</div>

Hi @afelix

What can I do in node red to give you all the xml returned by my tv from that url ?

---

<div class="post-metadata">

### Author: ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)
#### Post date: [7 July 2019 20:08 UTC](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923/40 "2019-07-07T20:08:41Z")

</div>

Send the debug to the console as well as the sidebar. It wont be truncated

[Previous page](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923.md?page=1)

[Next page](https://discourse.nodered.org/t/control-panasonic-tv-with-node-red/12923.md?page=3)
