[HM-Wired] HMW-LC-Sw2-DR / HBW-LC-Sw-8 => neues input/output Modul HBW-IO-6-6

Begonnen von a_quadrat, 08 Oktober 2019, 12:44:51

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
es würde mich stark wundern, wenn man die HBWSoftwareSerial einfach durch die originale SoftwareSerial ersetzen kann. Die originale SoftwareSerial hat kein Parity Bit, aber HMW sendet ein Parity Bit bzw. erwartet eins. Ich denke, dass man eine neue Version der HBWSoftwareSerial braucht.
Gruß,
   Thorsten
FUIP

loetmeister

Hi,

Es hat funktioniert... Sowohl die Kommunikation mit FHEM, als auch ein direktes Peering mit dem hausbus 6-Fach Taster.
Ich checke mal die modifizierte Version des sw8 in github ein, dann könnte Andreas mal testen..

EDIT: Hab die Version mal eingestellt:
https://github.com/loetmeister/HBWired/tree/master/HBW-LC-Sw-8
zum Kompilieren HBWSoftwareSerial.h / .cpp im Arduino library Verzeichnis umbenennen oder verschieben.
Anmerkung: Diese Version sollte mit der aktuellen IDE 1.8.10 & Arduino AVR Boards, Version 1.8.1 - die mitgelieferte Version, kompilierbar sein.

Gruß,
Thomas

loetmeister

Hallo,

Irgendwie ist das ganze etwas sonderbar. Egal ob parity bit oder nicht, die Geräte kommunizieren mit einander.
Hatte gestern mal die aktuelle SoftwareSerial um den parity bit Teil aus der HBWSoftwareSerial ergänzt. Auf dem Bus spricht aber alles miteinander... Werde heute noch mal Geräte testen, die mit der alten HBWSoftwareSerial laufen, ob da das Verhalten anders ist.

Ein test von Andreas mit dem HMW-IO-12-Sw7-DR wäre natürlich auch sehr hilfreich.

Gruß,
Thomas

Thorsten Pferdekaemper

Zitat von: loetmeister am 18 Oktober 2019, 08:59:53Egal ob parity bit oder nicht, die Geräte kommunizieren mit einander.
Hatte gestern mal die aktuelle SoftwareSerial um den parity bit Teil aus der HBWSoftwareSerial ergänzt. Auf dem Bus spricht aber alles miteinander...
Soweit ich mich erinnere hast Du gar keine echte eq3-Hardware, oder? Es kann gut sein, dass die Arduino-Lösungen und auch der hm485d etwas "toleranter" sind.

Zitat
Ein test von Andreas mit dem HMW-IO-12-Sw7-DR wäre natürlich auch sehr hilfreich.
...oder mit irgend einer anderen Original-Hardware. Am besten auch noch mit einem HMW-LAN-GW.

Gruß,
   Thorsten
FUIP

a_quadrat

Hi,

alles klar, morgen habe ich Zeit, dann kann ich es mal testen. Mit der alten AVR Boardversion hatte es funktioniert.

VG Andreas

a_quadrat

Hallo,

ich habe es gestern getestet und es funktioniert. Nur bei dem direkten Peering mit dem HMW-IO-12-Sw7-DR gibt es das Phänomen, dass der Ausgang einmal flackert. Beim Ein- und beim Ausschalten. Ich habe mal den Mitschnitt angehängt.


R: FD:FF:FF:FF:FF:9C:00:00:96:F3:06:4B:01:00:FA:F2:E6
R: FD:42:00:00:17:1E:00:00:96:F3:06:4B:01:02:F8:0F:AC
S: 02 FF
T: FD:00:00:96:F3:79:42:00:00:17:02:8F:16
R: FD:42:00:00:17:1E:00:00:96:F3:06:4B:01:02:F8:0F:AC
S: 02 FF
T: FD:00:00:96:F3:79:42:00:00:17:02:8F:16
R: FD:42:00:00:17:1E:00:00:96:F3:06:4B:01:02:F8:0F:AC
S: 02 FF
T: FD:00:00:96:F3:79:42:00:00:17:02:8F:16
R: FD:FF:FF:FF:FF:9A:00:00:96:F3:12:41:01:12:00:03:06:4A:45:51:30:34:39:37:39:33:30:9C:00
R: FD:FF:FF:FF:FF:9C:00:00:96:F3:06:4B:01:00:FC:7E:B2:EE
R: FD:42:00:00:17:1E:00:00:96:F3:06:4B:01:02:FC:7C:4F:A4
S: 02 FF
T: FD:00:00:96:F3:79:42:00:00:17:02:8F:16
R: FD:42:00:00:17:1E:00:00:96:F3:06:4B:01:02:FC:7C:4F:A4
S: 02 FF
T: FD:00:00:96:F3:79:42:00:00:17:02:8F:16
R: FD:42:00:00:17:1E:00:00:96:F3:06:4B:01:02:FC:7C:4F:A4
S: 02 FF
T: FD:00:00:96:F3:79:42:00:00:17:02:8F:16
R: FD:FF:FF:FF:FF:9A:00:00:96:F3:12:41:01:12:00:03:06:4A:45:51:30:34:39:37:39:33:30:9C:00
T: FD:00:00:00:01:B8:42:00:00:17:05:69:02:00:36:D6
R: FD:42:00:00:17:19:00:00:00:01:02:A2:3C
R: ACK


