HM-LC-Bl1-FM-2 lasst sich nicht anlernen

Begonnen von heidepower, 09 August 2019, 21:42:55

Vorheriges Thema - Nächstes Thema

heidepower

Hallo zusammen, komme eig von der Homematicwelt aber ich denke das in dem Sketch ein Bug drin ist!!! Da hier ha der Ersteller des codes Zuhause ist, hoffe ich das ich hier mehr Erfolg habe.

ich habe mir den 2 Kanal Rollladenaktor HM-LC-Bl1-FM-2 nachgebaut doch leider bekommen ich ihn nicht angelernt. Dachte es liegt an einem Layout oder Hardwarefehler. Doch als ich den Sketch HM-LC-Bl1-FM 1Kanal Rollladenaktor aufspielte, konnte ich ihn anlernen!!!

Ich muss dazusagen, dass ich ein paar PINS geändert habe. Und zwar die Status LED PIN 4 auf 5 und die Tastereingänge Untereinader.

Woran kann es liegen?

Grüße heidepower

PeMue

Magst Du nicht mal einen Link zum Sketch posten?

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

papa

BananaPi + CUL868 + CUL433 + HM-UART + 1Wire


papa

Ist 00FFFF die Zentrale ?
Wenn nicht bitte mal nen RESET (min. 5 Sekunden den Config-Button drücken) machen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

heidepower

Hey, weis ich nicht ob das die Zentrale ist! Wie kann ich das herrausfinden?
Ein reset habe ich auch schon gemacht, brachte auch nichts!

Grüße heidepower

papa

Ist das die Adresse, die bei der VCCU in FHEM steht - oder was auch immer Du als IO benutzt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

heidepower

#7
Hmm kann leider in miener Zentrale nichts finde, dass mir das bestätigt. Aber ich habe mal einen vergleich der serial Monitoren gemacht. Beide sketche wurden auf den gleichen aktor aufgespielt. Wobei sich der 1k Rolladenaktor (links) anlernen läst.

Die aktulle ASKSINPP LIP habe ich auch noch installiert, brachte auch nichts :(

Grüße heidepower

heidepower

@ papa könnte sein das aich ein bug in die Software eingeschlichen hat? Hast du evtl eine ältere Version die mach mal testen könnte?

Gruß heidepower

papa

Das ist eher unwahrscheinlich. Dann müssten ja alle Probleme haben. Irgendwie sehen für mich beide nicht richtig gepaired aus. Also um hier mal vorwärts zu kommen, bitte mal den Sketch, so wie er geflasht wird, hier rein. Außerdem die Logs nochmal als Text (in Code Tags) und nicht als Bild. Außerdem ein List deines Homematic IO. Dann schauen wir mal weiter.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

heidepower

Hallo, in dem Vergleichsbild sind beide nicht gepaird gewesen. Habe ich absichtlich so gemacht, dass man einen einheitlichen Vergleicht hat!

Ich habe jetzt herrausgefunden, wenn ich die Device ID von 0x00, 0x05, 0xaf in 0x59,0x32,0xaf ändere sich der Aktor anlernen läst! Er wird dan zwar die Aktorbezeichnung HM-LC-Bl1-FM mit zwei Kanälen angezeigt.

Folgenden Sketch benutze ich. Es handelt sich um den HM-LC-Bl1-FM-2 in dem ich ein paar Pin Anpassungen vorgenommen habe.
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2017-12-14 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------

// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>

#include <Blind.h>

// we use a Pro Mini
// Arduino pin for the LED
#define LED_PIN 4
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8

#define ON_RELAY_PIN 14
#define DIR_RELAY_PIN 15

#define ON_RELAY2_PIN 16
#define DIR_RELAY2_PIN 17

#define UP_BUTTON_PIN 7
#define DOWN_BUTTON_PIN 6

#define UP_BUTTON2_PIN 5
#define DOWN_BUTTON2_PIN 3

// number of available peers per channel
#define PEERS_PER_CHANNEL 6

// all library classes are placed in the namespace 'as'
using namespace as;

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0x00, 0x05, 0xaf},            // Device ID
  "AskSinPP0A",                  // Device Serial
  {0x00, 0x05},                  // Device Model
  0x24,                          // Firmware Version
  as::DeviceType::BlindActuator, // Device Type
  {0x01, 0x00}                   // Info Bytes
};

