Senden via Jeelink/LaCrosse

Begonnen von user1, 11 August 2015, 18:14:50

Vorheriges Thema - Nächstes Thema

fh168

#15
Zitat von: HCS am 16 August 2015, 10:57:00
Musst Clients und Matchlist setzten, siehe mein Beispiel
Ja
Ich gehe mal davon aus, dass Du mit "Empfänger-Seite" FHEM meinst.
Da reicht ein RFM. Der muss aber fix auf 17241 kbps laufen.

Clients und Matchlist über Attr einstellen... wieder was gelernt.

mit den 17241 komme ich klar, das sind ja die TX 29 DT-H Sensoren, togglen geht nicht? Wäre vielleicht wichtig zu wissen, wenn User mit den 30.3155 Sensoren arbeiten, die ja bekanntlich mit 9.579 arbeiten.

Noch was: Wofür ist die hex-Datei im zip? ich habe die auf meinem Jeelink-Clone mal geflashed, ist nix passiert. Ich dachte es wäre die o- Version oder höher.

Lustig: verbose=5 ... wieder 2 neue Sensoren gefunden (vom Nachbarn), bin mittlerweile bei 15 Stück .. ziemlich empfangsstark der Jeelink-Clone.
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

fh168

#16
Ungewöhnlich... mal eben nachgebaut. funktioniert  :)!
Ich musste nur aus der 11 ein 0B machen, ist aber wohl bei jedem anders.

CustomSensorExample_lastRcv
2015-08-16 12:36:54
DEF
0B
IODev
jeelinkcross
LASTInputDev
jeelinkcross
MSGCNT
9
NAME
myCS
NR
446
STATE
???
TYPE
CustomSensorExample
addr
0B
jeelinkcross_MSGCNT
9
jeelinkcross_RAWMSG
OK CC 11 2 37 0 0 7
jeelinkcross_TIME
2015-08-16 12:36:54
Readings
periodic
38
2015-08-16 12:37:04
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

fh168

ok, und wo muss ich den Programmcode ändern um 3 Zahlen zu übertragen?

Auf der Empfänger-Seite sollen dann 3 Readings erzeugt werden.

Es geht dabei um dieses Projekt: http://blog.moneybag.de/rauchsensor-mq-7-mit-lcd-display-und-arduino-nano/

Möglicherweise wäre es für andere User auch interessant, wenn sie was übertragen wollen.
Hardwaremäßig dürfte es alles passen, LCD, Sensor und RFM12b kommen sich nicht in die Quere.
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Wzut

@HCS, ersteinmal vielen Dank für deine umfangreiche Vorarbeit, werde mir das alles in Ruhe anschauen und testen.
Bei meinem aktuellen Projekt geht es um diei Ablösung eines einfachen Wandthermostaten für eine elektische Fussboden Zusatzheizung.
Im ersten Schritt wollte ich als Fake TX25 zwei Temp Werte schicken ( Soll und Ist ) , wenn das läuft kommt die Gegenrichtung ins Spiel wie z.B. neuer Sollwert.   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: fh168 am 16 August 2015, 12:02:40
Noch was: Wofür ist die hex-Datei im zip? ich habe die auf meinem Jeelink-Clone mal geflashed, ist nix passiert. Ich dachte es wäre die o- Version oder höher.
Das ist das compilierte CustomSensorExample.
Der LaCrosse-Sketch 10.1o ist im FHEM Repository eingecheckt und kann ganz normal mit set myJeeLink flash geflasht werden

Zitat von: fh168 am 16 August 2015, 12:38:16
Ich musste nur aus der 11 ein 0B machen, ist aber wohl bei jedem anders.
Hatte ich auch falsch hingetippt. 0B ist richtig.

Zitat von: fh168 am 16 August 2015, 13:17:42
ok, und wo muss ich den Programmcode ändern um 3 Zahlen zu übertragen?

So (Beispiel für drei Bytes):
frame.ID = 0xB;
frame.NbrOfDataBytes = 3;
frame.Data[0] = 10;
frame.Data[1] = 20;
frame.Data[2] = 30;


In NbrOfDataBytes eine beliebige Anzahl Bytes setzen (max. 128) und dann die Bytes in frame.Data reinpacken

