HM-LC-Bl1-FM externes setzen der Position

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Horbi
Beiträge: 199
Registriert: 29.05.2019, 12:51
Hat sich bedankt: 19 Mal
Danksagung erhalten: 65 Mal

HM-LC-Bl1-FM externes setzen der Position

Beitrag von Horbi » 19.08.2019, 18:01

Hallo Zusammen,

suche mir gerade einen Wolf und komme nicht weiter. Ich würde gerne einen Rolladenaktor zur Steuerung eines Garagentorantriebs nutzen.
Der Sketch basiert derzeit ja auf einer Timersteuerung für das Öffnen und Schliessen.
Am Garagentorantrieb habe ich Endschalter, für offen als auch zu.
Zusätzlich könnte ich eine Positionsbestimmung des Tors über Drehgeber, etc bauen.
Wie kann ich im Sketch zur Laufzeit den Timer beim öffnen/schliessen übersteuern?
Ein

Code: Alles auswählen

 sdev.channel(1).updateLevel(200);
setzt mir zwar den Level sofort, aber beendet nicht den Timer.
Ich bräuchte also eine Möglichkeit direkt auf die StateMachine einzuwirken...

Viele Grüße
Horst

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von papa » 19.08.2019, 19:45

Puh - das ist so nicht vorgesehen. Du könntest versuchen mit switchState() den Timer zu stoppen. Dazu musst Du eine Methode im BlChannel machen, die dann Zugriff auf den aktuellen Status in der "state" Variablen hat.

Code: Alles auswählen

void stopTimer () {
  if( state == AS_CM_JT_RAMPON ) {
    switchState(AS_CM_JT_RAMPON,AS_CM_JT_ON,0);
  }
  if( state == AS_CM_JT_RAMPOFF ) {
    switchState(AS_CM_JT_RAMPOFF,AS_CM_JT_OFF,0);
  }
}
Musst Du mal probieren, ob das klappt.
Anfragen zur AskSin++ werden nur im Forum beantwortet

Horbi
Beiträge: 199
Registriert: 29.05.2019, 12:51
Hat sich bedankt: 19 Mal
Danksagung erhalten: 65 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von Horbi » 20.08.2019, 15:56

Danke, war ein guter Hinweis. Habe es jetzt so gelöst und scheint zu funktionieren:

Code: Alles auswählen

	case KEY_OPENED_PIN:
		DPRINTLN(F("KEY_OPENED "));
		sdev.channel(1).stop();
		sdev.channel(1).updateLevel(200);
		break;
Habe aber noch ein Problem. Ich würde gerne den Stromverbrauch zum jeweiligen Level messen und speichern (damit ich merke ob irgendwas den Motor blockiert). Also ein Array mit Level in 10'er Schritten von 0 bis 200 - bräuchte dafür aber einen trigger. Jetzt habe ich in der Blind.h das gefunden - trigger scheint alle 100ms aufgerufen zu werden:

Code: Alles auswählen

class BlindStateMachine : public StateMachine<BlindPeerList> {

  class LevelUpdate : public Alarm {
    BlindStateMachine&  sm;
    uint16_t  done;
    uint16_t  fulltime;
    uint8_t   startlevel;
  public:
    LevelUpdate (BlindStateMachine& m) : Alarm(0), sm(m), done(0), fulltime(0), startlevel(0) {
      async(true);
    }
    ~LevelUpdate () {}
    void start (AlarmClock& clock,uint16_t ft) {
      startlevel = sm.status();
      fulltime = ft;
      done = 0;
      set(millis2ticks(100));
      clock.add(*this);
      sm.triggerChanged();
    }
    void stop (AlarmClock& clock) {
      clock.cancel(*this);
      if( done > fulltime ) done = fulltime;
      uint8_t dx = (done * 200UL) / fulltime;
      if( sm.state == AS_CM_JT_RAMPON ) {
        if( dx > (200-startlevel) ) dx = 200-startlevel;
        sm.updateLevel(startlevel + dx);
      }
      else if( sm.state == AS_CM_JT_RAMPOFF ) {
        if( dx > startlevel ) dx = startlevel;
        sm.updateLevel(startlevel - dx);
      }
      sm.triggerChanged();
    }
    virtual void trigger (AlarmClock& clock) {
      // add 0.1s
      ++done;
      set(millis2ticks(100));
      clock.add(*this);
    }
  };
  

Wie kann ich den virtuellen trigger in den Hauptsketch bekommen?
Und gibt es eine variable die ich dann auslesen kann um den momentanen Level angezeigt zu bekommen?

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von papa » 20.08.2019, 19:43

Hm - da kommt man nicht ran. Du kannst aber im Channel in den motorUp/Down/Stop Methoden nen eigenen Alarm starten/stoppen. Das aktuelle Level gibt es in status().
Anfragen zur AskSin++ werden nur im Forum beantwortet

Horbi
Beiträge: 199
Registriert: 29.05.2019, 12:51
Hat sich bedankt: 19 Mal
Danksagung erhalten: 65 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von Horbi » 10.10.2019, 12:43

und schon wieder eine Frage :-)
ich kann ja mit "sdev.channel(1).getList1().refRunningTimeBottomTop();" einen Listenwert auslesen.
Kann ich auch einen Listenwert schreiben? Ich habe eine Learnfunktion im Motor, ich würde das gerne koppeln, so dass der Arduino die Zeit auch mißt und dann als Registerwert schreibt.

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von jp112sdl » 10.10.2019, 12:57

Horbi hat geschrieben:
10.10.2019, 12:43
Kann ich auch einen Listenwert schreiben?

Code: Alles auswählen

sdev.channel(1).getList1().refRunningTimeBottomTop(MeinWert);
Im AskSinPP-Example steht es sogar schon auskommentiert drin

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Horbi
Beiträge: 199
Registriert: 29.05.2019, 12:51
Hat sich bedankt: 19 Mal
Danksagung erhalten: 65 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von Horbi » 10.10.2019, 13:06

Danke - wer lesen kann und so :-)

Horbi
Beiträge: 199
Registriert: 29.05.2019, 12:51
Hat sich bedankt: 19 Mal
Danksagung erhalten: 65 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von Horbi » 10.10.2019, 13:16

Super funktioniert - Wert wird sauber gespeichert.
Allerdings sehe ich ihn nicht in der CCU.
Gibt es eine Möglichkeit das der Client ein Update triggert, also seine List1 an die CCU überträgt?

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von jp112sdl » 10.10.2019, 18:26

CCU DevConfig->Device List->Device auswählen, Kanal BLIND:1->Clear device config cache (steht ganz unten)
alternativ gehts auch mit Homematic Manager

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Horbi
Beiträge: 199
Registriert: 29.05.2019, 12:51
Hat sich bedankt: 19 Mal
Danksagung erhalten: 65 Mal

Re: HM-LC-Bl1-FM externes setzen der Position

Beitrag von Horbi » 13.10.2019, 10:24

Hi Jerome,
vielen Dank, aber meine CCU zeigt mir das nicht an... Habe mal den Screenshot angehängt.
Am elegantesten wäre es natürlich, wenn das Endgerät proaktiv die Konfig sendet, wenn im Endgerät was geändert wird.
Viele Grüße
Horst
Dateianhänge
Bild2.png
Bild1.png

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“