VG Andreas

loetmeister

Hallo Andreas,

Sieht ja schon mal nicht schlecht aus.  ;)
Welche Version des HBW-LC-Sw-8 has du benutzt? Die mit der Standard SoftwareSerial? Oder alte HBWSoftwareSerial?

In jedem Fall würde ich dich bitten die neue Version der HBWSoftwareSerial zu testen, die ich gestern bei mir im github hochgeladen hatte.

Das log schaue ich mir heute Abend genauer an.
Die direkt Verknüpfung hättest du mit an und aus konfiguriert, kein toggle?

Gruß,
Thomas

a_quadrat

Hallo Thomas,

ich habe die Version mit Standard SoftwareSerial getestet, die du vor 4 Tagen hochgeladen hattest. Der Input ist als Schalter konfiguriert, also an/aus, wie vermutet.

Dann teste ich mal die neue HBWSoftwareSerial...

VG Andreas

Thorsten Pferdekaemper

Zitat von: a_quadrat am 22 Oktober 2019, 09:35:09Der Input ist als Schalter konfiguriert, also an/aus, wie vermutet.
Wenn bei Standard-HMW ein Input als Schalter konfiguriert ist, dann sendet der sozusagen ein Taster-Signal bei jeder Flanke, also sowohl beim Ein- als auch beim Ausschalten. Wenn man dann aber einen Taster dranhängt, dann flackert das natürlich.

Außerdem:
Wenn ich das Log überfliege, dann sieht es so aus, dass da ein Standard-HMW-Gerät das ACK vom HBW-Teil nicht versteht und dann seinen Tastendruck dreimal sendet. Ich denke also nicht, dass das richtig funktioniert.
Gruß,
   Thorsten
FUIP

a_quadrat

nein, es hängt auch ein Schalter dran. Aber das dreimalige Senden könnte das flackern erklären.

Ich habe jetzt die neue Version der HBWSoftwareSerial getestet, damit funktioniert es auch ohne flackern.

So sieht der Mitschnitt aus:


R: FD:FF:FF:FF:FF:98:00:00:96:F3:06:4B:01:00:6A:91:C4
R: FD:42:00:00:17:1A:00:00:96:F3:06:4B:01:02:68:6C:8E
S: 02 FF
T: FD:00:00:96:F3:39:42:00:00:17:02:56:98
R: FD:FF:FF:FF:FF:9C:00:00:96:F3:12:41:01:12:00:03:06:4A:45:51:30:34:39:37:39:33:30:9F:4C
T: FD:00:00:00:01:D8:42:00:00:17:05:69:02:C8:B3:EE
R: FD:42:00:00:17:19:00:00:00:01:02:A2:3C
R: ACK
R: FD:FF:FF:FF:FF:9E:00:00:96:F3:06:4B:01:00:6E:5A:D4
R: FD:42:00:00:17:18:00:00:96:F3:06:4B:01:02:6C:55:8E
S: 02 FF
T: FD:00:00:96:F3:19:42:00:00:17:02:B2:5E
R: FD:FF:FF:FF:FF:9A:00:00:96:F3:12:41:01:12:00:03:06:4A:45:51:30:34:39:37:39:33:30:9C:00
T: FD:00:00:00:01:B8:42:00:00:17:05:69:02:00:36:D6
R: FD:42:00:00:17:19:00:00:00:01:02:A2:3C
R: ACK

Thorsten Pferdekaemper

Ja, das sieht meiner Meinung nach besser aus. Die 4B-Nachricht wird jeweils nur einmal an das HBW-Gerät geschickt.
Gruß,
   Thorsten
FUIP

loetmeister

Zitat von: a_quadrat am 22 Oktober 2019, 12:49:17
Ich habe jetzt die neue Version der HBWSoftwareSerial getestet, damit funktioniert es auch ohne flackern.

