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

noice

Zitat von: waschbaerbauch am 01 April 2016, 18:42:10
Also meine sind aus China heute nach nur 12 Tagen angekommen ;)
Dann kannst ihm ja einen abgeben ::)

Mobil erstellt daher kurz gehalten

BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

waschbaerbauch

Wenn ich mehr bestellt hätte würde ich das glatt machen, aber dieses mal sind es nur zwei für den Eigenbedarf ;)

Wzut

Zitat von: HCS am 01 April 2016, 15:43:33
Würdest Du einen SC16IS750-Clone auf Basis von Arduino oder AtTiny implementieren?
Dann könnte man es sich aussuchen, ob man sich einen SC16IS750 kaufen oder flashen will.
Falls ja, würde ich Dir ermitteln, was vom Befehlssatz ich verwende.
Ich würde zumindest gerne mal einen Versuch starten, also immer her mit den Protokoll Infos :)
Ich nehme mal an im ersten Schritt muss beim Reboot des ESP sich ein I2C Client auf 0x90 melden ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: Wzut am 02 April 2016, 19:44:17
Ich nehme mal an im ersten Schritt muss beim Reboot des ESP sich ein I2C Client auf 0x90 melden ?
Ja. Die Register, die angesprochen werden, kannst Du recht einfach aus der angehängten SC16IS750.cpp rauslesen.

Beispiel: in der Begin() wird in Register 0x07 der wert 0x55 geschrieben und danach gelesen und dann 0xAA geschrieben und zurückgelesen, um zu testen, ob ein SC16IS750 angeschlossen ist.

Dann wird Register 0x02 bit 0 gesetzt um den FiFo zu aktivieren.
Usw. Usw.

Wie das jeweilige Register genau arbeitet kann man im Datenblatt nachlesen, habe es mit ins ZIP gepackt. 

Und fix sein, im Sketch, ich fahre den I2C Bus mit 1MHz Clock.  :)

Wzut

