AskSin++ Library

Begonnen von papa, 08 September 2016, 11:11:25

Vorheriges Thema - Nächstes Thema

papa

Zitat von: Xent am 08 Juli 2018, 11:17:50
Hab gerade bemerkt, dass ich nen Fehler drin hatte ...

void setDestLevel (uint8_t value) {
    destlevel = value;
    if( destlevel > level || destlevel == 200 ) {
      setState(AS_CM_JT_ONDELAY, 0);
    }
    else if ( destlevel < level || destlevel == 0) {
      setState(AS_CM_JT_OFFDELAY, 0);
    }
  }

Baue ich demnächst mal ein
Zitat von: Xent am 08 Juli 2018, 11:17:50
Irgendwie klappt da konfigurieren auch noch nicht so recht.
Könnte am XML liegen, da scheinbar noch nicht mal was von der CCU gesendet wird.
Es wird die ganze Zeit nur der Ladebalken für "Daten werden übertragen" angezeigt und der Schalter lässt sich inder GUI nicht konfigurieren.
Hm - sollte aber gehen. Hast Du mal den "einfachen" probiert ? Mit der CCU kann ich halt nicht testen. Aber hier wurde das ganz auch schon mal erfolgreich benutzt. Im Zweifel mit reseten und neu anlernen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Bin gerade dabei den simulierten Buttondruck per Alarm wieder zu deaktivieren.
Beim Switch funktioniert es so wie es aktuell eingebaut ist.
Wenn ich aber das Rollo fahren lasse kommt bei der Ausgabe nur:

-> 0C 0C A0 11 473071 5932AF 02 01 00  - 28121
Swit


Und der Arduino ist quasi abgestürzt.

papa

