HomeBrewWired - Diskussion zum Tutorial

Begonnen von Thorsten Pferdekaemper, 01 Dezember 2016, 22:03:19

Vorheriges Thema - Nächstes Thema

Matthi140

Zitat von: Thorsten Pferdekaemper am 22 Februar 2018, 21:21:42
Verstehst Du Arrays in C++ nicht oder nur das, was da beim Sen-Key-12 läuft nicht?
Das ganze C++ versteh ich eigentlich nicht wirklich  ;D ich kopiere mir im Grunde nur den ganzen Krempel zusammen das es vom logischen her so halb Wegs zusammen passt und probier halt rum, damit bin ich schon oft zum Erfolg gekommen. Aus dem nichts ein Programm zu erstellen das geht bei mir garnicht.



ZitatClickbutton.h ist eine Library, die es einfacher macht, Einfach- und Mehrfachklicks etc. zu erkennen. Das hat mit HBW erstmal nichts zu tun. Die Entsprechung von HBWKey.h ist die Klasse HBSenKey, die direkt im HBW-Sen-Key-12.ino deklariert und definiert ist.

Ah Ja, HBW-Sen-Key-12 kann ja auch Doppelklick, demnach wird das dafür gebraucht. Das Tutorial hat nur kurz und lang daher braucht man das da nicht denke ich mal. Also kann ich Clickbutton.h schonmal weg lassen  ;D



ZitatDas ist nur eine kleine Funktion, die den freien Speicher berechnet. Das ist auf so kleinen Maschinchen wie einem Arduino ganz nützlich.

Braucht man das, wenn man Direktverknüpfung machen will? hat das irgendwie damit zu tun, das  Geräteadressen von direkt verknüpften Geräten gespeichert werden müssen?
Zitat
Da sind halt die Namen der Variablen anders. Das ist aber egal. Ansonsten wollte ich mir nur sparen, 12mal im Wesentlichen denselben Kram hinzuschreiben.

also wie vermutet macht das jetzt das selbe, immerhin schon was davon verstanden  8)


Ich habe einen anderen Thread gefunden: https://forum.fhem.de/index.php/topic,22952.msg755207.html#msg755207
Der Sketch zum HBW-LC-Sw8 dazu sieht auf dem ersten Blick vom Aufbau her so aus wie mein Tutorial Sketch, kann aber wohl auch Direktverknüpfungen. Ich habe aber gelesen das es unterschiedliche Versionen von den Librarys (alt/neu) gibt und das untereinander nicht kompatibel ist. Wie ist das bei dem, basiert das auf den aktuellen Libs, wie auch das Tutorial? Ich werde mir das dann mal genauer ansehen und versuchen zu verstehen.

MfG Matthi

Fhemmichl

Hallo Thorsten,

das Tutorial ist wirklich super, erstmal danke dafür.

Mich würde auch interessieren wie es mit den Rolladenaktoren HMW-LC-Bl1-DR oder mit dem HBW-LC-BI4 genau funktioniert, irgendwie komme ich mit der Beschreibung im Git nicht so wirklich zurecht. Ich verstehe vor allem nicht wie die Relais angeschlossen werden sollen.

Ich habe gesehen dass du in der Diskussion zum HBW-LC-BI4 auch schon aktiv bist.

Kannst du in deinem Tutorial vielleicht auch darauf mal näher eingehen?


Gruß
Michael

Thorsten Pferdekaemper

Zitat von: Fhemmichl am 04 März 2018, 18:09:51
Mich würde auch interessieren wie es mit den Rolladenaktoren HMW-LC-Bl1-DR oder mit dem HBW-LC-BI4 genau funktioniert,
Die Dinger sind nicht von mir.

Zitat
irgendwie komme ich mit der Beschreibung im Git nicht so wirklich zurecht. Ich verstehe vor allem nicht wie die Relais angeschlossen werden sollen.
Für 230V Rollläden werden die Relais in Reihe geschaltet. Also den Eingang des zweiten Relais auf den Ausgang des ersten. L1 und L2 des Rollladen werden an den beiden Ausgängen des zweiten Relais angeschlossen. Es muss jederzeit mechanisch (!!!) sichergestellt sein, dass es keinen Kurzschluss gibt und dass L1 und L2 des Rollladenmotors niemals zusammengeschaltet werden.
Achtung: Falls Du das wirklich nicht verstehst, dann lass besser die Finger davon. Das ist nicht böse gemeint, sondern kann Dein Leben retten. Ich bin kein Elektriker und habe das oben nur geschrieben, damit Du nicht ganz großen Blödsinn machst.
Bei Gleichstrom-Antrieben ist das ganze wieder anders. Da braucht mal in der Regel eine Polwechselsteuerung. Auch hier muss man mechanisch dafür sorgen, dass es keinen Kurzschluss gibt. Obwohl es hier in der Regel nur 24V sind, kann es dann durch den hohen Strom (bis das Netzteil aufgibt) doch ganz schön heiß werden und zu brennen anfangen.

