LaCrosseGateway - LaCrosse, PCA301 und EC3000 über wifi mit ESP8266 ohne Arduino

Begonnen von HCS, 07 November 2015, 14:39:36

Vorheriges Thema - Nächstes Thema

HCS

Zitat von: sash.sc am 16 August 2019, 09:48:19
RFM95? LORA WAN?
RFM95? LORA WAN?
Für einen Eigenbau-Pegel-Sensor der sehr weit weg sitzt.
Spread Spectrum Modulation für die Datenübertragung aber kein LoRa WAN.

sash.sc

D. H. RFM95 am Sender in Empfänger dran, und die Kiste überträgt die Daten über eine größere Entfernung. Von welcher Strecke reden wir hier?

Gruß Sascha

Gesendet von meinem MI 9 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

HCS

Zitat von: sash.sc am 16 August 2019, 10:27:57
Von welcher Strecke reden wir hier?
50 Meter, erst mal quer durch ein Gebäude durch und dann in ein weiteres Gebäude rein in den Keller, wo der Empfänger sitzt.
Das hat der RFM69 mit FSK nicht geschafft.

sash.sc

Ich wollte eigentlich einen Sensor mit bme280 und nem Licht Sensor bauen, der ein bißchen weiter weg ist. Mit nem RFM95 würde es ja klappen. Hat schon jemand einen Sensor mit den beiden Komponenten verbaut? Bzw gebaut?

Gruß Sascha

Gesendet von meinem MI 9 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

PeMue

Zitat von: sash.sc am 16 August 2019, 12:23:17
Ich wollte eigentlich einen Sensor mit bme280 und nem Licht Sensor bauen, der ein bißchen weiter weg ist. Mit nem RFM95 würde es ja klappen. Hat schon jemand einen Sensor mit den beiden Komponenten verbaut? Bzw gebaut?
Nein, ist aber auf meiner ToDo Liste.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

HCS

Zitat von: sash.sc am 16 August 2019, 12:23:17
Ich wollte eigentlich einen Sensor mit bme280 und nem Licht Sensor bauen, der ein bißchen weiter weg ist. Mit nem RFM95 würde es ja klappen. Hat schon jemand einen Sensor mit den beiden Komponenten verbaut? Bzw gebaut?
Zitat von: PeMue am 16 August 2019, 12:37:01
Nein, ist aber auf meiner ToDo Liste.

Da hätte ich evtl. ansatzweise etwas.

Das LGW kann Stand heute den RFM95.
WICHTIG: nicht für LaCrosse, EC3000, PCA301, usw.

Man baut ein ganz normales LGW und verwendet bei einem Radio (z.B. Radio#1) einen RFM95 anstatt einem RFM69.
Das LGW erkennt den RFM95 automatisch und man sollte auf Hardware-Page des LGW das hier sehen:
Radio #1 RFM95 868250 kHz    LoRa

Für den Sensor
Man nimmt z.B. einen Arduino Pro Mini 3,3V 8MHz und packt einen RFM95 dran
3.3V -> 3.3V
GND -> GND
NSS -> 10
MOSI -> 11
MISO -> 12
SCK -> 13

Man schreibt einen Arduino-Sketch, der die RFMxx.cpp/.h, die beim LGW dabei ist, verwendet.
Dieses Beispiel sendet Temperatur, Feuchte und Luftdruck so, dass es dem LGW und FHEM als Wetterstation erscheint:

#include "Arduino.h"
#include "SPI.h"
#include "RFMxx.h"

RFMxx rfm(11, 12, 13, 10);

void setup() {
  Serial.begin(57600);
  delay(100);

  SPI.begin();
  rfm.Begin();
  Serial.println("Radio: " + rfm.GetRadioName());
  if(rfm.IsConnected() && rfm.GetRadioType() == RFMxx::RadioType::RFM95W) {
    rfm.InitializeLoRa();
    rfm.SetFrequency(868250);
  }

}

void loop() {
  uint8_t sensorID = 0xAA;
  float measuredTemperature = 22.2;
  uint8_t measuredHumidity = 33;
  uint16_t measuredPressure = 999;

  char buffer[128];
  sprintf(buffer, "OK WS %i 2 %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
    sensorID,
    (uint8_t)((uint16_t)(round(measuredTemperature * 10 + 1000)) >> 8),
    (uint8_t)(round(measuredTemperature * 10 + 1000)),
    measuredHumidity,
    255, 255, // no Rain
    255, 255, // no WindDirection
    255, 255, // no WindSpeed
    255, 255, // no WindGust
    0,        // Flags
    (uint8_t)((uint16_t)round(measuredPressure * 10) >> 8),
    (uint8_t)((uint16_t)round(measuredPressure * 10)));

  rfm.SendString(buffer);

  delay(5000);
}


Die measured... muss man natürlich noch mittels angeschlossener Sensoren messen  ;)

