『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 6073|回复: 8

[技术探讨] 想自己做一个插件,以支持新的设备,但是不懂,想请教.....

[复制链接]

4

主题

132

帖子

824

积分

高级会员

Rank: 4

积分
824
金钱
692
HASS币
0
发表于 2021-4-30 12:00:18 | 显示全部楼层 |阅读模式
新买了一个ps audio 电源处理器,可以在局域网上控制,如:输入192.168.50.131 即可在浏览器上显示操作界面,但是,如果我想要接入homeassistant,以实现自动化,该如何操作呢,看群里高手云集,藏龙卧虎,因此想请教大神帮忙。

操作界面如果,点击可以打开对应的插座

操作界面如果,点击可以打开对应的插座
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2021-4-30 17:46:59 | 显示全部楼层
使用 curl 大法~
Nero
回复

使用道具 举报

175

主题

2956

帖子

7555

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
7555
金钱
4574
HASS币
398

活跃会员教程狂人灌水之王

QQ
发表于 2021-4-30 19:38:40 | 显示全部楼层
curl 大法    好
回复

使用道具 举报

4

主题

132

帖子

824

积分

高级会员

Rank: 4

积分
824
金钱
692
HASS币
0
 楼主| 发表于 2021-4-30 21:41:54 | 显示全部楼层
谢谢大神回复,curl 也能抓到开关的状态吗?如开或关的状态
回复

使用道具 举报

4

主题

138

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
金钱
1105
HASS币
0
发表于 2021-5-1 08:50:39 | 显示全部楼层
状态可能不太好抓,要看你的设备有没有状态反馈。
回复

使用道具 举报

4

主题

132

帖子

824

积分

高级会员

Rank: 4

积分
824
金钱
692
HASS币
0
 楼主| 发表于 2021-5-1 12:25:57 | 显示全部楼层
15283928038 发表于 2021-5-1 08:50
状态可能不太好抓,要看你的设备有没有状态反馈。

谢谢,有状态反馈。至少在网页上。:) 我意思,我没有接触过curl,感觉象命令行,可以执行某个指令,但是否可以获取就不清楚了,我研究下:)非常感谢
回复

使用道具 举报

4

主题

132

帖子

824

积分

高级会员

Rank: 4

积分
824
金钱
692
HASS币
0
 楼主| 发表于 2021-5-1 13:00:32 | 显示全部楼层
能否帮我看看,我用curl 抓回来的数据

Last login: Sat May  1 12:26:59 on ttys000
xzf@xzfsMBP ~ % curl -v 192.168.50.1341
* Could not resolve host: 192.168.50.1341
* Closing connection 0
curl: (6) Could not resolve host: 192.168.50.1341
xzf@xzfsMBP ~ % curl -v 192.168.50.131
*   Trying 192.168.50.131...
* TCP_NODELAY set
* Connected to 192.168.50.131 (192.168.50.131) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.50.131
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: close
< Content-Type: text/html
< Cache-Control: no-cache
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 STRICT//EN" "DTD/xhtml1-strict.dtd">
<html>
<head>
<title>PS Audio Power Center - Control Panel</title>
<link href="/style.css" rel="stylesheet" type="text/css" />
<script src="/mchp.js" type="text/javascript"></script>
</head>

<body onLoad="allowAJAX=true;" onUnload="allowAJAX=false;">
<div id="shadow-one"><div id="shadow-two"><div id="shadow-three"><div id="shadow-four">
<div id="page">

<div style="padding:0 0 5px 5px"><img src="/logo.gif" /></div>

<div id="title"><div class="right">PS Audio Power Center - Control Panel</div></div>

<div id="menu">
<a href="/index.htm" onclick="allowAJAX=false;">System Status</a>
<a href="/setup.htm" onclick="allowAJAX=false;">Configuration</a>
<a href="/config.htm" onclick="allowAJAX=false;">Network</a>
</div>
<div id="content">

<h1>Unit: PS Audio P5</h1>