Zitat
Kannst du in deinem Tutorial vielleicht auch darauf mal näher eingehen?
Nein, auch weil ich kein Freund davon bin, schon existierende und gut funktionierende Sachen nachzubauen. Es gibt den HMW-LC-Bl1-DR zu kaufen und der funktioniert auch ganz wunderbar. Man muss sich damit auch keine Gedanken machen, wie die Relais angeschlossen werden müssen.

Gruß,
   Thorsten
FUIP

Fhemmichl

Ok, kein Problem.
Die Verkabelung habe ich jetzt verstanden, dankeschön.

Thorsten Pferdekaemper

Zitat von: Matthi140 am 22 Februar 2018, 22:22:54
Der Sketch zum HBW-LC-Sw8 dazu sieht auf dem ersten Blick vom Aufbau her so aus wie mein Tutorial Sketch, kann aber wohl auch Direktverknüpfungen. Ich habe aber gelesen das es unterschiedliche Versionen von den Librarys (alt/neu) gibt und das untereinander nicht kompatibel ist. Wie ist das bei dem, basiert das auf den aktuellen Libs, wie auch das Tutorial? Ich werde mir das dann mal genauer ansehen und versuchen zu verstehen.
Nur das, was HBWired.h verwendet basiert auf den neuen Libraries.
Übrigens hat loetmeister inzwischen einiges auf die neuen Libs umgebaut. Das ganze kommt wahrscheinlich demnächst auch in "mein" Git. Dann gibt's dazu nochmal eine Ladung Beispiele. Näheres hier:
https://forum.fhem.de/index.php/topic,22952.msg755207.html#msg755207
Gruß,
   Thorsten
FUIP

grogo

Hallo Thorsten,

in den letzten Tagen hatte ich etwas Ruhe und konnte das Tutorial durcharbeiten. Konnte mir auch das Modul mit "Mehrere Ein- und Ausgänge" von Folge 11 in meine CCU2 Zentrale laden.

Gerade wollte ich nun die XML-Datei so umzustricken, dass mir die Variablen auch im IOBroker eingezeigt werden. Leider komme ich hier aber nicht weiter.
Sehe zwar die Komponente, aber leider sind die Variablen im hm-rpc nicht sichtbar/schaltbar.

Ich gehe davon aus, dass in der XML-Datei ein paar Zeilen fehlen. Weiß jmd. Rat?

Herzlichen Dank

Stephan

Thorsten Pferdekaemper

Zitat von: grogo am 02 April 2018, 12:25:26
in den letzten Tagen hatte ich etwas Ruhe und konnte das Tutorial durcharbeiten. Konnte mir auch das Modul mit "Mehrere Ein- und Ausgänge" von Folge 11 in meine CCU2 Zentrale laden.
Das freut mich.

Zitat
Gerade wollte ich nun die XML-Datei so umzustricken, dass mir die Variablen auch im IOBroker eingezeigt werden. Leider komme ich hier aber nicht weiter.
Sehe zwar die Komponente, aber leider sind die Variablen im hm-rpc nicht sichtbar/schaltbar.
Tja, da solltest Du vielleicht die Kollegen von IOBroker fragen. Das hier ist das FHEM-Forum.

Zitat
Ich gehe davon aus, dass in der XML-Datei ein paar Zeilen fehlen. Weiß jmd. Rat?
Ja, FHEM verwenden. Wenn Du das Problem auch in FHEM hast, dann mach dazu am Besten einen neuen Thread auf und hänge die XML-Datei mit dran.

Gruß,
   Thorsten
FUIP

grogo

Hab noch eine Frage zum Tutorial:

In Folge 9 wird erklärt, wie man die Geräteadresse nachträglich über den raw-Befehl 0461<adresse> ändern kann.

Gibt es auch eine Möglichkeit die Adresse direkt in der Programmierung im Sketch zu programmieren?

Man müsste dazu doch im void setup{} einmalig die obersten vier Bytes für die Geräteadresse ändern, richtig?


