242 359 läst · 1 010 svar
242k läst
1,0k svar
Bygga egna sensorer - Hemautomation
Nej inte Sensor-noder. Jag har implementerat en klass-hierarki som ser ut så här: Gateway->Relay->Sensor.
Så om din sketch initierar en Relay-klass kommer den också att agera relä för meddelanden från andra noder. Men det krävs också att du håller din nod vaken och med jämna mellanrum anropar messageAvailable() som sköter "pumpningen" av data.
Så det är bara att ändra till Relay för några strategiska noder (om har ett stort hus).
Så om din sketch initierar en Relay-klass kommer den också att agera relä för meddelanden från andra noder. Men det krävs också att du håller din nod vaken och med jämna mellanrum anropar messageAvailable() som sköter "pumpningen" av data.
Så det är bara att ändra till Relay för några strategiska noder (om har ett stort hus).
När jag skapar ett relä kommer enheten upp i Veran. Det verkar fungera fint. Men hur gör jag för att "dra" relät?
Jag valde att skapa ny scen och sedan valde jag enheten och därefter "Send command".
Sedan står det variablID. Iom att enheten har ID 1, antar jag att här ska stå just 1.
Sedan står det Value. För att dra relät skickar jag 1 även här.
Men den tar inte emot detta. När jag kollar i loggern på Veran så är nästan allt som finns där förknippat med denna reläkontroll, ska det verkligen strömma data så hela tiden..?
Jag valde att skapa ny scen och sedan valde jag enheten och därefter "Send command".
Sedan står det variablID. Iom att enheten har ID 1, antar jag att här ska stå just 1.
Sedan står det Value. För att dra relät skickar jag 1 även här.
Men den tar inte emot detta. När jag kollar i loggern på Veran så är nästan allt som finns där förknippat med denna reläkontroll, ska det verkligen strömma data så hela tiden..?
![Skärmklipp.PNG](https://static.byggahus.se/attachments/images/medium/84/84992-5e445abf3080991762dea0356f99cb59.jpg)
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Jag använde din kod du skrev för att dra relät.. Sedan ska det dras tillbaka direkt efter 500 ms.. Men inon kommer ju inte fram till den..
// Example sketch showing how to control physical relays.
#include <Relay.h>
#include <SPI.h>
#include <EEPROM.h>
#include <RF24.h>
// Set RADIO_ID to something unique in your sensor network (1-254)
// or set to AUTO if you want gw to assign a RADIO_ID for you.
#define RADIO_ID 1
#define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 1
#define RELAY_ON 0
#define RELAY_OFF 1
Relay gw(9,10);
void setup()
{
Serial.begin(9600); // Used to write debug info
gw.begin(RADIO_ID);
// Register all sensors to gw (they will be created as child devices)
for (int i=0; i<NUMBER_OF_RELAYS;i++) {
gw.sendSensorPresentation(RELAY_1+i, S_LIGHT);
}
// Fetch relay status
for (int i=0; i<NUMBER_OF_RELAYS;i++) {
// Make sure relays are off when starting up
digitalWrite(RELAY_1+i, RELAY_OFF);
// Then set relay pins in output mode
pinMode(RELAY_1+i, OUTPUT);
// Request/wait for relay status
gw.getStatus(RELAY_1+i, V_LIGHT);
setRelayStatus(gw.getMessage()); // Wait here until status message arrive from gw
}
}
/*
* Example on how to asynchronously check for new messages from gw
*/
void loop()
{
if (gw.messageAvailable()) {
message_s message = gw.getMessage();
setRelayStatus(message);
}
}
void setRelayStatus(message_s message) {
if (message.header.messageType=M_SET_VARIABLE &&
message.header.type==V_LIGHT) {
int incomingRelayStatus = atoi(message.data);
if (incomingRelayStatus==1) {
digitalWrite(RELAY_1, RELAY_ON);
delay(500); // wait for 500 ms
digitalWrite(RELAY_1, RELAY_OFF);
// Send off status back to vera
gw.sendVariable(0, V_LIGHT, "0");
}
// Change relay state
//digitalWrite(message.header.childId, incomingRelayStatus==1?RELAY_ON:RELAY_OFF);
// Write some debug info
Serial.print("Incoming change for relay on pin:");
Serial.print(message.header.childId);
Serial.print(", New status: ");
Serial.println(incomingRelayStatus);
}
}
// Example sketch showing how to control physical relays.
#include <Relay.h>
#include <SPI.h>
#include <EEPROM.h>
#include <RF24.h>
// Set RADIO_ID to something unique in your sensor network (1-254)
// or set to AUTO if you want gw to assign a RADIO_ID for you.
#define RADIO_ID 1
#define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 1
#define RELAY_ON 0
#define RELAY_OFF 1
Relay gw(9,10);
void setup()
{
Serial.begin(9600); // Used to write debug info
gw.begin(RADIO_ID);
// Register all sensors to gw (they will be created as child devices)
for (int i=0; i<NUMBER_OF_RELAYS;i++) {
gw.sendSensorPresentation(RELAY_1+i, S_LIGHT);
}
// Fetch relay status
for (int i=0; i<NUMBER_OF_RELAYS;i++) {
// Make sure relays are off when starting up
digitalWrite(RELAY_1+i, RELAY_OFF);
// Then set relay pins in output mode
pinMode(RELAY_1+i, OUTPUT);
// Request/wait for relay status
gw.getStatus(RELAY_1+i, V_LIGHT);
setRelayStatus(gw.getMessage()); // Wait here until status message arrive from gw
}
}
/*
* Example on how to asynchronously check for new messages from gw
*/
void loop()
{
if (gw.messageAvailable()) {
message_s message = gw.getMessage();
setRelayStatus(message);
}
}
void setRelayStatus(message_s message) {
if (message.header.messageType=M_SET_VARIABLE &&
message.header.type==V_LIGHT) {
int incomingRelayStatus = atoi(message.data);
if (incomingRelayStatus==1) {
digitalWrite(RELAY_1, RELAY_ON);
delay(500); // wait for 500 ms
digitalWrite(RELAY_1, RELAY_OFF);
// Send off status back to vera
gw.sendVariable(0, V_LIGHT, "0");
}
// Change relay state
//digitalWrite(message.header.childId, incomingRelayStatus==1?RELAY_ON:RELAY_OFF);
// Write some debug info
Serial.print("Incoming change for relay on pin:");
Serial.print(message.header.childId);
Serial.print(", New status: ");
Serial.println(incomingRelayStatus);
}
}
Mina tester så här långt klarar ~10 meter med en innervägg och en yttervägg (tegel) mellan. Sen går det kanske längre...radiomoduler som @hek kör med
Jag körde din vanliga relä-kontroll istället för den specialen du skrev i forumet som inte fungerade..
Men när jag från Veran styr relät får jag detta i loggen i Veran:
luup_log:205: Arduino: Sending command: 2;7;1;2;0 <0x302ae680>
01 11/24/13 0:07:22.326 luup_log:205: Arduino: 0;0;4;11;Relaying message back to gateway. <0x2feae680>
01 11/24/13 0:07:22.326 luup_log:205: Arduino: Log: Relaying message back to gateway. <0x2feae680>
01 11/24/13 0:07:22.336 luup_log:205: Arduino: 0;0;4;11;Sending message: from=0, to=2, childId=7, mtype=1, type=2, crc=57, payload='0 <0x2feae680>
01 11/24/13 0:07:22.336 luup_log:205: Arduino: Log: Sending message: from=0, to=2, childId=7, mtype=1, type=2, crc=57, payload='0 <0x2feae680>
01 11/24/13 0:07:22.337 luup_log:205: Arduino: ', sent via 0 <0x2feae680>
01 11/24/13 0:07:22.338 luup_log:205: Arduino: Receive error: Unknown data: ', sent via 0 <0x2feae680>
01 11/24/13 0:07:22.526 luup_log:205: Arduino: 0;0;4;11;Send failed. No ack received. <0x2feae680>
01 11/24/13 0:07:22.526 luup_log:205: Arduino: Log: Send failed. No ack received. <0x2feae680>
Men när jag från Veran styr relät får jag detta i loggen i Veran:
luup_log:205: Arduino: Sending command: 2;7;1;2;0 <0x302ae680>
01 11/24/13 0:07:22.326 luup_log:205: Arduino: 0;0;4;11;Relaying message back to gateway. <0x2feae680>
01 11/24/13 0:07:22.326 luup_log:205: Arduino: Log: Relaying message back to gateway. <0x2feae680>
01 11/24/13 0:07:22.336 luup_log:205: Arduino: 0;0;4;11;Sending message: from=0, to=2, childId=7, mtype=1, type=2, crc=57, payload='0 <0x2feae680>
01 11/24/13 0:07:22.336 luup_log:205: Arduino: Log: Sending message: from=0, to=2, childId=7, mtype=1, type=2, crc=57, payload='0 <0x2feae680>
01 11/24/13 0:07:22.337 luup_log:205: Arduino: ', sent via 0 <0x2feae680>
01 11/24/13 0:07:22.338 luup_log:205: Arduino: Receive error: Unknown data: ', sent via 0 <0x2feae680>
01 11/24/13 0:07:22.526 luup_log:205: Arduino: 0;0;4;11;Send failed. No ack received. <0x2feae680>
01 11/24/13 0:07:22.526 luup_log:205: Arduino: Log: Send failed. No ack received. <0x2feae680>
"Receive error: Unknown data..." behöver man inte bry sig på (beror på debugutskrifter och längd-begränsning i veran mottagningsprotokoll)..
Däremot "Send failed" betyder att kommandot till din sensor (troligtvis) inte gick fram. Har du sensorn inkopplad i dator i närheten av gatewayen kan du ju se om meddelandet gått fram.
Däremot "Send failed" betyder att kommandot till din sensor (troligtvis) inte gick fram. Har du sensorn inkopplad i dator i närheten av gatewayen kan du ju se om meddelandet gått fram.
Jag har ni även fått Light Sensor och PIR Sensorn att fungera. Samt testat dem med Triggers i Veran. Nu kan mina Wireless Modules inte komma fort nog ![Blinkar ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Samt blir nog en beställning på 5st Arduino Mini och några övriga tillbehör för andra sensorer. För detta är j*kligt roligt![Glad :) :)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Är det någon som sitter på 3D-ritningar på lådor för sensorerna? Samt hade du @Hek ritningen för gateway? Kan vara så att jag kan gå och få använda en 3D-skrivare. Då kanske man ska ta chansen att skriva ut lite lådor.
Samt blir nog en beställning på 5st Arduino Mini och några övriga tillbehör för andra sensorer. För detta är j*kligt roligt
Är det någon som sitter på 3D-ritningar på lådor för sensorerna? Samt hade du @Hek ritningen för gateway? Kan vara så att jag kan gå och få använda en 3D-skrivare. Då kanske man ska ta chansen att skriva ut lite lådor.
Hur gör man om man ifrån Datamine vill logga alla värden som sparas för exempelvis temperaturen?
Har en annan fråga också.. När jag fick in temperaturen i Vera.. Sedan ändrade jag namnet på "Temperatur-kontrollen" till något annat än "Arduino Temp 4:0". När jag gjorde det laddades allt om, och då stod inte längre temperaturen kvar i kontrollen. Även "Parent node" i den andra enheten som tillhör samma försvann, där står nu inte längre GW.
Inte ska väll detta försvinna för man ändrar ett namn och sedan reload??
Har en annan fråga också.. När jag fick in temperaturen i Vera.. Sedan ändrade jag namnet på "Temperatur-kontrollen" till något annat än "Arduino Temp 4:0". När jag gjorde det laddades allt om, och då stod inte längre temperaturen kvar i kontrollen. Även "Parent node" i den andra enheten som tillhör samma försvann, där står nu inte längre GW.
Inte ska väll detta försvinna för man ändrar ett namn och sedan reload??
Redigerat:
@zuper
Du loggar precis som vanligt. Du väljer enhet och variabel (CurrentTemperature).
@pb76
Har blivit medlem i Fabriken/Stapeln i Malmö efter 3D-skrivar-kursen i onsdags.. där kan jag låna 3D skrivare och laserskärare och en massa annat kul. Kommer nog bygga lådor där och man kan säkert hitta något att utgå ifrån på thingiverse.
http://www.thingiverse.com/thing:159417
@Hoffan
Jo. man kan "mecka" med servot så det går att köra ungefär som en stegmotor. Jag satt faktiskt och labbande med en stegmotor igår. Men jag vet inte riktigt klok på hur jag skall mappa den mot Veran enhet för persienner/blinds. Där man har en max/min slider. Går lixom inte applicera på en motor om man inte lägger in max/min antal steg den skall kunna hoppa i sketchen.
Du loggar precis som vanligt. Du väljer enhet och variabel (CurrentTemperature).
@pb76
Har blivit medlem i Fabriken/Stapeln i Malmö efter 3D-skrivar-kursen i onsdags.. där kan jag låna 3D skrivare och laserskärare och en massa annat kul. Kommer nog bygga lådor där och man kan säkert hitta något att utgå ifrån på thingiverse.
http://www.thingiverse.com/thing:159417
@Hoffan
Jo. man kan "mecka" med servot så det går att köra ungefär som en stegmotor. Jag satt faktiskt och labbande med en stegmotor igår. Men jag vet inte riktigt klok på hur jag skall mappa den mot Veran enhet för persienner/blinds. Där man har en max/min slider. Går lixom inte applicera på en motor om man inte lägger in max/min antal steg den skall kunna hoppa i sketchen.
Nu fick jag lite tid över och försöker få igång detta igen =)
Testar med en pir och de kommunicerar definitivt med varandra men det fungerar inte riktigt...
Log från sensorn:
Sending to 0, message=0;0;0;1;1.3
Message sent (ack)
0
Sending to 0, message=0;0;1;18;0.3
Message sent (ack)
1
Sending to 0, message=0;0;1;18;1.3
Message sent (ack)
0
Sending to 0, message=0;0;1;18;0.3
Message sent (ack)
1
Sending to 0, message=0;0;1;18;1.3
Message sent (ack)
0
Sending to 0, message=0;0;1;18;0.3
Message sent (ack)
och från gw:
0;0;4;11;Arduino startup complete.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
Testar med en pir och de kommunicerar definitivt med varandra men det fungerar inte riktigt...
Log från sensorn:
Sending to 0, message=0;0;0;1;1.3
Message sent (ack)
0
Sending to 0, message=0;0;1;18;0.3
Message sent (ack)
1
Sending to 0, message=0;0;1;18;1.3
Message sent (ack)
0
Sending to 0, message=0;0;1;18;0.3
Message sent (ack)
1
Sending to 0, message=0;0;1;18;1.3
Message sent (ack)
0
Sending to 0, message=0;0;1;18;0.3
Message sent (ack)
och från gw:
0;0;4;11;Arduino startup complete.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.
0;0;4;11;Received message: from=0, to=33, childId=227, mtype=2, type=51, crc=1, payload=''
0;0;4;11;Message crc error.