Electrokit Buggfix Plus
Aktuellt datum och tid: 16.15 2018-08-17

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 11 inlägg ] 
Författare Meddelande
InläggPostat: 22.26 2017-05-06 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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 ;)


Upp
 Profil  
 
InläggPostat: 00.45 2017-05-07 
Användarvisningsbild

Blev medlem: 18.09 2011-07-01
Inlägg: 8099
Ort: Fredriksdal, Helsingborg
Bravo! Ser fram emot mer information och lite bilder!


Upp
 Profil  
 
InläggPostat: 08.44 2017-05-07 

Blev medlem: 19.03 2015-11-28
Inlägg: 169
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.


Upp
 Profil  
 
InläggPostat: 12.48 2017-05-07 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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.

Bilaga:
IMG_20170507_130859674.png

Bilaga:
IMG_20170507_130916414.png


Enkel testuppkoppling (även om den inte säger mycket men bilder brukar uppskattas)

Bilaga:
20170203_214145.png


Också koden jag använde för att testa, helt ostädad och okommenterad...

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#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);
    }
  }
}


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.


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 21.45 2017-05-08 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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.


Upp
 Profil  
 
InläggPostat: 22.08 2017-05-08 
Användarvisningsbild

Blev medlem: 18.09 2011-07-01
Inlägg: 8099
Ort: Fredriksdal, Helsingborg
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!


Upp
 Profil  
 
InläggPostat: 22.41 2017-05-08 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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 :)


Upp
 Profil  
 
InläggPostat: 20.00 2017-05-16 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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...
Bilaga:
Screenshot_20170516-202655.png


Nu till nästa steg, MQTT
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?


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 10.44 2017-05-17 

Blev medlem: 21.28 2004-10-09
Inlägg: 904
Ort: Västerås
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å.


Upp
 Profil  
 
InläggPostat: 17.30 2017-05-17 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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...


Upp
 Profil  
 
InläggPostat: 21.24 2017-05-24 
Användarvisningsbild

Blev medlem: 02.44 2010-06-17
Inlägg: 54
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.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#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);
    }
  }
}


Låda beställd men tar nog nån månad innan det sista kan slutföras.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 11 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Laseryxa, rogerk8 och 3 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
    Electrokit
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010