祝大家有美好的一天。 1月1日无事可做,所以我决定在Giktayms上划线。与搬到另一间公寓有关,有门铃之类的选择。一切都会好起来的,但为来访者打开门却很烦人,而且由于电话,平板电脑,计算机始终在步行距离之内,只能伸出手,因此决定将此好处与已经投入运营的iobroker自动化系统联系起来。下面我将描述发生了什么。脚下的东西被鞭打了,结果整个事情看起来像这样。
由于我已经有了一个出色的iobroker自动化系统,因此决定连接到该系统,以便在单个界面中进行集中管理和行为更改配置。现在是时候选择熨斗和一般系统的通信方式了。作为从1wire仿真到获取请求的交换协议,这对我来说并没有发生,结果,mqtt协议在我看来是最方便的情况,因此在其中实现了铁件与iobroker之间的交换。在平板电脑上,它看起来像一个选项卡,带有当前相机的显示和
熨斗第一部分的控制。它由arduino uno,以太网屏蔽和带有对讲线路的小型匹配电路组成。该计划本身:
这里的一切都很简单,来电由光耦合器监控,接收时只需按下arduino的零脚即可。在正常状态下,继电器是在常关状态下打开门的,当从iobroker收到命令时(他们按界面中的按钮,根据脚本中的条件自动按下,从电报中收到命令),它断开线路7.5秒,而vizit将其作为打开并启动来宾的命令。此外,光耦合器vo2可以将电视自动切换到AV模式,以便从门电话摄像头显示。第二部分是软件,基本上也分为两部分。第一个是在arduino中刷新的草图,并通过mqtt协议与iobroker系统实现交换。#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
int flag = 0;
#define ring1_pin 0
#define open1_pin 2
#define open2_pin 3
#define mon1_pin 5
#define ID_CONNECT "DoorbellControll"
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 55, 170 };
byte ip[] = { 192, 168, 55, 40 };
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
String strTopic = String(topic);
String strPayload = String((char*)payload);
if (strTopic == "myhome/DoorbellControll/open1") {
if (strPayload == "false") {
digitalWrite(2, HIGH);
}
else if (strPayload == "true") {
digitalWrite(2, LOW);
}
}
else if (strTopic == "myhome/DoorbellControll/open2") {
if (strPayload == "false") digitalWrite(3, LOW);
else if (strPayload == "true") digitalWrite(3, HIGH);
}
else if (strTopic == "myhome/DoorbellControll/mon1") {
if (strPayload == "false") digitalWrite(5, LOW);
else if (strPayload == "true") digitalWrite(5, HIGH);
}
}
void reconnect() {
while (!client.connected()) {
if (client.connect(ID_CONNECT)) {
client.subscribe("myhome/DoorbellControll/#");
} else {
delay(5000);
}
}
}
void setup() {
pinMode(ring1_pin, INPUT);
pinMode(open1_pin, OUTPUT);
digitalWrite(open1_pin, HIGH);
pinMode(open2_pin, OUTPUT);
digitalWrite(open2_pin, LOW);
pinMode(mon1_pin, OUTPUT);
digitalWrite(mon1_pin, LOW);
Ethernet.begin(mac, ip);
if (client.connect("DoorbellControll")) {
client.publish("myhome/DoorbellControll/open1", "false");
client.publish("myhome/DoorbellControll/open2", "false");
client.publish("myhome/DoorbellControll/mon1", "false");
client.publish("myhome/DoorbellControll/ring1", "false");
client.subscribe("myhome/DoorbellControll/#");
}
}
void loop() {
client.loop();
if (digitalRead(ring1_pin) == LOW && flag == 0) {
client.publish("myhome/DoorbellControll/ring1", "true");
flag = 1;
}
else if (digitalRead(ring1_pin) == HIGH && flag == 1) {
client.publish("myhome/DoorbellControll/ring1", "false");
flag = 0;
}
if (!client.connected()) {
reconnect();
client.subscribe("myhome/DoorbellControll/#");
}
}
第二个是用于实现用户交互的js脚本:
createState('doorbellcontroll.rings', 'false');
createState('doorbellcontroll.visopen', 'false');
on("mqtt.0.myhome.DoorbellControll.ring1", function (obj){
if (obj.newState.val == "true" || obj.newState.val === true) {
setState('javascript.0.doorbellcontroll.rings', true);
setTimeout(function() {
}, 60000);
}
});
on("javascript.0.doorbellcontroll.rings", function (obj){
if (obj.newState.val == "true" || obj.newState.val === true) {
setState('sayit.0.tts.text', ' ');
sendTo('telegram.0', ' ');
setState('mqtt.0.myhome.DoorbellControll.mon1', true);
setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "Camers"}');
setTimeout(function () {
setState('mqtt.0.myhome.DoorbellControll.mon1', false);
setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "StartView"}');
setState('javascript.0.doorbellcontroll.rings', false);
}, 30000);
}
});
on("javascript.0.doorbellcontroll.visopen", function (obj){
if (obj.newState.val == "true" || obj.newState.val === true) {
setState('mqtt.0.myhome.DoorbellControll.open1', true);
toLog(' . ', true, 'orange');
setTimeout(function () {
setState('mqtt.0.myhome.DoorbellControll.open1', false);
setState('javascript.0.doorbellcontroll.visopen', false);
}, 7500);
}
});
iobroker系统显示您可以与之交互的对象。
在这一点上,叙述带来了懒惰,从而简化了其日常行动,从而得出了合理的结论。