Hi,

danke fürs testen. Es ist viel einfacher die Standard Ardunino IDE und Board Version nehmen zu können...  :D
Kannst ja mal schauen ob auch HBW-Sen-Key-12 mit deinen Homematic Geräten funktioniert. Dann kannst du HMW_LC_Sw2_DR aus beiden Homebrew Geräten zusammen zu bauen.

Aus dem letzten Mitschnitt lese ich aber immer noch ein Toggle...  ;)
Kanal 2 im Aktor wird zwei mal vom Taster Kanal 1 "getoggelt", Antwort ist C8 (200) - Ein, beim zweiten toggle Antwort 0 - Aus.


PS: Man sieht schön den Broadcast KeyEvent, mit Zielkanal 0

FD:FF:FF:FF:FF:98:00:00:96:F3:06:...
KeyEvent:Quellkanal:Zielkanal
4B      :01        :00
...:6A:91:C4


Gruß,
Thomas

a_quadrat

Hi Thomas,

Zitat von: loetmeister am 22 Oktober 2019, 21:28:55
Aus dem letzten Mitschnitt lese ich aber immer noch ein Toggle...  ;)
Kanal 2 im Aktor wird zwei mal vom Taster Kanal 1 "getoggelt", Antwort ist C8 (200) - Ein, beim zweiten toggle Antwort 0 - Aus.

der Sendekanal vom HMW Gerät ist als Schalter konfiguriert, er sendet ein Event beim einschalten und ein zweites Event beim ausschalten. Ich denke das ist der Toggle den du siehst, Oder?

Gibt es die Möglichkeit, dass auch beim Modul HBW-Sen-Key-12 so einzustellen, dass man Taster und Schalterfunktion hat? Dann könnte man auch Bewegunsmelder oder Fensterkontakte anschließen.
Aktuell sendet das Modul beim gedrückten Taster ständig.

VG Andreas


loetmeister

Hi,

Ja, "Schalter" in diesem Fall würde immer den selben event senden. Da macht normalerweise nur toggle Sinn.

Im SenKey Gerät ist das nicht konfigurierbar. Da nimmst du am besten HBWKey. Dort kannst du verschiedene Schalter auswählen.
https://github.com/loetmeister/HBWired/blob/master/libraries/src/HBWKey.h

Sensor Kontakte hatte ich in HBW-SC-10-Dim-6 implementiert. Da kannst du auch die Schalter mit HBWKey raus kopieren.

Gruß,
Thomas

a_quadrat

Hi,

ich habe auf Basis des HBW-SC-10-Dim-6 mein Modul angepasst und es funktioniert halbwegs. Ich kann in der CCU die Output Kanäle ansteuern und sehe auch die Input Kanäle. Was noch nicht funktioniert, ist das direkte Peering. Ich habe mal meinen sketch angehängt, vielleicht ist ja etwas auffällig.


//*******************************************************************
//
// HBW-IO-6-6
//
// Homematic Wired Hombrew Hardware
// Arduino NANO als Homematic-Device
//
// - Direktes Peering für Switch (noch nicht) möglich. (HBWLinkSwitchSimple)
// - Direktes Peering für Taster (noch nicht) möglich. (HBWLinkKey)
//
//
//
//*******************************************************************
// Changes


#define HARDWARE_VERSION 0x01
#define FIRMWARE_VERSION 0x0001
#define HMW_DEVICETYPE 0x98 //device ID (make sure to import hbw_io-10_dim-6.xml into FHEM)

#define NUMBER_OF_INPUT_CHAN 6  // input channel - pushbutton, key, other digital in
#define NUMBER_OF_OUT_CHAN 6  // digital output channels


#define NUM_LINKS_OUT 20    // address step 42
#define LINKADDRESSSTART_OUT 0x038   // ends @0x37F
#define NUM_LINKS_INPUT 20    // address step 6
#define LINKADDRESSSTART_INPUT 0x380   // ends @0x3F7


//#define USE_HARDWARE_SERIAL   // use hardware serial (USART) for final device - this disables debug output
/* Undefine "HBW_DEBUG" in 'HBWired.h' to remove code not needed. "HBW_DEBUG" also works as master switch,
* as hbwdebug() or hbwdebughex() used in channels will point to empty functions. */


// HB Wired protocol and module
#include <HBWired.h>
#include <HBWLinkKey.h>
#include <HBWKey.h>
#include <HBWLinkSwitchSimple.h>
#include <HBWSwitch.h>