Zitat von: HCS am 28 März 2016, 09:38:31
Dazu müsste der Arduino-Sketch einen I2C slave mit Adresse 0x90 implementieren usw.
hmm irgendwie stehe ich gerade auf dem Schlauch , gestern Abend einen 3,3V / 8MHz Arduino Micro mit dem Beispiel Wire client-read Sketch betankt, A5 am D1 , A4 an D2 + 2x 4,7k als Pullup und : NICHTS :(
Ich hatte eigentlich die Hoffnung direkt nach Reset des ESP dessen Schreibversuche auf 0x90 zu sehen.
Kann ich das auch via Software Kommando an triggern oder muss ich für jeden Versuch jedesmal den Resettaster am DevKit drücken ?     
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: Wzut am 04 April 2016, 11:44:50
Ich hatte eigentlich die Hoffnung direkt nach Reset des ESP dessen Schreibversuche auf 0x90 zu sehen.
Ich bin nicht sicher, ob ein Arduino IC2 slave 1MHz I2C clock kann. Ich befürchte, dass er maximal 400 kHz hinbekommt, wobei ch mir bei dem 8MHz Arduino nicht sicher bin ober der überhaupt die 400 kHz schafft.
Man kann übrigens problemlos auch einen 5V / 16MHz pro mini nehmen, das funktioniert auch (läuft dann mit 3.3V, was aber kein Problem ist)
Ich könnte in der setup page des LGW etwas einbauen, wo man die clock speed konfigurieren kann.

Zitat von: Wzut am 04 April 2016, 11:44:50
Kann ich das auch via Software Kommando an triggern ..
Aktuell nicht, aber ich könnte Dir in der kommenden Version was dafür einbauen.
Momentan wird beim Start einmal geprüft, ob ein SC16IS750 da ist, und wenn nicht, ist das Thema erledigt.

Zitat von: Wzut am 04 April 2016, 11:44:50
... oder muss ich für jeden Versuch jedesmal den Resettaster am DevKit drücken ?
Aktuell ja.

Wzut

OK, dann ist alles klar. Ich musste bis jetzt nie die Datenrate bei I2C anfassen, habe mich da jetzt mal schlau gemacht :
http://playground.arduino.cc/Main/WireLibraryDetailedReference
und siehe da :
Zitat-sets the clock frequency that the TWI hardware will use if/when it is the master on the I2C bus. It is set in the source code to 100kHz, but theoretically at least you can reset this frequency by calling Wire.setclock(). The value passed is the bitrate from 400000L to 31000L. Wire.setclock(400000L); should set it to 400kHz. Wire.setClock() must be called after Wire.begin(). Wire.begin() initializes the bitrate to 100kHz.
Für die Arduinos ist laut div Foren wohl bei 800kHz das absolute Ende der Fahnenstange erreicht. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: Wzut am 04 April 2016, 15:10:30
Für die Arduinos ist laut div Foren wohl bei 800kHz das absolute Ende der Fahnenstange erreicht.
Ich liebe den ESP8266. Es geht nichts über Rechenleistung, außer vielleicht noch mehr Rechenleistung  ;D ;D ;D

Ich habe Dir mal eine Vorabversion gebildet, in der man die clock speed setzen kann und ein Kommando absetzen, um den SC16IS750 anzusprechen.

Auf der Setup-page kann man die clock speed einstellen
Auf der log-page bei "command" "1x" abschicken, dann wird der SC16IS750 angesprochen und je nachdem, ob er geantwortet hat, wird unten entweder "SC16IS750 detected" oder "no SC16IS750" ausgegeben.

Wzut

OK THX, mit der einstellbaren Clock Speed sollte dann zumindest diese Hürde zu nehmen sein.
Werde vermutlich am Donnerstag Bericht erstatten, denn ich werde nicht vor morgen Abend zum basteln kommen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

Wie versprochen, gestern Abend war Bastelabend :
a. Die Log Webseite des GW bleibt leer, muss ich auf der Setupseite das Logging aktivieren ? Du hast in deinem Screenshot dort etwas eingetragen, hatte auch versucht das zu übernehmen doch leider auch ohne Erfolg.

b. den Clock Speed in der Setup Seite von 1.000.000 auf 100.000 gesetzt, noch immer kein Zeichen zu sehen. Ich habe dann in meiner Verzweiflung auf einem UNO den Wire Master Write Sketch geflasht und mit dem Slave verbunden. Ergebnis : ich sah die Zeichen vom Master, ergo kann der Micro I2C empfangen. Als nächstes habe ich auf den Micro den I2C Scanner Sketch geflasht, dieser finden den UNO Master unter der Adresse 7F. Verbinde ich den Micro aber mit dem ESP wird kein Master oder anderer Teilnehmer am Bus gefunden.

Die einzige Idee die ich nun noch habe ist am WE mal das LGW ganz vom ESP zu entfernen und mal schauen ob ich dann weiterkomme. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: Wzut am 07 April 2016, 09:24:35
a. Die Log Webseite des GW bleibt leer, muss ich auf der Setupseite das Logging aktivieren ? Du hast in deinem Screenshot dort etwas eingetragen, hatte auch versucht das zu übernehmen doch leider auch ohne Erfolg.
Du meinst bei Flags? Nein, nichts eintragen. Das muss so gehen.
Schau mal in der Konsole vom Browser, ob es da Fehler zu sehen gibt.
Hast Du evtl. JavaScript im Browser deaktiviert?
Läuft das LGW ansonsten "normal" wie es laufen soll?

Zitat von: Wzut am 07 April 2016, 09:24:35
b. den Clock Speed in der Setup Seite von 1.000.000 auf 100.000 gesetzt, noch immer kein Zeichen zu sehen. Ich habe dann in meiner Verzweiflung auf einem UNO den Wire Master Write Sketch geflasht und mit dem Slave verbunden. Ergebnis : ich sah die Zeichen vom Master, ergo kann der Micro I2C empfangen. Als nächstes habe ich auf den Micro den I2C Scanner Sketch geflasht, dieser finden den UNO Master unter der Adresse 7F. Verbinde ich den Micro aber mit dem ESP wird kein Master oder anderer Teilnehmer am Bus gefunden.
OK, ich packe mir mal einen I2C-Receiver-Sketch auf einen Arduino und versuche es auch mal.
Die Pull-Ups auf SDA/SCL hast Du ja wohl nicht vergessen?
Hast Du sonst noch was an I2C dran (LM75, BMP180 oder so) und wird das erkannt?

Chris_Worms

Zitat von: HCS am 07 Dezember 2015, 09:19:54
OK. Bevor Du zu viel Arbeit in die falsche Richtung inverstierst, einige Gadanken und Unumgänglichkeiten dazu:

- Wenn DHT22 / DS1820 unterstützt werden, sollte das auf alle Fälle zusätzlich zu BMP180 gehen, sonst muss man auf den Luftdruck verzichten
- DHT22 / DS1820 würde ich auf einem GPIO abhandeln, es macht ja nur einer Sinn, nicht beide gleichzeitig

- Mögliche GPIO-Verwendung:
GPIO4 und 5 sind immer I2C, da kann ein BMP180, ein BME280 oder sonst ein I2C Baustein (z.B. LM75) dran.
GPIO10: (OneWire oder) DHT22 oder sonstwas wie z.B. ein OOK Radio
GPIO9 ist bereits der CS für den dritten RFM
GPIO0 muss ich mal noch ermitteln, was machbar ist, ohne den Bootvorgang zu gefährden, evtl. ein OOK Sender
     
Wenn man LaCrosse, Temp, Hum und Feuchte will, könnte man verwenden:
  ein bis drei RFMs und einen BME280
  ein bis drei RFMs, einen BMP180 und einen DHT22

Wenn man keine Feuchte will, dann: ein bis drei RFMs, einen BMP180

Wenn man nur die Temperatur will, dann: ein bis drei RFMs und einen (DS1820) LM75

Und das Ganze sollte so werden, dass diese Varianten vom Sketch erkannt werden, ohne dass man Ports konfigurieren
und die Firmware bilden muss.

Wenn der LM75 implementiert wird, dann würde ich auf die DS1820 Implementierung verzichten, weil man dann die Temperatur auf I2C hat und weniger Stress auf GPIO10.
1Wire wäre dann ganz raus.
Das LGW muss nun auch nicht die "AllSensorsYouCanFind" Plattform werden, der primäre Zweck ist der Empfang von LaCrosse.

Das sollte noch von der Architektur anders werden, aus der InternalSensors muss DHT und OneWire raus, weil ich die auch in anderen Projekten verwende (z.B. LaCrosse-Sketch) und es dort eher störend ist. Am besten wird man im LGW eine "LGWSensors" von der "InternalSensors" ableiten.

Hi,

verstehe ich das richtig dass man dann mit einem RMFxx LaCrosse-Sensoren (z.b. TX-35 oder TX-29-DTH) empfangen kann und die Daten per WLAN an FHEM überträgt und zusätzlich auf dem Gateway weitere Sensoren (Luftdruck, Temperatur, Hum) installiert und diese Daten dann auch in FHEM zur Verfügung stehen? Oder man installiert zwei oder drei RMF auf dem Gateway mit verschiedenen Frequenzen und kann dann 868mhz, 433mhz oder vielleicht z-wave gleichzeitig mit einem Gateway abdecken? :-)
Raspberry Pi 2/HM-CFG-LAN/HM-ES-PMSw1-PI/HM-LC-Sw1-PL/HM-Sec-MDIR-2/JeeLink V3/LaCrosse Temp/Humidity/Bluetooh USB Dongle/PebbleBee Bluetooth Tags