Wenn es mit dem Beispiel-Modul für FHEM kompatibel sein soll, dann so, um z.B. die Werte 10, 20 und 30 zu senden:
frame.ID = 0xB;
frame.NbrOfDataBytes = 4;
frame.Data[0] = 2;
frame.Data[1] = 10;
frame.Data[2] = 20;
frame.Data[3] = 30;


fh168

#20
Teilweiser Erfolg.
Mein LCD-Display (LiquidCrystal.h) hakt mit dem RFM12B. Es wurde nichts übertragen. Ich habe die Library vom LCD-Display erst mal entfernt, jetzt klappt es.

Aber nach dem Define steht in den Readings immer noch periodic. Die Werte scheinen aber rüberzukommen. Da sollten ja 3 neue Readings auftauchen.

Jetzt wirft er das raus:

jeelinkcross_MSGCNT
18
jeelinkcross_RAWMSG
OK CC 11 2 0 0 0
jeelinkcross_TIME
2015-08-16 18:51:11
Readings
periodic
0
2015-08-16 18:55:08
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

HCS

Zitat von: fh168 am 16 August 2015, 18:38:11
Aber nach dem Define steht in den Readings immer noch periodic. Die Werte scheinen aber rüberzukommen. Da sollten ja 3 neue Readings auftauchen.
Nein, sollten nicht.

Ich befürchte, das Ganze wurde falsch verstanden. Das 36_CustomSensorExample.pm ist ein Beispiel, das absolut keinen vernünftigen Zweck erfüllt und lediglich als Vorlage für ein eigenes Modul dient. Wenn Du einen Sensor erfindest, dann musst Du Dir ein dazu passendes Modul schreiben, und 36_CustomSensorExample.pm ist die Vorlage, die zeigt, wie man so was machen kann.

Für den CustomSensorExample Sketch gilt das ebenfalls, er ist die Vorlage, um sich daraus einen eigenen Sensor zu bauen.

Oder in anderen Worten: der Sketch und das Modul zeigen, wie die Technologie funktioniert, sind aber beide nichts, das man so wie sie sind, für etwas Vernünftiges verwenden könnte.

Und der eigentliche Focus war das Senden von Daten an den Sensor.

fh168

ok, habe ICH falsch verstanden. Andere wahrscheinlich nicht, bin halt der typische Anwender. Und im Grunde funktioniert alles.
Trotzdem super Arbeit von Dir! Und prima Support. Ich bin mit dem BMP180 Jeelink schon glücklich.

LG und Daumen hoch!
/robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Wzut

Zum zurück senden werde ich erst die Tage kommen, mein Wandthermostat verhält sich schon mal wie ein echter TX29IT.
Hier mal ein Beispiel in aller einfachster Form wie man so einen Fake TX29IT mit einem RFM12 / RFM69CW  und einem Arduino bauen kann :

#include "RFMxx.h"
#define TRANSMIT_INTERVAL     15    // Transmit interval in seconds
#define SENSOR_ID                       1   // 1 - 63
 
RFMxx rfm(11, 12, 13, 10,2);   

byte bytes[5];
float Temperature;
byte Hum;

void setup() {
   delay(200);
  // Initialize the RFM12
  rfm.InitialzeLaCrosse();
  Serial.begin(38400);
  Serial.println(rfm.GetRadioName());
}

void loop() {
  if (rfm.GetRadioName() == "RFM69CW") 
  { Temperature = rfm.GetTemperature();}
   else
  { Temperature = 12.3; }

  Hum = (micros() >> 24) & 0x7F;

   // Encode it
  EncodeFrame(bytes);
 
   // Send with all configured data rates
    rfm.SetDataRate(17241ul);
    rfm.SendArray(bytes, 5);
    rfm.SendArray(bytes, 5);
    rfm.SetDataRate(9579ul);
    rfm.SendArray(bytes, 5);
    rfm.SendArray(bytes, 5);

  Serial.print(Temperature);
  Serial.print(" | ");
  Serial.println(Hum);
 
  delay(TRANSMIT_INTERVAL * 1000);
}

