Alternative Firmware für HM-LC-SW2-FM ?

Begonnen von Klaus0815, 16 September 2017, 21:07:39

Vorheriges Thema - Nächstes Thema

papa

Zitat von: Klaus0815 am 08 Oktober 2017, 20:57:23
Ich habe noch ein bisschen weiter versucht, so ganz bin ich noch nicht hinter den Fehler gekommen:

- Der HM-LC-SW2 funktioniert mal genau wie er soll, dann nimmt er wieder keinerlei Tasten an, dann toggelt er den Max-Aktor alle 2 Sekunden
- Habe dann einen anderen Max-AKtor mit Deiner neuen Software geflasht, also die für den HM-LC-SW2:
    - geht erst mal wie es sein soll, dann irgendwann gleiches Verhalten wie oben, schickt ewig an-aus-an-aus im ca. 2sec-Rhythmus, nur Reset hilft
- den Fehler von gestern, das der Aktor genau 3 mal an-aus-an oder aus-an-aus geht hatte ich heute nicht, obwohl nichts an der Software geändert wurde

Hat es evtl. mit dem internen Peering zu tun? Die 2 sec sind ungefähr die Zeit bis der gepeerte Aktor seinen Empfang zurück meldet.
Hatte mal versucht den Aktor während des ständigen an-aus-an-aus lokal umzuschalten, das hat aber keinen Erolg

Also wenn ich das jetzt richtig verstanden habe, sollte ich das Verhalten mit einem MAX Stecker nachvollziehen können. Werde ich mir mal ansehen. Kann aber noch nicht sagen, wann ich dazu komme. Ist derzeit etwas wenig freie Zeit.

Zitat von: Klaus0815 am 08 Oktober 2017, 20:57:23
Müsste man evtl. den Peers explizit ein on / off statt eines toggles schicken?
(Glaube das wäre eh sinnvoller, sonst kann man nie mit dem zentralen HM-LC-SW2 gezielt alle Peers in die gleiche Stellung schalten? )

Hm, das geht aber nicht wirklich. Der Taster kann nur ein "Short-Press" oder "Long-Press" senden. Die Aktion wird dann beim Ziel über die Regsiter festgelegt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Klaus0815

Also wenn ich das jetzt richtig verstanden habe, sollte ich das Verhalten mit einem MAX Stecker nachvollziehen können.

Ja, nur wie gesagt es tritt nicht immer auf, es geht 20 oder 30 mal ganz normal, dann fängt das an-aus-an-aus-Spiel an, die LED am sendenden AKtor blinkt dann auch bei jedem Schaltvorgang des Slaves kurz auf.




papa

Ich hatte den Fall jetzt auch einmal. So wie es aussieht, ist er da im LongPress hängen geblieben. Sprich er hat nicht mitgekriegt, dass der taster wieder losgelassen wurde. Dann hilft auch kein erneutest Drücken. Es wird immer fleissig LongPress gesendet und damit der Status gewechselt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Damit die Seriale funktioniert, musst Du das hier beachten - ganz am Ende des Artikels.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Wenn der Status mehrfach wechselt, dann wurde das Ack vom Actor nicht empfangen und die Nachricht wird erneut gesendet. Da stimmt was in der Lib mit der Behandlung von doppelten Nachrichten noch nicht. Wahrscheinlich kommt das Ack auch zu schnell und der Sender befindet sich noch nicht wieder im Empfangsmodus. Muss ich nochmal genau checken.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Klaus0815

Ich bin ja schon mal froh das Du die gleichen Erfahrungen gemacht hast, mein Test-HM-LC-SW2 hat sich jeden Tag anders verhalten, mal wie gewollt, dann aus-an-aus, dann dauer-an-aus

Ich danke Dir auf alle Fälle schon mal für Deine Mühe, ist nicht selbstverständlich

Viele Grüße

Klaus

papa

Naja - das ist ja auch irgendwie sportlich :-)

und am Ende macht es die Lib nur robuster.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Kannst Du bitte mal die Änderungen der Lib ausprobieren. Ich stelle jetzt sicher, dass ein Gerät mindestens 100ms waretet, bevor es antwortet. Das sollte das Ping-Pong zwischen Taster & Aktor abstellen. Bitte beide Geräte mit der neuen Software versehen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Klaus0815

#38
Hallo Papa,

habe die Änderungen mal ausprobiert, wir sind wesentlich weiter :-)

Aufbau war: 1 x Max-Aktor als "Empfänger", je 1 x HM-LC-SW2 und 1 x Max-Aktor als Sender

Test1:  sendenden Max-Aktor mit der neuen Lib als HM-LC-SW2 geflasht : keine Verbesserung
Test2: zusätzlich den empfangenden Max-Aktor mit der neuen Lib geflasht, funktioniert wie es soll
Test3: zusätzlich den HM-LC-SW2 mit der neuen Lib geflasht, funktioniert meist wie es soll

Funktioniert meist heisst, ich habe kein An-Aus-An-Aus mehr, der empfangende Max-Aktor funktioniert wie er soll, aber ich schaffe es nach ein paar mal an-aus am HM-LC-SW2 das dieser sich aufhängt.
Es dauert dann geschätzt 10 - 20 Sekunden, bis er wieder funktioniert
Wenn er sich aufgehängt hat geht auch der lokal gepeerte Kanal nicht mehr.

Was ist am HM-LC-SW2 anders? Letztendlich werden die 230V ja auch nur über Optokoppler zum Microcontroller geschaltet. Kann es was mit prellen der Taster zu tun haben?