FHEM/MySQL/Apache/SmarVisu

HCS

Zitat von: Chris_Worms am 07 April 2016, 14:18:56verstehe ich das richtig dass man dann mit einem RMFxx LaCrosse-Sensoren (z.b. TX-35 oder TX-29-DTH) empfangen kann und die Daten per WLAN an FHEM überträgt und zusätzlich auf dem Gateway weitere Sensoren (Luftdruck, Temperatur, Hum) installiert und diese Daten dann auch in FHEM zur Verfügung stehen? Oder man installiert zwei oder drei RMF auf dem Gateway mit verschiedenen Frequenzen und kann dann 868mhz, 433mhz oder vielleicht z-wave gleichzeitig mit einem Gateway abdecken? :-)

Das hast Du richtig verstanden, wenn man "433mhz oder vielleicht z-wave" wegstreicht.

Man kann 1 bis 3 RFM69 anschließen und mit denen unterschiedliche Sensoren empfangen bzw. PCA301 steuern. Siehe Liste unten.
Da die Sensoren teil unterschiedliche Frequenzen oder data rates haben und PCA301 einen RFM69 exklusiv für sich benötigt, kann man mehrere RFM69 anschließen, mit einer Hardware-Erweiterung sogar bis zu fünf Stück.

Zusätzlich kann einer dieser Sensoren direkt am LGW angeschlossen werden, im Wesentlichen eigentlich, um einen Luftdruck zu bekommen:
- BME280: Druck, Temperatur, Feuchte
- BMP180: Druck, Temperatur
- LM75: Temperatur
- DHT22: Druck, Temperatur (dann sind aber nur zwei RFM69 möglich)