void EncodeFrame(byte *bytes) {
/* Message Format:
*
* .- [0] -. .- [1] -. .- [2] -. .- [3] -. .- [4] -.
* |       | |       | |       | |       | |       |
* SSSS.DDDD DDN_.TTTT TTTT.TTTT WHHH.HHHH CCCC.CCCC
* |  | |     ||  |  | |  | |  | ||      | |       |
* |  | |     ||  |  | |  | |  | ||      | `--------- CRC
* |  | |     ||  |  | |  | |  | |`-------- Humidity
* |  | |     ||  |  | |  | |  | |
* |  | |     ||  |  | |  | |  | `---- weak battery
* |  | |     ||  |  | |  | |  |
* |  | |     ||  |  | |  | `----- Temperature T * 0.1
* |  | |     ||  |  | |  |
* |  | |     ||  |  | `---------- Temperature T * 1
* |  | |     ||  |  |
* |  | |     ||  `--------------- Temperature T * 10
* |  | |     | `--- new battery
* |  | `---------- ID
* `---- START = 9
*/

uint8_t i, j, k ,val;
for ( i = 0; i < 5; i++) { bytes[i] = 0; }

  // ID
  bytes[0] = 9 << 4;
  bytes[0] |= SENSOR_ID >> 2;
  bytes[1] = (SENSOR_ID & 0b00000011) << 6;

  // Temperatur
  float temp = Temperature + 40.0;
  bytes[1] |= (int)(temp / 10);
  bytes[2] |= ((int)temp % 10) << 4;
  bytes[2] |= (int)(fmod(temp, 1) * 10 + 0.5);

  // Feuchte
  bytes[3] =  Hum & 0x3f ;

  // CRC
  for (j = 0; j < 4; j++)
  {
    val = bytes[j];
    for (i = 0; i < 8; i++)
    {
      k = (uint8_t)((bytes[4] ^ val) & 0x80);
      bytes[4] <<= 1;
      if (0 != k) { bytes[4] ^= 0x31; }
      val <<= 1;
    }
  }
}
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Ups, die GetTemperature() habe ich gerade aus RFMxx zwecks Reduzierung der Größe ausgebaut, da ich dachte , dass die eh keiner braucht, weil niemand die Temperatur eines sich beim Senden erwärmenden radio wissen will.

Brauchst Du die ernsthaft oder kann ich es dabei belassen?

Wzut

*lach* , das war doch nur ein Beispiel um einen halbwegs sinnvollen Wert zu senden :)
Ich denke mal wer sich so einen Fake zusammenbaut hat "echte" Quellen die einen Temperaturwert liefern.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Gut dass wir uns da einig sind  ;D

Wenn Du einen TX29 o.Ä. simulierst, müsstest Du eigentlich meine LaCrosse Klasse verwenden können, um den frame zu encoden. Das würde noch etwas aus diesem Sketch rausnehmen, das es schon gibt.

Wzut

Sodele , gestern Abend hatte ich nun endlich die Zeit mir den CustomSensor vorzunehmen.
Erstes Fazit : schaut verdammt gut aus !!
Was mir besonders gefällt  : die Telegrammlänge von fhem zum Sensor ist variabel :)
Ich werde hier wieder Bericht erstatten wenn das Wand-Thermostat Projekt etwas weiter fortgeschritten ist. Jetzt erst einmal 1000 Dank für deine tolle Arbeit, das ist ein prima Grundbaukasten zum weiteren Basteln.   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: Wzut am 19 August 2015, 09:14:23
Was mir besonders gefällt  : die Telegrammlänge von fhem zum Sensor ist variabel :)
Die vom Sensor Richtung FHEM auch

Viel Erfolg

user1

Danke für die Implementierung. Ich bin nun soweit, dass meine Hardware senden und empfangen kann, allerdings verwende ich 9579 Baud, da dies die einzige Frequenz ist die bei mir im Einsatz ist.

Deshalb meine Frage:

> Der LaCrosseITPlusReader10 Sketch sendet richtung CustomSensor immer mit 17242 kbps, egal, was für den "normalen" LaCrosse Betrieb aktuell konfiguriert ist.

Weshalb nicht die eingestellte Baudrate verwenden, jedenfalls wenn kein "toggle" eingestellt ist? Das scheint mir eine unnötige Einschränkung zu sein.

Habe jetzt erst mal für meine Zwecke die Firmware mit abgeänderter Baudrate übersetzt.