/**
   Configure the used hardware
*/
typedef AvrSPI<10, 11, 12, 13> RadioSPI;
typedef AskSin<StatusLed<LED_PIN>, NoBattery, Radio<RadioSPI, 2> > Hal;

DEFREGISTER(BlindReg0, MASTERID_REGS, DREG_INTKEY, DREG_CONFBUTTONTIME, DREG_LOCALRESETDISABLE)

class BlindList0 : public RegList0<BlindReg0> {
  public:
    BlindList0 (uint16_t addr) : RegList0<BlindReg0>(addr) {}
    void defaults () {
      clear();
      // intKeyVisible(false);
      confButtonTime(0xff);
      // localResetDisable(false);
    }
};


class BlChannel : public ActorChannel<Hal, BlindList1, BlindList3, PEERS_PER_CHANNEL, BlindList0, BlindStateMachine> {
  private:
    uint8_t on_relay_pin;
    uint8_t dir_relay_pin;
  public:
    typedef ActorChannel<Hal, BlindList1, BlindList3, PEERS_PER_CHANNEL, BlindList0, BlindStateMachine> BaseChannel;

    BlChannel () : on_relay_pin(0), dir_relay_pin(0) {}
    virtual ~BlChannel () {}

    virtual void switchState(uint8_t oldstate, uint8_t newstate, uint32_t stateDelay) {
      BaseChannel::switchState(oldstate, newstate, stateDelay);
      if ( newstate == AS_CM_JT_RAMPON && stateDelay > 0 ) {
        motorUp();
      }
      else if ( newstate == AS_CM_JT_RAMPOFF && stateDelay > 0 ) {
        motorDown();
      }
      else {
        motorStop();
      }
    }

    void motorUp () {
      digitalWrite(dir_relay_pin, HIGH);
      digitalWrite(on_relay_pin, HIGH);
    }

    void motorDown () {
      digitalWrite(dir_relay_pin, LOW);
      digitalWrite(on_relay_pin, HIGH);
    }

    void motorStop () {
      digitalWrite(dir_relay_pin, LOW);
      digitalWrite(on_relay_pin, LOW);
    }

    void init (uint8_t op, uint8_t dp) {
      on_relay_pin = op;
      dir_relay_pin = dp;
      pinMode(on_relay_pin, OUTPUT);
      pinMode(dir_relay_pin, OUTPUT);
      motorStop();
      BaseChannel::init();
    }
};


// setup the device with channel type and number of channels
typedef MultiChannelDevice<Hal, BlChannel, 2, BlindList0> BlindType;

Hal hal;
BlindType sdev(devinfo, 0x20);
ConfigButton<BlindType> cfgBtn(sdev);
InternalButton<BlindType> btnup(sdev, 1);
InternalButton<BlindType> btndown(sdev, 2);
InternalButton<BlindType> btnup2(sdev, 3);
InternalButton<BlindType> btndown2(sdev, 4);

void initPeerings (bool first) {
  // create internal peerings - CCU2 needs this
  if ( first == true ) {
    HMID devid;
    sdev.getDeviceID(devid);
    Peer p1(devid, 1);
    Peer p2(devid, 2);
    Peer p3(devid, 3);
    Peer p4(devid, 4);
    sdev.channel(1).peer(p1, p2);
    sdev.channel(2).peer(p3, p4);
  }
}

void setup () {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  //storage().setByte(0,0);
  bool first = sdev.init(hal);
  sdev.channel(1).init(ON_RELAY_PIN, DIR_RELAY_PIN);
  sdev.channel(2).init(ON_RELAY2_PIN, DIR_RELAY2_PIN);

  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  buttonISR(btnup, UP_BUTTON_PIN);
  buttonISR(btndown, DOWN_BUTTON_PIN);
  buttonISR(btnup2, UP_BUTTON2_PIN);
  buttonISR(btndown2, DOWN_BUTTON2_PIN);

  initPeerings(first);
  sdev.initDone();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
    hal.activity.savePower<Idle<> >(hal);
  }
}


Device List
HM-RC-19 (CUX2801001)
HM-PB-4-WM (CUX4000001)
HM-RC-19 (CUX4000002)
HM-WDS100-C6-O (CUX9002001)
HM-LC-Bl1-FM (AskSinPP00)
HM-LC-Sw1-Pl-DN-R1 (AskSinPP01)
HM-PB-2-WM55 (AskSinPP02)
HB-UNI-SenAct-4-4-RC (AskSinPP03)
HM-Sec-MDIR (AskSinPP04)
HM-LC-Dim1PWM-CV (AskSinPP05)
HM-LC-Sw2-FM (AskSinPP06)
HM-LC-Sw1-FM (AskSinPP07)
HM-LC-Sw1-FM (AskSinPP08)
HM-LC-Sw2-FM (AskSinPP09)
HM-RCV-50 (BidCoS-RF)
HM-LC-RGBW-WM (PEQ1604370)
HmIP-HEATING (INT0000001)
HmIP-HEATING (INT0000002)
HMIP-SWDO (0000D8A9979755)
HmIP-STHD (000E9709930E1D)
HmIP-SWDM-B2 (0015599396548B)
HMIP-SWDO (0000D8A99791C3)
HmIP-SRH (0007D8A99FC569)
HMIP-SWDO (0000D8A99791E6)
HmIP-SRH (0007D8A99FC56E)
HMIP-SWDO (0000D8A997920A)
HmIP-eTRV-2 (000A18A996F87B)
HmIP-eTRV-2 (000A18A996F857)
HmIP-WTH-2 (000A98A9A232A6)
HmIP-SWDM-B2 (0015599396542B)



Grüße heidepower

heidepower

#11
Hey,

@papa Also anlernen kann ich ihn jetzt. Anscheinend benutz irgend ein anderes Gerät die Device ID schon! Aber trotzdem wird er nur als 1Kanal Rolladenaktor ( HM-LC-Bl1-FM) erkannt. Im Sketch ist auch genau an der Stelle ein Fehler. Dort steht unter Device Model : {0x00,0x05} ändert man dies jetzt auf {0x00,0xD2} Stimmt zwar die Typenbezeichnung (HM-LC-Bl1-FM-2) aber unter der Bezeichnung steht er immer noch als 1Kanal drin.

Im Anhang findest du zwei Bilder.
Bild 1 Sketch wie im übrigen Post von mir.
Bild 2 Sketch mit angepasstem Device Model

Grüße heidepower

frank

beide models haben original auch nur 1 channel. 0x00D2 ist nur eine neuere hardware variante, deshalb hinten eine 2.
da es keinen 2-kanal aktor original gibt, musst du dir wohl ein eigenes model kreieren.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

papa

Die CCU unterstützt eine variable Anzahl von Kanälen, die der Aktor beim Pairen mitschickt.
<channel index="1" type="BLIND" count_from_sysinfo="23.0:1.0">
Deshalb gibt es auf der CCU 2 Kanäle. FHEM unterstützt das leider nicht. Deshalb wird es in FHEM immer nur einen Kanal geben.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

LuckyDay

@papa

Ich denke ihr nutzt da einen Bug der ccu aus.

in Fhem lassen sich durchaus auch von Hand weitere Kanäle anlegen

papa

Das ist kein Bug - wenn im XML count_from_sysinfo benutzt wird, legt die CCU so viele Kanäle an, wie der Aktor beim pairen meldet. CUL_HM ignoriert diese Info. Das ist/war bisher auch kein Problem, da ja die verkaufte Hardware immer entsprechend unterstützt wurde. Jetzt nutzen die Selbstbauten aber diese Feature immer öfter, was es auf FHEM-Seite schwer macht, diese ordentlich zu nutzen.
Wahrscheinlich kann man die fehlenden Kanäle auch per Hand nachträglich anlegen. Aber ich denke für die meisten Nutzer ist das keine Lösung. Ich muss mal mit Martin Kontakt aufnehmen, ob wir das irgendwie anpassen können.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

LuckyDay

ZitatDas ist/war bisher auch kein Problem, da ja die verkaufte Hardware immer entsprechend unterstützt wurde
Jain

das Problem war doch schon seit EQ-3 "fehlerhafte" SW2 verkaufte die sich als SW1 meldeten, deswegen gibt es in Fhem auch seitdem ModelForce.
zum auswählen.

Martin ist deswegen schon die richtigen AnsprechPerson :)