Ich verstehe zwar nicht, was Du da vor hast, aber das Problem konnt mit hoher Wahrscheinlichkeit von async(true)
  btnAlarm () : Alarm(0) { async(true); }
  virtual void trigger (AlarmClock& clock) {

Das bedeutet, dass der Alarmcode tigger() direkt im Timer-Interrupt aufgerufen wird. Da kann es dann schnell mal zu einem Stack-Overflow kommen. Ohne async(true) wird der Alarm nur in die ReadyListe umgehängt und dann im normalen loop() synchron zum Hauptprogramm ausgeführt. Da kann man dann auch aufwendige Sachen im Alarm machen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Ich steuer die Markiese über die originale Fernbedienung und der Arduino drück quasi nur die Tasten auf der Fernbedienung.
Daher muss die Taste für ne gewisse Zeit gedrückt sein.

Das mit dem async hatte ich von meiner Katzenklappe übernommen.
Hab das async auf false gesetzt und auch ganz entfernt, es passiert immer noch.

papa

Mach mal nen sysclock.cancel(_btnAlarm); vor dem _btnAlarm.set(millis2ticks(200));
          sysclock.add(_btnAlarm);
. Damit wird ein eventuell noch aktiver Alarm deativiert.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Super funktioniert nun.
Muss jetzt noch das Timing richtig einstellen.

Benni

Zitat von: papa am 20 Mai 2018, 22:39:42
Es gibt in examples/custom/HB-GEN-SENS einen generischen Sensor, der Temperatur & Luftfeuchtigkeit sendet. Damit er in FHEM funktioniert, muss das Module HMConfig_AskSinPPCustom.pm installiert werden - einfach in das FHEM Verzeichnis kopieren.

Hallo papa,

ich habe bei mir gestern einen Ultraschallsensor mit der Library als generischen Sensor eingebunden. Das funktioniert auch alles soweit hervorragend, allerdings erhalte ich bei jedem Event des Sensors die Meldung


HB-GEN-SENS01 has 2 values (0102012920)


Ich habe mir jetzt mal den Code in der HMConfig_AskSinPPCustom.pm angeschaut und anscheinend ist dafür die Log-Anweisung in Zeile 201


Log 1, $model.$chnnum." has $numval values ($p)";


verantwortlich. Wenn ich es richtig verstanden habe handelt es sich dabei doch nicht um eine Fehlermeldung sondern lediglich um eine Debug-Ausgabe, die für den Produktiveinsatz weg könnte.

Da die Ausgabe nicht Device-spezifisch mit Log3 sondern mit Log erfolgt kann ich das leider auch nicht einfach per "attr <Device> verbose 0" unterdrücken, sondern müsste dazu das global-Device komplett stumm schalten.

Vielleicht kannst du das bei Gelegenheit anpassen?

Ich habe bei mir die Zeile jetzt erst mal auskommentiert, damit ich Ruhe habe.

Gruß Benni.

papa

Das ist richtig - ist nur eine Debug-Ausgabe. In dem Modul sind noch mehr drin.
Wie müsste es denn richtig sein? Perl und Modul-API sind nicht so meine Stärke.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Benni

Idealerweise sollten solche Ausgaben, wenn möglich direkt an das jeweilige, betreffende Device gebunden sein (Log3 hatte ich ja oben schon mal verlinkt) so dass ich das einzelne Device bei Bedarf in seiner Geschwätzigkeit (verbose-Stufe) per attribut verbose (am Device) hoch- bzw. runter drehen kann.

verbose 1 und 2 sind normalerweise für Fehlermeldungen (je nach schwere: 1 schwerer als 2)
verbose 3 ist für Standard (Info-) Meldungen, die das Modul im Normalbetrieb ausgeben soll
verbose 4 und 5 wird i.d.R. für unterschiedlich tiefe (5 tiefer als 4) Debugging-Meldungen verwendet.

Die oben genannte Meldung wäre also eher eine für Kategorie 4

Gruß Benni.

papa

Und was ist jetzt $name - das Device oder der Channel ?
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Benni

#925
Zitat von: gloob am 13 Juli 2018, 14:48:17
Da darfst du entscheiden, was du rein schreibst. Ich würde jetzt den Namen des Device nehmen.

Ja das sollte unbedingt der Name des Device sein, denn nur so erreicht man das, was ich oben schon geschrieben habe.
Wenn es kein Device-Name ist, hätte sich im Vergleich zum bisher verwendeten Log nichts verbessert, dann würde hier auch nur die verbose-Einstellung des  global-Device angezogen werden.


Sorry, nochmal die Frage gelesen und kann auch nur sagen, die Entscheidung obliegt dir, ob du hier den Namen des Chanels einträgst oder des Device, je nachdem, wer die Meldung quasi auslöst.
Im zweifelsfall würde ich aber dennoch zum Device tendieren.

Gruß Benni.

Xent

So, hier nochmal eine verbesserte Version von meinem Markiesenaktor.
Leider klappt das konfigurieren der Kanäle über die GUI immer noch nicht.
Der Schaltkanal wird als nicht konfigurierbar angezeigt und der Rollo-Kanal lässt sich nicht konfigurieren, sprich wenn man auf Speichern klickt, dann kommt der Ladebalken aber sonst passiert nichts mehr.
Am Aktor selber kommen auch keine Daten an.


Habe die Zeiten jetzt immer direkt im Sketch definiert, da es über die GUI nicht ging.

Xent

Ich glaub ich hab das Problem behoben weswegen sich der Aktor nicht konfigurieren ließ.
Ich hatte einen Fehler beim hinzufügen des neues Gerätes in die CCU2 gemacht. Eine Datei enthielt einen Fehler.

Jetzt noch was anderes zu den Alarmen.

Hier habe ich einen Alarm gesetzt der dafür sorgt, dass die UP-Taste für 400ms gedrückt bleibt:
btnOff - 22595
UP - 22597
<- 0E 04 A2 10 5932AF 473071 06 01 00 50 58  - 22630
-> 0A 04 80 02 473071 5932AF 00  - 22755
waitAck: 01
btnOff - Alarm - 22994


Jetzt sollte danach zum Stoppen der fahrt das gleiche mit dem Stopp-Button passieren:
btnOff - 23312
STOP - 23312
btnOff - Alarm - 23322
<- 0E 05 A2 10 5932AF 473071 06 01 0A 00 58  - 23463
-> 0A 05 80 02 473071 5932AF 00  - 23588
waitAck: 01

Wie man sieht wurde der Alarm schon 10 ms nach dem er gesetzt wurde ausgelöst wurde.

Hier der Code der die Buttons drückt usw.

virtual void switchState(uint8_t oldstate,uint8_t newstate) {
    BaseChannel::switchState(oldstate, newstate);
    btnOff();
   
    if( newstate == AS_CM_JT_RAMPON ) {
      moving = true;
      motorUp();
      DPRINT("UP - "); DDECLN(millis());
    }
    else if( newstate == AS_CM_JT_RAMPOFF ) {
      moving = true;
      motorDown();
      DPRINT("DOWN - "); DDECLN(millis());
    }
    else {
      if(!moving)
        return;
       
      moving = false;
      motorStop();
      DPRINT("STOP - "); DDECLN(millis());
    }
  }
 
  void motorUp () {
    pinMode(motorUp_PIN, OUTPUT);
    digitalWrite(motorUp_PIN,LOW);

    sysclock.cancel(_btnAlarm);
    _btnAlarm.set(millis2ticks(400));
    sysclock.add(_btnAlarm);
  }

  void motorDown () {
    pinMode(motorDown_PIN, OUTPUT);
    digitalWrite(motorDown_PIN,LOW);

    sysclock.cancel(_btnAlarm);
    _btnAlarm.set(millis2ticks(400));
    sysclock.add(_btnAlarm);
  }

  void motorStop () {
    pinMode(motorStop_PIN, OUTPUT);
    digitalWrite(motorStop_PIN,LOW);
   
    sysclock.cancel(_btnAlarm);
    _btnAlarm.set(millis2ticks(400));
    sysclock.add(_btnAlarm);
  }

  void btnOff(){
    DPRINT("btnOff - "); DDECLN(millis());
    pinMode(motorStop_PIN, INPUT);
    digitalWrite(motorStop_PIN, HIGH);
    pinMode(motorUp_PIN, INPUT);
    digitalWrite(motorUp_PIN, HIGH);
    pinMode(motorDown_PIN, INPUT);
    digitalWrite(motorDown_PIN, HIGH);
    pinMode(light_PIN, INPUT);
    digitalWrite(light_PIN, HIGH);
  }

papa

Warum rufst Du bntOff() am Anfang von switchState() auf? Könnte hier das Problem sein?
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Das ist ne andere Funktion nur um sicherzustellen, dass kein anderer Button gedrückt ist, da die Fernbedienung immer nur einen registrieren kann.

der btnAlarm hat ja ne eigene Klasse:
class btnAlarm : public Alarm {
public:
  btnAlarm () : Alarm(0) { async(false); }
  virtual void trigger (AlarmClock& clock) {
    DPRINT("btnOff - Alarm - "); DDECLN(millis());
    pinMode(motorStop_PIN, INPUT);
    digitalWrite(motorStop_PIN, HIGH);
    pinMode(motorUp_PIN, INPUT);
    digitalWrite(motorUp_PIN, HIGH);
    pinMode(motorDown_PIN, INPUT);
    digitalWrite(motorDown_PIN, HIGH);
    pinMode(light_PIN, INPUT);
    digitalWrite(light_PIN, HIGH);
  }
};