Thorsten Pferdekaemper

Zitat von: grogo am 07 April 2018, 17:22:31In Folge 9 wird erklärt, wie man die Geräteadresse nachträglich über den raw-Befehl 0461<adresse> ändern kann.
Gibt es auch eine Möglichkeit die Adresse direkt in der Programmierung im Sketch zu programmieren?
Man müsste dazu doch im void setup{} einmalig die obersten vier Bytes für die Geräteadresse ändern, richtig?
Ja, klar. Das würde gehen. Du musst das nur machen, bevor Du HBWDevive instanziierst.
Du könntest aber auch eine eigene Subklasse von HBWDevice machen und die Methode getOwnAddress redefinieren. 
Gruß,
   Thorsten
FUIP

grogo

Cool wäre es, man könnte die setOwnAddress(uint32_t) Funktion von HBWired.cpp nehmen und im Hauptprogramm aufrufen:

...
// Gibt Geräte-Adresse des HBWired Moduls an
#define HMW_ADDRESS 0x42FFFF01
...
uint32_t ownaddress = HMW_ADDRESS;
...
void setup{
....
HBWDevice::setOwnAddress(ownaddress);
....

nur leider ist die Funktion aus der HBWired.cpp private.

Wie kann man diese in public verschieben, damit das Hauptprogramm darauf zugreifen kann?

grogo

Habe es jetzt erstmal so realisiert:
...
#include "EEPROM.h"
....
void setup()
.....

  EEPROM.write(E2END - 3, 0x01);
  EEPROM.write(E2END - 2, 0xFF);
  EEPROM.write(E2END - 1, 0xFF);
  EEPROM.write(E2END, 0x42);

device = new HBWDevice.....

grogo

und noch eine Frage....

Ich habe jetzt mein RS485-Shield ohne Änderungen vom Arduino UNO auf einen Arduino Mega gesteckt und in der IDE das Programm für den Mega kompeliert und hochgeladen.

In der Zentrale sehe ich auch das neue Device und ich kann auch Aktionen auf den beiden Taster erkennen. Leider kann ich nur die Lampen nicht über die Zentrale einschalten.

Ich habe es auch schon mit einem zweiten MEGA versucht, leider ohne Erfolg.

Im seriellen Monitor der IDE sehen ich auch, dass das Modul, wie auch das UNO Modul Daten sendet (T: FD:FF....). Beim UNO Modul sehe ich aber auch was sonst noch auf dem RS485-BUS los ist. (R: FD:FF....) Dies sehe ich im Seriellen Monitor vom MEGA Modul nicht, er scheint also keine Daten vom BUS zu empfangen.

Dann habe ich mir mit einem Oszi die Daten am Pin 4 (RECEIVE) angesehen und sie sind genauso wie auch beim UNO Modul.  Also kommen die Daten am Pin4 an, sie werden nur nicht vom MEGA verarbeitet. Beide (UNO und MEGA) haben doch die gleiche Taktfrequenz von 16MHz, oder? Ich habe die BIT-Breiten vom Sende-PIN (PIN 2) verglichen, etwa 53us würde ich sagen. Damit sind die Taktfrequenzen der µC doch identisch.

Warum kommt beim Mega nur keine Daten an, gibt es etwas, an das ich nicht gedacht habe?????

Kann man nicht einfach (wie ich dachte) die Umgebung von UNO auf MEGA wechseln?

Thorsten Pferdekaemper

Hi,
Du kannst beim Mega Pin4 anscheinend nicht für SoftwareSerial benutzen. Siehe hier: https://www.arduino.cc/en/Reference/SoftwareSerial unter "Limitations":
Zitat
Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
Allerdings hat der Mega sowieso 4 Hardware Serial Ports, da würde ich einfach einen davon benutzen.
Gruß,
   Thorsten
FUIP

grogo

Hallo Thorsten,

ich habe jetzt die Pins auf die Ausgänge 14 und 15 gelegt, den Transmit-Enable auf Pin3 gelassen, leider ohne Erfolg. Das Modul sendet Daten und auch Taster-Aktivitäten, leider empfängt er aber nichts vom BUS.

Dann habe ich das Programm auf die seriel1 geändert. Pins auf 18/19 gelegt und das Programm geändert:
....Serial1.begin(19200);
.... device = new HBWDevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &Serial1,RS485_TXEN,sizeof(config),&config,
                         // NEU (6 statt 2 Kanaele)
                         6,channels,
                         &Serial,
                         NULL, NULL);
