Fjärrstyrning / Mini hemautomation
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Fjärrstyrning / Mini hemautomation
Tänkte det är bra att skriva här så man kanske får lite fart under fötterna...
Jag köpte ett av dessa klassiska fjärrströmbrytarseten, tre on/off för vägguttaget och en fjärrkontroll. Visade sig icke kompatibelt med Nexa eller liknande så då blir det såklart att göra något eget. Lite googlande och jag har hittat hur jag kan styra de med en arduino och en 433Mhz modul. Klicka runt lite på ebay och sedan vänta så fick jag hem vad jag behövde och kopplade ihop och med en enkel arduino-sketch kan jag då styra uttagen med med hjälp av seriekommandon. Nu ska det ju inte vara så enkelt utan måste ju bygga vidare
Mål:
* Slå på/av eluttagen till några lampor
* Mäta temperatur och luftfuktighet (fick med en sensor i arduinons startkit jag börjar med)
* Styras via hemsida i första skeedet och senare via MQTT och openhab (fast det är en senare historia att få igång)
* Strömförsörjning via power over ethernet
* Förpackat i en snygg låda...
Nuläge:
* Testat koden för att slå på av/ uttagen
* Beställt hem det mesta som behövs
* Håller på att få arduinon att fungera med ethernetshielden för att komma vidare...
Mer info kommer efterhand
Jag köpte ett av dessa klassiska fjärrströmbrytarseten, tre on/off för vägguttaget och en fjärrkontroll. Visade sig icke kompatibelt med Nexa eller liknande så då blir det såklart att göra något eget. Lite googlande och jag har hittat hur jag kan styra de med en arduino och en 433Mhz modul. Klicka runt lite på ebay och sedan vänta så fick jag hem vad jag behövde och kopplade ihop och med en enkel arduino-sketch kan jag då styra uttagen med med hjälp av seriekommandon. Nu ska det ju inte vara så enkelt utan måste ju bygga vidare
Mål:
* Slå på/av eluttagen till några lampor
* Mäta temperatur och luftfuktighet (fick med en sensor i arduinons startkit jag börjar med)
* Styras via hemsida i första skeedet och senare via MQTT och openhab (fast det är en senare historia att få igång)
* Strömförsörjning via power over ethernet
* Förpackat i en snygg låda...
Nuläge:
* Testat koden för att slå på av/ uttagen
* Beställt hem det mesta som behövs
* Håller på att få arduinon att fungera med ethernetshielden för att komma vidare...
Mer info kommer efterhand
- Lennart Aspenryd
- Tidigare Lasp
- Inlägg: 12607
- Blev medlem: 1 juli 2011, 19:09:09
- Ort: Helsingborg
Re: Fjärrstyrning / Mini hemautomation
Lite input: Mqtt är världens enklaste att installera. Få den på plats i steg 1, och få din kod att publisera dit. Sen kan du välja hur du vill visa datat, hemsida eller OpenHab (eller kanske en Magic Mirror).
Openhab var lite mer klurig, men leta upp exempel på nätet så går det snabbt att få fram resultat.
Openhab var lite mer klurig, men leta upp exempel på nätet så går det snabbt att få fram resultat.
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Re: Fjärrstyrning / Mini hemautomation
Tack för tillrop och input, uppskattas.
Hemsida före MQTT är framförallt för att det är ungeför det enda som inte är nytt för mig och därför lite kortare startsträcka och någon felkälla mindre...
Lite mer info och bilder. Strömbrytarsetet är sålt av Gelia men tillverkat och Everflourish och säljs tydligen under många namn. Uttagen heter EMW203R och fjärrkontrollen EMW203T, denna hemsidan hjälpte mig att hitta rätt koder.
Enkel testuppkoppling (även om den inte säger mycket men bilder brukar uppskattas)
Också koden jag använde för att testa, helt ostädad och okommenterad...
Styrs med seriella kommandon typ "a11" för att slå på strömbrytare "1" på kanal "a" och "a10" för att slå av den.
Hemsida före MQTT är framförallt för att det är ungeför det enda som inte är nytt för mig och därför lite kortare startsträcka och någon felkälla mindre...
Lite mer info och bilder. Strömbrytarsetet är sålt av Gelia men tillverkat och Everflourish och säljs tydligen under många namn. Uttagen heter EMW203R och fjärrkontrollen EMW203T, denna hemsidan hjälpte mig att hitta rätt koder.
Enkel testuppkoppling (även om den inte säger mycket men bilder brukar uppskattas)
Också koden jag använde för att testa, helt ostädad och okommenterad...
Kod: Markera allt
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
const int tx_pin = 12;
const unsigned long xA = 1376256;
const unsigned long xB = 4521984;
const unsigned long xC = 5308416;
const unsigned long xD = 5505024;
const unsigned int x1 = 5120;
const unsigned int x2 = 17408;
const unsigned int x3 = 20480;
const unsigned int xOn = 343;
const unsigned int xOff = 340;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
// Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(tx_pin);
}
void loop() {
// put your main code here, to run repeatedly:
while (Serial.available() > 0)
{
String text = Serial.readStringUntil('*');
// Serial.println(text.length());
if (text.length() == 3)
{
long data = 0;
switch (text[0])
{
case 'a': data = data + xA; break;
case 'b': data = data + xB; break;
case 'c': data = data + xC; break;
case 'd': data = data + xD; break;
default: break;
}
switch (text[1])
{
case '1': data = data + x1; break;
case '2': data = data + x2; break;
case '3': data = data + x3; break;
default: break;
}
switch (text[2])
{
case '0': data = data + xOff; break;
case '1': data = data + xOn; break;
default: break;
}
mySwitch.send(data, 24);
}
}
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Re: Fjärrstyrning / Mini hemautomation
Så, dagens övningar, glädjeämnen och lärdomar...
Har innan försökt få igång ethernet-shielden med hjälp av arduinos exempel utan resultat men nu tog jag tag i detta igen. Fram med förstoringsglas och lampa och synar shielden så att det är rätt krets etc. Tittar på undersidan och ser något som kan vara en liten tenntråd mellan reset-paddarna, fram med multimeter, hm ska väl inte vara när noll ohm här? Fram med en kniv och skrapar, mäter igen, oändligt motstånd, känns bättre! Nästa steg, flyttar runt sladdar så att alla power on lampor lyser (ja, jag fick ta hjälp av Google, nej, varför läsa innan när man kan pröva sig fram Så länge den magiska röken är kvar är det ingen fara).
Kopplar in alla sladdar och laddar in exemplen igen (dhcp-printer, webserver) och får en ip-adress. Det fungerar! Nu är jag glad!
Fortsätter att fiffla runt i koden och skriva in den fina lilla (trodde jag) hemsidan jag gjort innan i notepad++. Den var inte så liten som jag trodde utan fick veta hur litet minnet i arduinon är så det blev en väldigt förenklad variant. Nu har den iallafall kontakt med omvärlden och jag kan fortsätta en annan dag.
Har innan försökt få igång ethernet-shielden med hjälp av arduinos exempel utan resultat men nu tog jag tag i detta igen. Fram med förstoringsglas och lampa och synar shielden så att det är rätt krets etc. Tittar på undersidan och ser något som kan vara en liten tenntråd mellan reset-paddarna, fram med multimeter, hm ska väl inte vara när noll ohm här? Fram med en kniv och skrapar, mäter igen, oändligt motstånd, känns bättre! Nästa steg, flyttar runt sladdar så att alla power on lampor lyser (ja, jag fick ta hjälp av Google, nej, varför läsa innan när man kan pröva sig fram Så länge den magiska röken är kvar är det ingen fara).
Kopplar in alla sladdar och laddar in exemplen igen (dhcp-printer, webserver) och får en ip-adress. Det fungerar! Nu är jag glad!
Fortsätter att fiffla runt i koden och skriva in den fina lilla (trodde jag) hemsidan jag gjort innan i notepad++. Den var inte så liten som jag trodde utan fick veta hur litet minnet i arduinon är så det blev en väldigt förenklad variant. Nu har den iallafall kontakt med omvärlden och jag kan fortsätta en annan dag.
- Lennart Aspenryd
- Tidigare Lasp
- Inlägg: 12607
- Blev medlem: 1 juli 2011, 19:09:09
- Ort: Helsingborg
Re: Fjärrstyrning / Mini hemautomation
Bra att finna fel som man själv inte är skyldig till!
Hoppas att det blir rätt nu!
Vill också påminna om att Arduino inte är en grej! Det är ett koncept!
Det är därför det har blivit så stort. Du kan idag välja vilken Mikrokontroller du vill ha i Arduinokort.
En del kostar nästan inget och kan dra en tiondel i kräm, en del går 10 gånger fortare än en vanlig Uno och kan hålla 100 gånger mer kod. Somliga har få pinnar ut (Nano) (tillgängliga) och andra har många (Mega).
Så det stora felet med Arduino, det är att folk tror att det är en grej (sak) .
Och då har vi ändå inte sett vad Esp8266 för med sig!
Hoppas att det blir rätt nu!
Vill också påminna om att Arduino inte är en grej! Det är ett koncept!
Det är därför det har blivit så stort. Du kan idag välja vilken Mikrokontroller du vill ha i Arduinokort.
En del kostar nästan inget och kan dra en tiondel i kräm, en del går 10 gånger fortare än en vanlig Uno och kan hålla 100 gånger mer kod. Somliga har få pinnar ut (Nano) (tillgängliga) och andra har många (Mega).
Så det stora felet med Arduino, det är att folk tror att det är en grej (sak) .
Och då har vi ändå inte sett vad Esp8266 för med sig!
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Re: Fjärrstyrning / Mini hemautomation
Visst är det så. Här valde jag en nano för att få den fysiskt liten, dessutom kinaimport för att få det billigt så då får jag ta konsekvenserna...
En hel värld att utforska framöver iallafall
En hel värld att utforska framöver iallafall
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Re: Fjärrstyrning / Mini hemautomation
Såja, nu har jag nått en bit på vägen Hemsidan fungerar, går att tända och släcka lamporna och läser temperatur och luftfuktighet med en DHT11. Behöver jag säga att jag uppskattar arduinon och dess färdiga moduler och bibliotek, det gör det hela enkelt för en nybörjare att klippa och klistra och lära sig något på vägen...
Har laddat ner och installerat MQTT-bibliotek för arduinon, http://pubsubclient.knolleary.net/index.html
Har en raspberry pi med openhabian som jag TROR har Mosquitto installerat.
Börjar så smått förstå mig på publish/subscribe för MQTT men har en bit kvar innan det blir riktigt begripligt.
Har inte begripit hur man läser ett meddelande/topic på arduinon som man "subscibat" på.
Någon vänlig själ som kan ge en pekpinne var man börjar nysta i det hela för just nu läser jag en här och än där och begriper får inget grepp om det?
Nu till nästa steg, MQTTHar laddat ner och installerat MQTT-bibliotek för arduinon, http://pubsubclient.knolleary.net/index.html
Har en raspberry pi med openhabian som jag TROR har Mosquitto installerat.
Börjar så smått förstå mig på publish/subscribe för MQTT men har en bit kvar innan det blir riktigt begripligt.
Har inte begripit hur man läser ett meddelande/topic på arduinon som man "subscibat" på.
Någon vänlig själ som kan ge en pekpinne var man börjar nysta i det hela för just nu läser jag en här och än där och begriper får inget grepp om det?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Fjärrstyrning / Mini hemautomation
Har inte testat själv men det här exemplet ser inte alltför avancerat ut. http://www.hivemq.com/blog/mqtt-client- ... subclient/
I setup() registrerar (set callback) man en funktion som ska köras när det kommer in paket som man prenumererar på.
I reconnect-funktionen sätter han upp subscription till en topic.
Sen i funktionen som heter callback (den man la till i setup) hanteras datat som kommer in från dom topics man prenumererar på.
I setup() registrerar (set callback) man en funktion som ska köras när det kommer in paket som man prenumererar på.
I reconnect-funktionen sätter han upp subscription till en topic.
Sen i funktionen som heter callback (den man la till i setup) hanteras datat som kommer in från dom topics man prenumererar på.
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Re: Fjärrstyrning / Mini hemautomation
Tackar. Har läst på lite mer nu och så svårt ska det nog inte vara Men man kunde inte vara så lat som jag trodde, trodde det skulle gå att bara implementera arduinon och sedan testa mot en enkel androidapp (som såklart bara skulle vara att ladda ner): Men en broker måste till så jag har börjat i den ändan att installera Mosquitto på Raspberry Pin som såklart inte var installerat innan.
Återkommer...
Återkommer...
- LittleFish
- Inlägg: 77
- Blev medlem: 17 juni 2010, 03:44:14
Re: Fjärrstyrning / Mini hemautomation
Så, nu får den anses klar. Fungerar att styra lamporna vi mqtt och till största delen är detta också inlagt i openhab, bara temperaturvisningen kvar att få ordning på...
Koden för den som är intresserad, helt oorganiserad och dåligt kommenterad men kanske kan hjälpa någon nån gång.
Låda beställd men tar nog nån månad innan det sista kan slutföras.
Koden för den som är intresserad, helt oorganiserad och dåligt kommenterad men kanske kan hjälpa någon nån gång.
Kod: Markera allt
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <RCSwitch.h>
//https://github.com/winlinvip/SimpleDHT
#include <SimpleDHT.h>
// Update these with values suitable for your network.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 101);
IPAddress server(192, 168, 1, 100);
EthernetClient ethClient;
PubSubClient client(ethClient);
//Setup for RCSwitch
RCSwitch mySwitch = RCSwitch();
const int tx_pin = 8;
const int retry = 20;
const unsigned long xA = 1376256;
const unsigned long xB = 4521984;
const unsigned long xC = 5308416;
const unsigned long xD = 5505024;
const unsigned int x1 = 5120;
const unsigned int x2 = 17408;
const unsigned int x3 = 20480;
const unsigned int xOn = 343;
const unsigned int xOff = 340;
//Setup for dht11
int pinDHT11 = 5;
SimpleDHT11 dht11;
byte temperature = 0;
byte humidity = 0;
unsigned long previousMillis = 0;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
client.setServer(server, 1883);
client.setCallback(callback);
Ethernet.begin(mac, ip);
// Allow the hardware to sort itself out
delay(1500);
//RCSwitch
mySwitch.enableTransmit(tx_pin);
mySwitch.setRepeatTransmit(retry);
Serial.println("Setup done");
}
String readString;
void loop() {
//Do MQTT stuff
if (!client.connected()) {
reconnect();
}
client.loop();
readTempAndHum();
}
void execute(String command)
{
if (command.length() >= 3 &&
(command[0] == 'a' || command[0] == 'b' || command[0] == 'c' || command[0] == 'd') &&
(command[1] == '1' || command[1] == '2' || command[1] == '3') &&
(command[2] == '0' || command[2] == '1'))
{
Serial.print("Execute command: ");
Serial.println(command);
long data = 0;
switch (command[0])
{
case 'a': data = data + xA; break;
case 'b': data = data + xB; break;
case 'c': data = data + xC; break;
case 'd': data = data + xD; break;
default: break;
}
switch (command[1])
{
case '1': data = data + x1; break;
case '2': data = data + x2; break;
case '3': data = data + x3; break;
default: break;
}
switch (command[2])
{
case '0': data = data + xOff; break;
case '1': data = data + xOn; break;
default: break;
}
mySwitch.send(data, 24);
}
}
void readTempAndHum()
{
//https://www.baldengineer.com/arduino-how-do-you-reset-millis.html 2017-05-15
// Get snapshot of time
unsigned long currentMillis = millis();
// How much time has passed, accounting for rollover with subtraction!
if ((unsigned long)(currentMillis - previousMillis) >= 10000) { //10 sekunder
dht11.read(pinDHT11, &temperature, &humidity, NULL);
previousMillis = currentMillis;
if (client.connected())
{
char buf[2];
String(temperature).toCharArray(buf, 3);
client.publish("room/remote/temp", buf, true);
String(humidity).toCharArray(buf, 3);
client.publish("room/remote/hum", buf, true);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
// Serial.print("Message arrived [");
// Serial.print(topic);
// Serial.print("] ");
// for (int i = 0; i < length; i++) {
// Serial.print((char)payload[i]);
// }
String command = "";
for (int i = 0; i < length; i++) {
command += (char)payload[i];
}
execute(command);
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.println("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("arduinoClient")) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("room/lights");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}