Bin leider noch nicht dazu gekommen, das Ganze mit Original-AKtoren zu testen, letztendlich war die Problemlösung ja jetzt nicht am sendenden HM-LC-SW2 sondern das Ändern der Antwortzeit im empfangenden Aktor? Bin gespannt wie die Original-Aktoren damit umgehen.

Viele Grüße

Klaus

Klaus0815

Habe gerade noch fsetgestellt, das ein Longpress stndig den AKtor toggelt, sowohl lokal auls auch den anderen per Funk
Wohl das gleiche Thema wie im Asksin++-Thread?

Ich schaffe es auch, denr HM-LC-SW2 in einen Zustand zu bringen, in dem er auch nach loslassen der Taste ständig weiter toggelt.


Klaus0815

kurze Zwischenfrage noch zu einem anderen Projekt - bastle gerade an einer Steuerung mit 2 Fensterkontakten, die ich ver-odern muss
Hierfür eignet sich Dein Skript hier auf einem Max-Aktor ideal, da es 2 Kanäle zur Verfügung stellt.
Ich muss jetzt nur die beiden Kanäle aufs Gleiche Relais bringen
- Möglichkeit 1: Ich löte 2 Dioden zwischen die beiden Ausgänge vom ATMega zum Relais
- Möglichkeit 2: Was passiert wenn ich in Deinem Skript einfach
#define RELAY1_PIN 0 // PB0
#define RELAY2_PIN 1 // PB1

Einfach Relay 2 auf Pin 0 ändere? so das dann beide Kanäle das gleiche Relais schalten?

Müsste das so gehen?

Viele Grüße

Klaus

papa

Zitat von: Klaus0815 am 14 Oktober 2017, 10:44:28
Habe gerade noch fsetgestellt, das ein Longpress stndig den AKtor toggelt, sowohl lokal auls auch den anderen per Funk
Wohl das gleiche Thema wie im Asksin++-Thread?

Ich schaffe es auch, denr HM-LC-SW2 in einen Zustand zu bringen, in dem er auch nach loslassen der Taste ständig weiter toggelt.

Einfach das lgActionType Register beim self Peer auf inactive stellen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Zitat von: Klaus0815 am 14 Oktober 2017, 17:02:47
kurze Zwischenfrage noch zu einem anderen Projekt - bastle gerade an einer Steuerung mit 2 Fensterkontakten, die ich ver-odern muss
Hierfür eignet sich Dein Skript hier auf einem Max-Aktor ideal, da es 2 Kanäle zur Verfügung stellt.
Ich muss jetzt nur die beiden Kanäle aufs Gleiche Relais bringen
- Möglichkeit 1: Ich löte 2 Dioden zwischen die beiden Ausgänge vom ATMega zum Relais
- Möglichkeit 2: Was passiert wenn ich in Deinem Skript einfach
#define RELAY1_PIN 0 // PB0
#define RELAY2_PIN 1 // PB1

Einfach Relay 2 auf Pin 0 ändere? so das dann beide Kanäle das gleiche Relais schalten?

Müsste das so gehen?

Meine Tablet-Powersteuerung arbeitet auch mit 2 Channels, die ein Relais schalten. Einer ist vom PIR - der ander für dauerhaft einschalten. Dazu habe ich folgenden Code - Channel 1&3 und 2&4 sind zusammengeschalten.


uint8_t cstat = 0;
uint8_t cmask[] = { 0b00000101, 0b00001010, 0b00000101, 0b00001010 };

// map number of channel to pin
// this will be called by the SwitchChannel class
uint8_t SwitchPin (uint8_t number) {
  switch( number ) {
    case 2: return RELAY2_PIN;
    case 3: return RELAY1_PIN;
    case 4: return RELAY2_PIN;
  }
  return RELAY1_PIN;
}

class SChannel : public SwitchChannel<Hal,PEERS_PER_CHANNEL> {

public:
  SChannel () : SwitchChannel<Hal,PEERS_PER_CHANNEL>() {}
  ~SChannel () {}

  virtual void switchState(__attribute__ ((unused)) uint8_t oldstate,uint8_t newstate) {
    uint8_t num = number()-1;
    uint8_t pin = SwitchPin(number());
    if( newstate == AS_CM_JT_ON ) {
      cstat |= 1 << num;
    }
    else if ( newstate == AS_CM_JT_OFF ) {
      cstat &= ~(1 << num);
    }
    if( (cstat & cmask[num]) != 0) {
      digitalWrite(pin,lowact ? LOW : HIGH);
    }
    else {
      digitalWrite(pin,lowact ? HIGH : LOW);
    }
    BaseChannel::changed(true);
  }
};
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Klaus0815

ZitatDazu habe ich folgenden Code - Channel 1&3 und 2&4 sind zusammengeschalten.

Meine Programmierkenntnisse sind leider zu schlecht um zu verstehen wo ich das Einfügen / wie ich es umbauen muss
Aber kein Problem, kann auch einfach Am ATMega 2 Dioden einlöten, die die beiden Ausgänge ver-odern.

Hast Du noch eine Idee woran es liegen kann das sich der HM-LC-SW2 teilweise für ein paar Sekunden aufhängt?

Viele Grüße

Klaus

papa

Zitat von: Klaus0815 am 15 Oktober 2017, 18:56:45
Hast Du noch eine Idee woran es liegen kann das sich der HM-LC-SW2 teilweise für ein paar Sekunden aufhängt?

Nö - passiert das auch ohne Tastendruck ?
Wenn bei einem Tastendruck der Pin mit 50Hz Netzfrequenz schwingt, könnte das schon einiges durcheinander bringen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire