Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Holmis

Medlemmer
  • Innlegg

    22
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Holmis

  1. Ja, i utgangspunktet. Men da må du bruke et annet program i GW. Programmet i node ute og GW må stemme overens så de snakker samme "språk". GW støtter også bare 1 kanal omgangen, ferdige sensorer veksler gjerne mellom 8 kanaler. 

     

    Du skal få inn data uten temperatur sensor også. Telleren og RSSI, samt spenningen skal overføres via MQTT. Spenningen er ikke helt korrekt, om du googler dette så er det et problem på disse kortene. 

  2. Hei, 

    nedenfor ser du programmet jeg har kjørt på GW. Dette er overhodet ikke effektivisert mtp. sendetid eller batteribruk. Men er enkelt å feilsøke og lesbart med MQTT Explorer når du jobber med det.

    Jeg har kun brukt det til å sende fra node og til GW, men skal fungere å sende begge veier, om du setter den i "lytte" modus når du ikke sender og dropper og bruke sleep funksjonen.

    Si ifra om det er noe du trenger hjelp med. Jeg har ikke sett på dette på en stund, men kan sette opp en test eller prøve å hjelpe om det er noe :)

    /*
       Receiver which receivers messages through a Hope RFM95 LoRa
       Module.
       It sends a feedback signal (checksum) to the receiver
    
       Copyright <2017> <Andreas Spiess>
    
      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
      to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
      and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
    
      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
    
      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      DEALINGS IN THE SOFTWARE.
    
       Based on the Example of the library
    */
    
    #include <SPI.h>
    #include <LoRa.h>
    
    
    #define ESP8266  // comment if you want to use the sketch on a Arduino board
    #define MQTT     // uncomment if you want to foreward the message via MQTT
    //#define OLED        // comment if you do nto have a OLED display
    
    const long freq = 868E6;
    const int SF = 12;
    const long bw = 125E3;
    
    
    #ifdef OLED
    #include "SSD1306.h"
    SSD1306  display(0x3d, 4, 5);
    #endif
    
    #ifdef MQTT
    #include <PubSubClient.h>
    #include <ESP8266WiFi.h>
    //#include <credentials.h>
    
    #define TOPIC "LORA"
    #endif
    
    int counter, lastCounter;
    char mySSID[] = "XXXXX";          // Putt inn wifi detaljer
    char myPASSWORD[] = "XXXXX";
    const char* server = "XXXXXXX";   // putt inn mqtt server
    #ifdef MQTT
    WiFiClient wifiClient;
    PubSubClient client(wifiClient);
    #endif
    
    void setup() {
      Serial.begin(9600);
      Serial.println("LoRa Receiver");
    #ifdef ESP8266
      LoRa.setPins(16, 17, 15); // set CS, reset, IRQ pin
    #else
      LoRa.setPins(10, A0, 2); // set CS, reset, IRQ pin
    #endif
    #ifdef OLED
      display.init();
      display.flipScreenVertically();
      display.setFont(ArialMT_Plain_10);
    
      display.clear();
      display.setTextAlignment(TEXT_ALIGN_LEFT);
      display.setFont(ArialMT_Plain_16);
      display.drawString(0, 10, "Mailbox");
      display.display();
    #endif
    
      if (!LoRa.begin(freq)) {
        Serial.println("Starting LoRa failed!");
    
        while (1);
      }
    
      LoRa.setSpreadingFactor(SF);
      // LoRa.setSignalBandwidth(bw);
      Serial.println("LoRa Started");
    
    #ifdef MQTT
      WiFi.begin(mySSID, myPASSWORD);
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
    
      client.setServer(server, 19377);
      client.setCallback(callback);
    
      if (client.connect("LORAgw", "User", "Passord")) {       // Putt brukernavn og pw på mqtt inn her
        client.publish(TOPIC"/STAT", "Mailbox live");
        // client.subscribe("inTopic");
      }
      Serial.println("MQTT Started");
    #endif
    
      Serial.print("Frequency ");
      Serial.print(freq);
      Serial.print(" Bandwidth ");
      Serial.print(bw);
      Serial.print(" SF ");
      Serial.println(SF);
    }
    
    void loop() {
      // try to parse packet
      int packetSize = LoRa.parsePacket();
      if (packetSize) {
        // received a packet
        String message = "";
        while (LoRa.available()) {
          message = message + ((char)LoRa.read());
        }
        String rssi = "\"RSSI\":\"" + String(LoRa.packetRssi()) + "\"";
        String jsonString = message;
        jsonString.replace("xxx", rssi);
    
        int ii = jsonString.indexOf("Count", 1);
        String count = jsonString.substring(ii + 8, ii + 11);
        counter = count.toInt();
        if (counter - lastCounter == 0) Serial.println("Repetition");
        lastCounter = counter;
    
    
        sendAck(message);
        String value1 = jsonString.substring(8, 11);  // Vcc or heighth
        String value2 = jsonString.substring(23, 26); //counter
    #ifdef OLED
        display.clear();
        display.setTextAlignment(TEXT_ALIGN_RIGHT);
        displayText(40, 0, value1, 3);
        display.setTextAlignment(TEXT_ALIGN_RIGHT);
        displayText(120, 0, String(LoRa.packetRssi()), 3);
        display.setTextAlignment(TEXT_ALIGN_CENTER);
        displayText(60, 35, count, 3);
        display.display();
    #endif
    
    #ifdef MQTT
        if (!client.connected()) {
          reconnect();
        }
        client.publish(TOPIC"/MESSAGE", jsonString.c_str());
    #endif
      }
    #ifdef MQTT
      client.loop();
    #endif
    }
    
    #ifdef MQTT
    void reconnect() {
      // Loop until we're reconnected
      while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        // Attempt to connect
        if (client.connect("Mailbox")) {
          Serial.println("connected");
          // Once connected, publish an announcement...
          client.publish(TOPIC"/STAT", "I am live again");
          // ... and resubscribe
          //  client.subscribe("inTopic");
        } else {
          Serial.print("failed, rc = ");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          // Wait 5 seconds before retrying
          delay(5000);
        }
      }
    }
    
    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]);
      }
      Serial.println();
    }
    #endif
    void sendAck(String message) {
      int check = 0;
      for (int i = 0; i < message.length(); i++) {
        check += message[i];
      }
      // Serial.print("/// ");
      LoRa.beginPacket();
      LoRa.print(String(check));
      LoRa.endPacket();
      Serial.print(message);
      Serial.print(" ");
      Serial.print("Ack Sent: ");
      Serial.println(check);
    }
    
    #ifdef OLED
    void displayText(int x, int y, String tex, byte font ) {
      switch (font) {
        case 1:
          display.setFont(ArialMT_Plain_10);
          break;
        case 2:
          display.setFont(ArialMT_Plain_16);
          break;
        case 3:
          display.setFont(ArialMT_Plain_24);
          break;
        default:
          display.setFont(ArialMT_Plain_16);
          break;
      }
      display.drawString(x, y, tex);
    }
    #endif

    Her er programmet jeg har kjørt på LoRa kortet:

    #include <SPI.h>
    #include <LoRa.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <LowPower.h>
    
    #define VBATPIN A9
    
    const long freq = 868E6;
    const int SF = 12;
    const long bw = 125E3;
    long zeroAltitude;
    
    int counter = 1, messageLostCounter = 0;
    
    void setup() {
        Serial.begin(115200);
        delay(3000);
    
        // Debug message
        Serial.println("Starting...");
      // put your setup code here, to run once:
      LoRa.setPins(8, 4, 7); // set CS, reset, IRQ pin
      Serial.println("HEI HEI");
      if (!LoRa.begin(freq)) {
      while (1);
      }
      LoRa.setSpreadingFactor(SF);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      char message[90];
      int Vcc = readVcc()*100;
      int Temp = readTempDS18B20()*10;
      sprintf(message, "{\"Vcc\":\"%3d\",\"Count\":\"%03d\",\"Lost\":\"%03d\",\"Temp\":\"%3d\", xxx}", Vcc, counter, messageLostCounter,Temp);
    
      sendMessage(message);
      int nackCounter = 0;
      while (!receiveAck(message) && nackCounter <= 5) {
        LoRa.sleep();
        delay(10);
        sendMessage(message);
        nackCounter++;
      }
      if (nackCounter >= 5) {
        messageLostCounter++;
        delay(10);
      } 
      counter++;
      LoRa.sleep();
      // 10min og 40 sek = 60x10+40 = 640 s
      // 640 s / 8 s = 80
      unsigned int sleepCounter;
      for (sleepCounter = 80 ; sleepCounter > 0; sleepCounter--)
      {
        LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);  
      }
      delay(100);
    }
    
    void sendMessage(String message) {
      LoRa.beginPacket();
      LoRa.print(message);
      LoRa.endPacket();
    }
    
    bool receiveAck(String message) {
      String ack;
      bool stat = false;
      unsigned long entry = millis();
      while (stat == false && millis() - entry < 2000) {
        if (LoRa.parsePacket()) {
          ack = "";
          while (LoRa.available()) {
            ack = ack + ((char)LoRa.read());
          }
          int check = 0;
          for (int i = 0; i < message.length(); i++) {
            check += message[i];
          }
          if (ack.toInt() == check) {
            stat = true;
          }
        }
      }
      return stat;
    }
    
    float readTempDS18B20() { 
    
      OneWire oneWire(10);
      DallasTemperature sensors(&oneWire);
      DeviceAddress thermometer;
    
      sensors.begin();
      sensors.getAddress(thermometer, 0);
      sensors.setResolution(thermometer, 12);
      sensors.requestTemperatures();
      float temp = sensors.getTempC(thermometer);
      Serial.println(temp);
      return temp;
    }
    
    float readVcc() {
      long result;
      float measuredvbat = analogRead(VBATPIN);
      measuredvbat *= 2;    // we divided by 2, so multiply back
      measuredvbat *= 3.3;  // Multiply by 3.3V, our reference voltage
      measuredvbat /= 1024; // convert to voltage
      result = measuredvbat;
      Serial.println(result);
      return measuredvbat;
    }

     

    • Like 2
  3. Sitat

    Jeg brukte en CAT6-kabel og rensket endene på lederne. Tvinnet lederne sammen pr. farge, og brukte orange for A, grønn for B og brun for G.

    Ved sammenkoble parret forsvinner vel hovedfordelen med å bruke revolvert-kabel? Tverrsnitt er vel ikke et tema opp til 1200m med Cat 6 kabel og rs485. Ikke at jeg tror du vil merke forskjell i et hus, men prinsippielt. 

     

    17 timer siden, JohnMartin skrev:

    Kanskje et dumt spørsmål, men hvis jeg ønsker å koble til mer utstyr. 

    Er det da bare å koble ledningene til samme interface. Og så vil enhetene løse kommunikasjonen ved adressen som settes?

    Eller trenger man 1 interface for hver enhet man vil koble til?

    Rs485 skal støtte multidrop, altså at du kobler mer utstyr i parallell. Men det må være samme spesifikasjoner (baud rate, pairity, stop bit, og forskjellig adresse)

    • Like 1
  4. Takk for bra svar :)

    Da har jeg planer om å gå for Dali på hver enkelt lampe.

    På bad er det krav om to polet brudd om det ikke er SELV, på downlightene jeg tenker å bruke er det SELV, så det er greit at jeg ikke må ha to polet brudd, men må jeg ikke allikevel ha en form for enpolet brudd lokalt? Eller er det godkjent å skru av disse med Dali? Syntes ikke jeg finner dette helt klart noe sted.

  5. 8 timer siden, ATWindsor skrev:

    Personlig har jeg et sentralisert system, om det er bedre kan diskuteres, lettere å administrere og forandre, men krever mer kabling. Det endel gjør er å bruke DALI med en DALI-knx-gateway til lys, da endel lys støtter dali direkte, og det gir deg bedre dimming osv, men det begrenser deg til lys og drivere som støtter dali, skal du ha led?

    Ja tenker å ha noe LED spotter og kanskje noen striper. Dali virker interessant, ville du da hatt 230V og dali i samme kabel fra tavla til hver spot "gruppe"? Eller alle dali lysene i huset i et ring nettverk med både 230V og dali? 

    Er lamper med innebygget Dali å foretrekke fremfor felles driver/trafo/dimmer med Dali? 

    Vil man da ha bryterne/bevegelsesfølere på KNX eller dali?

     

  6. Hei jeg har nå en ETS Lite lisens på vei,  og skal i gang med å bygge hus hvor jeg tenker å bruke KNX. Vil dere anbefale å trekke alt av lys, samt varmekabel på badene til tavla og ha alle aktuatorer der, eller ha et mer distribuert system? Resten av varmen tenker jeg å ha vannbåren. Varmekabel på badene er bare i tillegg til vannbåren, for å være sikker på å ikke å ha kalde fliser :)

     

    Etter som jeg kun har ETS Lite lisens så må jeg lage flere prosjekter,  kan disse snakke med hverandre? Kan alle prosjektene gå igjennom samme ethernet gateway? 

     

    Tenker å ha Openhab som system på toppen av KNX. 

     

    Jeg vil gjerne ha innspill og gode tips.

  7. På 6.3.2019 den 14.03, mk1 black limited skrev:

    Da er det bestilt. Noen som er gode på Arduino? :) :D 

    Si ifra når du får det, så kan jeg sende programmet jeg bruker så du har et utgangspunkt, samt hjelpe om det er noen spørsmål. Jeg er ikke veldig god, men får det til å funke :)

    • Like 1
  8. På 28.2.2019 den 8.25, amund7 skrev:

    Problemene var i flere lag, først at den MBUS-til-USB-tingen (med sort boks og ledning) ikke funket ordentlig, og returnerte bare tull et stykke ut i pakkene.

    Hvordan løste du dette? 

    På 28.2.2019 den 8.25, amund7 skrev:

    Bruker nå Python-programmet som var lagt ut litt lenger opp her.

    Har du gjort noen endringer, eller bruker du det som det er?

     

  9. Jeg har i klar sikt fått 3.7 km under enkle tester med å ha den i dashbordet i bilen. Uten klar sikt har jeg klart 0.5-2km.

    Begge punktene på bildene nedenfor har jeg sendt pakke og mottat. Fresnelsonen har jeg ikke stilt på og står til 0.6 i kalkulatoren

    SmartSelect_20190208-082619_Gallery.jpg

    SmartSelect_20190208-082655_Gallery.jpg

    • Like 1
  10. Et LoRa kort fra BS France av typen LoRa32u4 til en LoRaGO dock som qateway og til MQTT på lokalnettet over WiFi Jeg kjører sjøl dette. De kommer med micro-USB for lasting av program og strømtilførsel om du ikke vil bruke batteri.

    Programmeres i Arduino.

    De kommer i 868MHz som er åpen frekvens i Norge.

    • Like 2
  11. På 5.2.2019 den 14.52, OlavT skrev:

    Takk for all hjelp. Da har jeg kode som leser og tolker alle Aidon HAN meldingene.

     

    Det er nyttig å kunne sjekke dataene fra strømmåleren. Synes det er merkelig mye aktivitet på hytta som står med 6 grader innetemperatur. Det er sikkert panelovnene, men de går i såfall av og på hele tiden. Hadde trodd de skulle ha en hysterese som gjorde at de tok seg litt lengre pauser. Jeg får dobbeltsjekke etterhvert. Uansett artig og kunne få data.

    Vil du dele koden din, da jeg har koblet opp en ESP mot HAN porten men får dette i Serial Monitor:
    HAN data is valid
    Meter type Aidon is not yet implemented

     

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.