Nach einem "set myLGW LaCrossePairForSec 60 ignore_battery" bekommt man ein LaCrosse_AA device.
_AA weil  sensorID = 0xAA;

Und da drin die Daten:

Internals:
   DEF        AA
   FUUID      5d58e660-f33f-4c99-8eb4-7f1b15186b16fd18
   IODev      lgw215
   LASTInputDev lgw215
   LaCrosse_lastRcv 2019-08-18 09:11:37
   MSGCNT     817
   NAME       LaCrosse_AA
   NR         184
   STATE      T: 22.2 H: 33
   TYPE       LaCrosse
   addr       AA
   battery_new 0
   bufferedH  33
   bufferedT  22.2
   corr1      0
   corr2      0
   lgw215_MSGCNT 817
   lgw215_TIME 2019-08-18 09:11:37
   previousH  33
   previousR  0
   previousT  22.2
   sensorType 2=NodeSensor
   READINGS:
     2019-08-18 09:11:37   battery         ok
     2019-08-18 09:11:37   error           0
     2019-08-18 09:11:37   humidity        33
     2019-08-18 09:11:37   pressure        999
     2019-08-18 09:11:37   temperature     22.2
Attributes:
   IODev      lgw215
   room       LaCrosse



Das alles geht Stand heute.

Nun die schlechte Nachricht: illuminance würde auch fast gehen, das 36_LaCrosseGateway.pm und auch das 36_LaCrosse.pm kann sie. Nur ist der payload-string im LGW für den RFM95 aktuell zu kurz dafür, weil die erst ganz hinten kommt. Das müsste ich im LGW noch anpassen, dann sollte das auch funktionieren.

Die gute Nachricht: für den BME280 und den BH1750 kann man wohl sehr einfach die Libs aus dem LGW in den Sketch oben einbauen, dann hat man die Werte.

Die schlechte Nachricht: Zeit habe ich eigentlich so gut wie keine.



HCS

Ach übrigens: für die Einhaltung der 1%-Regel ist jeder selbst verantwortlich, mein Beispiel oben verletzt sie definitiv.

sash.sc

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

PeMue

Hallo HCS,

Zitat von: HCS am 18 August 2019, 09:32:08
Die schlechte Nachricht: Zeit habe ich eigentlich so gut wie keine.
ginge das auch mit einem seriellen Interface (z.B. mit 57600 baud)? Ich würde dann auf dem LGW nur die Definition der Schnittstelle machen und die Weiterverarbeitung selber (z.B. per ECMD, o.ä.). Wenn nicht, programmiere ich mir etwas selber und mache mir auch das Interface selber (Platine ist schon in groben Zügen fertig).

Danke + Gruß

Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

HCS

Zitat von: PeMue am 18 August 2019, 11:00:45
Hallo HCS,
ginge das auch mit einem seriellen Interface (z.B. mit 57600 baud)?
Nein, das Problem liegt nicht hinter dem LGW sondern im LGW.
Da muss ich ran, hilft nichts.

Aber Du hast ja einen Softwarewartungsvertrag ...  ;) ;D

Lass mich erst mal schauen, was ich eigentlich ändern muss.

HCS

Zitat von: HCS am 18 August 2019, 11:21:05
Da muss ich ran, hilft nichts.
OK, war dran.

Den erforderlichen Umbau im LGW und der verwendeten RFMxx.cpp/.h habe ich betamäßig hinbekommen.
Und dann auch noch den Sensor eurer Träume test-implementiert (also mit BH1750 und BME280)
Alle libs (RFMxx, BH1750 und BME280) kann man dem LGW-Source (wenn ich die 1.34 dann veröffentliche) klauen.

Der Sensor sieht dann so aus:

#include "Arduino.h"
#include "SPI.h"
#include "Wire.h"
#include "RFMxx.h"
#include "I2CBase.h"
#include "BH1750.h"
#include "BME280.h"

RFMxx rfm(11, 12, 13, 10);
BH1750 bh1750;
BME280 bme280;

void setup() {
  Serial.begin(57600);
  delay(250);

  Wire.begin();
  Serial.println(bh1750.TryInitialize(0x23) ? "BH1750 OK" : "no BH1750");
  Serial.println(bme280.TryInitialize(0x76) ? "BME280 OK" : "no BME280");
 
  SPI.begin();
  rfm.Begin();
  Serial.println("Radio: " + rfm.GetRadioName());
  if(rfm.IsConnected() && rfm.GetRadioType() == RFMxx::RadioType::RFM95W) {
    rfm.InitializeLoRa();
    rfm.SetFrequency(868250);
  }

}