...
und die nicht benötigten Stellen auskommentiert.

Jetzt ist es so, dass das Modul nur Daten empfängt. Ich kann mit der Steuerung die Lampen schalten, aber ich bekomme keine Rückmeldung und auch Taster-Aktivitäten werden in der Zentrale nicht mehr angezeigt.
Ich habe mir den BUS auf dem Oszi angeschaut und die Pakete die das Mega Modul sendet sind deutlich kürzer, obwohl die Bitbreiten bei beiden Modulen etwa bei 50µs liegen.

Ein Auszug aus dem Seriellen Monitor des Mega (42:FF:FF:02) Moduls:
B: Version 2A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:02:12:41:00:AB:00:01:00:48:42:57:34:30:37:33:32:31:38:79:36
R: FD:FF:FF:FF:FF:F8:42:FF:FF:02:12:41:00:AB:00:01:00:48:42:57:34:30:37:33:32:31:38:79:36
T: FD:FF:FF:FF:FF:F8:42:FF:FF:02:06:4B:04:00:06:8C:6A
R: FD:FF:FF:FF:FF:F8:42:FF:FF:02:06:4B:04:00:06:8C:6A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:02:06:4B:04:00:0A:4C:72
R: FD:FF:FF:FF:FF:F8:42:FF:FF:02:06:4B:04:00:0A:4C:72
R: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:AE:58:14
R: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:B2:88:2E

Auszug aus dem Seriellen Monitor des UNO Moduls (42:FF:FF:FF):
B: 2A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:12:41:00:AB:00:01:00:48:42:57:34:30:37:33:34:37:31:F7:2C
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:06:79:50
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:0A:B9:48
R: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:C8:C4:53:FF
R: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:48:C4:92:FF
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:0E:F9:40
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:12:29:7A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:16:69:72
R: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:C8:C4:D2:FF
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:1A:A9:6A

Bei der UNO Ausgabe habe ich die Zeilenumbrüche noch etwas angepasst. Ursprünglich sah es so aus:

B: 2A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:12:41:00:AB:00:01:00:48:42:57:34:30:37:33:34:37:31:F7:2C
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:06:79:50
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:0A:B9:48
R: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:C8:C4:53:FFR: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:48:C4:92:FFT: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:0E:F9:40
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:12:29:7A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:16:69:72
R: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:C8:C4:D2:FFT: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:1A:A9:6A
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:4B:04:00:1E:E9:62
R: FD:FF:FF:FF:7E:A8:FF:81:41:29:10:48:C4:40

Das Mega Modul scheint die Daten direkt wieder zu Receiven. Die Transmit Daten sehen dort auch noch gut aus. Aber dann im UNO Modul kann man die fehlenden Bits sehen. Gerätekennung ist nicht sichtbar und deswegen kann die Zentrale die Daten auch nicht zuordnen.

Eine Idee, was das jetzt ist? Alles was nach FD:FF:FF:FF: kommt scheint falsch zu sein, selbst die Gerätekennung wird nicht sauber übertragen. 42:FF:FF:02

Die Bilder sind das Datenpaket eines Tastendrucks.


Thorsten Pferdekaemper

Hi,
Zitat von: grogo am 08 April 2018, 20:08:43
ich habe jetzt die Pins auf die Ausgänge 14 und 15 gelegt, den Transmit-Enable auf Pin3 gelassen, leider ohne Erfolg. Das Modul sendet Daten und auch Taster-Aktivitäten, leider empfängt er aber nichts vom BUS.
Keine Ahnung, das müsste man mal genauer analysieren. Jetzt hast Du es aber wieder geändert, da ist das dann wohl obsolet.

Zitat
Dann habe ich das Programm auf die seriel1 geändert. Pins auf 18/19 gelegt und das Programm geändert:
....Serial1.begin(19200);
.... device = new HBWDevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &Serial1,RS485_TXEN,sizeof(config),&config,
                         // NEU (6 statt 2 Kanaele)
                         6,channels,
                         &Serial,
                         NULL, NULL);
...
und die nicht benötigten Stellen auskommentiert.

Jetzt ist es so, dass das Modul nur Daten empfängt.
Ich würde mal sagen, dass da das Parity-Bit fehlt. Mach das mal so:

Serial1.begin(19200,SERIAL_8E1);

Dann dürften auch die Datenpakete ein bisschen länger werden...
Gruß,
   Thorsten

FUIP