In diesem Artikel beschreibe ich, wie das Noolite MTRF-32-Modul an mein Domoticz-basiertes Smart-Home-Steuerungssystem angeschlossen wird.
Ein wenig über das Haus selbst
Mein Haus ist privat. Es wurden bereits einige Grundlagen eines Domoticz-basierten Smart Home und drahtloser Aktuatoren auf MySensors vorgestellt.
Derzeit werden Türöffnungssensoren, die Einbeziehung von Hausbeleuchtungs-, Temperatur- und Feuchtigkeitssensoren zu Hause und auf der Straße, Sprachinformationen über Ereignisse und Wettervorhersagen implementiert.
Das Haus ist aus Holz, deshalb wollte ich die Beleuchtung nicht wirklich kontrollieren, indem ich die Rollen aus China schloss. Das Ziehen von Drähten ist ebenfalls keine Option. Nach langem Überlegen wurde die Lichtsteuerung an Aggregaten und Noolite-Konsolen durchgeführt und es blieb irgendwie, sich mit Domoticz anzufreunden.
In diesem Moment fiel mir
ein Artikel über das MTRF-32-Modul von Noolite auf. Domoticz unterstützt das Senden von HTTP-GET-Anforderungen. Die Aussicht, Module mit Feedback zu verwenden, winkte ebenfalls, sodass das Modul bestellt wurde.
Über das, was Sie vor dem Schneiden siebenmal messen müssen
Wie sich herausstellte, habe ich nicht ganz das gekauft, was Sie brauchen. Zum Zeitpunkt des Kaufs war ein MTRF-32-Modul verfügbar. Und während ich den Artikel las, sah ich keine Informationen über die Varianten dieser Module. Im Allgemeinen benötigte ich eine USB-Version des MTRF-32-USB.
Sollte klarstellen32 bedeutet die Fähigkeit, über 32 Kanäle zu steuern. Bisher ist auf der noolite-Website ein Modul mit 64 Kanälen verfügbar, mit beiden Optionen mit oder ohne USB. Frage an die Leser von MTRF-32 kann irgendwie auf MTRF-64 aktualisiert werden?
Was getan wird, wird getan. Der Schal wurde verschoben, bis
jemand die fertige Bibliothek der besseren Zeiten auslegte.
Aus irgendeinem Grund sind die besten Zeiten nicht gekommen. Obwohl ich dachte, das System sei beliebt.
Erster Versuch
Nach dem Besuch der Website fand Noolite die NooliteOne-Software für die Arbeit mit dem MTRF-64-USB. Es stellte sich heraus, dass es über einen Com-Port funktioniert, und ich stellte fest, dass sich MTRF-64 von MTRF-64-USB mit einem eingebauten USB-COM-Adapter unterscheidet. Die mitgelieferte Software enthielt Treiber vom FTDI-Chip, und mein Board hatte ein geeignetes Kontaktfeld.
Ich habe den Chip nicht gelötet. Aber ich habe einen USB-COM-Adapter aus dem chinesischen Arduino Nano mit FTDI hergestellt und ihn an die Platine angeschlossen.
Es ist nicht gestartet. Aus irgendeinem Grund konnte NooliteOne meinen Adapter nicht finden. Ich habe bereits angefangen, mich mit der Kompilierung zu befassen, als ich die
Bibliothek für das MT1132-Modul entdeckte.
Zweiter Versuch
Ich habe die Beschreibung der Module verglichen und festgestellt, dass sie sich in Bezug auf die Datenübertragung fast nicht unterscheiden. Die in der Bibliothek für MT1132 implementierte Funktionalität hat mir gereicht (Feedback ist noch nicht erforderlich - es gibt keine geeigneten Netzteile).
Nachdem ich den Code in der Bibliothek korrigiert hatte, erhielt ich Antworten von MTRF-32. Seltsamerweise funktionierte beim ersten Mal alles. Und hier ist, was am Ende passiert ist:
Ardunoo.H
#ifndef ARDUNOO_H
#define ARDUNOO_H
#wenn definiert (ARDUINO) && ARDUINO> = 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <SoftwareSerial.h>
Klasse ArduNoo {
Byte chnl;
SoftwareSerial ns;
Öffentlichkeit:
ArduNoo (Byte rx, Byte tx, Byte ch = 0);
void on (Byte ch = -1);
void off (Byte ch = -1);
void onoff (Byte ch = -1);
void bind (Byte ch = -1);
void entbinden (Byte ch = -1);
Bool-Befehl (Byte-Kanal, Byte-Befehl);
};
#endif
Ardunoo.cpp#include <ardunoo.h>
ArduNoo :: ArduNoo (Byte rx, Byte tx, Byte ch): ns (rx, tx) {
chnl = ch;
ns.begin (9600);
}}
void ArduNoo :: off (Byte ch) {
Befehl (ch, 0);
}}
void ArduNoo :: on (byte ch) {
Befehl (ch, 2);
}}
void ArduNoo :: onoff (byte ch) {
Befehl (ch, 4);
}}
void ArduNoo :: unbind (byte ch) {
Befehl (ch, 9);
}}
void ArduNoo :: bind (Byte ch) {
Befehl (ch, 15);
}}
bool ArduNoo :: Befehl (Byte chnl, Byte Befehl) {
statisches Byte i, r, buf [17] = {171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0172};
int sum = 0;
Memset (buf + 2,0,14); / * Nachrichtentext löschen * /
buf [4] = chnl;
buf [5] = Befehl;
für (i = 0; i <15; ++ i) {// 10
sum + = buf [i];
}}
buf [15] = lowByte (sum); // 10
buf [16] = 172; // 11
für (i = 0; i <17; ++ i) {
ns.write (buf [i]);
}}
// Code debuggen
für (i = 0; i <17; ++ i) {
while (! ns.available ()) delay (10);
r = ns.read ();
Serial.print®;
}}
Serial.println ();
return true;
}}
Ardunoo.ino#include <SoftwareSerial.h>
#include <ardunoo.h>
#define RXpin 10
# TXpin 11 definieren
ArduNoo noo (RXpin, TXpin);
String readString, chString;
void setup () {
Serial.begin (9600);
}}
void loop () {
readString = "";
chString = "";
while (Serial.available ()) {
Verzögerung (3); // Verzögerung, damit sich der Puffer füllen kann
if (Serial.available ()> 0) {
char c = Serial.read (); // holt ein Byte aus dem seriellen Puffer
readString + = c; // macht den String readString
}}
}}
if (readString.length ()> 1 && readString.length () <4) {// wir erwarten 1 Buchstaben und 1 oder 2 Ziffern (ch = 0-31)
für (int i = 1; i <readString.length (); i ++) {
if (isDigit (readString [i])) {
chString.concat (readString [i]);
}}
}}
//Serial.println(readString[0]);
int ch = chString.toInt ();
switch (readString [0]) {
case 'n': // on
noo.on (ch);
Pause;
case 'f': // off
noo.off (ch);
Pause;
case 'x': // umschalten
noo.onoff (ch);
Pause;
case 'b': // binden
noo.bind (ch);
Pause;
case 'u': // aufheben
noo.unbind (ch);
Pause;
case 'y': // auf allen Kanälen
für (int i = 0; i <32; i ++) {
noo.on (i);
Verzögerung (100);
}}
Pause;
case 'z': // aus allen Kanälen
für (int i = 0; i <32; i ++) {
noo.off (i);
Verzögerung (100);
}}
Pause;
}}
}}
}}
Bibliothekslizenz von Zhumatiy SergeyDie MIT-Lizenz (MIT)
Copyright © 2014 Zhumatiy Sergey
Hiermit wird jeder Person, die eine Kopie erhält, kostenlos die Erlaubnis erteilt
dieser Software und der dazugehörigen Dokumentationsdateien (die "Software") zu behandeln
in der Software ohne Einschränkung, einschließlich ohne Einschränkung der Rechte
zu verwenden, zu kopieren, zu ändern, zusammenzuführen, zu veröffentlichen, zu verteilen, Unterlizenzen zu vergeben und / oder zu verkaufen
Kopien der Software und um Personen zuzulassen, für die die Software bestimmt ist
dafür eingerichtet, unter folgenden Bedingungen:
Der oben genannte Copyright-Hinweis und dieser Erlaubnishinweis sind in allen enthalten
Kopien oder wesentliche Teile der Software.
DIE SOFTWARE WIRD "WIE BESEHEN" OHNE JEGLICHE AUSDRÜCKLICHE ODER AUSDRÜCKLICHE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT
STILLSCHWEIGEND, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTGÄNGIGKEIT,
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. In keinem Fall wird das
AUTOREN ODER COPYRIGHT-INHABER HAFTEN FÜR ANSPRÜCHE, SCHÄDEN ODER ANDERE
HAFTUNG, OB BEI VERTRAGS-, TORT- ODER ANDERWEITIGEN MASSNAHMEN AUS,
AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER
SOFTWARE.
Die implementierten Befehle sind Ausschalten, Einschalten, Schalten, Alle einschalten, Alle ausschalten.
Das Ding ist klein, Sie müssen dem COM-Port Befehle geben. Da dies unter Domoticz unter Windows problematisch ist, habe ich beschlossen, eine Konsolenanwendung zu schreiben, die Befehle aus dem Lua-Skript übersetzt. Befehle werden als Startparameter an die Anwendung übergeben.
noo.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
Namespace noo
{
Klassenprogramm
{
statische Leere Main (string [] args)
{
if (args.Length == 2)
{
SerialPort COM = neuer SerialPort (args [0]);
COM.Open ();
COM.WriteLine (args [1]);
COM.Close ();
}}
}}
}}
}}
Befehlsbeispiel:
noo.exe com5 n4 - Schalten Sie das Licht auf Kanal 4 ein. Es wird an die Arduino-Karte am COM5-Port übertragen. Mögliche Werte des zweiten Triggerparameters:
- nX - Kanal X aktivieren
- fX - Kanal X ausschalten
- xX - Kanal X wechseln
- bX - Binden Sie den Power Block an Kanal X.
- uX - Lösen Sie den Power Block von Kanal X.
- yX - Alle Kanäle aktivieren, X einen beliebigen Wert
- zX - Alle Kanäle ausschalten, X einen beliebigen Wert
Lua-Skriptlokaler Sensor1 = 'SWHallWay'
lokaler Sensor2 = 'SWHall'
lokaler Sensor3 = 'SWKitchen'
lokaler Sensor4 = 'SWBedroom'
lokaler Sensor5 = 'BTNLiteOff'
commandArray = {}
if (devicechanged [sensor1] == 'On') then
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n3")
Ende
if (Gerät geändert [Sensor1] == 'Aus') dann
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f3")
Ende
if (Gerät geändert [Sensor2] == 'Ein') dann
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n0")
Ende
if (Gerät geändert [Sensor2] == 'Aus') dann
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f0")
Ende
if (devicechanged [sensor3] == 'On') then
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n1")
Ende
if (Gerät geändert [Sensor3] == 'Aus') dann
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f1")
Ende
if (devicechanged [sensor4] == 'On') then
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n2")
Ende
if (Gerät geändert [Sensor4] == 'Aus') dann
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f2")
Ende
if (Gerät geändert [Sensor5] == 'Aus') dann
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 z9")
Ende
return commandArray
Kurzes
Video