<div id="status">
        <div id="loading" style="display:none">Error: Connection to power center lost.</div>
        <div id="display">
            <div>
                <strong>System Power:</strong><br />
                <div style="padding:3px;"><a id="power" class="unit" onclick="newAJAXCommand('zones.cgi?zone=0');"></a></div>
            </div><br />
            <div style="display:block;width:400px;margin-left: auto;margin-right: auto;">
                    <strong>Zone Power:</strong><br />
                    <a id="zone1" onclick="newAJAXCommand('zones.cgi?zone=1');" onmouseover="hideLayer('zndsp'); showLayer('zAdsp');" onmouseout="hideAll();"></a>
                    <a id="zone2" onclick="newAJAXCommand('zones.cgi?zone=2');" onmouseover="hideLayer('zndsp'); showLayer('zBdsp');" onmouseout="hideAll();"></a>
                    <a id="zone3" onclick="newAJAXCommand('zones.cgi?zone=3');" onmouseover="hideLayer('zndsp'); showLayer('zCdsp');" onmouseout="hideAll();"></a>
                    <a id="zone4" onclick="newAJAXCommand('zones.cgi?zone=4');" onmouseover="hideLayer('zndsp'); showLayer('zDdsp');" onmouseout="hideAll();"></a>
                    <a id="zone5" onclick="newAJAXCommand('zones.cgi?zone=5');" onmouseover="hideLayer('zndsp'); showLayer('zEdsp');" onmouseout="hideAll();" style="display:none;"></a>
                <br style="clear:both;" /><br />
                <div id="zndsp">Zone Details: No Zone Selected</div>
                <div id="zAdsp" style="display:none">Zone A Outlets: Amplifier mc-205 / OUTLET 6</div>
                <div id="zBdsp" style="display:none">Zone B Outlets: Classe ssp-800 / OUTLET 7</div>
                <div id="zCdsp" style="display:none">Zone C Outlets: Dune HD / OUTLET 8</div>
                <div id="zDdsp" style="display:none">Zone D Outlets: SUB15&HDMI / OUTLET 9</div>
                <div id="zEdsp" style="display:none">Zone E Outlets: OUTLET 5 / OUTLET 10</div>
            </div>
        </div>
</div>

<p>For additional help, please contact your custom installer or <a href="http://www.psaudio.com">www.psaudio.com</a>.</p>

</div>

<script type="text/javascript">
<!--
    // Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {
    var mainstat = document.getElementById('display').style.display;
    var loadstat = document.getElementById('loading').style.display;

    // Check if a timeout occurred
    if (!xmlData) {
        mainstat = 'none';
        loadstat = 'inline';
        return;
    }

    // Make sure we're displaying the status display
    mainstat = 'inline';
    loadstat = 'none';

    //unit power status
    if (getXMLValue(xmlData, 'power') == '1')
        document.getElementById('power').style.background = '#3399ff';
    else
        document.getElementById('power').style.background = '#cc0000';

    //loop over all the zoness
    for (i = 1; i <= 5; i++) {
        if (getXMLValue(xmlData, 'zone' + i) == '1') {
            document.getElementById('zone' + i).style.background = '#33cc00';
        }
        else if (getXMLValue(xmlData, 'zone' + i) == '0') {
            document.getElementById('zone' + i).style.background = '#cc0000';
        }
        else
            document.getElementById('zone' + i).style.background = '#ffff00';
    }
}

setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);

// show or hide the layers
function showLayer(layerName){document.getElementById(layerName).style.display="block";}
function hideLayer(layerName){document.getElementById(layerName).style.display="none";}

function hideAll()
{
    hideLayer('zAdsp');
    hideLayer('zBdsp');
    hideLayer('zCdsp');
    hideLayer('zDdsp');
    hideLayer('zEdsp');
    showLayer('zndsp');
}
//-->
</script>

<div class="spacer">&nbsp;</div>
<div id="footer">Copyright &copy; 2010 PS Audio</div>

</div></div></div></div></div>

</body>
</html>
* Closing connection 0

回复

使用道具 举报

5

主题

322

帖子

1345

积分

金牌会员

Rank: 6Rank: 6

积分
1345
金钱
1023
HASS币
0
发表于 2021-5-2 10:04:10 | 显示全部楼层
状态用一个script+正则 来从获取的静态页面取,就像坛子里获取天气一样,就行了!
控制就直接curl应该可以吧!
回复

使用道具 举报

4

主题

132

帖子

824

积分

高级会员

Rank: 4

积分
824
金钱
692
HASS币
0
 楼主| 发表于 2021-5-2 23:31:00 | 显示全部楼层
netsnake 发表于 2021-5-2 10:04
状态用一个script+正则 来从获取的静态页面取,就像坛子里获取天气一样,就行了!
控制就直接curl应该可以 ...

收到,谢谢! 我慢慢研究:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-24 17:32 , Processed in 1.528629 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表