Bonne journée à tous. Le 1er janvier, il n'y a rien à faire, j'ai donc décidé de lancer l'article sur les Giktayms. Dans le cadre du déménagement dans un autre appartement, il existait une option telle qu'un interphone. Tout irait bien, mais courir et ouvrir la porte à tous ceux qui venaient était très ennuyeux, et comme les téléphones, tablettes et ordinateurs sont toujours à distance de marche, seulement à portée de main, il a été décidé de connecter cet avantage au système d'automatisation iobroker déjà en service. Ci-dessous, je décrirai ce qui s'est passé avec cela.On m'a fouetté à cause de ce qui se trouvait sous mes pieds . Par conséquent, tout cela ressemble à ceci.
Comme je possède déjà un merveilleux système d'automatisation iobroker, il a été décidé de s'y connecter pour la possibilité d'une gestion et d'une configuration centralisées des changements de comportement dans une seule interface. Il est temps de choisir comment communiquer le fer et le système général. Cela ne m'est tout simplement pas venu à l'esprit en tant que protocole d'échange à partir de l'émulation de 1 fil pour obtenir des demandes.En conséquence, le protocole mqtt a gagné comme le plus pratique dans ma vision de la situation, et l'échange entre le morceau de fer et iobroker a été mis en œuvre dessus.Sur la tablette, on dirait un onglet avec l'affichage de la caméra actuelle et le contrôle de la
première partie du fer à repasser. Il se compose d'arduino uno, de blindages Ethernet et d'un petit circuit d'adaptation avec une ligne d'interphone. Le schéma lui-même:
Tout est simple ici, l'appel entrant est surveillé par l'optocoupleur et à la réception il appuie simplement sur le pied zéro de l'arduino. L'ouverture de la porte est implémentée sur le relais dans l'état normal, il est toujours fermé, lorsqu'une commande est reçue d'iobroker (ils ont appuyé sur un bouton dans l'interface, automatiquement en fonction de la condition dans le script, une commande d'un télégramme a été reçue) il coupe la ligne pendant 7,5 secondes, tandis que Vizit le prend comme une commande pour ouvrir et démarrer l'invité .De plus, l'optocoupleur vo2 met en œuvre la commutation automatique du téléviseur en mode AV pour l'affichage à partir de la caméra de l'interphone.La deuxième partie est le logiciel, qui est également essentiellement divisé en deux. Le premier est un croquis qui est flashé en arduino et implémente l'échange via le protocole mqtt avec le système 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/#");
}
}
Et le second est un script js pour implémenter l'interaction utilisateur:
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);
}
});
Le système iobroker affiche comment les objets avec lesquels vous pouvez interagir.
À ce stade, le récit amène la paresse à simplifier ses actions de routine jusqu'à une conclusion logique.