Über eine optionale Erweiterung (SC16IS750) kann:
- ein eigener Prozessor (mit eigener Firmware) angeschlossen werden, der sonstnochwas empfängt und dem LGW übergibt
- etwas, wie z.B. ein NanoCUL angeschlossen werden, dessen serielle Schnittstelle transparent auf einem Port im Web bereitgestellt wird
- ein vierter und fünfter RFM69 angeschlossen werden
- ein Summer angeschlossen werden, um von FHEM aus das LGW einen Alarm ausgeben zu lassen

Alle diese Daten stellt das LGW per WiFi an FHEM zu, dort wird es von den entsprechenden Modulen (JeeLink, LaCrosse, PCA301, ...) ganz normal weiterverarbeitet.
Ein LGW kann bis zu drei FHEMs versorgen (unter berücksichtigung einiger Regeln) und ein FHEM kann sich bei mehreren LGWs bedienen.

Liste der unterstützen Sensoren (ohne Garantie und vermutlich nicht vollständig)
Von den Steckdosen (und Ausnahmen) mal abgesehen, geht es hier immer um LaCrosse IT+ 868 MHz
TX21IT          17.241 kbps
TX25-IT         17.241 kbps
TX27-IT         17.241 kbps
TX29-IT         17.241 kbps
TX29DTH-IT      17.241 kbps
TX37            17.241 kbps
TX35TH-IT        9.579 kbps
TX35DTH-IT       9.579 kbps
30.3143.IT      17.241 kbps
30.3144.IT      17.241 kbps
30.3147.IT      17.241 kbps
30.3155WD        9.579 kbps Kritisch bezüglich der Frequenz.
30.3156WD        9.579 kbps
30.3187.IT      17.241 kbps
WT440XH         17.241 kbps
WS 1600 (TX22)   8.842 kbps
WS 1080         17.241 kbps   Hinweise im Forum beachten 
EC3000         200.000 kbps   Energiemess-Steckdose
EMT7117          9.579 kbps   Energiemess-Steckdose
PCA301           6.631 kbps   868950 kHz
LevelSender     17.241 kbps


HCS

Ach ja, bevor ich so was wie im vorhergehenden Beitrag noch öfter mal schreiben muss  :)

Gibt es jemand, der Lust hätte, ein LaCrosseGateway Wiki zu pflegen?

Ich würde ihn auch mit Informationshäppchen versorgen, Teil 1 siehe oben  ;)
Vieles könnte man auch einfach aus den in Beitrag 1 verlinkten Artikeln zu den Versionen nehmen, da habe ich ja schon vieles beschrieben.


Chris_Worms

Okay, ich denke ich habe es verstanden. Das LGW könnte den JeeLink USB Stick am Pi ersetzen und zusätzlich könnte ich die im Vergleich zu HM oder Z-Wave (Fibaro Wall Plug) deutlich günstigeren PCA301 Schaltsteckdosen einsetzen (nur dass der Fibaro Wall Plug wesentlich besser aussieht).

Danke für Deine Arbeit! Ich glaube ich bin damit infiziert und schaue heute Abend wo ich die Elektronikbauteile herbekomme. :-D
Eine Idee hätte ich noch: Bisher wird das LGW mit Netzstrom betrieben, wäre es nicht möglich das mit Batterie (oder Akku) zu betreiben?
Raspberry Pi 2/HM-CFG-LAN/HM-ES-PMSw1-PI/HM-LC-Sw1-PL/HM-Sec-MDIR-2/JeeLink V3/LaCrosse Temp/Humidity/Bluetooh USB Dongle/PebbleBee Bluetooth Tags

FHEM/MySQL/Apache/SmarVisu