void loop() {
  uint8_t sensorID = 0xAA;
  float measuredTemperature = bme280.GetTemperature();
  uint8_t measuredHumidity = bme280.GetHumidity();
  uint16_t measuredPressure = bme280.GetPressure();
  uint32_t measuredLUX = bh1750.GetIlluminance();

  char buffer[255];
  sprintf(buffer, "OK WS %i 5 %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
    sensorID,
    (uint8_t)((uint16_t)(round(measuredTemperature * 10 + 1000)) >> 8),
    (uint8_t)(round(measuredTemperature * 10 + 1000)),
    measuredHumidity,
    255, 255,       // no Rain
    255, 255,       // no WindDirection
    255, 255,       // no WindSpeed
    255, 255,       // no WindGust
    0,              // Flags
    (uint8_t)((uint16_t)round(measuredPressure * 10) >> 8),
    (uint8_t)((uint16_t)round(measuredPressure * 10)),
    255, 255, 255, 255, 255, 255, // no Gas
    (uint8_t)(measuredLUX >> 16),
    (uint8_t)(measuredLUX >> 8),
    (uint8_t)(measuredLUX),
    12,             // version 1.2
    255,            // no voltage
    255, 255, 255); // no debug info

  rfm.SendString(buffer);

  delay(5000);
}


Ergibt im FHEM:

Internals:
   CFGFN     
   DEF        AA
   FUUID      5d58e660-f33f-4c99-8eb4-7f1b15186b16fd18
   IODev      lgw215
   LASTInputDev lgw215
   LaCrosse_lastRcv 2019-08-18 21:15:50
   MSGCNT     3305
   NAME       LaCrosse_AA
   NR         184
   STATE      T: 25.7 H: 59
   TYPE       LaCrosse
   addr       AA
   battery_new 0
   bufferedH  59
   bufferedT  25.7
   corr1      0
   corr2      0
   lgw214_MSGCNT 797
   lgw214_TIME 2019-08-18 20:05:54
   lgw215_MSGCNT 2508
   lgw215_TIME 2019-08-18 21:15:50
   previousH  59
   previousR  0
   previousT  25.7
   sensorType 5=UniversalSensor
   OLDREADINGS:
   READINGS:
     2019-08-18 21:15:50   battery         ok
     2019-08-18 21:15:50   error           0
     2019-08-18 21:15:50   humidity        59
     2019-08-18 21:15:50   lux             1400
     2019-08-18 21:15:50   pressure        986
     2019-08-18 21:15:25   state           T: 25.7 H: 59
     2019-08-18 21:15:50   temperature     25.7
     2019-08-18 21:15:50   version         1.2
Attributes:
   IODev      lgw215
   room       LaCrosse



HCS

Zitat von: Wzut am 07 August 2019, 16:50:22
Ich  habe bei meinem LGW Wifi abgeschaltet (nutze TX & RX )
Das 36_ KeyValueProtocol erzeugt dann ein Reading WIFI ohne Wert.
Vorschlag :
readingsBulkUpdate($rhash, $key, $value) if ($value);
statt
readingsBulkUpdate($rhash, $key, $value);

Ist eingecheckt.

HCS

V1.34

RFM95
Payload kann jetzt bis zu 250 byte lang sein

Einstellungen für RFM95 auf der SetupPage
-SpreadingFactor (default SF7)
-Bandbreite (default 125 kHz)

WICHTIG: das LGW unterstützt den RFM95, aber nur für eigene Sensoren.
Für LaCrosse, PCA301, EC3000, usw. wird ein RFM69 benötigt.




gloob

Zitat von: HCS am 07 September 2019, 21:19:59
V1.34

RFM95
Payload kann jetzt bis zu 250 byte lang sein

Einstellungen für RFM95 auf der SetupPage
-SpreadingFactor (default SF7)
-Bandbreite (default 125 kHz)

WICHTIG: das LGW unterstützt den RFM95, aber nur für eigene Sensoren.
Für LaCrosse, PCA301, EC3000, usw. wird ein RFM69 benötigt.

Gibt es einen link wie der RFM95 angeschlossen wird? Also an welchen Pins.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

HCS

Zitat von: sash.sc am 16 August 2019, 12:23:17
Ich wollte eigentlich einen Sensor mit bme280 und nem Licht Sensor bauen, der ein bißchen weiter weg ist. Mit nem RFM95 würde es ja klappen. Hat schon jemand einen Sensor mit den beiden Komponenten verbaut? Bzw gebaut?
Mit dem LGW 1.34, das ich gerade eingecheckt habe, funktioniert der angehängte Sender, der einen BME280 und einen BH1750 verwendet.