// Pins

  #define RS485_RXD 4
  #define RS485_TXD 2
  #define RS485_TXEN 3  // Transmit-Enable
  #define BUTTON 8  // Button fuer Factory-Reset
  #define ADC_BUS_VOLTAGE A7  // analog input to measure bus voltage

  #define OU01 A0 
  #define OU02 A1
  #define OU03 A2
  #define OU04 A3
  #define OU05 A4 
  #define OU06 A5

  #define IO1 6
  #define IO2 7
  #define IO3 9
  #define IO4 10
  #define IO3 11
  #define IO4 12

  #include "FreeRam.h"
  #include <HBWSoftwareSerial.h>
  HBWSoftwareSerial rs485(RS485_RXD, RS485_TXD); // RX, TX


#define LED LED_BUILTIN        // Signal-LED

#define NUMBER_OF_CHAN NUMBER_OF_OUT_CHAN + NUMBER_OF_INPUT_CHAN


struct hbw_config {
  uint8_t logging_time;     // 0x01
  uint32_t central_address;  // 0x02 - 0x05
  uint8_t direct_link_deactivate:1;   // 0x06:0
  uint8_t              :7;   // 0x06:1-7
  hbw_config_switch switchCfg[NUMBER_OF_OUT_CHAN]; // 0x07 - 0x12 (address step 2)
  hbw_config_key keyCfg[NUMBER_OF_INPUT_CHAN]; // 0x1D - 0x30 (address step 2) 
} hbwconfig;


HBWChannel* channels[NUMBER_OF_CHAN];  // total number of channels for the device


class HBIODevice : public HBWDevice {
    public:
    HBIODevice(uint8_t _devicetype, uint8_t _hardware_version, uint16_t _firmware_version,
               Stream* _rs485, uint8_t _txen,
               uint8_t _configSize, void* _config,
               uint8_t _numChannels, HBWChannel** _channels,
               Stream* _debugstream, HBWLinkSender* linksender = NULL, HBWLinkReceiver* linkreceiver = NULL) :
    HBWDevice(_devicetype, _hardware_version, _firmware_version,
              _rs485, _txen, _configSize, _config, _numChannels, ((HBWChannel**)(_channels)),
              _debugstream, linksender, linkreceiver) {
    };
    virtual void afterReadConfig();
};

// device specific defaults
void HBIODevice::afterReadConfig() {
  if(hbwconfig.logging_time == 0xFF) hbwconfig.logging_time = 50;
};

HBIODevice* device = NULL;



void setup()
{
#ifndef NO_DEBUG_OUTPUT
  Serial.begin(19200);  // Serial->USB for debug
#endif
  rs485.begin();

//Definition mehrerer Kanaele pro Typ

  channels[0] = new HBWSwitch(A0,&(hbwconfig.switchCfg[0]));
  channels[1] = new HBWSwitch(A1,&(hbwconfig.switchCfg[1]));
  channels[2] = new HBWSwitch(A2,&(hbwconfig.switchCfg[2]));
  channels[3] = new HBWSwitch(A3,&(hbwconfig.switchCfg[3]));
  channels[4] = new HBWSwitch(A4,&(hbwconfig.switchCfg[4]));
  channels[5] = new HBWSwitch(A5,&(hbwconfig.switchCfg[5]));
  channels[6] = new HBWKey(6,&(hbwconfig.keyCfg[0]));
  channels[7] = new HBWKey(7,&(hbwconfig.keyCfg[1]));
  channels[8] = new HBWKey(9,&(hbwconfig.keyCfg[2]));
  channels[9] = new HBWKey(10,&(hbwconfig.keyCfg[3]));
  channels[10] = new HBWKey(11,&(hbwconfig.keyCfg[4]));
  channels[11] = new HBWKey(12,&(hbwconfig.keyCfg[5]));

  device = new HBIODevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &rs485,RS485_TXEN,sizeof(hbwconfig),&hbwconfig,
                         // NEU (10 statt 2 Kanaele)
                         NUMBER_OF_CHAN,(HBWChannel**)channels,
#ifdef NO_DEBUG_OUTPUT
                         NULL,
  #else
                         &Serial,
  #endif
                         new HBWLinkKey(NUM_LINKS_INPUT,LINKADDRESSSTART_INPUT),  new HBWLinkSwitchSimple(NUM_LINKS_OUT,LINKADDRESSSTART_OUT));
                         
device->setConfigPins(BUTTON, LED);  // 8 (button) and 13 (led) is the default
                         
#ifndef NO_DEBUG_OUTPUT
  hbwdebug(F("B: 2A "));
  hbwdebug(freeRam());
  hbwdebug(F("\n"));
#endif
 
 

}


void loop()
{
  device->loop();
};


VG Andreas