heidepower

Hallo,

kann mir jemand ( @papa ) verraten warum eine state machine nicht in dem Sketch funktioniert? Da ich mit dem Aktor keinen Motor sondern einen 433Mhz Fernbediung ansteuere muss ich die Unterprogramme für Hoch Runter und Stopp anpassen.

Und zwar soll jeweils für Hoch und Runter 2 Sek das Relais angezogen bleiben. Dann geht der Rollladen in selbsthaltung. Wenn ich das mit einem Delay realisiere funktioniert es auch, aber in der Zeit wo er in dem Delay hängt kann kein Stopp Befehl bearbeitet werden.

ich habe das ganze mal für Hoch mit einer State Machine ausprobiert (Zeile 96) doch leider funktioniert es nur einmal.....

https://pastebin.com/R00yBsH5?fbclid=IwAR25jpgdgys4AIFugqncIlT4E42Zl-gzhchskNCRBf5M1FHCJUMOtPBFnOo

Grüße

papa

Dafür gibt es die actors/PushButton-Klasse. Die kriegt einen Pin und kann dann mit press(millis) den "Button" für eine bestimmte Zeit drücken. Das ganze ist nicht blockierend.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

heidepower

#19
Hey,

@papa danke für deine Antwort, leider bin ich mit deiner Antwort überfodert  :-\
Ich hab den Sketch und googel nach PushButton-Klasse etc durchsucht, konnte aber nichts finden das mir weiterhelfen könnte! Könntest du mir das erklären wie ich das einbinde, oder mir das schnell in meinem Sketch ändern? Das wäre sehr nett... :)

das habe ich gefunden
https://github.com/pa-pa/AskSinPP/blob/master/actors/PushButton.h
nehme mal an das ich De Lib einbinden muss, aber weiter weis ich dann nicht....

Grüße


papa

Hier mal die wichtigen Fragmente:


#include <actors/PushButton.h>

....

class BlChannel : public ActorChannel<Hal,BlindList1,BlindList3,PEERS_PER_CHANNEL,BlindList0,BlindStateMachine> {
  private PushButton<HIGH> onpin;
public:
  typedef ActorChannel<Hal,BlindList1,BlindList3,PEERS_PER_CHANNEL,BlindList0,BlindStateMachine> BaseChannel;

  BlChannel () {}
  virtual ~BlChannel () {}

....

  void init () {
    onpin.init(ON_RELAY_PIN);

....

  void motorup () {
    onpin.press(2000); // for 2 seconds on

....

  void motorstop () {
    digitalWrite(ON_RELAY_PIN,LOW);   // simple switch off

BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

heidepower

Hey danke, leider bringt die IDE einen fehler... und wenn ich für DIR_Relay das gleiche möchte füge ich das gleiche für DIR_RELAY untendrunter ein?



class BlChannel : public ActorChannel<Hal,BlindList1,BlindList3,PEERS_PER_CHANNEL,BlindList0,BlindStateMachine> {
  private PushButton<HIGH> onpin;
  private PushButton<HIGH> dirpin;




heidepower

Habe den Fehler gefunden, wenn ander auch vor dem Probem stehen sollten.

Der ":" hat gefehlt nach private, desweitern habe ich für das dir_relay das gleiche beigefügt. Jetzt fährt mein Rollande so wie ich mir das vorgestellt habe!
#include <actors/PushButton.h>

....

class BlChannel : public ActorChannel<Hal,BlindList1,BlindList3,PEERS_PER_CHANNEL,BlindList0,BlindStateMachine> {
  private: PushButton<HIGH> onpin; PushButton<HIGH> dirpin;
public:
  typedef ActorChannel<Hal,BlindList1,BlindList3,PEERS_PER_CHANNEL,BlindList0,BlindStateMachine> BaseChannel;

  BlChannel () {}
  virtual ~BlChannel () {}

....

  void init () {
    onpin.init(ON_RELAY_PIN);
    dirpin.init(DIR_RELAY_PIN);




@papa vielen Dank, jetzt wollte ich im 2 kanal Rolladenaktor das gleiche einfügen und muste feststellen, dass der anderster vom code ist  :-[ könntest du mir für den auch nochmal bitte die wichtigsten Fragmenet zusammenfügen?

Grüße